diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-07-13 13:10:50 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-07-13 13:10:50 +0000 |
commit | 88a55c0d9134084c9a12a6f028a520f8f7ad76f0 (patch) | |
tree | 5ade0db2bb3deea97a081a710df5ce6cb1d944ce /src | |
parent | ec26a653dc282328ea30dae6f065523552f05ad0 (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.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 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) |