Add a subobject test and make sure to register defined classes in the
authorJohan Dahlin <johan@gnome.org>
Sat, 8 Dec 2007 18:30:15 +0000 (18:30 +0000)
committerJohan Dahlin <johan@src.gnome.org>
Sat, 8 Dec 2007 18:30:15 +0000 (18:30 +0000)
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.

svn path=/trunk/; revision=70

ChangeLog
src/gen-introspect.c
tests/parser/Foo-expected.gidl
tests/parser/foo-object.h
tests/parser/foo.c

index a702ffc..305c6ef 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
 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),
index 58ccfdd..1379077 100644 (file)
@@ -749,6 +749,11 @@ g_igenerator_process_types (GIGenerator * igenerator)
                    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);
            }
@@ -1882,11 +1887,14 @@ g_igenerator_add_module (GIGenerator *igenerator,
       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);
        }
     }
 }
index eb4ca34..1100dca 100644 (file)
                                <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>
index d1c39e3..2967a99 100644 (file)
@@ -7,12 +7,14 @@
 #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
 {
@@ -24,9 +26,23 @@ struct _FooObjectClass
   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__ */
index fdb3c0a..f96072b 100644 (file)
@@ -16,6 +16,20 @@ foo_object_init (FooObject *object)
 
 }
 
+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;