summaryrefslogtreecommitdiff
path: root/src/jvm/clojure
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2008-01-24 14:58:21 +0000
committerRich Hickey <richhickey@gmail.com>2008-01-24 14:58:21 +0000
commitbba289e42620408d912de604cbd75b78de74b628 (patch)
tree38a32097c93cfb1b195b4ba3e3aa7e2c7cc65845 /src/jvm/clojure
parent44f0b51091dbe7d43aafb0932359f0b460f75018 (diff)
interim checkin, do not use
Diffstat (limited to 'src/jvm/clojure')
-rw-r--r--src/jvm/clojure/lang/Compiler.java11
-rw-r--r--src/jvm/clojure/lang/Var.java14
2 files changed, 20 insertions, 5 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java
index 506acdeb..9fd9d46b 100644
--- a/src/jvm/clojure/lang/Compiler.java
+++ b/src/jvm/clojure/lang/Compiler.java
@@ -2290,8 +2290,8 @@ static class FnExpr implements Expr{
int line;
final static Method kwintern = Method.getMethod("clojure.lang.Keyword intern(String, String)");
- final static Method symcreate = Method.getMethod("clojure.lang.Symbol create(String, String)");
- final static Method varintern = Method.getMethod("clojure.lang.Var intern(clojure.lang.Symbol)");
+ final static Method symcreate = Method.getMethod("clojure.lang.Symbol create(String)");
+ final static Method varintern = Method.getMethod("clojure.lang.Var intern(clojure.lang.Symbol, clojure.lang.Symbol)");
final static Method afnctor = Method.getMethod("void <init>()");
final static Method restfnctor = Method.getMethod("void <init>(int)");
final static Type aFnType = Type.getType(AFn.class);
@@ -2427,7 +2427,8 @@ static class FnExpr implements Expr{
for(ISeq s = RT.keys(vars); s != null; s = s.rest())
{
Var v = (Var) s.first();
- clinitgen.push(v.sym.ns);
+ clinitgen.push(v.ns.name.name);
+ clinitgen.invokeStatic(SYMBOL_TYPE, symcreate);
clinitgen.push(v.sym.name);
clinitgen.invokeStatic(SYMBOL_TYPE, symcreate);
clinitgen.invokeStatic(VAR_TYPE, varintern);
@@ -3127,7 +3128,7 @@ static Var lookupVar(Symbol sym, boolean internNew) throws Exception{
Namespace ns = Namespace.find(Symbol.create(sym.ns));
if(ns == null)
throw new Exception("No such namespace: " + sym.ns);
- var = ns.findInternedVar(sym);
+ var = ns.findInternedVar(Symbol.create(sym.name));
}
else
{
@@ -3144,7 +3145,7 @@ static Var lookupVar(Symbol sym, boolean internNew) throws Exception{
}
else
{
- throw new Exception("Expecting var, " + sym + " is mapped to " + o.getClass());
+ throw new Exception("Expecting var, but " + sym + " is mapped to " + o);
}
}
if(var != null)
diff --git a/src/jvm/clojure/lang/Var.java b/src/jvm/clojure/lang/Var.java
index 828c45ab..34ce3b8b 100644
--- a/src/jvm/clojure/lang/Var.java
+++ b/src/jvm/clojure/lang/Var.java
@@ -67,6 +67,20 @@ public String toString(){
return "#<Var: " + (ns!=null?(ns.name + "/"):"") + (sym != null ? sym.toString() : "--unnamed--") + ">";
}
+public static Var find(Symbol nsQualifiedSym){
+ if(nsQualifiedSym.ns == null)
+ throw new IllegalArgumentException("Symbol must be namespace-qualified");
+ Namespace ns = Namespace.find(Symbol.create(nsQualifiedSym.ns));
+ if(ns == null)
+ throw new IllegalArgumentException("No such namespace: " + nsQualifiedSym.ns);
+ return ns.findInternedVar(Symbol.create(nsQualifiedSym.name));
+}
+
+public static Var intern(Symbol nsName, Symbol sym){
+ Namespace ns = Namespace.findOrCreate(nsName);
+ return intern(ns,sym);
+}
+
public static Var intern(Namespace ns, Symbol sym){
return ns.intern(sym);
}