diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-07-17 10:56:16 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-07-17 10:56:16 +0000 |
commit | 603ea94af6d4b5ab4597ebd3fdae5b56dc6a3330 (patch) | |
tree | d10d8f6a10cba1d90813059056121d47131bc3bd | |
parent | 2fdc872da1d177cbf63765a638112e0e4f6458c6 (diff) |
wrapped all non-atomic evals in fn
-rw-r--r-- | src/jvm/clojure/lang/Compiler.java | 13 |
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 { |