summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2007-09-05 20:40:37 +0000
committerRich Hickey <richhickey@gmail.com>2007-09-05 20:40:37 +0000
commit5ce3a48dbc1a5a41cf9a93bae55bb2b142daf31c (patch)
tree4aa0f818442eb1d57a98cd188794b7726ce59149
parent947171087efab6b64133d2321fc0ed78d12474de (diff)
fixed bug in closed over variable access
-rw-r--r--src/jvm/clojure/lang/BytecodeCompiler.java4
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);
}