]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Fix closures in constructors
authorJürg Billeter <j@bitron.ch>
Wed, 16 Sep 2009 22:11:54 +0000 (00:11 +0200)
committerJürg Billeter <j@bitron.ch>
Wed, 16 Sep 2009 22:11:54 +0000 (00:11 +0200)
codegen/valaccodebasemodule.vala
codegen/valagobjectmodule.vala

index a6e310eaff35a8ce2b6a78ca8e930b5ebe2eb924..a93440d882f85e3d401cbf70851cbf5807e52a1f 100644 (file)
@@ -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"));
 
index 504474c6902e1d66b9409e9f22e0bafe8db82f9d..467ff19a21769dd12750e841cb9c009cdcd7ee0b 100644 (file)
@@ -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;