gobject-introspection r1087 - in trunk: giscanner tests/scanner
- From: walters svn gnome org
- To: svn-commits-list gnome org
- Subject: gobject-introspection r1087 - in trunk: giscanner tests/scanner
- Date: Thu, 5 Feb 2009 22:43:39 +0000 (UTC)
Author: walters
Date: Thu Feb 5 22:43:39 2009
New Revision: 1087
URL: http://svn.gnome.org/viewvc/gobject-introspection?rev=1087&view=rev
Log:
Bug 561360 - If we can't resolve parent class, use GObject
This enables us to support "hidden" parent classes.
Modified:
trunk/giscanner/glibtransformer.py
trunk/tests/scanner/foo-1.0-expected.gir
trunk/tests/scanner/foo-1.0-expected.tgir
trunk/tests/scanner/foo.c
trunk/tests/scanner/foo.h
Modified: trunk/giscanner/glibtransformer.py
==============================================================================
--- trunk/giscanner/glibtransformer.py (original)
+++ trunk/giscanner/glibtransformer.py Thu Feb 5 22:43:39 2009
@@ -802,7 +802,17 @@
for x in node.prerequisites])
def _resolve_glib_object(self, node):
- node.parent = self._force_resolve(node.parent)
+ # If we can't find the parent class, just drop back to GObject.
+ # This supports hidden parent classes.
+ # http://bugzilla.gnome.org/show_bug.cgi?id=561360
+ try:
+ node.parent = self._force_resolve(node.parent)
+ except KeyError, e:
+ print ("WARNING: Parent %r of class %r" +\
+ " not found; using GObject") % (node.parent.target,
+ node.name)
+ node.parent = self._transformer.gtypename_to_giname("GObject",
+ self._names)
node.interfaces = filter(None,
[self._force_resolve(x, allow_unknown=True)
for x in node.interfaces])
Modified: trunk/tests/scanner/foo-1.0-expected.gir
==============================================================================
--- trunk/tests/scanner/foo-1.0-expected.gir (original)
+++ trunk/tests/scanner/foo-1.0-expected.gir Thu Feb 5 22:43:39 2009
@@ -239,6 +239,20 @@
<type name="ObjectClass" c:type="FooObjectClass"/>
</field>
</record>
+ <class name="Buffer"
+ c:type="FooBuffer"
+ parent="GObject.Object"
+ glib:type-name="FooBuffer"
+ glib:get-type="foo_buffer_get_type">
+ <implements name="Interface"/>
+ <method name="some_method" c:identifier="foo_buffer_some_method">
+ <return-value transfer-ownership="none">
+ <type name="none" c:type="void"/>
+ </return-value>
+ </method>
+ </class>
+ <record name="BufferClass" c:type="FooBufferClass">
+ </record>
<function name="init" c:identifier="foo_init">
<return-value transfer-ownership="none">
<type name="int" c:type="gint"/>
Modified: trunk/tests/scanner/foo-1.0-expected.tgir
==============================================================================
--- trunk/tests/scanner/foo-1.0-expected.tgir (original)
+++ trunk/tests/scanner/foo-1.0-expected.tgir Thu Feb 5 22:43:39 2009
@@ -152,6 +152,15 @@
<type name="ObjectClass"/>
</field>
</record>
+ <class name="Buffer" parent="GObject.Object" glib:type-name="FooBuffer" glib:get-type="foo_buffer_get_type">
+ <implements name="Interface"/>
+ <method name="some_method" c:identifier="foo_buffer_some_method">
+ <return-value transfer-ownership="none">
+ <type name="none"/>
+ </return-value>
+ </method>
+ </class>
+ <record name="BufferClass"/>
<function name="init" c:identifier="foo_init">
<return-value transfer-ownership="none">
<type name="int"/>
Modified: trunk/tests/scanner/foo.c
==============================================================================
--- trunk/tests/scanner/foo.c (original)
+++ trunk/tests/scanner/foo.c Thu Feb 5 22:43:39 2009
@@ -420,7 +420,6 @@
g_slice_free (FooHidden, boxed);
}
-
GType
foo_hidden_get_type (void)
{
@@ -458,5 +457,68 @@
void
foo_some_variant (guint x, va_list args)
{
-
+}
+
+/* This setup of a totally hidden parent class matches
+ * http://bugzilla.gnome.org/show_bug.cgi?id=561360
+ */
+#define FOO_TYPE_TILE_HANDLER (foo_tile_handler_get_type ())
+#define FOO_TILE_HANDLER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), FOO_TYPE_TILE_HANDLER, FooTileHandler))
+#define FOO_IS_TILE_HANDLER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), FOO_TYPE_TILE_HANDLER))
+
+struct _FooTileHandler
+{
+ FooObject parent_instance;
+};
+
+
+struct _FooTileHandlerClass
+{
+ FooObjectClass parent_class;
+};
+
+typedef struct _FooTileHandler FooTileHandler;
+typedef struct _FooTileHandlerClass FooTileHandlerClass;
+
+G_DEFINE_TYPE(FooTileHandler, foo_tile_handler, FOO_TYPE_OBJECT);
+
+static void
+foo_tile_handler_class_init (FooTileHandlerClass *klass)
+{
+
+}
+
+static void
+foo_tile_handler_init (FooTileHandler *object)
+{
+
+}
+
+struct _FooBuffer
+{
+ FooTileHandler parent_instance;
+};
+
+struct _FooBufferClass
+{
+ FooTileHandlerClass parent_class;
+};
+
+G_DEFINE_TYPE(FooBuffer, foo_buffer, FOO_TYPE_TILE_HANDLER);
+
+static void
+foo_buffer_class_init (FooBufferClass *klass)
+{
+
+}
+
+static void
+foo_buffer_init (FooBuffer *object)
+{
+
+}
+
+void
+foo_buffer_some_method (FooBuffer *buffer)
+{
}
\ No newline at end of file
Modified: trunk/tests/scanner/foo.h
==============================================================================
--- trunk/tests/scanner/foo.h (original)
+++ trunk/tests/scanner/foo.h Thu Feb 5 22:43:39 2009
@@ -23,6 +23,10 @@
#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))
+#define FOO_TYPE_BUFFER (foo_buffer_get_type ())
+#define FOO_BUFFER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), FOO_TYPE_BUFFER, FooBuffer))
+#define FOO_IS_BUFFER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), FOO_TYPE_BUFFER))
+
typedef struct _FooInterface FooInterface;
typedef struct _FooInterfaceIface FooInterfaceIface;
typedef struct _FooSubInterface FooSubInterface;
@@ -31,6 +35,8 @@
typedef struct _FooObjectClass FooObjectClass;
typedef struct _FooSubobject FooSubobject;
typedef struct _FooSubobjectClass FooSubobjectClass;
+typedef struct _FooBuffer FooBuffer;
+typedef struct _FooBufferClass FooBufferClass;
struct _FooInterfaceIface
{
@@ -108,6 +114,10 @@
GType foo_subobject_get_type (void) G_GNUC_CONST;
FooSubobject* foo_subobject_new ();
+GType foo_buffer_get_type (void);
+
+void foo_buffer_some_method (FooBuffer *buffer);
+
typedef enum
{
FOO_ENUM_ALPHA,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]