From: Jürg Billeter Date: Thu, 17 Sep 2009 09:22:23 +0000 (+0200) Subject: GAsync: Fix calling async methods from async methods without yield X-Git-Tag: 0.7.6~17 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4d481acb3acb39e3b202650ef1ac5130e66b46b4;p=thirdparty%2Fvala.git GAsync: Fix calling async methods from async methods without yield --- diff --git a/codegen/valaccodemethodcallmodule.vala b/codegen/valaccodemethodcallmodule.vala index 8160fdb37..223515242 100644 --- a/codegen/valaccodemethodcallmodule.vala +++ b/codegen/valaccodemethodcallmodule.vala @@ -642,18 +642,16 @@ internal class Vala.CCodeMethodCallModule : CCodeAssignmentModule { expr.ccodenode = ccall_expr; } - if (m != null && m.coroutine && current_method != null && current_method.coroutine) { - if (ma.member_name != "begin" || ma.inner.symbol_reference != ma.symbol_reference) { - if (pre_statement_fragment == null) { - pre_statement_fragment = new CCodeFragment (); - } - pre_statement_fragment.append (new CCodeExpressionStatement (async_call)); - - int state = next_coroutine_state++; - pre_statement_fragment.append (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (new CCodeIdentifier ("data"), "_state_"), new CCodeConstant (state.to_string ())))); - pre_statement_fragment.append (new CCodeReturnStatement (new CCodeConstant ("FALSE"))); - pre_statement_fragment.append (new CCodeCaseStatement (new CCodeConstant (state.to_string ()))); + if (expr.is_yield_expression) { + if (pre_statement_fragment == null) { + pre_statement_fragment = new CCodeFragment (); } + pre_statement_fragment.append (new CCodeExpressionStatement (async_call)); + + int state = next_coroutine_state++; + pre_statement_fragment.append (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (new CCodeIdentifier ("data"), "_state_"), new CCodeConstant (state.to_string ())))); + pre_statement_fragment.append (new CCodeReturnStatement (new CCodeConstant ("FALSE"))); + pre_statement_fragment.append (new CCodeCaseStatement (new CCodeConstant (state.to_string ()))); } if (m is ArrayResizeMethod) {