Browse Source

string, number, boolean comparing via primitives

identityHash methods removed
Herbert Vojčík 9 years ago
parent
commit
138a9b9c14
6 changed files with 22 additions and 185 deletions
  1. 9 39
      src/Kernel-Collections.js
  2. 2 11
      src/Kernel-Collections.st
  3. 8 68
      src/Kernel-Objects.js
  4. 3 23
      src/Kernel-Objects.st
  5. 0 39
      src/Kernel-Tests.js
  6. 0 5
      src/Kernel-Tests.st

+ 9 - 39
src/Kernel-Collections.js

@@ -6014,23 +6014,19 @@ var self=this;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
-
-		return aString != null &&
-			typeof aString._isString === "function" &&
-			aString._isString() &&
-			String(self) === String(aString)
-	;
-return self;
+var $1;
+$1=self.__eq_eq(aString);
+return $1;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 }, function($ctx1) {$ctx1.fill(self,"=",{aString:aString},$globals.String)});
 //>>excludeEnd("ctx");
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: ["aString"],
-source: "= aString\x0a\x09<\x0a\x09\x09return aString != null &&\x0a\x09\x09\x09typeof aString._isString === \x22function\x22 &&\x0a\x09\x09\x09aString._isString() &&\x0a\x09\x09\x09String(self) === String(aString)\x0a\x09>",
+source: "= aString\x0a\x09^ self == aString",
 referencedClasses: [],
 //>>excludeEnd("ide");
-messageSends: []
+messageSends: ["=="]
 }),
 $globals.String);
 
@@ -6043,19 +6039,18 @@ var self=this;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
-var $1;
-$1=self.__eq(aString);
-return $1;
+return aString != null && String(self) === (typeof aString === "string" ? aString : aString.valueOf());
+return self;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 }, function($ctx1) {$ctx1.fill(self,"==",{aString:aString},$globals.String)});
 //>>excludeEnd("ctx");
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: ["aString"],
-source: "== aString\x0a\x09^ self = aString",
+source: "== aString\x0a<return aString != null && String(self) === (typeof aString === \x22string\x22 ? aString : aString.valueOf())>",
 referencedClasses: [],
 //>>excludeEnd("ide");
-messageSends: ["="]
+messageSends: []
 }),
 $globals.String);
 
@@ -6569,31 +6564,6 @@ messageSends: []
 }),
 $globals.String);
 
-$core.addMethod(
-$core.method({
-selector: "identityHash",
-protocol: 'accessing',
-fn: function (){
-var self=this;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-return $core.withContext(function($ctx1) {
-//>>excludeEnd("ctx");
-var $1;
-$1=self.__comma("s");
-return $1;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx1) {$ctx1.fill(self,"identityHash",{},$globals.String)});
-//>>excludeEnd("ctx");
-},
-//>>excludeStart("ide", pragmas.excludeIdeData);
-args: [],
-source: "identityHash\x0a\x09^ self, 's'",
-referencedClasses: [],
-//>>excludeEnd("ide");
-messageSends: [","]
-}),
-$globals.String);
-
 $core.addMethod(
 $core.method({
 selector: "includesSubString:",

+ 2 - 11
src/Kernel-Collections.st

@@ -1449,10 +1449,6 @@ charCodeAt: anInteger
 	<return self.charCodeAt(anInteger - 1)>
 !
 
-identityHash
-	^ self, 's'
-!
-
 size
 	<return self.length>
 ! !
@@ -1468,16 +1464,11 @@ size
 !
 
 = aString
-	<
-		return aString !!= null &&
-			typeof aString._isString === "function" &&
-			aString._isString() &&
-			String(self) === String(aString)
-	>
+	^ self == aString
 !
 
 == aString
-	^ self = aString
+<return aString !!= null && String(self) === (typeof aString === "string" ? aString : aString.valueOf())>
 !
 
 > aString

+ 8 - 68
src/Kernel-Objects.js

@@ -1800,35 +1800,6 @@ messageSends: []
 }),
 $globals.Boolean);
 
