diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2018-12-10 16:07:46 +0100 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2018-12-11 14:18:35 +0100 |
commit | 013bb64cc8ef97326db1a44affcf420b0bc941cf (patch) | |
tree | 60e565a6e69db8eb692fd87d0d4a1a8bf0ca2607 /tests/gir | |
parent | 3763b4c6c296fa3bc467050ae50e1dc320e85039 (diff) | |
download | vala-013bb64cc8ef97326db1a44affcf420b0bc941cf.tar.gz |
codegen: Handle non-default AsyncResult parameter position
Unfortunately gdbus-codegen puts the AsyncResult parameter after possible
out-parameters therefore there is an "async_result_pos" attribute required
to handle this correctly.
Vala supposely follows the common practice to put the AsyncResult before
out-parameters by default.
Fixes https://gitlab.gnome.org/GNOME/vala/issues/709
Diffstat (limited to 'tests/gir')
-rw-r--r-- | tests/gir/async-result-pos.test | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/tests/gir/async-result-pos.test b/tests/gir/async-result-pos.test new file mode 100644 index 000000000..2a17f53dc --- /dev/null +++ b/tests/gir/async-result-pos.test @@ -0,0 +1,56 @@ +GIR + +Input: + +<class name="Foo" c:type="TestFoo" glib:type-name="TestFoo" glib:get-type="test_foo_get_type" glib:type-struct="FooClass" parent="GObject.Object"> + <method name="method_async" c:identifier="test_foo_method_async"> + <return-value transfer-ownership="none"> + <type name="none"/> + </return-value> + <parameters> + <instance-parameter name="self" transfer-ownership="none"> + <type name="Foo" c:type="TestFoo*"/> + </instance-parameter> + <parameter name="input" transfer-ownership="none"> + <type name="utf8" c:type="const gchar*"/> + </parameter> + <parameter name="_callback_" transfer-ownership="none" allow-none="1" closure="2" scope="async"> + <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/> + </parameter> + <parameter name="_callback__target" transfer-ownership="none" allow-none="1"> + <type name="gpointer" c:type="void*"/> + </parameter> + </parameters> + </method> + <method name="method_finish" c:identifier="test_foo_method_finish" throws="1"> + <return-value transfer-ownership="full"> + <type name="none"/> + </return-value> + <parameters> + <instance-parameter name="self" transfer-ownership="none"> + <type name="Foo" c:type="TestFoo*"/> + </instance-parameter> + <parameter name="output" direction="out" transfer-ownership="full"> + <type name="utf8" c:type="gchar**"/> + </parameter> + <parameter name="_res_" transfer-ownership="none"> + <type name="Gio.AsyncResult" c:type="GAsyncResult*"/> + </parameter> + </parameters> + </method> + <constructor name="new" c:identifier="test_foo_new"> + <return-value transfer-ownership="full"> + <type name="Test.Foo" c:type="TestFoo*"/> + </return-value> + </constructor> +</class> + +Output: + +[CCode (cheader_filename = "test.h", type_id = "test_foo_get_type ()")] +public class Foo : GLib.Object { + [CCode (has_construct_function = false)] + public Foo (); + [CCode (async_result_pos = 2.1)] + public async void method_async (string input, out string output) throws GLib.Error; +} |