]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Fix closures in creation methods of classes without base class
authorLuca Bruno <lucabru@src.gnome.org>
Sat, 28 May 2011 07:04:25 +0000 (09:04 +0200)
committerLuca Bruno <lucabru@src.gnome.org>
Sat, 28 May 2011 07:07:37 +0000 (09:07 +0200)
Fixes bug 642899.

codegen/valaccodebasemodule.vala
tests/Makefile.am
tests/methods/bug642899.vala [new file with mode: 0644]

index 2445bc722c1cf872d59dffbfc984d75413dfa97c..021629ddd44a30b36eafe48572e7812c0275ae24 100644 (file)
@@ -1749,8 +1749,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 
                                ccode.add_assignment (new CCodeMemberAccess.pointer (get_variable_cexpression ("_data%d_".printf (block_id)), "_data%d_".printf (parent_block_id)), ref_call);
                        } else {
-                               if (in_constructor || (current_method != null && current_method.binding == MemberBinding.INSTANCE &&
-                                                             (!(current_method is CreationMethod) || current_method.body != b)) ||
+                               if (in_constructor || (current_method != null && current_method.binding == MemberBinding.INSTANCE && (!(current_method is CreationMethod && current_class != null && current_class.base_class != null) || current_method.body != b)) ||
                                           (current_property_accessor != null && current_property_accessor.prop.binding == MemberBinding.INSTANCE)) {
                                        var ref_call = new CCodeFunctionCall (get_dup_func_expression (get_data_type_for_symbol (current_type_symbol), b.source_reference));
                                        ref_call.add_argument (get_result_cexpression ("self"));
index de000427add5d4b2c2b1877cda7cdd5abf83edca..b02a449f4291fa06e3f7fb57a2afe4143bf248bf 100644 (file)
@@ -36,6 +36,7 @@ TESTS = \
        methods/bug599892.vala \
        methods/bug613483.vala \
        methods/bug620673.vala \
+       methods/bug642899.vala \
        methods/bug646345.vala \
        methods/bug648320.vala \
        control-flow/break.vala \
diff --git a/tests/methods/bug642899.vala b/tests/methods/bug642899.vala
new file mode 100644 (file)
index 0000000..4fd5dfe
--- /dev/null
@@ -0,0 +1,15 @@
+class Foo {
+       Object bar;
+       public Foo () {
+               Object baz = null;
+               SourceFunc f = () => {
+                       baz = bar;
+                       return false;
+               };
+               f ();
+       }
+}
+
+void main () {
+       new Foo ();
+}