diff options
author | Johan Dahlin <johan@src.gnome.org> | 2008-08-07 21:46:00 +0000 |
---|---|---|
committer | Johan Dahlin <johan@src.gnome.org> | 2008-08-07 21:46:00 +0000 |
commit | fe771ac38090a71d6eb7ac257ded1044c0904b15 (patch) | |
tree | 37e883553f9da42d22f23bcad0c99150d280908c | |
parent | ce64c4e409985c52c8107c119e0e37fee445e212 (diff) | |
download | gobject-introspection-fe771ac38090a71d6eb7ac257ded1044c0904b15.tar.gz |
Convert object.test. Rename object->class. Add constant parsing
svn path=/branches/gir-compiler/; revision=321
-rw-r--r-- | tests/object.test | 56 | ||||
-rw-r--r-- | tools/girparser.c | 61 |
2 files changed, 73 insertions, 44 deletions
diff --git a/tests/object.test b/tests/object.test index 394c02aa..dfaf732b 100644 --- a/tests/object.test +++ b/tests/object.test @@ -4,40 +4,58 @@ xmlns:c="http://www.gtk.org/introspection/c/1.0" xmlns:glib="http://www.gtk.org/introspection/glib/1.0"> <namespace name="Foo"> - <object name="Object1" parent="Object2" type-name="Object1" get-type="object1_get_type"> + <class name="Object1" parent="Object2" glib:type-name="Object1" glib:get-type="object1_get_type"> <implements> <interface name="Iface1" /> </implements> - <property name="prop1" readable="0" writable="0" type="gint" /> - <signal name="signal1" when="LAST"> - <return-type type="gboolean" /> + <property name="prop1" readable="0" writable="0"> + <type name="int" c:type="gint"/> + </property> + <glib:signal name="signal1" when="LAST"> + <return-value> + <type name="boolean" c:type="gboolean"/> + </return-value> <parameters> - <parameter name="obj" type="Object1*" transfer="full" direction="in" /> + <parameter name="obj" transfer="full" direction="in"> + <type name="Object1" c:type="Object1*"/> + </parameter> </parameters> - </signal> - <signal name="signal2" when="FIRST" no-recurse="1" detailed="1" action="1" no-hooks="1"> - <return-type type="void" /> + </glib:signal> + <glib:signal name="signal2" when="FIRST" no-recurse="1" detailed="1" action="1" no-hooks="1"> + <return-value> + <type name="void" c:type="void"/> + </return-value> <parameters> - <parameter name="obj" type="Object1*" transfer="full" direction="in" /> + <parameter name="obj" transfer="full" direction="in"> + <type name="Object1" c:type="Object1*"/> + </parameter> </parameters> - </signal> + </glib:signal> <vfunc name="vfunc1" offset="20"> - <return-type type="Object2*" transfer="full" /> + <return-value> + <type name="Object2" c:type="Object2*"/> + </return-value> <parameters> - <parameter name="param1" type="Object1*" transfer="full" direction="in" /> + <parameter name="param1" transfer="full" direction="in"> + <type name="Object1" c:type="Object1*"/> + </parameter> </parameters> </vfunc> <vfunc name="vfunc2" offset="24"> - <return-type type="Object2*" transfer="full" /> + <return-value> + <type name="Object2" c:type="Object2*"/> + </return-value> <parameters> - <parameter name="param1" type="Object1*" transfer="full" direction="in" /> + <parameter name="param1" transfer="full" direction="in"> + <type name="Object1" c:type="Object1*"/> + </parameter> </parameters> </vfunc> - <constant name="constant1" type="gint" value="42" /> - </object> - <interface name="Iface1" type-name="Iface1" get-type="iface1_get_type"> + </class> + <constant name="constant1" c:type="gint" value="42" /> + <interface name="Iface1" glib:type-name="Iface1" glib:get-type="iface1_get_type"> </interface> - <object name="Object2" parent="GObject.GObject" type-name="Object2" get-type="object2_get_type"> - </object> + <class name="Object2" parent="GObject.GObject" glib:type-name="Object2" glib:get-type="object2_get_type"> + </class> </namespace> </repository> diff --git a/tools/girparser.c b/tools/girparser.c index ed7ed53f..d21e630a 100644 --- a/tools/girparser.c +++ b/tools/girparser.c @@ -39,9 +39,9 @@ typedef enum STATE_FUNCTION_RETURN, STATE_FUNCTION_PARAMETERS, STATE_FUNCTION_PARAMETER, - STATE_OBJECT, /* 10 */ - STATE_OBJECT_FIELD, - STATE_OBJECT_PROPERTY, + STATE_CLASS, /* 10 */ + STATE_CLASS_FIELD, + STATE_CLASS_PROPERTY, STATE_INTERFACE, STATE_INTERFACE_PROPERTY, STATE_INTERFACE_FIELD, /* 15 */ @@ -53,6 +53,7 @@ typedef enum STATE_STRUCT_FIELD, STATE_ERRORDOMAIN, STATE_UNION, + STATE_CONSTANT } ParseState; typedef struct _ParseContext ParseContext; @@ -471,13 +472,13 @@ start_function (GMarkupParseContext *context, if ((ctx->state == STATE_NAMESPACE && (strcmp (element_name, "function") == 0 || strcmp (element_name, "callback") == 0)) || - ((ctx->state == STATE_OBJECT || + ((ctx->state == STATE_CLASS || ctx->state == STATE_INTERFACE || ctx->state == STATE_BOXED || ctx->state == STATE_UNION) && (strcmp (element_name, "method") == 0 || strcmp (element_name, "callback") == 0)) || - ((ctx->state == STATE_OBJECT || + ((ctx->state == STATE_CLASS || ctx->state == STATE_BOXED) && (strcmp (element_name, "constructor") == 0)) || (ctx->state == STATE_STRUCT && strcmp (element_name, "callback") == 0)) @@ -724,7 +725,7 @@ start_field (GMarkupParseContext *context, GError **error) { if (strcmp (element_name, "field") == 0 && - (ctx->state == STATE_OBJECT || + (ctx->state == STATE_CLASS || ctx->state == STATE_BOXED || ctx->state == STATE_STRUCT || ctx->state == STATE_UNION || @@ -783,7 +784,7 @@ start_field (GMarkupParseContext *context, iface = (GIrNodeInterface *)ctx->current_node; iface->members = g_list_append (iface->members, field); - state_switch (ctx, STATE_OBJECT_FIELD); + state_switch (ctx, STATE_CLASS_FIELD); } break; case G_IR_NODE_INTERFACE: @@ -903,7 +904,7 @@ start_property (GMarkupParseContext *context, GError **error) { if (strcmp (element_name, "property") == 0 && - (ctx->state == STATE_OBJECT || + (ctx->state == STATE_CLASS || ctx->state == STATE_INTERFACE)) { const gchar *name; @@ -950,8 +951,8 @@ start_property (GMarkupParseContext *context, iface = (GIrNodeInterface *)ctx->current_node; iface->members = g_list_append (iface->members, property); - if (ctx->state == STATE_OBJECT) - state_switch (ctx, STATE_OBJECT_PROPERTY); + if (ctx->state == STATE_CLASS) + state_switch (ctx, STATE_CLASS_PROPERTY); else if (ctx->state == STATE_INTERFACE) state_switch (ctx, STATE_INTERFACE_PROPERTY); else @@ -1042,7 +1043,7 @@ start_constant (GMarkupParseContext *context, { if (strcmp (element_name, "constant") == 0 && (ctx->state == STATE_NAMESPACE || - ctx->state == STATE_OBJECT || + ctx->state == STATE_CLASS || ctx->state == STATE_INTERFACE)) { const gchar *name; @@ -1090,6 +1091,7 @@ start_constant (GMarkupParseContext *context, iface = (GIrNodeInterface *)ctx->current_node; iface->members = g_list_append (iface->members, constant); } + state_switch (ctx, STATE_CONSTANT); } return TRUE; @@ -1251,7 +1253,7 @@ start_class (GMarkupParseContext *context, ctx->current_module->entries = g_list_append (ctx->current_module->entries, iface); - state_switch (ctx, STATE_OBJECT); + state_switch (ctx, STATE_CLASS); } return TRUE; @@ -1274,8 +1276,8 @@ start_type (GMarkupParseContext *context, !(ctx->state == STATE_FUNCTION_PARAMETER || ctx->state == STATE_FUNCTION_RETURN || ctx->state == STATE_STRUCT_FIELD || - ctx->state == STATE_OBJECT_PROPERTY || - ctx->state == STATE_OBJECT_FIELD || + ctx->state == STATE_CLASS_PROPERTY || + ctx->state == STATE_CLASS_FIELD || ctx->state == STATE_INTERFACE_FIELD || ctx->state == STATE_BOXED_FIELD )) @@ -1390,7 +1392,7 @@ start_glib_signal (GMarkupParseContext *context, GError **error) { if (strcmp (element_name, "glib:signal") == 0 && - (ctx->state == STATE_OBJECT || + (ctx->state == STATE_CLASS || ctx->state == STATE_INTERFACE)) { const gchar *name; @@ -1472,7 +1474,7 @@ start_vfunc (GMarkupParseContext *context, GError **error) { if (strcmp (element_name, "vfunc") == 0 && - (ctx->state == STATE_OBJECT || + (ctx->state == STATE_CLASS || ctx->state == STATE_INTERFACE)) { const gchar *name; @@ -1772,7 +1774,7 @@ start_element_handler (GMarkupParseContext *context, ctx, error)) goto out; if (strcmp (element_name, "implements") == 0 && - ctx->state == STATE_OBJECT) + ctx->state == STATE_CLASS) { state_switch (ctx, STATE_IMPLEMENTS); @@ -1982,6 +1984,7 @@ require_one_of_end_elements (GMarkupParseContext *context, "Unexpected end tag '%s' on line %d char %d", actual_name, line_number, char_number); + backtrace_stderr(); return FALSE; } @@ -2058,7 +2061,7 @@ end_element_handler (GMarkupParseContext *context, if (ctx->current_node->type == G_IR_NODE_INTERFACE) state_switch (ctx, STATE_INTERFACE); else if (ctx->current_node->type == G_IR_NODE_OBJECT) - state_switch (ctx, STATE_OBJECT); + state_switch (ctx, STATE_CLASS); else if (ctx->current_node->type == G_IR_NODE_BOXED) state_switch (ctx, STATE_BOXED); else if (ctx->current_node->type == G_IR_NODE_STRUCT) @@ -2079,25 +2082,25 @@ end_element_handler (GMarkupParseContext *context, } break; - case STATE_OBJECT_FIELD: + case STATE_CLASS_FIELD: if (strcmp ("type", element_name) == 0) break; if (require_end_element (context, "field", element_name, error)) { - state_switch (ctx, STATE_OBJECT); + state_switch (ctx, STATE_CLASS); } break; - case STATE_OBJECT_PROPERTY: + case STATE_CLASS_PROPERTY: if (strcmp ("type", element_name) == 0) break; if (require_end_element (context, "property", element_name, error)) { - state_switch (ctx, STATE_OBJECT); + state_switch (ctx, STATE_CLASS); } break; - case STATE_OBJECT: + case STATE_CLASS: if (require_end_element (context, "class", element_name, error)) { ctx->current_node = NULL; @@ -2187,15 +2190,23 @@ end_element_handler (GMarkupParseContext *context, state_switch (ctx, STATE_NAMESPACE); } break; - case STATE_IMPLEMENTS: + if (strcmp ("interface", element_name) == 0) + break; if (require_end_element (context, "implements", element_name, error)) - state_switch (ctx, STATE_OBJECT); + state_switch (ctx, STATE_CLASS); break; case STATE_REQUIRES: if (require_end_element (context, "requires", element_name, error)) state_switch (ctx, STATE_INTERFACE); break; + case STATE_CONSTANT: + if (require_end_element (context, "constant", element_name, error)) + { + ctx->current_node = NULL; + state_switch (ctx, STATE_NAMESPACE); + } + break; default: g_error ("Unhandled state %d in end_element_handler\n", ctx->state); } |