diff options
author | Rich Hickey <richhickey@gmail.com> | 2009-10-24 10:04:37 -0400 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2009-10-24 10:04:37 -0400 |
commit | 893a0e5601b207bfe852421e394322c64fdcad48 (patch) | |
tree | 28aefdeb64651d415d62abfefb384bc3683e56ef /src | |
parent | c0218cfc80ba9ae4c1808e8f5644e14c464a5268 (diff) |
load generated classes on compile, move to shared dynamic classloader for entire file load
Diffstat (limited to 'src')
-rw-r--r-- | src/jvm/clojure/lang/Compiler.java | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java index c5c9f922..a8354d8f 100644 --- a/src/jvm/clojure/lang/Compiler.java +++ b/src/jvm/clojure/lang/Compiler.java @@ -2686,6 +2686,8 @@ static public class FnExpr extends ObjExpr{ Var.popThreadBindings(); } fn.compile(fn.isVariadic() ? "clojure/lang/RestFn" : "clojure/lang/AFunction",null,fn.onceOnly); + fn.getCompiledClass(); + return fn; } @@ -3192,7 +3194,7 @@ static public class ObjExpr implements Expr{ public void emit(C context, ObjExpr objx, GeneratorAdapter gen){ //emitting a Fn means constructing an instance, feeding closed-overs from enclosing scope, if any //objx arg is enclosing objx, not this - getCompiledClass(); +// getCompiledClass(); gen.newInstance(objtype); gen.dup(); for(ISeq s = RT.keys(closes); s != null; s = s.next()) @@ -4375,8 +4377,12 @@ static String errorMsg(String source, int line, String s){ } public static Object eval(Object form) throws Exception{ + return eval(form, true); +} + +public static Object eval(Object form, boolean freshLoader) throws Exception{ boolean createdLoader = false; - if(true)//!LOADER.isBound()) + if(freshLoader)//!LOADER.isBound()) { Var.pushThreadBindings(RT.map(LOADER, RT.makeClassLoader())); createdLoader = true; @@ -4733,7 +4739,7 @@ public static Object load(Reader rdr, String sourcePath, String sourceName) thro r = LispReader.read(pushbackReader, false, EOF, false)) { LINE_AFTER.set(pushbackReader.getLineNumber()); - ret = eval(r); + ret = eval(r,false); LINE_BEFORE.set(pushbackReader.getLineNumber()); } } @@ -5016,6 +5022,7 @@ static public class NewInstanceExpr extends ObjExpr{ for(int i=0;i<icnt;i++) inames[i] = slashname((Class) RT.nth(RT.next(superAndInterfaces), i)); ret.compile(slashname(superClass),inames,false); + ret.getCompiledClass(); return ret; } |