]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Fix execution order of finally blocks
authorMaciej Piechotka <uzytkownik2@gmail.com>
Fri, 29 Apr 2011 09:48:02 +0000 (11:48 +0200)
committerJürg Billeter <j@bitron.ch>
Fri, 29 Apr 2011 20:33:26 +0000 (22:33 +0200)
Fixes bug 648807.

codegen/valaccodebasemodule.vala
codegen/valagerrormodule.vala

index 8e1ca6df68398cac47734255675906c295108de5..f963c49b459c1497abb0c3972dda73c20319e6f1 100644 (file)
@@ -3271,6 +3271,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                        ccode.add_assignment (get_variable_cexpression ("_data%d_".printf (block_id)), new CCodeConstant ("NULL"));
                }
 
+               append_scope_free (sym, stop_at);
+
                if (stop_at_loop) {
                        if (b.parent_node is Loop ||
                            b.parent_node is ForeachStatement ||
@@ -3290,6 +3292,9 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                }
        }
 
+       protected virtual void append_scope_free (Symbol sym, CodeNode? stop_at = null) {
+       }
+
        private void append_param_free (Method m) {
                foreach (Parameter param in m.get_parameters ()) {
                        if (!param.ellipsis && requires_destroy (param.variable_type) && param.direction == ParameterDirection.IN) {
index 75e9a78fb8deec4f164ca330ab25558427427d2f..157778b63ba5f948357ef6fbc19a089c201b5f81 100644 (file)
@@ -361,9 +361,7 @@ public class Vala.GErrorModule : CCodeDelegateModule {
                ccode.close ();
        }
 
-       public override void append_local_free (Symbol sym, bool stop_at_loop = false, CodeNode? stop_at = null) {
-               base.append_local_free (sym, stop_at_loop, stop_at);
-
+       protected override void append_scope_free (Symbol sym, CodeNode? stop_at = null) {
                if (!(stop_at is TryStatement || stop_at is CatchClause)) {
                        var finally_block = (Block) null;
                        if (sym.parent_node is TryStatement) {