summaryrefslogtreecommitdiff
path: root/src/jvm/clojure
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2008-01-25 23:10:39 +0000
committerRich Hickey <richhickey@gmail.com>2008-01-25 23:10:39 +0000
commit2fd70293876dc3713cb9deb1c3e1f237336c6b62 (patch)
tree799777f31e9d425c8b363f2f3cef6e2fbe2a8f76 /src/jvm/clojure
parent8da00aca0e47b20cd7c50e29d42ed6a58e9a7a62 (diff)
interim checkin - do not use
Diffstat (limited to 'src/jvm/clojure')
-rw-r--r--src/jvm/clojure/lang/Compiler.java6
-rw-r--r--src/jvm/clojure/lang/Namespace.java21
-rw-r--r--src/jvm/clojure/lang/RT.java4
-rw-r--r--src/jvm/clojure/lang/Repl.java5
-rw-r--r--src/jvm/clojure/lang/Var.java4
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){