summaryrefslogtreecommitdiff
path: root/src/jvm/clojure
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2008-02-18 17:05:31 +0000
committerRich Hickey <richhickey@gmail.com>2008-02-18 17:05:31 +0000
commit036257426ba2886995ef7b714533ce0734433b3a (patch)
tree3af10cc87de22756acdc347e0bc4e733bd4f0092 /src/jvm/clojure
parent877cddc5e7ea1f075fbf816837a7b54a4124de1c (diff)
command line args can follow '--', in Repl and Script
Diffstat (limited to 'src/jvm/clojure')
-rw-r--r--src/jvm/clojure/lang/RT.java39
-rw-r--r--src/jvm/clojure/lang/Repl.java9
-rw-r--r--src/jvm/clojure/lang/Script.java5
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);