summaryrefslogtreecommitdiff
path: root/src/jvm/clojure
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2007-09-30 22:27:09 +0000
committerRich Hickey <richhickey@gmail.com>2007-09-30 22:27:09 +0000
commit4be49c5b2a179ab396e631dc533b14f7ea699c97 (patch)
tree2f0482cec44919f5669dfaba8857478a6729d146 /src/jvm/clojure
parent46e575bc17e5e54948b4f378973f69266a69ea07 (diff)
interim checkin
Diffstat (limited to 'src/jvm/clojure')
-rw-r--r--src/jvm/clojure/lang/Compiler.java21
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));