diff options
Diffstat (limited to 'src/jvm/clojure/lang/Symbol.java')
-rw-r--r-- | src/jvm/clojure/lang/Symbol.java | 38 |
1 files changed, 12 insertions, 26 deletions
diff --git a/src/jvm/clojure/lang/Symbol.java b/src/jvm/clojure/lang/Symbol.java index b9c7ffe9..cae743c2 100644 --- a/src/jvm/clojure/lang/Symbol.java +++ b/src/jvm/clojure/lang/Symbol.java @@ -14,15 +14,22 @@ package clojure.lang; public class Symbol{ -//this must be an interned string! +//these must be interned strings! public final String name; +public final String ns; public String toString(){ + if(ns != null) + return ns + "/" + name; return name; } -Symbol(String name){ +public Symbol(String name,String ns){ this.name = name.intern(); + if(ns != null) + this.ns = ns.intern(); + else + this.ns = null; } public boolean equals(Object o){ @@ -33,33 +40,12 @@ public boolean equals(Object o){ Symbol symbol = (Symbol) o; - //identity compare ok, names are interned - return name == symbol.name; + //identity compares intended, names are interned + return name == symbol.name && ns == symbol.ns; } public int hashCode(){ - return name.hashCode(); -} - -//* -public static Symbol intern(String name){ - int dot = 0; - Symbol sym; - if(name.charAt(0) == ':') - sym = new Keyword(name); - else if((dot = name.indexOf('.')) != -1) - { - if(dot == 0) - sym = new InstanceMemberSymbol(name); - else if(name.lastIndexOf('.') == name.length() - 1) - sym = new ClassSymbol(name); - else - sym = new StaticMemberSymbol(name); - } - else - sym = new Symbol(name); - return sym; + return RT.hashCombine(name.hashCode(),RT.hash(ns)); } -//*/ } |