diff options
Diffstat (limited to 'src/jvm/clojure/lang/Symbol.java')
-rw-r--r-- | src/jvm/clojure/lang/Symbol.java | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/jvm/clojure/lang/Symbol.java b/src/jvm/clojure/lang/Symbol.java index 43b05788..dcbce7b2 100644 --- a/src/jvm/clojure/lang/Symbol.java +++ b/src/jvm/clojure/lang/Symbol.java @@ -13,7 +13,7 @@ package clojure.lang; -public class Symbol extends Obj{ +public class Symbol extends Obj implements Comparable{ //these must be interned strings! public final String ns; public final String name; @@ -77,4 +77,18 @@ private Symbol(IPersistentMap meta, String ns, String name){ this.ns = ns; this.hash = RT.hashCombine(name.hashCode(), RT.hash(ns)); } + +public int compareTo(Object o){ + Symbol s = (Symbol) o; + if(this.equals(o)) + return 0; + if(this.ns == null && s.ns != null) + return -1; + if(this.ns != null && s.ns == null) + return 1; + int nsc = this.name.compareTo(s.name); + if(nsc != 0) + return nsc; + return this.name.compareTo(s.name); +} } |