gobject-introspection r887 - in trunk: . giscanner tests/scanner



Author: tko
Date: Tue Nov 11 17:26:59 2008
New Revision: 887
URL: http://svn.gnome.org/viewvc/gobject-introspection?rev=887&view=rev

Log:
Bug 560308 â g-ir-compiler goes in infinite loop on Gdk-2.0.gir

2008-11-11  Tommi Komulainen  <tommi komulainen iki fi>

	Based on patch by Johan Bilien.

	* giscanner/transformer.py (_create_member, _create_parameter):
	Resolve types here as well.
	(_resolve_type_name_1): Try resolving using 'ctype' first since
	it's least ambiguous. Fixes struct member type resolution with
	similarly named types, e.g. Gdk.PangoRendererClass and
	Pango.RendererClass
	* tests/scanner/foo*: Add test.

Modified:
   trunk/ChangeLog
   trunk/giscanner/transformer.py
   trunk/tests/scanner/foo-1.0-expected.gir
   trunk/tests/scanner/foo-1.0-expected.tgir
   trunk/tests/scanner/foo.h

Modified: trunk/giscanner/transformer.py
==============================================================================
--- trunk/giscanner/transformer.py	(original)
+++ trunk/giscanner/transformer.py	Tue Nov 11 17:26:59 2008
@@ -332,6 +332,7 @@
                     size_opt = 'fixed-size=%d' % (child_list[0].const_int, )
                     opts['array'].append(size_opt)
             ftype = self._create_type(symbol.base_type, opts, True)
+            ftype = self.resolve_param_type(ftype)
             # Fields are assumed to be read-write
             # (except for Objects, see also glibtransformer.py)
             node = Field(symbol.ident, ftype, symbol.ident,
@@ -517,6 +518,7 @@
                 options['transfer'] = ['none']
         else:
             ptype = self._create_type(symbol.base_type, options, True)
+            ptype = self.resolve_param_type(ptype)
         param = Parameter(symbol.ident, ptype)
         for option, data in options.iteritems():
             if option in ['in-out', 'inout']:
@@ -653,6 +655,12 @@
             return type_names[type_name]
         except KeyError, e:
             pass
+
+        if ctype:
+            ctype = ctype.replace('*', '')
+            resolved = names.ctypes.get(ctype)
+            if resolved:
+                return self._typepair_to_str(resolved)
         type_name = self.remove_prefix(type_name)
         resolved = names.aliases.get(type_name)
         if resolved:
@@ -660,11 +668,6 @@
         resolved = names.names.get(type_name)
         if resolved:
             return self._typepair_to_str(resolved)
-        if ctype:
-            ctype = ctype.replace('*', '')
-            resolved = names.ctypes.get(ctype)
-            if resolved:
-                return self._typepair_to_str(resolved)
         resolved = names.type_names.get(type_name)
         if resolved:
             return self._typepair_to_str(resolved)

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	Tue Nov 11 17:26:59 2008
@@ -480,6 +480,11 @@
         <type name="int" c:type="int"/>
       </field>
     </union>
+    <record name="UtilityStruct" c:type="FooUtilityStruct">
+      <field name="bar" writable="1">
+        <type name="utility.Struct" c:type="UtilityStruct"/>
+      </field>
+    </record>
     <function name="test_unsigned_qualifier"
               c:identifier="foo_test_unsigned_qualifier">
       <return-value transfer-ownership="none">

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	Tue Nov 11 17:26:59 2008
@@ -367,6 +367,11 @@
         <type name="int"/>
       </field>
     </union>
+    <record name="UtilityStruct">
+      <field name="bar" writable="1">
+        <type name="utility.Struct"/>
+      </field>
+    </record>
     <function name="test_unsigned_qualifier" c:identifier="foo_test_unsigned_qualifier">
       <return-value transfer-ownership="none">
         <type name="none"/>

Modified: trunk/tests/scanner/foo.h
==============================================================================
--- trunk/tests/scanner/foo.h	(original)
+++ trunk/tests/scanner/foo.h	Tue Nov 11 17:26:59 2008
@@ -232,6 +232,12 @@
   int foo;
 } FooUnion;
 
+typedef struct _FooUtilityStruct FooUtilityStruct;
+struct _FooUtilityStruct
+{
+  UtilityStruct bar;
+};
+
 FooBUnion *foo_bunion_new (void);
 
 GType foo_bunion_get_type (void);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]