diff options
author | Rich Hickey <richhickey@gmail.com> | 2007-09-05 20:40:37 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2007-09-05 20:40:37 +0000 |
commit | 5ce3a48dbc1a5a41cf9a93bae55bb2b142daf31c (patch) | |
tree | 4aa0f818442eb1d57a98cd188794b7726ce59149 | |
parent | 947171087efab6b64133d2321fc0ed78d12474de (diff) |
fixed bug in closed over variable access
-rw-r--r-- | src/jvm/clojure/lang/BytecodeCompiler.java | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/jvm/clojure/lang/BytecodeCompiler.java b/src/jvm/clojure/lang/BytecodeCompiler.java index 33add518..4931df51 100644 --- a/src/jvm/clojure/lang/BytecodeCompiler.java +++ b/src/jvm/clojure/lang/BytecodeCompiler.java @@ -1009,6 +1009,7 @@ static class FnExpr implements Expr{ for(ISeq s = RT.keys(closes); s != null; s = s.rest(), ++a) { LocalBinding lb = (LocalBinding) s.first(); + ctorgen.loadThis(); ctorgen.visitVarInsn(OBJECT_TYPE.getOpcode(Opcodes.ILOAD), a); ctorgen.putField(fntype, lb.name, OBJECT_TYPE); } @@ -1052,7 +1053,10 @@ static class FnExpr implements Expr{ private void emitLocal(GeneratorAdapter gen, LocalBinding lb){ if(closes.contains(lb)) + { + gen.loadThis(); gen.getField(fntype, lb.name, OBJECT_TYPE); + } else gen.visitVarInsn(OBJECT_TYPE.getOpcode(Opcodes.ILOAD), lb.idx); } |