summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/boot.clj7
-rw-r--r--src/jvm/clojure/lang/RT.java50
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);