diff options
author | Christophe Grand <christophe@cgrand.net> | 2010-04-13 11:50:38 +0200 |
---|---|---|
committer | Stuart Halloway <stu@thinkrelevance.com> | 2010-04-16 11:17:40 -0400 |
commit | ee9fc81dd2ef15d7ea3e17e7ec2370c5c09d633e (patch) | |
tree | fd493948d9e2d9c72b08a2baeda533a3ad71ed48 | |
parent | a2db3b5508cef22dcc5bcb7b386c17815ed83c6e (diff) |
Check for identity before equality in .equals for collections, see #96
Signed-off-by: Stuart Halloway <stu@thinkrelevance.com>
-rw-r--r-- | src/clj/clojure/gvec.clj | 1 | ||||
-rw-r--r-- | src/jvm/clojure/lang/APersistentMap.java | 1 | ||||
-rw-r--r-- | src/jvm/clojure/lang/APersistentSet.java | 1 | ||||
-rw-r--r-- | src/jvm/clojure/lang/APersistentVector.java | 1 | ||||
-rw-r--r-- | src/jvm/clojure/lang/ASeq.java | 2 |
5 files changed, 5 insertions, 1 deletions
diff --git a/src/clj/clojure/gvec.clj b/src/clj/clojure/gvec.clj index a47959b0..2b1223ad 100644 --- a/src/clj/clojure/gvec.clj +++ b/src/clj/clojure/gvec.clj @@ -84,6 +84,7 @@ Object (equals [this o] (cond + (identical? this o) true (or (instance? clojure.lang.IPersistentVector o) (instance? java.util.RandomAccess o)) (and (= cnt (count o)) (loop [i (int 0)] diff --git a/src/jvm/clojure/lang/APersistentMap.java b/src/jvm/clojure/lang/APersistentMap.java index e693a802..213eef71 100644 --- a/src/jvm/clojure/lang/APersistentMap.java +++ b/src/jvm/clojure/lang/APersistentMap.java @@ -44,6 +44,7 @@ public IPersistentCollection cons(Object o){ }
public boolean equals(Object obj){
+ if(this == obj) return true;
if(!(obj instanceof Map))
return false;
Map m = (Map) obj;
diff --git a/src/jvm/clojure/lang/APersistentSet.java b/src/jvm/clojure/lang/APersistentSet.java index 988ff5dd..90275fcd 100644 --- a/src/jvm/clojure/lang/APersistentSet.java +++ b/src/jvm/clojure/lang/APersistentSet.java @@ -49,6 +49,7 @@ public Object invoke(Object arg1) throws Exception{ } public boolean equals(Object obj){ + if(this == obj) return true; if(!(obj instanceof Set)) return false; Set m = (Set) obj; diff --git a/src/jvm/clojure/lang/APersistentVector.java b/src/jvm/clojure/lang/APersistentVector.java index 1761b237..7ac9f32b 100644 --- a/src/jvm/clojure/lang/APersistentVector.java +++ b/src/jvm/clojure/lang/APersistentVector.java @@ -36,6 +36,7 @@ public ISeq rseq(){ } static boolean doEquals(IPersistentVector v, Object obj){ + if(v == obj) return true; if(obj instanceof List || obj instanceof IPersistentVector) { Collection ma = (Collection) obj; diff --git a/src/jvm/clojure/lang/ASeq.java b/src/jvm/clojure/lang/ASeq.java index 78e7b6ef..ffa7fa47 100644 --- a/src/jvm/clojure/lang/ASeq.java +++ b/src/jvm/clojure/lang/ASeq.java @@ -46,7 +46,7 @@ public boolean equiv(Object obj){ }
public boolean equals(Object obj){
-
+ if(this == obj) return true;
if(!(obj instanceof Sequential || obj instanceof List))
return false;
ISeq ms = RT.seq(obj);
|