-$core.addMethod(
-$core.method({
-selector: "=",
-protocol: 'comparing',
-fn: function (aBoolean){
-var self=this;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-return $core.withContext(function($ctx1) {
-//>>excludeEnd("ctx");
-
-		return aBoolean != null &&
-			typeof aBoolean._isBoolean === "function" &&
-			aBoolean._isBoolean() &&
-			Boolean(self == true) == aBoolean
-	;
-return self;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx1) {$ctx1.fill(self,"=",{aBoolean:aBoolean},$globals.Boolean)});
-//>>excludeEnd("ctx");
-},
-//>>excludeStart("ide", pragmas.excludeIdeData);
-args: ["aBoolean"],
-source: "= aBoolean\x0a\x09<\x0a\x09\x09return aBoolean != null &&\x0a\x09\x09\x09typeof aBoolean._isBoolean === \x22function\x22 &&\x0a\x09\x09\x09aBoolean._isBoolean() &&\x0a\x09\x09\x09Boolean(self == true) == aBoolean\x0a\x09>",
-referencedClasses: [],
-//>>excludeEnd("ide");
-messageSends: []
-}),
-$globals.Boolean);
-
 $core.addMethod(
 $core.method({
 selector: "==",
@@ -1838,19 +1809,18 @@ var self=this;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
-var $1;
-$1=self.__eq(aBoolean);
-return $1;
+return aBoolean != null && self.valueOf() === (typeof aBoolean === "boolean" ? aBoolean : aBoolean.valueOf());
+return self;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 }, function($ctx1) {$ctx1.fill(self,"==",{aBoolean:aBoolean},$globals.Boolean)});
 //>>excludeEnd("ctx");
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: ["aBoolean"],
-source: "== aBoolean\x0a\x09^ self = aBoolean",
+source: "== aBoolean\x0a<return aBoolean != null && self.valueOf() === (typeof aBoolean === \x22boolean\x22 ? aBoolean : aBoolean.valueOf())>",
 referencedClasses: [],
 //>>excludeEnd("ide");
-messageSends: ["="]
+messageSends: []
 }),
 $globals.Boolean);
 
@@ -3469,27 +3439,22 @@ $globals.Number);
 
 $core.addMethod(
 $core.method({
-selector: "=",
+selector: "==",
 protocol: 'comparing',
 fn: function (aNumber){
 var self=this;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
-
-		return aNumber != null &&
-			typeof aNumber._isNumber === "function" &&
-			aNumber._isNumber() &&
-			Number(self) == aNumber
-	;
+return aNumber != null && Number(self) === (typeof aNumber === "number" ? aNumber : aNumber.valueOf());
 return self;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx1) {$ctx1.fill(self,"=",{aNumber:aNumber},$globals.Number)});
+}, function($ctx1) {$ctx1.fill(self,"==",{aNumber:aNumber},$globals.Number)});
 //>>excludeEnd("ctx");
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: ["aNumber"],
-source: "= aNumber\x0a\x09<\x0a\x09\x09return aNumber != null &&\x0a\x09\x09\x09typeof aNumber._isNumber === \x22function\x22 &&\x0a\x09\x09\x09aNumber._isNumber() &&\x0a\x09\x09\x09Number(self) == aNumber\x0a\x09>",
+source: "== aNumber\x0a<return aNumber != null && Number(self) === (typeof aNumber === \x22number\x22 ? aNumber : aNumber.valueOf())>",
 referencedClasses: [],
 //>>excludeEnd("ide");
 messageSends: []
@@ -3970,31 +3935,6 @@ messageSends: []
 }),
 $globals.Number);
 
