diff options
author | Owen Taylor <otaylor@src.gnome.org> | 2008-12-16 04:20:50 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2008-12-16 04:20:50 +0000 |
commit | aa8bf8d82c96d7151017c8b7e721fb4454645597 (patch) | |
tree | 0e0214a1cc0a8832cd8afd8696a934f405328fdb | |
parent | 6ae11e8edbd5ca6783fb6166b2b921fac06ebdc3 (diff) | |
download | gobject-introspection-aa8bf8d82c96d7151017c8b7e721fb4454645597.tar.gz |
Disable array auto-detection for out-annotated parameters
If we have a parameter annotated as (out), then having a ctype of
'char **' (or similar) doesn't necessarily indicate an array.
* giscanner/transformer.py: Skip array-detection logic for
(out)-annotated parameters.
* tests/scanner/annotation.h tests/scanner/annotation.c
tests/scanner/annotation-1.0-expected.gir
tests/scanner/annotation-1.0-expected.tgir: Add a test for
an (out) string parameter.
http://bugzilla.gnome.org/show_bug.cgi?id=563934
svn path=/trunk/; revision=994
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | giscanner/transformer.py | 3 | ||||
-rw-r--r-- | tests/scanner/annotation-1.0-expected.gir | 10 | ||||
-rw-r--r-- | tests/scanner/annotation-1.0-expected.tgir | 10 | ||||
-rw-r--r-- | tests/scanner/annotation.c | 16 | ||||
-rw-r--r-- | tests/scanner/annotation.h | 2 |
6 files changed, 54 insertions, 1 deletions
@@ -1,3 +1,17 @@ +2008-12-12 Owen Taylor <otaylor@redhat.com> + + Disable array auto-detection for out-annotated parameters (#563934) + + If we have a parameter annotated as (out), then having a ctype of + 'char **' (or similar) doesn't necessarily indicate an array. + + * giscanner/transformer.py: Skip array-detection logic for + (out)-annotated parameters. + * tests/scanner/annotation.h tests/scanner/annotation.c + tests/scanner/annotation-1.0-expected.gir + tests/scanner/annotation-1.0-expected.tgir: Add a test for + an (out) string parameter. + 2008-12-12 Johan Dahlin <jdahlin@async.com.br> * giscanner/dumper.py (DumpCompiler._link): Pass in diff --git a/giscanner/transformer.py b/giscanner/transformer.py index f9807eab..bba44f7d 100644 --- a/giscanner/transformer.py +++ b/giscanner/transformer.py @@ -462,7 +462,8 @@ class Transformer(object): rettype = Map(derefed_name, ctype, key_type, value_type) - elif ((is_param and canonical_ctype in default_array_types) + elif ((is_param and canonical_ctype in default_array_types + and not 'out' in options) or ('array' in options)): if canonical_ctype[-1] == '*': derefed_name = canonical_ctype[:-1] diff --git a/tests/scanner/annotation-1.0-expected.gir b/tests/scanner/annotation-1.0-expected.gir index 745bbc3f..88dcdc6a 100644 --- a/tests/scanner/annotation-1.0-expected.gir +++ b/tests/scanner/annotation-1.0-expected.gir @@ -235,6 +235,16 @@ </parameter> </parameters> </method> + <method name="string_out" c:identifier="annotation_object_string_out"> + <return-value transfer-ownership="none"> + <type name="boolean" c:type="gboolean"/> + </return-value> + <parameters> + <parameter name="str_out" direction="out" transfer-ownership="full"> + <type name="utf8" c:type="char**"/> + </parameter> + </parameters> + </method> <method name="do_not_use" c:identifier="annotation_object_do_not_use" deprecated="Use annotation_object_create_object() instead." diff --git a/tests/scanner/annotation-1.0-expected.tgir b/tests/scanner/annotation-1.0-expected.tgir index 53df582e..4fe10bd6 100644 --- a/tests/scanner/annotation-1.0-expected.tgir +++ b/tests/scanner/annotation-1.0-expected.tgir @@ -224,6 +224,16 @@ </parameter> </parameters> </method> + <method name="string_out" c:identifier="annotation_object_string_out"> + <return-value transfer-ownership="none"> + <type name="boolean"/> + </return-value> + <parameters> + <parameter name="str_out" transfer-ownership="full" direction="out"> + <type name="utf8"/> + </parameter> + </parameters> + </method> <method name="do_not_use" c:identifier="annotation_object_do_not_use" deprecated="1"> <return-value transfer-ownership="full"> <type name="GObject.Object"/> diff --git a/tests/scanner/annotation.c b/tests/scanner/annotation.c index 420a927c..cbb69b72 100644 --- a/tests/scanner/annotation.c +++ b/tests/scanner/annotation.c @@ -292,6 +292,22 @@ annotation_object_parse_args(AnnotationObject *object, } /** + * annotation_object_string_out: + * @object: a #AnnotationObject + * @str_out: (out) (transfer full): string return value + * + * Test returning a string as an out parameter + * + * Returns: some boolean + **/ +gboolean +annotation_object_string_out(AnnotationObject *object, + char **str_out) +{ + +} + +/** * annotation_object_allow_none: * @object: a #GObject * @somearg: (allow-none): diff --git a/tests/scanner/annotation.h b/tests/scanner/annotation.h index d6d60916..1e83ca23 100644 --- a/tests/scanner/annotation.h +++ b/tests/scanner/annotation.h @@ -73,6 +73,8 @@ void annotation_object_compute_sum_nz(AnnotationObject *object, void annotation_object_parse_args (AnnotationObject *object, int *argc, char ***argv); +gboolean annotation_object_string_out (AnnotationObject *object, + char **str_out); GObject* annotation_object_do_not_use (AnnotationObject *object); |