From: Jürg Billeter Date: Thu, 17 Sep 2009 21:27:46 +0000 (+0200) Subject: GAsync: Fix propagating errors from async methods X-Git-Tag: 0.7.6~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=63bca4597143bb7db5f3c62bd344711371319abd;p=thirdparty%2Fvala.git GAsync: Fix propagating errors from async methods --- diff --git a/codegen/valagasyncmodule.vala b/codegen/valagasyncmodule.vala index acc68def1..e59ce382a 100644 --- a/codegen/valagasyncmodule.vala +++ b/codegen/valagasyncmodule.vala @@ -353,6 +353,20 @@ internal class Vala.GAsyncModule : GSignalModule { var simple_async_result_cast = new CCodeFunctionCall (new CCodeIdentifier ("G_SIMPLE_ASYNC_RESULT")); simple_async_result_cast.add_argument (new CCodeIdentifier ("_res_")); + if (m.get_error_types ().size > 0) { + // propagate error from async method + var propagate_error = new CCodeFunctionCall (new CCodeIdentifier ("g_simple_async_result_propagate_error")); + propagate_error.add_argument (simple_async_result_cast); + propagate_error.add_argument (new CCodeIdentifier ("error")); + var errorblock = new CCodeBlock (); + if (return_type is VoidType) { + errorblock.add_statement (new CCodeReturnStatement ()); + } else { + errorblock.add_statement (new CCodeReturnStatement (default_value_for_type (return_type, false))); + } + finishblock.add_statement (new CCodeIfStatement (propagate_error, errorblock)); + } + var ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_simple_async_result_get_op_res_gpointer")); ccall.add_argument (simple_async_result_cast); finishblock.add_statement (new CCodeExpressionStatement (new CCodeAssignment (data_var, ccall)));