summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2008-04-27 00:48:52 +0000
committerRich Hickey <richhickey@gmail.com>2008-04-27 00:48:52 +0000
commit5e9f2b293b307aa7953cd390360d24549e542b92 (patch)
treef08e0b88aaad2f0c3a245febc6e28c3a7ee0c14b
parent69d9750e13fdce613aa8b9ca0028478be0bf177c (diff)
run finally clause when exceptions thrown from catch clauses
-rw-r--r--src/jvm/clojure/lang/Compiler.java4
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);