diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-01-24 14:58:21 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-01-24 14:58:21 +0000 |
commit | bba289e42620408d912de604cbd75b78de74b628 (patch) | |
tree | 38a32097c93cfb1b195b4ba3e3aa7e2c7cc65845 /src/jvm/clojure | |
parent | 44f0b51091dbe7d43aafb0932359f0b460f75018 (diff) |
interim checkin, do not use
Diffstat (limited to 'src/jvm/clojure')
-rw-r--r-- | src/jvm/clojure/lang/Compiler.java | 11 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Var.java | 14 |
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); } |