diff options
-rw-r--r-- | src/boot.clj | 7 | ||||
-rw-r--r-- | src/jvm/clojure/lang/RT.java | 50 |
2 files changed, 36 insertions, 21 deletions
diff --git a/src/boot.clj b/src/boot.clj index 47f1cd18..2ec96fd8 100644 --- a/src/boot.clj +++ b/src/boot.clj @@ -6,6 +6,8 @@ ; the terms of this license. ; You must not remove this notice, or any other, from this software. +(in-namespace "clojure") + (def list (fn [& args] args)) (def cons (fn [x seq] (. RT (cons x seq)))) (def conj (fn [coll x] (. RT (conj coll x)))) @@ -480,8 +482,7 @@ (defn refer-to [export-map] (= *refers* (conj *refers* export-map))) -(defn in-namespace [ns] - (= *current-namespace* ns)) + (defn make-export-map [var-syms] (loop [ret {} @@ -495,7 +496,7 @@ (def *exports* (make-export-map - `( + `( load-file eql-ref? list cons conj defn vector hash-map sorted-map sorted-map-by meta with-meta defmacro when when-not diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java index 09776225..2d277fc3 100644 --- a/src/jvm/clojure/lang/RT.java +++ b/src/jvm/clojure/lang/RT.java @@ -27,28 +27,13 @@ final static Keyword TAG_KEY = Keyword.intern("clojure", "tag"); // Module.findOrCreateModule("clojure/user")); final static Symbol LOAD_FILE = Symbol.create("clojure", "load-file"); +final static Symbol IN_NAMESPACE = Symbol.create("clojure", "in-namespace"); +final static Symbol EXPORTS = Symbol.create("clojure", "*exports*"); +final static Var EXPORTS_VAR = Var.intern(EXPORTS,PersistentHashMap.EMPTY); final static Symbol EQL_REF = Symbol.create("clojure", "eql-ref?"); //string final static Var CURRENT_NS = Var.intern(Symbol.create("clojure", "*current-namespace*"), "clojure"); -//simple-symbol->var -final static Var REFERS = - Var.intern(Symbol.create("clojure", "*refers*"), - map( - LOAD_FILE, Var.intern(LOAD_FILE, - new AFn(){ - public Object invoke(Object arg1) throws Exception{ - return Compiler.loadFile((String) arg1); - } - }), - EQL_REF, Var.intern(EQL_REF, - new AFn(){ - public Object invoke(Object arg1, Object arg2) - throws Exception{ - return arg1 == arg2 ? RT.T : null; - } - }) - )); //simple-symbol->fully-qualified-class-name-string final static Var IMPORTS = Var.intern(Symbol.create("clojure", "*imports*"), map(Symbol.create("RT"), "clojure.lang.RT", @@ -122,6 +107,35 @@ final static Var IMPORTS = Var.intern(Symbol.create("clojure", "*imports*"), Symbol.create("SortedSet"), "java.util.SortedSet" )); +//simple-symbol->var +final static Var REFERS = + Var.intern(Symbol.create("clojure", "*refers*"), + map( + IN_NAMESPACE, Var.intern(IN_NAMESPACE, + new AFn(){ + public Object invoke(Object arg1) throws Exception{ + String ns = (String) arg1; + CURRENT_NS.set(ns); + Var.intern(Symbol.intern(ns, "*refers*"), EXPORTS_VAR.get()); + Var.intern(Symbol.intern(ns, "*imports*"), IMPORTS.get()); + return RT.T; + } + }), + LOAD_FILE, Var.intern(LOAD_FILE, + new AFn(){ + public Object invoke(Object arg1) throws Exception{ + return Compiler.loadFile((String) arg1); + } + }), + EQL_REF, Var.intern(EQL_REF, + new AFn(){ + public Object invoke(Object arg1, Object arg2) + throws Exception{ + return arg1 == arg2 ? RT.T : null; + } + }) + )); + static public final Object[] EMPTY_ARRAY = new Object[]{}; //static public final Character[] chars; static AtomicInteger id = new AtomicInteger(1); |