]> 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)
committerJürg Billeter <j@bitron.ch>
Wed, 1 Jun 2011 13:33:09 +0000 (15:33 +0200)
Fixes bug 642899.

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

index 3e14c7c8f2af7d042e9a229cd450e7e02be3fb46..3d8c07f19388c55e31f4f04241cf27393b3f248f 100644 (file)
@@ -1773,8 +1773,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 48267950ca4ad955bb4715045eb50e56c494e10a..52a1b7e10328a58f6355f771014a2753c0c24c0f 100644 (file)
@@ -34,6 +34,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 ();
+}