diff options
author | Rich Hickey <richhickey@gmail.com> | 2007-10-18 15:25:37 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2007-10-18 15:25:37 +0000 |
commit | 87fe051f497dde0a8641689cf18928bffcf329dd (patch) | |
tree | b900b59912a32badca3e5d5dbe11f1774b267f51 /src/jvm/clojure/lang/Repl.java | |
parent | b9ccb2c49232b90766c12d104364b51f15ad596b (diff) |
added Repl and Script
Diffstat (limited to 'src/jvm/clojure/lang/Repl.java')
-rw-r--r-- | src/jvm/clojure/lang/Repl.java | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/src/jvm/clojure/lang/Repl.java b/src/jvm/clojure/lang/Repl.java new file mode 100644 index 00000000..e3de82d5 --- /dev/null +++ b/src/jvm/clojure/lang/Repl.java @@ -0,0 +1,83 @@ +/** + * Copyright (c) Rich Hickey. All rights reserved. + * The use and distribution terms for this software are covered by the + * Common Public License 1.0 (http://opensource.org/licenses/cpl.php) + * which can be found in the file CPL.TXT at the root of this distribution. + * By using this software in any fashion, you are agreeing to be bound by + * the terms of this license. + * You must not remove this notice, or any other, from this software. + **/ + +/* rich Oct 18, 2007 */ + +package clojure.lang; + +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; + +public class Repl{ +public static void main(String[] args){ + + for(String file : args) + try + { + Compiler.loadFile(file); + } + catch(Exception e) + { + e.printStackTrace(); + } + + //repl + LineNumberingPushbackReader rdr = new LineNumberingPushbackReader(new InputStreamReader(System.in)); + OutputStreamWriter w = (OutputStreamWriter) RT.OUT.get();//new OutputStreamWriter(System.out); + + Object EOF = new Object(); + try + { + Var.pushThreadBindings( + RT.map(RT.NS_REFERS, RT.NS_REFERS.get(), + RT.NS_IMPORTS, RT.NS_IMPORTS.get(), + RT.CURRENT_NS_SYM, RT.CURRENT_NS_SYM.get(), + Compiler.SOURCE, "REPL" + )); + w.write("Clojure\n"); + RT.inNamespace.invoke(Symbol.create("user")); + + for(; ;) + { + try + { + Var.pushThreadBindings( + RT.map(Compiler.LOADER, new DynamicClassLoader())); + w.write(Compiler.currentNS().name + "=> "); + w.flush(); + Object r = LispReader.read(rdr, false, EOF, false); + if(r == EOF) + break; + Object ret = Compiler.eval(r); + RT.print(ret, w); + w.write('\n'); + //w.flush(); + } + catch(Throwable e) + { + e.printStackTrace(); + } + finally + { + Var.popThreadBindings(); + } + } + } + catch(Exception e) + { + e.printStackTrace(); + } + finally + { + Var.popThreadBindings(); + } +} + +} |