summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2008-07-13 13:10:50 +0000
committerRich Hickey <richhickey@gmail.com>2008-07-13 13:10:50 +0000
commit88a55c0d9134084c9a12a6f028a520f8f7ad76f0 (patch)
tree5ade0db2bb3deea97a081a710df5ce6cb1d944ce /src
parentec26a653dc282328ea30dae6f065523552f05ad0 (diff)
fixed treatment of catch clauses (saving ret in local) for nested handler
Diffstat (limited to 'src')
-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 1ed14e8e..f98c291e 100644
--- a/src/jvm/clojure/lang/Compiler.java
+++ b/src/jvm/clojure/lang/Compiler.java
@@ -1631,11 +1631,13 @@ static class TryExpr implements Expr{
//put in clause local
gen.visitVarInsn(OBJECT_TYPE.getOpcode(Opcodes.ISTORE), clause.lb.idx);
clause.handler.emit(context, fn, gen);
+ if(context != C.STATEMENT)
+ gen.visitVarInsn(OBJECT_TYPE.getOpcode(Opcodes.ISTORE), retLocal);
gen.mark(clause.endLabel);
if(finallyExpr != null)
finallyExpr.emit(C.STATEMENT, fn, gen);
- gen.goTo(end);
+ gen.goTo(ret);
}
gen.mark(endTryCatch);
if(finallyExpr != null)