diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-03-12 18:28:44 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-03-12 18:28:44 +0000 |
commit | 6c695a0c02ab8f0997d185ad49757b640ccc86ca (patch) | |
tree | 864b4cc7f226968cf7b66de237b96f863fda59aa /src/jvm/clojure | |
parent | 842e6716e26fb070feeb8654a60128dbe99a538b (diff) |
prevent nested #()s, dump input stream on repl exception, put cause message first
Diffstat (limited to 'src/jvm/clojure')
-rw-r--r-- | src/jvm/clojure/lang/LispReader.java | 2 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Repl.java | 14 |
2 files changed, 11 insertions, 5 deletions
diff --git a/src/jvm/clojure/lang/LispReader.java b/src/jvm/clojure/lang/LispReader.java index 2a4b647b..32d1af56 100644 --- a/src/jvm/clojure/lang/LispReader.java +++ b/src/jvm/clojure/lang/LispReader.java @@ -387,6 +387,8 @@ static Symbol garg(int n){ static class FnReader extends AFn{
public Object invoke(Object reader, Object lparen) throws Exception{
PushbackReader r = (PushbackReader) reader;
+ if(ARG_ENV.get() != null)
+ throw new IllegalStateException("Nested #()s are not allowed");
try
{
Var.pushThreadBindings(
diff --git a/src/jvm/clojure/lang/Repl.java b/src/jvm/clojure/lang/Repl.java index a00a9080..16ddc01e 100644 --- a/src/jvm/clojure/lang/Repl.java +++ b/src/jvm/clojure/lang/Repl.java @@ -41,11 +41,9 @@ public static void main(String[] args) throws Exception{ { Var.pushThreadBindings( RT.map( -// RT.NS_REFERS, RT.NS_REFERS.get(), -// RT.NS_IMPORTS, RT.NS_IMPORTS.get(), -RT.CURRENT_NS, RT.CURRENT_NS.get(), -RT.WARN_ON_REFLECTION, RT.WARN_ON_REFLECTION.get(), -Compiler.SOURCE, "REPL" + RT.CURRENT_NS, RT.CURRENT_NS.get(), + RT.WARN_ON_REFLECTION, RT.WARN_ON_REFLECTION.get(), + Compiler.SOURCE, "REPL" )); w.write("Clojure\n"); RT.inNamespace.invoke(Symbol.create("user")); @@ -68,6 +66,12 @@ Compiler.SOURCE, "REPL" } catch(Throwable e) { + while(rdr.ready()) + rdr.read(); + Throwable c = e; + while(c.getCause() != null) + c = c.getCause(); + System.err.println(c); e.printStackTrace(); } finally |