summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2008-07-17 10:56:16 +0000
committerRich Hickey <richhickey@gmail.com>2008-07-17 10:56:16 +0000
commit603ea94af6d4b5ab4597ebd3fdae5b56dc6a3330 (patch)
treed10d8f6a10cba1d90813059056121d47131bc3bd
parent2fdc872da1d177cbf63765a638112e0e4f6458c6 (diff)
wrapped all non-atomic evals in fn
-rw-r--r--src/jvm/clojure/lang/Compiler.java13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java
index cc81405c..d8b4ec9b 100644
--- a/src/jvm/clojure/lang/Compiler.java
+++ b/src/jvm/clojure/lang/Compiler.java
@@ -3816,8 +3816,17 @@ public static Object eval(Object form) throws Exception{
}
try
{
- Expr expr = analyze(C.EVAL, form);
- return expr.eval();
+ if(form instanceof IPersistentCollection)
+ {
+ FnExpr fexpr = (FnExpr) analyze(C.EXPRESSION, RT.list(FN, PersistentVector.EMPTY, form), "repl");
+ IFn fn = (IFn) fexpr.eval();
+ return fn.invoke();
+ }
+ else
+ {
+ Expr expr = analyze(C.EVAL, form);
+ return expr.eval();
+ }
}
finally
{