diff options
author | Johan Dahlin <johan@gnome.org> | 2011-08-13 14:36:53 -0300 |
---|---|---|
committer | Johan Dahlin <jdahlin@litl.com> | 2011-08-13 14:36:53 -0300 |
commit | 81abc2eb63317003a11d1484e84698a37e8ec035 (patch) | |
tree | 624a3ccaf080c0b41b661b116238d7a0543f8c9c | |
parent | a8b700e2d9c7b63bd351f4194820680f4da3da8a (diff) | |
download | gobject-introspection-81abc2eb63317003a11d1484e84698a37e8ec035.tar.gz |
Try harder to preserve c:type
When we replace a type using annotation we should keep
the ctype of the original type.
-rw-r--r-- | giscanner/maintransformer.py | 6 | ||||
-rw-r--r-- | tests/scanner/Annotation-1.0-expected.gir | 30 | ||||
-rw-r--r-- | tests/scanner/Foo-1.0-expected.gir | 4 | ||||
-rw-r--r-- | tests/scanner/Regress-1.0-expected.gir | 84 | ||||
-rw-r--r-- | tests/scanner/annotation.c | 11 | ||||
-rw-r--r-- | tests/scanner/annotation.h | 1 |
6 files changed, 79 insertions, 57 deletions
diff --git a/giscanner/maintransformer.py b/giscanner/maintransformer.py index 1d26bf18..a86c7224 100644 --- a/giscanner/maintransformer.py +++ b/giscanner/maintransformer.py @@ -297,6 +297,10 @@ usage is void (*_gtk_reserved1)(void);""" text = type_str message.warn_node(parent, "%s: Unknown type: %r" % (text, result.ctype), positions=position) + # 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: + result.ctype = type_node.ctype return result def _get_position(self, func, param): @@ -944,7 +948,7 @@ method or constructor of some type.""" # A quick hack here...in the future we should catch C signature/GI signature # mismatches in a general way in finaltransformer - if first.type.ctype is not None and first.type.ctype.count('*') != 1: + if first.type.ctype is not None and first.type.ctype.count('*') > 1: return False if not func.is_method: diff --git a/tests/scanner/Annotation-1.0-expected.gir b/tests/scanner/Annotation-1.0-expected.gir index c544702a..10f5e743 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"/> + <type name="utf8" c:type="GList*"/> </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"/> + <type name="utf8" c:type="GList*"/> </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"/> - <type name="GObject.Object"/> + <type name="utf8" c:type="GHashTable*"/> + <type name="GObject.Object" c:type="GHashTable*"/> </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"/> + <type name="Object" c:type="GSList*"/> </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"/> + <type name="utf8" c:type="GList*"/> </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"/> + <type name="gint8" c:type="gchar*"/> </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"/> + <type name="guint8" c:type="gpointer"/> </array> </parameter> <parameter name="length" transfer-ownership="none"> @@ -677,7 +677,7 @@ detection, and fixing it via annotations.</doc> <function name="get_source_file" c:identifier="annotation_get_source_file"> <return-value transfer-ownership="full"> <doc xml:whitespace="preserve">Source file</doc> - <type name="filename"/> + <type name="filename" c:type="char*"/> </return-value> </function> <function name="init" c:identifier="annotation_init"> @@ -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"/> + <type name="GLib.Value" c:type="GPtrArray*"/> </array> </parameter> </parameters> @@ -747,6 +747,12 @@ detection, and fixing it via annotations.</doc> </parameter> </parameters> </function> + <function name="return_filename" c:identifier="annotation_return_filename"> + <return-value transfer-ownership="full"> + <doc xml:whitespace="preserve">An annotated filename</doc> + <type name="filename" c:type="gchar*"/> + </return-value> + </function> <function name="set_source_file" c:identifier="annotation_set_source_file"> <return-value transfer-ownership="none"> <type name="none" c:type="void"/> @@ -754,7 +760,7 @@ detection, and fixing it via annotations.</doc> <parameters> <parameter name="fname" transfer-ownership="none"> <doc xml:whitespace="preserve">Source file</doc> - <type name="filename"/> + <type name="filename" c:type="char*"/> </parameter> </parameters> </function> @@ -776,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"/> + <type name="utf8" c:type="gchar*"/> </array> </parameter> </parameters> diff --git a/tests/scanner/Foo-1.0-expected.gir b/tests/scanner/Foo-1.0-expected.gir index 1772b562..f18ed56d 100644 --- a/tests/scanner/Foo-1.0-expected.gir +++ b/tests/scanner/Foo-1.0-expected.gir @@ -355,7 +355,7 @@ and/or use gtk-doc annotations. --> uses a C sugar return type.</doc> <return-value transfer-ownership="none"> <doc xml:whitespace="preserve">The global #FooSubobject</doc> - <type name="Subobject"/> + <type name="Subobject" c:type="FooObject*"/> </return-value> </function> <function name="static_meth" c:identifier="foo_object_static_meth"> @@ -1086,7 +1086,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"/> + <type name="utf8" c:type="GArray*"/> </array> </return-value> </function> diff --git a/tests/scanner/Regress-1.0-expected.gir b/tests/scanner/Regress-1.0-expected.gir index 02e56fdc..e44ab2e6 100644 --- a/tests/scanner/Regress-1.0-expected.gir +++ b/tests/scanner/Regress-1.0-expected.gir @@ -154,7 +154,7 @@ use it should be.</doc> </parameter> <parameter name="path" transfer-ownership="none"> <doc xml:whitespace="preserve">Path to file</doc> - <type name="filename"/> + <type name="filename" c:type="char*"/> </parameter> </parameters> </callback> @@ -1135,7 +1135,7 @@ TpAccount::status-changed</doc> </field> <field name="array2" writable="1"> <array c:type="gpointer*"> - <type name="TestObj"/> + <type name="TestObj" c:type="gpointer*"/> </array> </field> <field name="field" writable="1"> @@ -1143,12 +1143,12 @@ TpAccount::status-changed</doc> </field> <field name="list" writable="1"> <type name="GLib.List" c:type="GList*"> - <type name="TestObj"/> + <type name="TestObj" c:type="GList*"/> </type> </field> <field name="garray" writable="1"> <array name="GLib.PtrArray" c:type="GPtrArray*"> - <type name="TestObj"/> + <type name="TestObj" c:type="GPtrArray*"/> </array> </field> </record> @@ -1902,7 +1902,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"/> + <type name="filename" c:type="GSList*"/> </type> </return-value> </function> @@ -1920,8 +1920,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"/> - <type name="utf8"/> + <type name="utf8" c:type="GHashTable*"/> + <type name="utf8" c:type="GHashTable*"/> </type> </return-value> </function> @@ -1929,8 +1929,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"/> - <type name="utf8"/> + <type name="utf8" c:type="GHashTable*"/> + <type name="utf8" c:type="GHashTable*"/> </type> </return-value> </function> @@ -1938,7 +1938,7 @@ call and can be released on return.</doc> c:identifier="regress_test_ghash_nested_everything_return"> <doc xml:whitespace="preserve">Specify nested parameterized types directly with the (type ) annotation.</doc> <return-value transfer-ownership="full"> - <type name="GLib.HashTable"> + <type name="GLib.HashTable" c:type="GHashTable*"> <type name="utf8"/> <type name="GLib.HashTable"> <type name="utf8"/> @@ -1953,8 +1953,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"/> - <type name="GLib.HashTable"> + <type name="utf8" c:type="GHashTable*"/> + <type name="GLib.HashTable" c:type="GHashTable*"> <type name="utf8"/> <type name="utf8"/> </type> @@ -1969,8 +1969,8 @@ element-type annotation.</doc> <parameters> <parameter name="in" transfer-ownership="none"> <type name="GLib.HashTable" c:type="GHashTable*"> - <type name="utf8"/> - <type name="utf8"/> + <type name="utf8" c:type="GHashTable*"/> + <type name="utf8" c:type="GHashTable*"/> </type> </parameter> </parameters> @@ -1983,8 +1983,8 @@ element-type annotation.</doc> <parameters> <parameter name="in" transfer-ownership="none"> <type name="GLib.HashTable" c:type="GHashTable*"> - <type name="utf8"/> - <type name="utf8"/> + <type name="utf8" c:type="GHashTable*"/> + <type name="utf8" c:type="GHashTable*"/> </type> </parameter> </parameters> @@ -1993,8 +1993,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"/> - <type name="utf8"/> + <type name="utf8" c:type="GHashTable*"/> + <type name="utf8" c:type="GHashTable*"/> </type> </return-value> </function> @@ -2002,8 +2002,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"/> - <type name="utf8"/> + <type name="utf8" c:type="GHashTable*"/> + <type name="utf8" c:type="GHashTable*"/> </type> </return-value> </function> @@ -2015,8 +2015,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"/> - <type name="utf8"/> + <type name="utf8" c:type="GHashTable*"/> + <type name="utf8" c:type="GHashTable*"/> </type> </parameter> </parameters> @@ -2033,8 +2033,8 @@ element-type annotation.</doc> transfer-ownership="full" allow-none="1"> <type name="GLib.HashTable" c:type="GHashTable**"> - <type name="utf8"/> - <type name="utf8"/> + <type name="utf8" c:type="GHashTable**"/> + <type name="utf8" c:type="GHashTable**"/> </type> </parameter> </parameters> @@ -2043,8 +2043,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"/> - <type name="utf8"/> + <type name="utf8" c:type="GHashTable*"/> + <type name="utf8" c:type="GHashTable*"/> </type> </return-value> </function> @@ -2052,7 +2052,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"/> + <type name="utf8" c:type="GList*"/> </type> </return-value> </function> @@ -2060,7 +2060,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"/> + <type name="utf8" c:type="GList*"/> </type> </return-value> </function> @@ -2072,7 +2072,7 @@ element-type annotation.</doc> <parameters> <parameter name="in" transfer-ownership="none"> <type name="GLib.List" c:type="GList*"> - <type name="utf8"/> + <type name="utf8" c:type="GList*"/> </type> </parameter> </parameters> @@ -2085,7 +2085,7 @@ element-type annotation.</doc> <parameters> <parameter name="in" transfer-ownership="none"> <type name="GLib.List" c:type="GList*"> - <type name="utf8"/> + <type name="utf8" c:type="GList*"/> </type> </parameter> </parameters> @@ -2094,7 +2094,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"/> + <type name="utf8" c:type="GList*"/> </type> </return-value> </function> @@ -2102,7 +2102,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"/> + <type name="utf8" c:type="GList*"/> </type> </return-value> </function> @@ -2114,7 +2114,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"/> + <type name="utf8" c:type="GSList*"/> </type> </parameter> </parameters> @@ -2131,7 +2131,7 @@ element-type annotation.</doc> transfer-ownership="full" allow-none="1"> <type name="GLib.SList" c:type="GSList**"> - <type name="utf8"/> + <type name="utf8" c:type="GSList**"/> </type> </parameter> </parameters> @@ -2140,7 +2140,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"/> + <type name="utf8" c:type="GSList*"/> </type> </return-value> </function> @@ -2148,7 +2148,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"/> + <type name="utf8" c:type="GSList*"/> </type> </return-value> </function> @@ -2160,7 +2160,7 @@ element-type annotation.</doc> <parameters> <parameter name="in" transfer-ownership="none"> <type name="GLib.SList" c:type="GSList*"> - <type name="utf8"/> + <type name="utf8" c:type="GSList*"/> </type> </parameter> </parameters> @@ -2173,7 +2173,7 @@ element-type annotation.</doc> <parameters> <parameter name="in" transfer-ownership="none"> <type name="GLib.SList" c:type="GSList*"> - <type name="utf8"/> + <type name="utf8" c:type="GSList*"/> </type> </parameter> </parameters> @@ -2182,7 +2182,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"/> + <type name="utf8" c:type="GSList*"/> </type> </return-value> </function> @@ -2190,7 +2190,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"/> + <type name="utf8" c:type="GSList*"/> </type> </return-value> </function> @@ -2202,7 +2202,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"/> + <type name="utf8" c:type="GSList*"/> </type> </parameter> </parameters> @@ -2219,7 +2219,7 @@ element-type annotation.</doc> transfer-ownership="full" allow-none="1"> <type name="GLib.SList" c:type="GSList**"> - <type name="utf8"/> + <type name="utf8" c:type="GSList**"/> </type> </parameter> </parameters> diff --git a/tests/scanner/annotation.c b/tests/scanner/annotation.c index 29036b3c..07e5a349 100644 --- a/tests/scanner/annotation.c +++ b/tests/scanner/annotation.c @@ -811,3 +811,14 @@ void annotation_space_after_comment_bug631690 (void) { } + +/** + * annotation_return_filename + * + * Returns: (type filename): An annotated filename + */ +gchar* +annotation_return_filename (void) +{ + return "a utf-8 filename"; +} diff --git a/tests/scanner/annotation.h b/tests/scanner/annotation.h index e4c5de63..c7de0f1b 100644 --- a/tests/scanner/annotation.h +++ b/tests/scanner/annotation.h @@ -167,6 +167,7 @@ GObject * annotation_test_parsing_bug630862 (void); void annotation_space_after_comment_bug631690 (void); +gchar* annotation_return_filename (void); #endif /* __ANNOTATION_OBJECT_H__ */ |