]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Don't try to infer error argument on async begin methods
authorRico Tzschichholz <ricotz@ubuntu.com>
Sun, 4 Feb 2018 09:28:59 +0000 (10:28 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Sun, 4 Feb 2018 10:08:43 +0000 (11:08 +0100)
Only the async finish method might have an error parameter.

Regression of 527dac8050fe90d7a28619383f11e968ab5c9a77

https://bugzilla.gnome.org/show_bug.cgi?id=793158

codegen/valaccodemethodcallmodule.vala
tests/Makefile.am
tests/asynchronous/bug793158.vala [new file with mode: 0644]

index 2212814bedbd5bcfb0d7d02f4afb8511e2d4e6d8..923bca54167b303b3d31cac6e4d436a1b14b6aed 100644 (file)
@@ -615,7 +615,7 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
                        current_method_inner_error = true;
                        // add &inner_error before the ellipsis arguments
                        out_arg_map.set (get_param_pos (-1), new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_variable_cexpression ("_inner_error_")));
-               } else if (m != null && m.has_error_type_parameter ()) {
+               } else if (m != null && m.has_error_type_parameter () && async_call != ccall) {
                        // inferred error argument from base method
                        out_arg_map.set (get_param_pos (-1), new CCodeConstant ("NULL"));
                }
index 95b1b7d94ce3111a00d8f849a594d56626df6a6d..3bf37dad2ce9e7010f71b7cf6abb177a5dc43aa1 100644 (file)
@@ -240,6 +240,7 @@ TESTS = \
        asynchronous/bug762819.vala \
        asynchronous/bug792660.vala \
        asynchronous/bug792942.vala \
+       asynchronous/bug793158.vala \
        asynchronous/closures.vala \
        dbus/basic-types.test \
        dbus/arrays.test \
diff --git a/tests/asynchronous/bug793158.vala b/tests/asynchronous/bug793158.vala
new file mode 100644 (file)
index 0000000..445092b
--- /dev/null
@@ -0,0 +1,20 @@
+errordomain FooError {
+       BAR;
+}
+
+class Foo : Object {
+       public async bool bar () throws FooError {
+               return true;
+       }
+}
+
+MainLoop loop;
+
+void main () {
+       loop = new MainLoop ();
+       var foo = new Foo ();
+       foo.bar.begin ((o, r) => {
+               loop.quit ();
+       });
+       loop.run ();
+}