summaryrefslogtreecommitdiff
path: root/src/jvm/clojure/lang/Repl.java
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2008-12-29 19:40:17 +0000
committerRich Hickey <richhickey@gmail.com>2008-12-29 19:40:17 +0000
commit49063a9bba42d14f83474802b3240f13e75bcb36 (patch)
tree0a1fb640c7d29169df84c86bed9b22bfa641d437 /src/jvm/clojure/lang/Repl.java
parentdb598ed1a8d2105f552e1dcdaf2b37b781f015e0 (diff)
unified clojure.main, patch from Stephen C. Gilardi
Diffstat (limited to 'src/jvm/clojure/lang/Repl.java')
-rw-r--r--src/jvm/clojure/lang/Repl.java106
1 files changed, 3 insertions, 103 deletions
diff --git a/src/jvm/clojure/lang/Repl.java b/src/jvm/clojure/lang/Repl.java
index 4a9153b2..9abe82aa 100644
--- a/src/jvm/clojure/lang/Repl.java
+++ b/src/jvm/clojure/lang/Repl.java
@@ -12,111 +12,11 @@
package clojure.lang;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
+import clojure.main;
-public class Repl{
-static final Symbol USER = Symbol.create("user");
-static final Symbol CLOJURE = Symbol.create("clojure.core");
-
-static final Var in_ns = RT.var("clojure.core", "in-ns");
-static final Var refer = RT.var("clojure.core", "refer");
-static final Var ns = RT.var("clojure.core", "*ns*");
-static final Var compile_path = RT.var("clojure.core", "*compile-path*");
-static final Var warn_on_reflection = RT.var("clojure.core", "*warn-on-reflection*");
-static final Var print_meta = RT.var("clojure.core", "*print-meta*");
-static final Var print_length = RT.var("clojure.core", "*print-length*");
-static final Var print_level = RT.var("clojure.core", "*print-level*");
-static final Var star1 = RT.var("clojure.core", "*1");
-static final Var star2 = RT.var("clojure.core", "*2");
-static final Var star3 = RT.var("clojure.core", "*3");
-static final Var stare = RT.var("clojure.core", "*e");
+class Repl {
public static void main(String[] args) throws Exception{
-
-// RT.init();
-
- try
- {
- //*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(),
- print_meta, print_meta.get(),
- print_length, print_length.get(),
- print_level, print_level.get(),
- compile_path, "classes",
- star1, null,
- star2, null,
- star3, null,
- stare, null));
-
- //create and move into the user namespace
- in_ns.invoke(USER);
- refer.invoke(CLOJURE);
-
- //load any supplied files
- for(String file : RT.processCommandLine(args))
- try
- {
- Compiler.loadFile(file);
- }
- catch(Exception e)
- {
- e.printStackTrace((PrintWriter) RT.ERR.get());
- }
-
- //repl IO support
- LineNumberingPushbackReader rdr = new LineNumberingPushbackReader(new InputStreamReader(System.in, RT.UTF8));
- OutputStreamWriter w = (OutputStreamWriter) RT.OUT.get();//new OutputStreamWriter(System.out);
- Object EOF = new Object();
-
- //start the loop
- w.write("Clojure\n");
- for(; ;)
- {
- try
- {
- w.write(Compiler.currentNS().name + "=> ");
- w.flush();
- Object r = LispReader.read(rdr, false, EOF, false);
- if(r == EOF)
- {
- w.write("\n");
- w.flush();
- break;
- }
- Object ret = Compiler.eval(r);
- 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();
- ((PrintWriter) RT.ERR.get()).println(e instanceof Compiler.CompilerException ? e : c);
- stare.set(e);
- }
- }
- }
- catch(Exception e)
- {
- e.printStackTrace((PrintWriter) RT.ERR.get());
- }
- finally
- {
- Var.popThreadBindings();
- }
- System.exit(0);
+ main.legacy_repl(args);
}
-
}