]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Fix jump statements with captured variables
authorJürg Billeter <j@bitron.ch>
Tue, 15 Sep 2009 22:02:50 +0000 (00:02 +0200)
committerJürg Billeter <j@bitron.ch>
Tue, 15 Sep 2009 22:02:50 +0000 (00:02 +0200)
codegen/valaccodebasemodule.vala

index efc3d0b884ac2f506a28f3f1150f5ec034c57805..3c0ef09826b96051a78b57e939ad73b9a373da05 100644 (file)
@@ -2576,13 +2576,21 @@ internal class Vala.CCodeBaseModule : CCodeModule {
 
                var local_vars = b.get_local_variables ();
                foreach (LocalVariable local in local_vars) {
-                       if (local.active && !local.floating && requires_destroy (local.variable_type)) {
+                       if (local.active && !local.floating && !local.captured && requires_destroy (local.variable_type)) {
                                var ma = new MemberAccess.simple (local.name);
                                ma.symbol_reference = local;
                                cfrag.append (new CCodeExpressionStatement (get_unref_expression (get_variable_cexpression (local.name), local.variable_type, ma)));
                        }
                }
-               
+
+               if (b.captured) {
+                       int block_id = get_block_id (b);
+
+                       var data_unref = new CCodeFunctionCall (new CCodeIdentifier ("block%d_data_unref".printf (block_id)));
+                       data_unref.add_argument (new CCodeIdentifier ("_data%d_".printf (block_id)));
+                       cfrag.append (new CCodeExpressionStatement (data_unref));
+               }
+
                if (stop_at_loop) {
                        if (b.parent_node is Loop ||
                            b.parent_node is ForeachStatement ||