From: Jürg Billeter Date: Wed, 16 Sep 2009 22:11:54 +0000 (+0200) Subject: Fix closures in constructors X-Git-Tag: 0.7.6~20 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=659cd2afb73e1d034e454045a9af1bfe1b734488;p=thirdparty%2Fvala.git Fix closures in constructors --- diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index a6e310eaf..a93440d88 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -1630,7 +1630,7 @@ internal class Vala.CCodeBaseModule : CCodeModule { var unref_call = new CCodeFunctionCall (new CCodeIdentifier ("block%d_data_unref".printf (parent_block_id))); unref_call.add_argument (new CCodeMemberAccess.pointer (new CCodeIdentifier ("data"), "_data%d_".printf (parent_block_id))); free_block.add_statement (new CCodeExpressionStatement (unref_call)); - } else if (current_method.binding == MemberBinding.INSTANCE) { + } else if (in_constructor || (current_method != null && current_method.binding == MemberBinding.INSTANCE)) { data.add_field ("%s *".printf (current_class.get_cname ()), "self"); var ma = new MemberAccess.simple ("this"); @@ -1679,7 +1679,7 @@ internal class Vala.CCodeBaseModule : CCodeModule { ref_call.add_argument (get_variable_cexpression ("_data%d_".printf (parent_block_id))); cblock.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (get_variable_cexpression ("_data%d_".printf (block_id)), "_data%d_".printf (parent_block_id)), ref_call))); - } else if (current_method.binding == MemberBinding.INSTANCE) { + } else if (in_constructor || (current_method != null && current_method.binding == MemberBinding.INSTANCE)) { var ref_call = new CCodeFunctionCall (get_dup_func_expression (new ObjectType (current_class), b.source_reference)); ref_call.add_argument (new CCodeIdentifier ("self")); diff --git a/codegen/valagobjectmodule.vala b/codegen/valagobjectmodule.vala index 504474c69..467ff19a2 100644 --- a/codegen/valagobjectmodule.vala +++ b/codegen/valagobjectmodule.vala @@ -412,10 +412,11 @@ internal class Vala.GObjectModule : GTypeModule { public override void visit_constructor (Constructor c) { bool old_method_inner_error = current_method_inner_error; current_method_inner_error = false; - in_constructor = true; if (c.binding == MemberBinding.CLASS || c.binding == MemberBinding.STATIC) { in_static_or_class_context = true; + } else { + in_constructor = true; } c.accept_children (codegen); in_static_or_class_context = false;