diff options
-rw-r--r-- | giscanner/maintransformer.py | 6 | ||||
-rw-r--r-- | tests/scanner/Regress-1.0-expected.gir | 38 | ||||
-rw-r--r-- | tests/scanner/regress.c | 12 | ||||
-rw-r--r-- | tests/scanner/regress.h | 1 |
4 files changed, 57 insertions, 0 deletions
diff --git a/giscanner/maintransformer.py b/giscanner/maintransformer.py index 77a66d21..d4163fae 100644 --- a/giscanner/maintransformer.py +++ b/giscanner/maintransformer.py @@ -1001,6 +1001,12 @@ method or constructor of some type.""" '%s: Methods must belong to the same namespace as the ' 'class they belong to' % (func.symbol, )) return False + if first.direction == ast.PARAM_DIRECTION_OUT: + if func.is_method: + message.warn_node(func, + '%s: The first argument of methods cannot be an ' + 'out-argument' % (func.symbol, )) + return False # A quick hack here...in the future we should catch C signature/GI signature # mismatches in a general way in finaltransformer diff --git a/tests/scanner/Regress-1.0-expected.gir b/tests/scanner/Regress-1.0-expected.gir index e954705b..1d826766 100644 --- a/tests/scanner/Regress-1.0-expected.gir +++ b/tests/scanner/Regress-1.0-expected.gir @@ -1444,6 +1444,24 @@ Use with regress_test_obj_emit_sig_with_obj</doc> </parameter> </parameters> </method> + <function name="parse" c:identifier="regress_test_struct_a_parse"> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <parameter name="a_out" + direction="out" + caller-allocates="1" + transfer-ownership="none"> + <doc xml:whitespace="preserve">the structure that is to be filled</doc> + <type name="TestStructA" c:type="RegressTestStructA*"/> + </parameter> + <parameter name="string" transfer-ownership="none"> + <doc xml:whitespace="preserve">ignored</doc> + <type name="utf8" c:type="const gchar*"/> + </parameter> + </parameters> + </function> </record> <record name="TestStructB" c:type="RegressTestStructB"> <field name="some_int8" writable="1"> @@ -3059,6 +3077,26 @@ What we're testing here is that the scanner ignores the @a nested inside XML.</d </parameter> </parameters> </function> + <function name="test_struct_a_parse" + c:identifier="regress_test_struct_a_parse" + moved-to="TestStructA.parse"> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <parameter name="a_out" + direction="out" + caller-allocates="1" + transfer-ownership="none"> + <doc xml:whitespace="preserve">the structure that is to be filled</doc> + <type name="TestStructA" c:type="RegressTestStructA*"/> + </parameter> + <parameter name="string" transfer-ownership="none"> + <doc xml:whitespace="preserve">ignored</doc> + <type name="utf8" c:type="const gchar*"/> + </parameter> + </parameters> + </function> <function name="test_strv_in" c:identifier="regress_test_strv_in"> <return-value transfer-ownership="none"> <type name="gboolean" c:type="gboolean"/> diff --git a/tests/scanner/regress.c b/tests/scanner/regress.c index 910f01a5..e72c5aa7 100644 --- a/tests/scanner/regress.c +++ b/tests/scanner/regress.c @@ -1673,6 +1673,18 @@ regress_test_struct_a_clone (RegressTestStructA *a, } /** + * regress_test_struct_a_parse: + * @a_out: (out caller-allocates): the structure that is to be filled + * @string: ignored + */ +void +regress_test_struct_a_parse (RegressTestStructA *a_out, + const gchar *string) +{ + a_out->some_int = 23; +} + +/** * regress_test_struct_b_clone: * @b: the structure * @b_out: (out): the cloned structure diff --git a/tests/scanner/regress.h b/tests/scanner/regress.h index d6bdacb2..949a3764 100644 --- a/tests/scanner/regress.h +++ b/tests/scanner/regress.h @@ -282,6 +282,7 @@ struct _RegressTestStructA void regress_test_struct_a_clone (RegressTestStructA *a, RegressTestStructA *a_out); +void regress_test_struct_a_parse (RegressTestStructA *a_out, const gchar *string); struct _RegressTestStructB { |