From: Rico Tzschichholz Date: Sun, 4 Feb 2018 09:28:59 +0000 (+0100) Subject: codegen: Don't try to infer error argument on async begin methods X-Git-Tag: 0.34.16~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eb766f618b42655f3b08f963f4b7f8db82fcb02e;p=thirdparty%2Fvala.git codegen: Don't try to infer error argument on async begin methods Only the async finish method might have an error parameter. Regression of 527dac8050fe90d7a28619383f11e968ab5c9a77 https://bugzilla.gnome.org/show_bug.cgi?id=793158 --- diff --git a/codegen/valaccodemethodcallmodule.vala b/codegen/valaccodemethodcallmodule.vala index 2212814be..923bca541 100644 --- a/codegen/valaccodemethodcallmodule.vala +++ b/codegen/valaccodemethodcallmodule.vala @@ -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")); } diff --git a/tests/Makefile.am b/tests/Makefile.am index 95b1b7d94..3bf37dad2 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -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 index 000000000..445092b9e --- /dev/null +++ b/tests/asynchronous/bug793158.vala @@ -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 (); +}