Browse Source

== first checks classes are the same

... and delegates instances identity checking
to #isSameInstanceAs:
Herbert Vojčík 9 years ago
parent
commit
f6c1fe1bdc
2 changed files with 37 additions and 9 deletions
  1. 33 9
      src/Kernel-Objects.js
  2. 4 0
      src/Kernel-Objects.st

+ 33 - 9
src/Kernel-Objects.js

@@ -42,23 +42,18 @@ var self=this;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
-var $2,$1;
-$2=self._identityHash();
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-$ctx1.sendIdx["identityHash"]=1;
-//>>excludeEnd("ctx");
-$1=$recv($2).__eq($recv(anObject)._identityHash());
-return $1;
+return self._class() === $recv(anObject)._class() && self._isSameInstanceAs_(anObject);
+return self;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 }, function($ctx1) {$ctx1.fill(self,"==",{anObject:anObject},$globals.ProtoObject)});
 //>>excludeEnd("ctx");
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: ["anObject"],
-source: "== anObject\x0a\x09^ self identityHash = anObject identityHash",
+source: "== anObject\x0a<return self._class() === $recv(anObject)._class() && self._isSameInstanceAs_(anObject)>",
 referencedClasses: [],
 //>>excludeEnd("ide");
-messageSends: ["=", "identityHash"]
+messageSends: []
 }),
 $globals.ProtoObject);
 
@@ -445,6 +440,35 @@ messageSends: []
 }),
 $globals.ProtoObject);
 
+$core.addMethod(
+$core.method({
+selector: "isSameInstanceAs:",
+protocol: 'comparing',
+fn: function (anObject){
+var self=this;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+var $2,$1;
+$2=self._identityHash();
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx["identityHash"]=1;
+//>>excludeEnd("ctx");
+$1=$recv($2).__eq($recv(anObject)._identityHash());
+return $1;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"isSameInstanceAs:",{anObject:anObject},$globals.ProtoObject)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: ["anObject"],
+source: "isSameInstanceAs: anObject\x0a\x09^ self identityHash = anObject identityHash",
+referencedClasses: [],
+//>>excludeEnd("ide");
+messageSends: ["=", "identityHash"]
+}),
+$globals.ProtoObject);
+
 $core.addMethod(
 $core.method({
 selector: "notNil",

+ 4 - 0
src/Kernel-Objects.st

@@ -42,6 +42,10 @@ yourself
 !
 
 == anObject
+<return self._class() === $recv(anObject)._class() && self._isSameInstanceAs_(anObject)>
+!
+
+isSameInstanceAs: anObject
 	^ self identityHash = anObject identityHash
 !