summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2008-01-04 13:51:10 +0000
committerRich Hickey <richhickey@gmail.com>2008-01-04 13:51:10 +0000
commit5fe4b82a893cc8b6479dbd1924d387dc9be527d7 (patch)
treea886e54a29b554b81a7d49cd618e7c5d0d583adc
parent84c68138fb9573f7248586a7b85964538646f684 (diff)
eval creates loader if needed
-rw-r--r--src/jvm/clojure/lang/Compiler.java18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java
index eb7bcca2..f046e116 100644
--- a/src/jvm/clojure/lang/Compiler.java
+++ b/src/jvm/clojure/lang/Compiler.java
@@ -2947,8 +2947,22 @@ private static Expr analyzeSeq(C context, ISeq form, String name) throws Excepti
}
public static Object eval(Object form) throws Exception{
- Expr expr = analyze(C.EVAL, form);
- return expr.eval();
+ boolean createdLoader = false;
+ try
+ {
+ if(!LOADER.isBound())
+ {
+ Var.pushThreadBindings(RT.map(LOADER, new DynamicClassLoader()));
+ createdLoader = true;
+ }
+ Expr expr = analyze(C.EVAL, form);
+ return expr.eval();
+ }
+ finally
+ {
+ if(createdLoader)
+ Var.popThreadBindings();
+ }
}
private static KeywordExpr registerKeyword(Keyword keyword){