diff options
author | Rich Hickey <richhickey@gmail.com> | 2007-09-30 22:27:09 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2007-09-30 22:27:09 +0000 |
commit | 4be49c5b2a179ab396e631dc533b14f7ea699c97 (patch) | |
tree | 2f0482cec44919f5669dfaba8857478a6729d146 /src/jvm/clojure | |
parent | 46e575bc17e5e54948b4f378973f69266a69ea07 (diff) |
interim checkin
Diffstat (limited to 'src/jvm/clojure')
-rw-r--r-- | src/jvm/clojure/lang/Compiler.java | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java index a04a4004..e7dc8419 100644 --- a/src/jvm/clojure/lang/Compiler.java +++ b/src/jvm/clojure/lang/Compiler.java @@ -197,13 +197,13 @@ static Symbol resolveSymbol(Symbol sym){ //already qualified or classname? if(sym.ns != null || sym.name.indexOf('.') > 0) return sym; - IPersistentMap imports = (IPersistentMap) ((Var)RT.NS_IMPORTS.get()).get(); + IPersistentMap imports = (IPersistentMap) ((Var) RT.NS_IMPORTS.get()).get(); //imported class? String className = (String) imports.valAt(sym); if(className != null) return Symbol.intern(null, className); //refers? - IPersistentMap refers = (IPersistentMap) ((Var)RT.NS_REFERS.get()).get(); + IPersistentMap refers = (IPersistentMap) ((Var) RT.NS_REFERS.get()).get(); Var var = (Var) refers.valAt(sym); if(var != null) return var.sym; @@ -258,9 +258,18 @@ static class DefExpr implements Expr{ throw new Exception("Too few arguments to def"); else if(!(RT.second(form) instanceof Symbol)) throw new Exception("Second argument to def must be a Symbol"); - Var v = lookupVar((Symbol) RT.second(form), true); + Symbol sym = (Symbol) RT.second(form); + Var v = lookupVar(sym, true); + if(v == null) + throw new Exception("Can't refer to qualified var that doesn't exist"); if(!v.sym.ns.equals(currentNS().name)) - throw new Exception("Can't create defs outside of current ns"); + { + if(sym.ns == null) + throw new Exception("Name conflict, can't def " + sym + " because " + currentNS().name + + " namespace refers to:" + v.sym); + else + throw new Exception("Can't create defs outside of current ns"); + } return new DefExpr(v, analyze(C.EXPRESSION, RT.third(form), v.sym.name), RT.count(form) == 3); } } @@ -580,7 +589,7 @@ static abstract class HostExpr implements Expr{ className = sym.name; else { - IPersistentMap imports = (IPersistentMap) ((Var)RT.NS_IMPORTS.get()).get(); + IPersistentMap imports = (IPersistentMap) ((Var) RT.NS_IMPORTS.get()).get(); className = (String) imports.valAt(sym); } } @@ -2574,7 +2583,7 @@ static Var lookupVar(Symbol sym, boolean internNew) throws Exception{ else { //is it an alias? - IPersistentMap refers = (IPersistentMap) ((Var)RT.NS_REFERS.get()).get(); + IPersistentMap refers = (IPersistentMap) ((Var) RT.NS_REFERS.get()).get(); var = (Var) refers.valAt(sym); if(var == null && sym.ns == null) var = Var.find(Symbol.intern(currentNS().name, sym.name)); |