-$core.addMethod(
-$core.method({
-selector: "identityHash",
-protocol: 'accessing',
-fn: function (){
-var self=this;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-return $core.withContext(function($ctx1) {
-//>>excludeEnd("ctx");
-var $1;
-$1=$recv(self._asString()).__comma("n");
-return $1;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx1) {$ctx1.fill(self,"identityHash",{},$globals.Number)});
-//>>excludeEnd("ctx");
-},
-//>>excludeStart("ide", pragmas.excludeIdeData);
-args: [],
-source: "identityHash\x0a\x09^ self asString, 'n'",
-referencedClasses: [],
-//>>excludeEnd("ide");
-messageSends: [",", "asString"]
-}),
-$globals.Number);
-
 $core.addMethod(
 $core.method({
 selector: "isImmutable",

+ 3 - 23
src/Kernel-Objects.st

@@ -433,17 +433,8 @@ I am directly mapped to JavaScript Boolean. The `true` and `false` objects are t
 
 !Boolean methodsFor: 'comparing'!
 
-= aBoolean
-	<
-		return aBoolean !!= null &&
-			typeof aBoolean._isBoolean === "function" &&
-			aBoolean._isBoolean() &&
-			Boolean(self == true) == aBoolean
-	>
-!
-
 == aBoolean
-	^ self = aBoolean
+<return aBoolean !!= null && self.valueOf() === (typeof aBoolean === "boolean" ? aBoolean : aBoolean.valueOf())>
 ! !
 
 !Boolean methodsFor: 'controlling'!
@@ -772,12 +763,6 @@ My instances can also be used to evaluate a block a fixed number of times:
 	
 	1 to: 10 by: 2 do: [ :aNumber| Transcript show: aNumber asString; cr ].!
 
-!Number methodsFor: 'accessing'!
-
-identityHash
-	^ self asString, 'n'
-! !
-
 !Number methodsFor: 'arithmetic'!
 
 * aNumber
@@ -836,13 +821,8 @@ negated
 	<return self <= aNumber>
 !
 
-= aNumber
-	<
-		return aNumber !!= null &&
-			typeof aNumber._isNumber === "function" &&
-			aNumber._isNumber() &&
-			Number(self) == aNumber
-	>
+== aNumber
+<return aNumber !!= null && Number(self) === (typeof aNumber === "number" ? aNumber : aNumber.valueOf())>
 !
 
 > aNumber

+ 0 - 39
src/Kernel-Tests.js

@@ -8270,45 +8270,6 @@ messageSends: ["assert:", "==", "deny:", "yourself"]
 }),
 $globals.StringTest);
 
-$core.addMethod(
-$core.method({
-selector: "testIdentityHash",
-protocol: 'tests',
-fn: function (){
-var self=this;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-return $core.withContext(function($ctx1) {
-//>>excludeEnd("ctx");
-var $1,$2,$4,$3;
-$1="foo"._identityHash();
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-$ctx1.sendIdx["identityHash"]=1;
-//>>excludeEnd("ctx");
-$2="foo"._identityHash();
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-$ctx1.sendIdx["identityHash"]=2;
-//>>excludeEnd("ctx");
-self._assert_equals_($1,$2);
-$4="foo"._identityHash();
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-$ctx1.sendIdx["identityHash"]=3;
-//>>excludeEnd("ctx");
-$3=$recv($4).__eq("bar"._identityHash());
-self._deny_($3);
-return self;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx1) {$ctx1.fill(self,"testIdentityHash",{},$globals.StringTest)});
-//>>excludeEnd("ctx");
-},
-//>>excludeStart("ide", pragmas.excludeIdeData);
-args: [],
-source: "testIdentityHash\x0a\x09self assert: 'foo' identityHash equals: 'foo' identityHash.\x0a\x09self deny: ('foo' identityHash = 'bar' identityHash)",
-referencedClasses: [],
-//>>excludeEnd("ide");
-messageSends: ["assert:equals:", "identityHash", "deny:", "="]
-}),
-$globals.StringTest);
-
 $core.addMethod(
 $core.method({
 selector: "testIncludesSubString",

+ 0 - 5
src/Kernel-Tests.st

@@ -1478,11 +1478,6 @@ testIdentity
 	self deny: '' == 0
 !
 
-testIdentityHash
-	self assert: 'foo' identityHash equals: 'foo' identityHash.
-	self deny: ('foo' identityHash = 'bar' identityHash)
-!
-
 testIncludesSubString
 	self assert: ('amber' includesSubString: 'ber').
 	self deny: ('amber' includesSubString: 'zork').