diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-06-10 15:49:42 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-06-10 15:49:42 +0000 |
commit | 4f14c794f51d942b9be046841ece5afe7bbfcf35 (patch) | |
tree | 35042654af8c662ff7b75369d02dd7ce06b00a79 /src | |
parent | 3f4cc942979188f9abcf32c04bcdd308df143769 (diff) |
really fixed nested try stack management
Diffstat (limited to 'src')
-rw-r--r-- | src/jvm/clojure/lang/Compiler.java | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java index 94846b35..3cdb65ea 100644 --- a/src/jvm/clojure/lang/Compiler.java +++ b/src/jvm/clojure/lang/Compiler.java @@ -1605,6 +1605,7 @@ static class TryExpr implements Expr{ Label endTry = gen.newLabel(); Label endTryCatch = gen.newLabel(); Label end = gen.newLabel(); + Label ret = gen.newLabel(); Label finallyLabel = gen.newLabel(); for(int i = 0; i < catchExprs.count(); i++) { @@ -1620,7 +1621,7 @@ static class TryExpr implements Expr{ gen.mark(endTry); if(finallyExpr != null) finallyExpr.emit(C.STATEMENT, fn, gen); - gen.goTo(end); + gen.goTo(ret); for(int i = 0; i < catchExprs.count(); i++) { @@ -1646,9 +1647,10 @@ static class TryExpr implements Expr{ gen.visitVarInsn(OBJECT_TYPE.getOpcode(Opcodes.ILOAD), finallyLocal); gen.throwException(); } - gen.mark(end); + gen.mark(ret); if(context != C.STATEMENT) gen.visitVarInsn(OBJECT_TYPE.getOpcode(Opcodes.ILOAD), retLocal); + gen.mark(end); for(int i = 0; i < catchExprs.count(); i++) { CatchClause clause = (CatchClause) catchExprs.nth(i); |