From: Jürg Billeter Date: Sun, 2 Nov 2008 13:00:19 +0000 (+0000) Subject: Add member `begin' to coroutines X-Git-Tag: VALA_0_5_1~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=03301d37642d706d94041d7900fc41a4c1cfa42b;p=thirdparty%2Fvala.git Add member `begin' to coroutines 2008-11-02 Jürg Billeter * vala/valamethodtype.vala: * gobject/valaccodegenerator.vala: Add member `begin' to coroutines svn path=/trunk/; revision=1951 --- diff --git a/ChangeLog b/ChangeLog index ee7f2313d..0fd58f215 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-11-02 Jürg Billeter + + * vala/valamethodtype.vala: + * gobject/valaccodegenerator.vala: + + Add member `begin' to coroutines + 2008-11-02 Jürg Billeter * vala/Makefile.am: diff --git a/gobject/valaccodegenerator.vala b/gobject/valaccodegenerator.vala index 452373937..04ce826b1 100644 --- a/gobject/valaccodegenerator.vala +++ b/gobject/valaccodegenerator.vala @@ -2685,18 +2685,16 @@ public class Vala.CCodeGenerator : CodeGenerator { var cfrag = new CCodeFragment (); stmt.ccodenode = cfrag; - if (current_method.coroutine) { - var idle_call = new CCodeFunctionCall (new CCodeIdentifier ("g_idle_add")); - idle_call.add_argument (new CCodeCastExpression (new CCodeIdentifier (current_method.get_real_cname ()), "GSourceFunc")); - idle_call.add_argument (new CCodeIdentifier ("data")); + var idle_call = new CCodeFunctionCall (new CCodeIdentifier ("g_idle_add")); + idle_call.add_argument (new CCodeCastExpression (new CCodeIdentifier (current_method.get_real_cname ()), "GSourceFunc")); + idle_call.add_argument (new CCodeIdentifier ("data")); - int state = next_coroutine_state++; + int state = next_coroutine_state++; - cfrag.append (new CCodeExpressionStatement (idle_call)); - cfrag.append (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (new CCodeIdentifier ("data"), "state"), new CCodeConstant (state.to_string ())))); - cfrag.append (new CCodeReturnStatement (new CCodeConstant ("FALSE"))); - cfrag.append (new CCodeCaseStatement (new CCodeConstant (state.to_string ()))); - } + cfrag.append (new CCodeExpressionStatement (idle_call)); + cfrag.append (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (new CCodeIdentifier ("data"), "state"), new CCodeConstant (state.to_string ())))); + cfrag.append (new CCodeReturnStatement (new CCodeConstant ("FALSE"))); + cfrag.append (new CCodeCaseStatement (new CCodeConstant (state.to_string ()))); return; } diff --git a/vala/valamethodtype.vala b/vala/valamethodtype.vala index 6ef17c5c0..aa2721287 100644 --- a/vala/valamethodtype.vala +++ b/vala/valamethodtype.vala @@ -66,4 +66,11 @@ public class Vala.MethodType : DataType { public override string? get_cname () { return "gpointer"; } + + public override Symbol? get_member (string member_name) { + if (method_symbol.coroutine && member_name == "begin") { + return method_symbol; + } + return null; + } }