From: Jürg Billeter Date: Mon, 21 Sep 2009 18:20:58 +0000 (+0200) Subject: Fix abstract async methods X-Git-Tag: 0.7.7~59 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5b4fc073dc284212ec165d129bd8f9c5289a642b;p=thirdparty%2Fvala.git Fix abstract async methods Fixes bug 595735. --- diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala index beda1c45c..1eb3d745d 100644 --- a/codegen/valagtypemodule.vala +++ b/codegen/valagtypemodule.vala @@ -1147,13 +1147,16 @@ internal class Vala.GTypeModule : GErrorModule { continue; } var base_type = m.base_method.parent_symbol; - - var ccast = new CCodeFunctionCall (new CCodeIdentifier ("%s_CLASS".printf (((Class) base_type).get_upper_case_cname (null)))); - ccast.add_argument (new CCodeIdentifier ("klass")); - init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (ccast, m.base_method.vfunc_name), new CCodeIdentifier (m.get_real_cname ())))); - if (m.coroutine) { - init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (ccast, m.base_method.get_finish_vfunc_name ()), new CCodeIdentifier (m.get_finish_real_cname ())))); + // there is currently no default handler for abstract async methods + if (m.overrides || !m.coroutine) { + var ccast = new CCodeFunctionCall (new CCodeIdentifier ("%s_CLASS".printf (((Class) base_type).get_upper_case_cname (null)))); + ccast.add_argument (new CCodeIdentifier ("klass")); + init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (ccast, m.base_method.vfunc_name), new CCodeIdentifier (m.get_real_cname ())))); + + if (m.coroutine) { + init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (ccast, m.base_method.get_finish_vfunc_name ()), new CCodeIdentifier (m.get_finish_real_cname ())))); + } } }