2007-12-08 Johan Dahlin <johan@gnome.org>
+ * src/gen-introspect.c: (g_igenerator_process_types),
+ (g_igenerator_add_module):
+ * tests/parser/Foo-expected.gidl:
+ * tests/parser/foo-object.h:
+ * tests/parser/foo.c: (foo_subobject_class_init),
+ (foo_subobject_init):
+
+ Add a subobject test and make sure to register defined classes
+ in the lookup symbol hash table.
+
+2007-12-08 Johan Dahlin <johan@gnome.org>
+
* gidl/GLib.gidl:
* src/Makefile.am:
* src/gen-introspect.c: (g_igenerator_new), (lookup_symbol),
g_list_append (ginode->interfaces, iface_name);
}
+ g_hash_table_insert (igenerator->symbols,
+ g_strdup (ginode->gtype_name),
+ /* FIXME: Strip igenerator->namespace */
+ g_strdup (ginode->node.name));
+
g_igenerator_process_properties (igenerator, ginode, type_id);
g_igenerator_process_signals (igenerator, ginode, type_id);
}
if (node->type == G_IDL_NODE_OBJECT)
{
GIdlNodeInterface *object = (GIdlNodeInterface*)node;
-
+ gchar *name;
+ if (strcmp(module->name, igenerator->namespace) == 0)
+ name = g_strdup (node->name);
+ else
+ name = g_strdup_printf ("%s.%s", module->name, node->name);
g_hash_table_insert (igenerator->symbols,
g_strdup (object->gtype_name),
- g_strdup_printf ("%s.%s", module->name,
- node->name));
+ name);
}
}
}
<return-type type="FooObject*"/>
</constructor>
</object>
+ <object name="FooSubobject" parent="FooObject" type-name="FooSubobject" get-type="foo_subobject_get_type">
+ <constructor name="new" symbol="foo_subobject_new">
+ <return-type type="FooSubobject*"/>
+ </constructor>
+ </object>
</namespace>
</api>
#define FOO_OBJECT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), FOO_TYPE_OBJECT, FooObject))
#define FOO_IS_OBJECT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), FOO_TYPE_OBJECT))
-#define FOO_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), FOO_TYPE_OBJECT, FooObjectClass))
-#define FOO_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), FOO_TYPE_OBJECT))
-#define FOO_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), FOO_TYPE_OBJECT, FooObjectClass))
+#define FOO_TYPE_SUBOBJECT (foo_subobject_get_type ())
+#define FOO_SUBOBJECT(subobject) (G_TYPE_CHECK_INSTANCE_CAST ((subobject), FOO_TYPE_SUBOBJECT, FooSubobject))
+#define FOO_IS_SUBOBJECT(subobject) (G_TYPE_CHECK_INSTANCE_TYPE ((subobject), FOO_TYPE_SUBOBJECT))
-typedef struct _FooObject FooObject;
-typedef struct _FooObjectClass FooObjectClass;
+typedef struct _FooObject FooObject;
+typedef struct _FooObjectClass FooObjectClass;
+typedef struct _FooSubobject FooSubobject;
+typedef struct _FooSubobjectClass FooSubobjectClass;
struct _FooObject
{
GObjectClass parent_class;
};
+gint foo_init (void);
+
GType foo_object_get_type (void) G_GNUC_CONST;
FooObject* foo_object_new ();
gint foo_object_method (FooObject *object);
-gint foo_init (void);
+
+struct _FooSubobject
+{
+ FooObject parent_instance;
+};
+
+struct _FooSubobjectClass
+{
+ FooObjectClass parent_class;
+};
+
+GType foo_subobject_get_type (void) G_GNUC_CONST;
+FooSubobject* foo_subobject_new ();
#endif /* __FOO_OBJECT_H__ */
}
+G_DEFINE_TYPE (FooSubobject, foo_subobject, FOO_TYPE_OBJECT);
+
+static void
+foo_subobject_class_init (FooSubobjectClass *klass)
+{
+
+}
+
+static void
+foo_subobject_init (FooSubobject *object)
+{
+
+}
+
int foo_init (void)
{
return FOO_SUCCESS_INT;