summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Walters <walters@verbum.org>2009-10-22 23:53:37 -0400
committerColin Walters <walters@verbum.org>2009-10-22 23:53:37 -0400
commit9fe8f41bacef14f08d4d30528725fa920dc7e49a (patch)
tree3971bafaf3fec71fb5251c5ed11d7de4f3fe6912
parent74823810e941aeebcdf8c87b134a14a978cbfeaa (diff)
downloadgobject-introspection-9fe8f41bacef14f08d4d30528725fa920dc7e49a.tar.gz
When doing type resolution on a string, treat it as its own ctype
Calling _resolve_param_type on a string instead of Node is fairly unusual, and (as far as I could see) basically only happened in the Array processing code. We were passing None as the ctype in this case, but we might as well try using the name as a ctype too. This fixes using GCallback (and in general any item in an array that comes from an included gir).
-rw-r--r--giscanner/transformer.py2
-rw-r--r--tests/scanner/foo-1.0-expected.gir5
-rw-r--r--tests/scanner/foo-1.0-expected.tgir5
-rw-r--r--tests/scanner/foo.h3
4 files changed, 14 insertions, 1 deletions
diff --git a/giscanner/transformer.py b/giscanner/transformer.py
index bacdfab7..86a21146 100644
--- a/giscanner/transformer.py
+++ b/giscanner/transformer.py
@@ -667,7 +667,7 @@ class Transformer(object):
self.ctype_of(ptype),
names, **kwargs)
elif isinstance(ptype, basestring):
- return self.resolve_type_name_full(ptype, None, names, **kwargs)
+ return self.resolve_type_name_full(ptype, ptype, names, **kwargs)
else:
raise AssertionError("Unhandled param: %r" % (ptype, ))
return ptype
diff --git a/tests/scanner/foo-1.0-expected.gir b/tests/scanner/foo-1.0-expected.gir
index 5eae4cde..24e9fbb3 100644
--- a/tests/scanner/foo-1.0-expected.gir
+++ b/tests/scanner/foo-1.0-expected.gir
@@ -494,6 +494,11 @@ uses a C sugar return type.">
</parameter>
</parameters>
</callback>
+ <field name="_reserved">
+ <array zero-terminated="0" c:type="GCallback" fixed-size="4">
+ <type name="GObject.Callback"/>
+ </array>
+ </field>
</record>
<constant name="PIE_IS_TASTY" value="3.14159">
<type name="double"/>
diff --git a/tests/scanner/foo-1.0-expected.tgir b/tests/scanner/foo-1.0-expected.tgir
index 81ebd02c..2de826b5 100644
--- a/tests/scanner/foo-1.0-expected.tgir
+++ b/tests/scanner/foo-1.0-expected.tgir
@@ -351,6 +351,11 @@
<field name="parent_class">
<type name="GObject.ObjectClass"/>
</field>
+ <field name="_reserved">
+ <array fixed-size="4">
+ <type name="GObject.Callback"/>
+ </array>
+ </field>
</record>
<constant name="PIE_IS_TASTY" value="3.141590">
<type name="double"/>
diff --git a/tests/scanner/foo.h b/tests/scanner/foo.h
index 2e018cea..7c2afe63 100644
--- a/tests/scanner/foo.h
+++ b/tests/scanner/foo.h
@@ -87,6 +87,9 @@ struct _FooObjectClass
/* Intended to match GFile */
void (*read_fn) (FooObject *object, int offset, int length);
+
+ /* Test reserved stuff */
+ GCallback _reserved[4];
};
gint foo_init (void);