From: Jürg Billeter Date: Tue, 15 Sep 2009 22:02:50 +0000 (+0200) Subject: Fix jump statements with captured variables X-Git-Tag: 0.7.6~49 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c6930f6da759aa8991b2fb365415ed8e4b3a3e6f;p=thirdparty%2Fvala.git Fix jump statements with captured variables --- diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index efc3d0b88..3c0ef0982 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -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 ||