summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Walters <walters@verbum.org>2011-08-29 22:17:02 -0400
committerColin Walters <walters@verbum.org>2011-08-29 22:17:02 -0400
commitcef390f65ffe9e51b103fcb29ee177882f762a0e (patch)
tree930904227ee8c35adf28300195f5567859b5e65b
parent198bbaf8589dc2106a92050e74ad643a9411d047 (diff)
downloadgobject-introspection-cef390f65ffe9e51b103fcb29ee177882f762a0e.tar.gz
scanner: Don't try to copy c:type if we're parsing (element-type)
Commit 81abc2eb63317003a11d1484e84698a37e8ec035 tries harder to keep the c:type if it was overriden by a (type) annotation. However, the _resolve() function was also called for (element-type), which had undesirable effects - we'd copy the container c:type to the element type. Fix this by splitting out the c:type preservation to only happen when processing toplevel types. https://bugzilla.gnome.org/show_bug.cgi?id=656931
-rw-r--r--giscanner/maintransformer.py15
-rw-r--r--tests/scanner/Annotation-1.0-expected.gir20
-rw-r--r--tests/scanner/Foo-1.0-expected.gir2
-rw-r--r--tests/scanner/Regress-1.0-expected.gir82
4 files changed, 62 insertions, 57 deletions
diff --git a/giscanner/maintransformer.py b/giscanner/maintransformer.py
index 3eba1e7a..29d9229d 100644
--- a/giscanner/maintransformer.py
+++ b/giscanner/maintransformer.py
@@ -300,6 +300,11 @@ usage is void (*_gtk_reserved1)(void);"""
text = type_str
message.warn_node(parent, "%s: Unknown type: %r" %
(text, result.ctype), positions=position)
+ return result
+
+ def _resolve_toplevel(self, type_str, type_node=None, node=None, parent=None):
+ """Like _resolve(), but attempt to preserve more attributes of original type."""
+ result = self._resolve(type_str, type_node=type_node, node=node, parent=parent)
# If we replace a node with a new type (such as an annotated) we
# might lose the ctype from the original node.
if type_node is not None:
@@ -525,8 +530,8 @@ usage is void (*_gtk_reserved1)(void);"""
param_type = options.get(OPT_TYPE)
if param_type:
- node.type = self._resolve(param_type.one(),
- node.type, node, parent)
+ node.type = self._resolve_toplevel(param_type.one(),
+ node.type, node, parent)
caller_allocates = False
annotated_direction = None
@@ -753,7 +758,7 @@ usage is void (*_gtk_reserved1)(void);"""
prop.transfer = self._get_transfer_default(parent, prop)
type_tag = block.get(TAG_TYPE)
if type_tag:
- prop.type = self._resolve(type_tag.value, prop.type, prop, parent)
+ prop.type = self._resolve_toplevel(type_tag.value, prop.type, prop, parent)
def _apply_annotations_signal(self, parent, signal):
prefix = self._get_annotation_name(parent)
@@ -776,8 +781,8 @@ usage is void (*_gtk_reserved1)(void);"""
options = getattr(tag, 'options', {})
param_type = options.get(OPT_TYPE)
if param_type:
- param.type = self._resolve(param_type.one(), param.type,
- param, parent)
+ param.type = self._resolve_toplevel(param_type.one(), param.type,
+ param, parent)
else:
tag = None
self._apply_annotations_param(signal, param, tag)
diff --git a/tests/scanner/Annotation-1.0-expected.gir b/tests/scanner/Annotation-1.0-expected.gir
index 10f5e743..eae5b7c9 100644
--- a/tests/scanner/Annotation-1.0-expected.gir
+++ b/tests/scanner/Annotation-1.0-expected.gir
@@ -54,14 +54,14 @@ and/or use gtk-doc annotations. -->
<return-value transfer-ownership="container">
<doc xml:whitespace="preserve">list of strings</doc>
<type name="GLib.List" c:type="GList*">
- <type name="utf8" c:type="GList*"/>
+ <type name="utf8"/>
</type>
</return-value>
<parameters>
<parameter name="in" transfer-ownership="none">
<doc xml:whitespace="preserve">list of strings</doc>
<type name="GLib.List" c:type="GList*">
- <type name="utf8" c:type="GList*"/>
+ <type name="utf8"/>
</type>
</parameter>
</parameters>
@@ -238,8 +238,8 @@ objects.</doc>
<return-value transfer-ownership="full">
<doc xml:whitespace="preserve">hash table</doc>
<type name="GLib.HashTable" c:type="GHashTable*">
- <type name="utf8" c:type="GHashTable*"/>
- <type name="GObject.Object" c:type="GHashTable*"/>
+ <type name="utf8"/>
+ <type name="GObject.Object"/>
</type>
</return-value>
</method>
@@ -250,7 +250,7 @@ intentionally similar example to gtk_container_get_children</doc>
<return-value transfer-ownership="container">
<doc xml:whitespace="preserve">list of objects</doc>
<type name="GLib.SList" c:type="GSList*">
- <type name="Object" c:type="GSList*"/>
+ <type name="Object"/>
</type>
</return-value>
</method>
@@ -260,7 +260,7 @@ each string needs to be freed.</doc>
<return-value transfer-ownership="full">
<doc xml:whitespace="preserve">list of strings</doc>
<type name="GLib.List" c:type="GList*">
- <type name="utf8" c:type="GList*"/>
+ <type name="utf8"/>
</type>
</return-value>
</method>
@@ -410,7 +410,7 @@ each string needs to be freed.</doc>
<parameter name="data" transfer-ownership="none">
<doc xml:whitespace="preserve">The data</doc>
<array length="1" zero-terminated="0" c:type="gchar*">
- <type name="gint8" c:type="gchar*"/>
+ <type name="gint8"/>
</array>
</parameter>
<parameter name="length" transfer-ownership="none">
@@ -429,7 +429,7 @@ type.</doc>
<parameter name="data" transfer-ownership="none">
<doc xml:whitespace="preserve">The data</doc>
<array length="1" zero-terminated="0" c:type="gpointer">
- <type name="guint8" c:type="gpointer"/>
+ <type name="guint8"/>
</array>
</parameter>
<parameter name="length" transfer-ownership="none">
@@ -725,7 +725,7 @@ detection, and fixing it via annotations.</doc>
<parameter name="array" transfer-ownership="none">
<doc xml:whitespace="preserve">the array</doc>
<array name="GLib.PtrArray" c:type="GPtrArray*">
- <type name="GLib.Value" c:type="GPtrArray*"/>
+ <type name="GLib.Value"/>
</array>
</parameter>
</parameters>
@@ -782,7 +782,7 @@ detection, and fixing it via annotations.</doc>
</parameter>
<parameter name="properties" transfer-ownership="none">
<array length="0" zero-terminated="0" c:type="gchar*">
- <type name="utf8" c:type="gchar*"/>
+ <type name="utf8"/>
</array>
</parameter>
</parameters>
diff --git a/tests/scanner/Foo-1.0-expected.gir b/tests/scanner/Foo-1.0-expected.gir
index ffcf2167..371250f5 100644
--- a/tests/scanner/Foo-1.0-expected.gir
+++ b/tests/scanner/Foo-1.0-expected.gir
@@ -1117,7 +1117,7 @@ exposed to language bindings.</doc>
<function name="test_array" c:identifier="foo_test_array">
<return-value transfer-ownership="container">
<array name="GLib.Array" c:type="GArray*">
- <type name="utf8" c:type="GArray*"/>
+ <type name="utf8"/>
</array>
</return-value>
</function>
diff --git a/tests/scanner/Regress-1.0-expected.gir b/tests/scanner/Regress-1.0-expected.gir
index 156acc99..2f4b5c21 100644
--- a/tests/scanner/Regress-1.0-expected.gir
+++ b/tests/scanner/Regress-1.0-expected.gir
@@ -1145,7 +1145,7 @@ TpAccount::status-changed</doc>
</field>
<field name="array2" writable="1">
<array c:type="gpointer*">
- <type name="TestObj" c:type="gpointer*"/>
+ <type name="TestObj"/>
</array>
</field>
<field name="field" writable="1">
@@ -1153,12 +1153,12 @@ TpAccount::status-changed</doc>
</field>
<field name="list" writable="1">
<type name="GLib.List" c:type="GList*">
- <type name="TestObj" c:type="GList*"/>
+ <type name="TestObj"/>
</type>
</field>
<field name="garray" writable="1">
<array name="GLib.PtrArray" c:type="GPtrArray*">
- <type name="TestObj" c:type="GPtrArray*"/>
+ <type name="TestObj"/>
</array>
</field>
</record>
@@ -1914,7 +1914,7 @@ call and can be released on return.</doc>
<return-value transfer-ownership="full">
<doc xml:whitespace="preserve">list of strings</doc>
<type name="GLib.SList" c:type="GSList*">
- <type name="filename" c:type="GSList*"/>
+ <type name="filename"/>
</type>
</return-value>
</function>
@@ -1932,7 +1932,7 @@ call and can be released on return.</doc>
c:identifier="regress_test_garray_container_return">
<return-value transfer-ownership="container">
<array name="GLib.PtrArray" c:type="GPtrArray*">
- <type name="utf8" c:type="GPtrArray*"/>
+ <type name="utf8"/>
</array>
</return-value>
</function>
@@ -1940,8 +1940,8 @@ call and can be released on return.</doc>
c:identifier="regress_test_ghash_container_return">
<return-value transfer-ownership="container">
<type name="GLib.HashTable" c:type="GHashTable*">
- <type name="utf8" c:type="GHashTable*"/>
- <type name="utf8" c:type="GHashTable*"/>
+ <type name="utf8"/>
+ <type name="utf8"/>
</type>
</return-value>
</function>
@@ -1949,8 +1949,8 @@ call and can be released on return.</doc>
c:identifier="regress_test_ghash_everything_return">
<return-value transfer-ownership="full">
<type name="GLib.HashTable" c:type="GHashTable*">
- <type name="utf8" c:type="GHashTable*"/>
- <type name="utf8" c:type="GHashTable*"/>
+ <type name="utf8"/>
+ <type name="utf8"/>
</type>
</return-value>
</function>
@@ -1973,8 +1973,8 @@ call and can be released on return.</doc>
element-type annotation.</doc>
<return-value transfer-ownership="full">
<type name="GLib.HashTable" c:type="GHashTable*">
- <type name="utf8" c:type="GHashTable*"/>
- <type name="GLib.HashTable" c:type="GHashTable*">
+ <type name="utf8"/>
+ <type name="GLib.HashTable">
<type name="utf8"/>
<type name="utf8"/>
</type>
@@ -1989,8 +1989,8 @@ element-type annotation.</doc>
<parameters>
<parameter name="in" transfer-ownership="none">
<type name="GLib.HashTable" c:type="GHashTable*">
- <type name="utf8" c:type="GHashTable*"/>
- <type name="utf8" c:type="GHashTable*"/>
+ <type name="utf8"/>
+ <type name="utf8"/>
</type>
</parameter>
</parameters>
@@ -2003,8 +2003,8 @@ element-type annotation.</doc>
<parameters>
<parameter name="in" transfer-ownership="none">
<type name="GLib.HashTable" c:type="GHashTable*">
- <type name="utf8" c:type="GHashTable*"/>
- <type name="utf8" c:type="GHashTable*"/>
+ <type name="utf8"/>
+ <type name="utf8"/>
</type>
</parameter>
</parameters>
@@ -2013,8 +2013,8 @@ element-type annotation.</doc>
c:identifier="regress_test_ghash_nothing_return">
<return-value transfer-ownership="none">
<type name="GLib.HashTable" c:type="GHashTable*">
- <type name="utf8" c:type="GHashTable*"/>
- <type name="utf8" c:type="GHashTable*"/>
+ <type name="utf8"/>
+ <type name="utf8"/>
</type>
</return-value>
</function>
@@ -2022,8 +2022,8 @@ element-type annotation.</doc>
c:identifier="regress_test_ghash_nothing_return2">
<return-value transfer-ownership="none">
<type name="GLib.HashTable" c:type="GHashTable*">
- <type name="utf8" c:type="GHashTable*"/>
- <type name="utf8" c:type="GHashTable*"/>
+ <type name="utf8"/>
+ <type name="utf8"/>
</type>
</return-value>
</function>
@@ -2035,8 +2035,8 @@ element-type annotation.</doc>
<parameters>
<parameter name="in" transfer-ownership="none" allow-none="1">
<type name="GLib.HashTable" c:type="GHashTable*">
- <type name="utf8" c:type="GHashTable*"/>
- <type name="utf8" c:type="GHashTable*"/>
+ <type name="utf8"/>
+ <type name="utf8"/>
</type>
</parameter>
</parameters>
@@ -2053,8 +2053,8 @@ element-type annotation.</doc>
transfer-ownership="full"
allow-none="1">
<type name="GLib.HashTable" c:type="GHashTable**">
- <type name="utf8" c:type="GHashTable**"/>
- <type name="utf8" c:type="GHashTable**"/>
+ <type name="utf8"/>
+ <type name="utf8"/>
</type>
</parameter>
</parameters>
@@ -2063,8 +2063,8 @@ element-type annotation.</doc>
c:identifier="regress_test_ghash_null_return">
<return-value transfer-ownership="none">
<type name="GLib.HashTable" c:type="GHashTable*">
- <type name="utf8" c:type="GHashTable*"/>
- <type name="utf8" c:type="GHashTable*"/>
+ <type name="utf8"/>
+ <type name="utf8"/>
</type>
</return-value>
</function>
@@ -2072,7 +2072,7 @@ element-type annotation.</doc>
c:identifier="regress_test_glist_container_return">
<return-value transfer-ownership="container">
<type name="GLib.List" c:type="GList*">
- <type name="utf8" c:type="GList*"/>
+ <type name="utf8"/>
</type>
</return-value>
</function>
@@ -2080,7 +2080,7 @@ element-type annotation.</doc>
c:identifier="regress_test_glist_everything_return">
<return-value transfer-ownership="full">
<type name="GLib.List" c:type="GList*">
- <type name="utf8" c:type="GList*"/>
+ <type name="utf8"/>
</type>
</return-value>
</function>
@@ -2092,7 +2092,7 @@ element-type annotation.</doc>
<parameters>
<parameter name="in" transfer-ownership="none">
<type name="GLib.List" c:type="GList*">
- <type name="utf8" c:type="GList*"/>
+ <type name="utf8"/>
</type>
</parameter>
</parameters>
@@ -2105,7 +2105,7 @@ element-type annotation.</doc>
<parameters>
<parameter name="in" transfer-ownership="none">
<type name="GLib.List" c:type="GList*">
- <type name="utf8" c:type="GList*"/>
+ <type name="utf8"/>
</type>
</parameter>
</parameters>
@@ -2114,7 +2114,7 @@ element-type annotation.</doc>
c:identifier="regress_test_glist_nothing_return">
<return-value transfer-ownership="none">
<type name="GLib.List" c:type="GList*">
- <type name="utf8" c:type="GList*"/>
+ <type name="utf8"/>
</type>
</return-value>
</function>
@@ -2122,7 +2122,7 @@ element-type annotation.</doc>
c:identifier="regress_test_glist_nothing_return2">
<return-value transfer-ownership="none">
<type name="GLib.List" c:type="GList*">
- <type name="utf8" c:type="GList*"/>
+ <type name="utf8"/>
</type>
</return-value>
</function>
@@ -2134,7 +2134,7 @@ element-type annotation.</doc>
<parameters>
<parameter name="in" transfer-ownership="none" allow-none="1">
<type name="GLib.SList" c:type="GSList*">
- <type name="utf8" c:type="GSList*"/>
+ <type name="utf8"/>
</type>
</parameter>
</parameters>
@@ -2151,7 +2151,7 @@ element-type annotation.</doc>
transfer-ownership="full"
allow-none="1">
<type name="GLib.SList" c:type="GSList**">
- <type name="utf8" c:type="GSList**"/>
+ <type name="utf8"/>
</type>
</parameter>
</parameters>
@@ -2160,7 +2160,7 @@ element-type annotation.</doc>
c:identifier="regress_test_gslist_container_return">
<return-value transfer-ownership="container">
<type name="GLib.SList" c:type="GSList*">
- <type name="utf8" c:type="GSList*"/>
+ <type name="utf8"/>
</type>
</return-value>
</function>
@@ -2168,7 +2168,7 @@ element-type annotation.</doc>
c:identifier="regress_test_gslist_everything_return">
<return-value transfer-ownership="full">
<type name="GLib.SList" c:type="GSList*">
- <type name="utf8" c:type="GSList*"/>
+ <type name="utf8"/>
</type>
</return-value>
</function>
@@ -2180,7 +2180,7 @@ element-type annotation.</doc>
<parameters>
<parameter name="in" transfer-ownership="none">
<type name="GLib.SList" c:type="GSList*">
- <type name="utf8" c:type="GSList*"/>
+ <type name="utf8"/>
</type>
</parameter>
</parameters>
@@ -2193,7 +2193,7 @@ element-type annotation.</doc>
<parameters>
<parameter name="in" transfer-ownership="none">
<type name="GLib.SList" c:type="GSList*">
- <type name="utf8" c:type="GSList*"/>
+ <type name="utf8"/>
</type>
</parameter>
</parameters>
@@ -2202,7 +2202,7 @@ element-type annotation.</doc>
c:identifier="regress_test_gslist_nothing_return">
<return-value transfer-ownership="none">
<type name="GLib.SList" c:type="GSList*">
- <type name="utf8" c:type="GSList*"/>
+ <type name="utf8"/>
</type>
</return-value>
</function>
@@ -2210,7 +2210,7 @@ element-type annotation.</doc>
c:identifier="regress_test_gslist_nothing_return2">
<return-value transfer-ownership="none">
<type name="GLib.SList" c:type="GSList*">
- <type name="utf8" c:type="GSList*"/>
+ <type name="utf8"/>
</type>
</return-value>
</function>
@@ -2222,7 +2222,7 @@ element-type annotation.</doc>
<parameters>
<parameter name="in" transfer-ownership="none" allow-none="1">
<type name="GLib.SList" c:type="GSList*">
- <type name="utf8" c:type="GSList*"/>
+ <type name="utf8"/>
</type>
</parameter>
</parameters>
@@ -2239,7 +2239,7 @@ element-type annotation.</doc>
transfer-ownership="full"
allow-none="1">
<type name="GLib.SList" c:type="GSList**">
- <type name="utf8" c:type="GSList**"/>
+ <type name="utf8"/>
</type>
</parameter>
</parameters>