summaryrefslogtreecommitdiff
path: root/src/jvm/clojure/lang/Repl.java
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2008-09-19 00:35:50 +0000
committerRich Hickey <richhickey@gmail.com>2008-09-19 00:35:50 +0000
commit0f5bd2ae6cb5471fa8c174f28d707c191a98d8c1 (patch)
tree47135f15131733c07e7e2a07285c81d208e97577 /src/jvm/clojure/lang/Repl.java
parent9bc5b30329913113c8a8310260b2c8d17cb0e0e3 (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.java18
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);
}
}
}