diff options
author | Rich Hickey <richhickey@gmail.com> | 2009-02-11 19:33:02 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2009-02-11 19:33:02 +0000 |
commit | baddfb391f1e85784b08a97e9e881987657f1e38 (patch) | |
tree | 1c8e7e378c8d758070eb51bf43be25aaf94578a6 | |
parent | a256e51ef5e7f48e1f9fd4f0c4a1ba4bf1ccf6a2 (diff) |
[lazy] declare closed-over fields non-final for once-only fns
-rw-r--r-- | src/jvm/clojure/lang/Compiler.java | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java index 4e75daff..cf03280e 100644 --- a/src/jvm/clojure/lang/Compiler.java +++ b/src/jvm/clojure/lang/Compiler.java @@ -3047,7 +3047,8 @@ static public class FnExpr implements Expr{ //static fields for constants for(int i = 0; i < constants.count(); i++) { - cv.visitField(ACC_PUBLIC + ACC_FINAL + ACC_STATIC, constantName(i), constantType(i).getDescriptor(), + cv.visitField(ACC_PUBLIC + ACC_FINAL + + ACC_STATIC, constantName(i), constantType(i).getDescriptor(), null, null); } @@ -3092,10 +3093,12 @@ static public class FnExpr implements Expr{ { LocalBinding lb = (LocalBinding) s.first(); if(lb.getPrimitiveType() != null) - cv.visitField(ACC_PUBLIC + ACC_FINAL, lb.name, Type.getType(lb.getPrimitiveType()).getDescriptor(), + cv.visitField(ACC_PUBLIC + ACC_FINAL + , lb.name, Type.getType(lb.getPrimitiveType()).getDescriptor(), null, null); else - cv.visitField(ACC_PUBLIC + ACC_FINAL, lb.name, OBJECT_TYPE.getDescriptor(), null, null); + cv.visitField(ACC_PUBLIC + (onceOnly ? 0 : ACC_FINAL) + , lb.name, OBJECT_TYPE.getDescriptor(), null, null); } //ctor that takes closed-overs and inits base + fields // Method m = new Method("<init>", Type.VOID_TYPE, ARG_TYPES[closes.count()]); |