diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-09-19 00:35:50 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-09-19 00:35:50 +0000 |
commit | 0f5bd2ae6cb5471fa8c174f28d707c191a98d8c1 (patch) | |
tree | 47135f15131733c07e7e2a07285c81d208e97577 /src/jvm/clojure/lang/Repl.java | |
parent | 9bc5b30329913113c8a8310260b2c8d17cb0e0e3 (diff) |
added *1/2/3 *e and tweaked error messages
Diffstat (limited to 'src/jvm/clojure/lang/Repl.java')
-rw-r--r-- | src/jvm/clojure/lang/Repl.java | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/jvm/clojure/lang/Repl.java b/src/jvm/clojure/lang/Repl.java index c91ed4b3..5ad59bbc 100644 --- a/src/jvm/clojure/lang/Repl.java +++ b/src/jvm/clojure/lang/Repl.java @@ -23,6 +23,10 @@ static final Var in_ns = RT.var("clojure", "in-ns"); static final Var refer = RT.var("clojure", "refer"); static final Var ns = RT.var("clojure", "*ns*"); static final Var warn_on_reflection = RT.var("clojure", "*warn-on-reflection*"); +static final Var star1 = RT.var("clojure", "*1"); +static final Var star2 = RT.var("clojure", "*2"); +static final Var star3 = RT.var("clojure", "*3"); +static final Var stare = RT.var("clojure", "*e"); public static void main(String[] args) throws Exception{ @@ -32,10 +36,15 @@ public static void main(String[] args) throws Exception{ { //*ns* must be thread-bound for in-ns to work //thread-bind *warn-on-reflection* so it can be set! + //thread-bind *1,*2,*3,*e so each repl has its own history //must have corresponding popThreadBindings in finally clause Var.pushThreadBindings( RT.map(ns, ns.get(), - warn_on_reflection, warn_on_reflection.get())); + warn_on_reflection, warn_on_reflection.get(), + star1, null, + star2, null, + star3, null, + stare, null)); //create and move into the user namespace in_ns.invoke(USER); @@ -76,14 +85,17 @@ public static void main(String[] args) throws Exception{ RT.print(ret, w); w.write('\n'); //w.flush(); + star3.set(star2.get()); + star2.set(star1.get()); + star1.set(ret); } catch(Throwable e) { Throwable c = e; while(c.getCause() != null) c = c.getCause(); - System.err.println(c); - e.printStackTrace(); + System.err.println(e instanceof Compiler.CompilerException ? e : c); + stare.set(e); } } } |