Преглед на файлове

faster Behavior >> inheritsFrom:

Nicolas Petton преди 11 години
родител
ревизия
94c5e56d4b
променени са 3 файла, в които са добавени 31 реда и са изтрити 10 реда
  1. 13 4
      js/Kernel-Classes.deploy.js
  2. 14 5
      js/Kernel-Classes.js
  3. 4 1
      st/Kernel-Classes.st

+ 13 - 4
js/Kernel-Classes.deploy.js

@@ -330,11 +330,20 @@ selector: "inheritsFrom:",
 fn: function (aClass){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=_st(_st(aClass)._allSubclasses())._includes_(self);
-return $1;
+var $1,$2;
+$1=_st(self)._superclass();
+if(($receiver = $1) == nil || $receiver == undefined){
+return false;
+} else {
+$1;
+};
+$2=_st(_st(aClass).__eq_eq(_st(self)._superclass()))._or_((function(){
+return smalltalk.withContext(function($ctx2) {
+return _st(_st(self)._superclass())._inheritsFrom_(aClass);
+}, function($ctx2) {$ctx2.fillBlock({},$ctx1)})}));
+return $2;
 }, function($ctx1) {$ctx1.fill(self,"inheritsFrom:",{aClass:aClass},smalltalk.Behavior)})},
-messageSends: ["includes:", "allSubclasses"]}),
+messageSends: ["ifNil:", "superclass", "or:", "inheritsFrom:", "=="]}),
 smalltalk.Behavior);
 
 smalltalk.addMethod(

+ 14 - 5
js/Kernel-Classes.js

@@ -427,13 +427,22 @@ category: 'testing',
 fn: function (aClass){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=_st(_st(aClass)._allSubclasses())._includes_(self);
-return $1;
+var $1,$2;
+$1=_st(self)._superclass();
+if(($receiver = $1) == nil || $receiver == undefined){
+return false;
+} else {
+$1;
+};
+$2=_st(_st(aClass).__eq_eq(_st(self)._superclass()))._or_((function(){
+return smalltalk.withContext(function($ctx2) {
+return _st(_st(self)._superclass())._inheritsFrom_(aClass);
+}, function($ctx2) {$ctx2.fillBlock({},$ctx1)})}));
+return $2;
 }, function($ctx1) {$ctx1.fill(self,"inheritsFrom:",{aClass:aClass},smalltalk.Behavior)})},
 args: ["aClass"],
-source: "inheritsFrom: aClass\x0a\x09^aClass allSubclasses includes: self",
-messageSends: ["includes:", "allSubclasses"],
+source: "inheritsFrom: aClass\x0a\x09self superclass ifNil: [ ^ false ].\x0a\x0a\x09^ aClass == self superclass or: [ \x0a\x09\x09self superclass inheritsFrom: aClass ]",
+messageSends: ["ifNil:", "superclass", "or:", "inheritsFrom:", "=="],
 referencedClasses: []
 }),
 smalltalk.Behavior);

+ 4 - 1
st/Kernel-Classes.st

@@ -282,7 +282,10 @@ includesSelector: aString
 !
 
 inheritsFrom: aClass
-	^aClass allSubclasses includes: self
+	self superclass ifNil: [ ^ false ].
+
+	^ aClass == self superclass or: [ 
+		self superclass inheritsFrom: aClass ]
 !
 
 isBehavior