diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-01-25 23:10:39 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-01-25 23:10:39 +0000 |
commit | 2fd70293876dc3713cb9deb1c3e1f237336c6b62 (patch) | |
tree | 799777f31e9d425c8b363f2f3cef6e2fbe2a8f76 /src/jvm/clojure | |
parent | 8da00aca0e47b20cd7c50e29d42ed6a58e9a7a62 (diff) |
interim checkin - do not use
Diffstat (limited to 'src/jvm/clojure')
-rw-r--r-- | src/jvm/clojure/lang/Compiler.java | 6 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Namespace.java | 21 | ||||
-rw-r--r-- | src/jvm/clojure/lang/RT.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Repl.java | 5 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Var.java | 4 |
5 files changed, 34 insertions, 6 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java index 7855a281..aa20ce65 100644 --- a/src/jvm/clojure/lang/Compiler.java +++ b/src/jvm/clojure/lang/Compiler.java @@ -3158,6 +3158,10 @@ private static Expr analyzeSymbol(Symbol sym) throws Exception{ } static Object resolve(Symbol sym) throws Exception{ + return resolveIn(currentNS(), sym); +} + +static public Object resolveIn(Namespace n, Symbol sym) throws Exception{ //note - ns-qualified vars must already exist if(sym.ns != null) { @@ -3177,7 +3181,7 @@ static Object resolve(Symbol sym) throws Exception{ } else { - Object o = currentNS().getMapping(sym); + Object o = n.getMapping(sym); if(o == null) throw new Exception("Unable to resolve symbol: " + sym + " in this context"); return o; diff --git a/src/jvm/clojure/lang/Namespace.java b/src/jvm/clojure/lang/Namespace.java index 8893b9e9..58da4da7 100644 --- a/src/jvm/clojure/lang/Namespace.java +++ b/src/jvm/clojure/lang/Namespace.java @@ -15,17 +15,29 @@ package clojure.lang; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicReference; -public class Namespace{ +public class Namespace { final public Symbol name; final AtomicReference<IPersistentMap> mappings = new AtomicReference<IPersistentMap>(); final static ConcurrentHashMap<Symbol, Namespace> namespaces = new ConcurrentHashMap<Symbol, Namespace>(); +public String toString() { + return "#<Namespace: " + name + ">"; +} + Namespace(Symbol name){ this.name = name; mappings.set(RT.DEFAULT_IMPORTS); } +public static ISeq all(){ + return RT.seq(namespaces.values()); +} + +public Symbol getName(){ + return name; +} + public IPersistentMap getMappings(){ return mappings.get(); } @@ -104,6 +116,12 @@ public static Namespace findOrCreate(Symbol name){ return ns == null ? newns : ns; } +public static Namespace remove(Symbol name){ + if(name.equals(RT.CLOJURE_NS.name)) + throw new IllegalAccessError("Cannot remove clojure namespace"); + return namespaces.remove(name); +} + public static Namespace find(Symbol name){ return namespaces.get(name); } @@ -118,4 +136,5 @@ public Var findInternedVar(Symbol symbol){ return (Var) o; return null; } + } diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java index aa09bd9e..4edfc3bd 100644 --- a/src/jvm/clojure/lang/RT.java +++ b/src/jvm/clojure/lang/RT.java @@ -110,14 +110,14 @@ final static Keyword AGENT_KEY = Keyword.intern("clojure", "agent"); // Module.findOrCreateModule("clojure/user")); final static Symbol LOAD_FILE = Symbol.create("load-file"); -final static Symbol IN_NAMESPACE = Symbol.create("in-namespace"); +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 EQL_REF = Symbol.create("eql-ref?"); static final Symbol IDENTICAL = Symbol.create("identical?"); //symbol -final static Var CURRENT_NS = Var.intern(CLOJURE_NS, Symbol.create("*current-namespace*"), +final static Var CURRENT_NS = Var.intern(CLOJURE_NS, Symbol.create("*ns*"), CLOJURE_NS); final static Var PRINT_META = Var.intern(CLOJURE_NS, Symbol.create("*print-meta*"), F); diff --git a/src/jvm/clojure/lang/Repl.java b/src/jvm/clojure/lang/Repl.java index 95a2067c..26273e87 100644 --- a/src/jvm/clojure/lang/Repl.java +++ b/src/jvm/clojure/lang/Repl.java @@ -16,6 +16,9 @@ import java.io.InputStreamReader; import java.io.OutputStreamWriter; 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){ for(String file : args) @@ -45,7 +48,7 @@ public static void main(String[] args){ )); w.write("Clojure\n"); RT.inNamespace.invoke(Symbol.create("user")); - + Compiler.eval(RT.list(REFER, RT.list(QUOTE, CLOJURE))); for(; ;) { try diff --git a/src/jvm/clojure/lang/Var.java b/src/jvm/clojure/lang/Var.java index 827ed5fc..25c67e94 100644 --- a/src/jvm/clojure/lang/Var.java +++ b/src/jvm/clojure/lang/Var.java @@ -65,7 +65,9 @@ public static Var intern(Namespace ns, Symbol sym, Object root, boolean replaceR public String toString(){ - return "#<Var: " + (ns != null ? (ns.name + "/") : "") + (sym != null ? sym.toString() : "--unnamed--") + ">"; + return "#<Var: " + (ns != null ? (ns.name + "/") : "") + + (sym != null ? sym.toString() : "--unnamed--") + + (exported?" (exported)":"") + ">"; } public static Var find(Symbol nsQualifiedSym){ |