diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-02-18 17:05:31 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-02-18 17:05:31 +0000 |
commit | 036257426ba2886995ef7b714533ce0734433b3a (patch) | |
tree | 3af10cc87de22756acdc347e0bc4e733bd4f0092 /src/jvm/clojure | |
parent | 877cddc5e7ea1f075fbf816837a7b54a4124de1c (diff) |
command line args can follow '--', in Repl and Script
Diffstat (limited to 'src/jvm/clojure')
-rw-r--r-- | src/jvm/clojure/lang/RT.java | 39 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Repl.java | 9 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Script.java | 5 |
3 files changed, 34 insertions, 19 deletions
diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java index 86e225dc..af981c52 100644 --- a/src/jvm/clojure/lang/RT.java +++ b/src/jvm/clojure/lang/RT.java @@ -118,11 +118,11 @@ static Keyword FILE_KEY = Keyword.intern(null, "file"); final static Symbol LOAD_FILE = Symbol.create("load-file"); final static Symbol IN_NAMESPACE = Symbol.create("in-ns"); -final static Symbol EXPORTS = Symbol.create("*exports*"); -final static Var EXPORTS_VAR = Var.intern(CLOJURE_NS, EXPORTS, PersistentHashMap.EMPTY); +//final static Symbol EXPORTS = Symbol.create("*exports*"); +//final static Var EXPORTS_VAR = Var.intern(CLOJURE_NS, EXPORTS, PersistentHashMap.EMPTY); //final static Symbol EQL_REF = Symbol.create("eql-ref?"); static final Symbol IDENTICAL = Symbol.create("identical?"); - +final static Var CMD_LINE_ARGS = Var.intern(CLOJURE_NS, Symbol.create("*command-line-args*"), null); //symbol final static Var CURRENT_NS = Var.intern(CLOJURE_NS, Symbol.create("*ns*"), CLOJURE_NS); @@ -150,6 +150,17 @@ final static IFn inNamespace = new AFn(){ return ns; } }; + +public static List<String> processCommandLine(String[] args){ + List<String> arglist = Arrays.asList(args); + int split = arglist.indexOf("--"); + if(split >= 0) + { + CMD_LINE_ARGS.bindRoot(RT.seq(arglist.subList(split + 1, args.length))); + return arglist.subList(0, split); + } + return arglist; +} //simple-symbol->var //final static Var REFERS = // Var.intern(CLOJURE_NS, Symbol.create("*refers*"), @@ -213,16 +224,16 @@ static static public void init() throws Exception{ try - { - Var.pushThreadBindings(RT.map(Compiler.SOURCE_PATH, "boot.clj", - Compiler.SOURCE, "boot.clj")); - InputStream ins = RT.class.getResourceAsStream("/boot.clj"); - Compiler.load(new InputStreamReader(ins)); - } - finally - { - Var.popThreadBindings(); - } + { + Var.pushThreadBindings(RT.map(Compiler.SOURCE_PATH, "boot.clj", + Compiler.SOURCE, "boot.clj")); + InputStream ins = RT.class.getResourceAsStream("/boot.clj"); + Compiler.load(new InputStreamReader(ins)); + } + finally + { + Var.popThreadBindings(); + } } static public int nextID(){ @@ -497,7 +508,7 @@ static public Object nth(Object coll, int n){ else if(coll instanceof List) return ((List) coll).get(n); else if(coll instanceof Matcher) - return ((Matcher)coll).group(n); + return ((Matcher) coll).group(n); else if(coll instanceof Map.Entry) { Map.Entry e = (Map.Entry) coll; diff --git a/src/jvm/clojure/lang/Repl.java b/src/jvm/clojure/lang/Repl.java index b439f57e..a00a9080 100644 --- a/src/jvm/clojure/lang/Repl.java +++ b/src/jvm/clojure/lang/Repl.java @@ -19,9 +19,10 @@ public class Repl{ static final Symbol REFER = Symbol.create("clojure", "refer"); static final Symbol QUOTE = Symbol.create("quote"); static final Symbol CLOJURE = Symbol.create("clojure"); + public static void main(String[] args) throws Exception{ RT.init(); - for(String file : args) + for(String file : RT.processCommandLine(args)) try { Compiler.loadFile(file); @@ -42,9 +43,9 @@ public static void main(String[] args) throws Exception{ 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")); diff --git a/src/jvm/clojure/lang/Script.java b/src/jvm/clojure/lang/Script.java index 2e9a9003..30ee9bc0 100644 --- a/src/jvm/clojure/lang/Script.java +++ b/src/jvm/clojure/lang/Script.java @@ -14,13 +14,16 @@ package clojure.lang; import java.io.OutputStreamWriter; import java.io.IOException; +import java.util.List; +import java.util.Arrays; public class Script{ public static void main(String[] args) throws Exception{ RT.init(); - for(String file : args) + + for(String file : RT.processCommandLine(args)) try { Compiler.loadFile(file); |