diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-04-27 00:48:52 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-04-27 00:48:52 +0000 |
commit | 5e9f2b293b307aa7953cd390360d24549e542b92 (patch) | |
tree | f08e0b88aaad2f0c3a245febc6e28c3a7ee0c14b | |
parent | 69d9750e13fdce613aa8b9ca0028478be0bf177c (diff) |
run finally clause when exceptions thrown from catch clauses
-rw-r--r-- | src/jvm/clojure/lang/Compiler.java | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java index 0f3a7434..30846c62 100644 --- a/src/jvm/clojure/lang/Compiler.java +++ b/src/jvm/clojure/lang/Compiler.java @@ -1471,6 +1471,7 @@ static class TryExpr implements Expr{ public void emit(C context, FnExpr fn, GeneratorAdapter gen){ Label startTry = gen.newLabel(); Label endTry = gen.newLabel(); + Label endTryCatch = gen.newLabel(); Label end = gen.newLabel(); Label finallyLabel = gen.newLabel(); for(int i = 0; i < catchExprs.count(); i++) @@ -1501,6 +1502,7 @@ static class TryExpr implements Expr{ finallyExpr.emit(C.STATEMENT, fn, gen); gen.goTo(end); } + gen.mark(endTryCatch); if(finallyExpr != null) { gen.mark(finallyLabel); @@ -1515,7 +1517,7 @@ static class TryExpr implements Expr{ gen.visitTryCatchBlock(startTry, endTry, clause.label, clause.c.getName().replace('.', '/')); } if(finallyExpr != null) - gen.visitTryCatchBlock(startTry, endTry, finallyLabel, null); + gen.visitTryCatchBlock(startTry, endTryCatch, finallyLabel, null); for(int i = 0; i < catchExprs.count(); i++) { CatchClause clause = (CatchClause) catchExprs.nth(i); |