gobject-introspection r887 - in trunk: . giscanner tests/scanner
- From: tko svn gnome org
- To: svn-commits-list gnome org
- Subject: gobject-introspection r887 - in trunk: . giscanner tests/scanner
- Date: Tue, 11 Nov 2008 17:26:59 +0000 (UTC)
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]