Browse Source

Simpler fix for previous commit

Nicolas Petton 11 years ago
parent
commit
04637ce678
2 changed files with 28 additions and 44 deletions
  1. 25 39
      js/Kernel-Classes.js
  2. 3 5
      st/Kernel-Classes.st

+ 25 - 39
js/Kernel-Classes.js

@@ -33,60 +33,46 @@ function $MethodAdded(){return smalltalk.MethodAdded||(typeof MethodAdded=="unde
 function $MethodModified(){return smalltalk.MethodModified||(typeof MethodModified=="undefined"?nil:MethodModified)}
 function $SystemAnnouncer(){return smalltalk.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$1,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13;
+var $1,$3,$4,$2,$5,$6,$7,$8,$9;
 oldMethod=_st(self._methodDictionary())._at_ifAbsent_(_st(aMethod)._selector(),(function(){
 return smalltalk.withContext(function($ctx2) {
 return nil;
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
-$2=self._protocols();
-$3=_st(aMethod)._protocol();
+$1=oldMethod;
+if(($receiver = $1) == nil || $receiver == null){
+$1;
+} else {
+self._removeCompiledMethod_(oldMethod);
+};
+$3=self._protocols();
+$4=_st(aMethod)._protocol();
 $ctx1.sendIdx["protocol"]=1;
-$1=_st($2)._includes_($3);
-if(! smalltalk.assert($1)){
-$4=self._organization();
-$ctx1.sendIdx["organization"]=1;
-$5=_st(aMethod)._protocol();
-$ctx1.sendIdx["protocol"]=2;
-_st($4)._addElement_($5);
+$2=_st($3)._includes_($4);
+if(! smalltalk.assert($2)){
+_st(self._organization())._addElement_(_st(aMethod)._protocol());
 };
 self._basicAddCompiledMethod_(aMethod);
-$6=oldMethod;
-if(($receiver = $6) == nil || $receiver == null){
-$6;
-} else {
-_st(_st(self._methods())._select_((function(each){
-return smalltalk.withContext(function($ctx2) {
-$7=_st(each)._protocol();
-$ctx2.sendIdx["protocol"]=3;
-$8=_st(oldMethod)._protocol();
-$ctx2.sendIdx["protocol"]=4;
-return _st($7).__eq($8);
-}, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,4)})})))._ifEmpty_((function(){
-return smalltalk.withContext(function($ctx2) {
-return _st(self._organization())._removeElement_(_st(oldMethod)._protocol());
-}, function($ctx2) {$ctx2.fillBlock({},$ctx1,5)})}));
-};
-$9=oldMethod;
-if(($receiver = $9) == nil || $receiver == null){
-$10=_st($MethodAdded())._new();
+$5=oldMethod;
+if(($receiver = $5) == nil || $receiver == null){
+$6=_st($MethodAdded())._new();
 $ctx1.sendIdx["new"]=1;
-_st($10)._method_(aMethod);
+_st($6)._method_(aMethod);
 $ctx1.sendIdx["method:"]=1;
-$11=_st($10)._yourself();
+$7=_st($6)._yourself();
 $ctx1.sendIdx["yourself"]=1;
-announcement=$11;
+announcement=$7;
 } else {
-$12=_st($MethodModified())._new();
-_st($12)._oldMethod_(oldMethod);
-_st($12)._method_(aMethod);
-$13=_st($12)._yourself();
-announcement=$13;
+$8=_st($MethodModified())._new();
+_st($8)._oldMethod_(oldMethod);
+_st($8)._method_(aMethod);
+$9=_st($8)._yourself();
+announcement=$9;
 };
 _st(_st($SystemAnnouncer())._current())._announce_(announcement);
 return self}, function($ctx1) {$ctx1.fill(self,"addCompiledMethod:",{aMethod:aMethod,oldMethod:oldMethod,announcement:announcement},smalltalk.Behavior)})},
 args: ["aMethod"],
-source: "addCompiledMethod: aMethod\x0a\x09| oldMethod announcement |\x0a\x09\x0a\x09oldMethod := self methodDictionary\x0a\x09\x09at: aMethod selector\x0a\x09\x09ifAbsent: [ nil ].\x0a\x09\x0a\x09(self protocols includes: aMethod protocol)\x0a\x09\x09ifFalse: [ self organization addElement: aMethod protocol ].\x0a\x0a\x09self basicAddCompiledMethod: aMethod.\x0a\x09\x0a\x09oldMethod ifNotNil: [\x0a\x09\x09(self methods\x0a\x09\x09\x09select: [ :each | each protocol = oldMethod protocol ])\x0a\x09\x09\x09ifEmpty: [ self organization removeElement: oldMethod protocol ] ].\x0a\x09\x0a\x09announcement := oldMethod\x0a\x09\x09ifNil: [\x0a\x09\x09\x09MethodAdded new\x0a\x09\x09\x09\x09\x09method: aMethod;\x0a\x09\x09\x09\x09\x09yourself ]\x0a\x09\x09ifNotNil: [\x0a\x09\x09\x09MethodModified new\x0a\x09\x09\x09\x09\x09oldMethod: oldMethod;\x0a\x09\x09\x09\x09\x09method: aMethod;\x0a\x09\x09\x09\x09\x09yourself ].\x0a\x09\x09\x09\x09\x09\x0a\x09\x09\x09\x09\x09\x0a\x09SystemAnnouncer current\x0a\x09\x09\x09\x09announce: announcement",
-messageSends: ["at:ifAbsent:", "methodDictionary", "selector", "ifFalse:", "includes:", "protocols", "protocol", "addElement:", "organization", "basicAddCompiledMethod:", "ifNotNil:", "ifEmpty:", "select:", "methods", "=", "removeElement:", "ifNil:ifNotNil:", "method:", "new", "yourself", "oldMethod:", "announce:", "current"],
+source: "addCompiledMethod: aMethod\x0a\x09| oldMethod announcement |\x0a\x09\x0a\x09oldMethod := self methodDictionary\x0a\x09\x09at: aMethod selector\x0a\x09\x09ifAbsent: [ nil ].\x0a\x09\x0a\x09oldMethod ifNotNil: [\x0a\x09\x09self removeCompiledMethod: oldMethod ].\x0a\x09\x0a\x09(self protocols includes: aMethod protocol)\x0a\x09\x09ifFalse: [ self organization addElement: aMethod protocol ].\x0a\x0a\x09self basicAddCompiledMethod: aMethod.\x0a\x09\x0a\x09announcement := oldMethod\x0a\x09\x09ifNil: [\x0a\x09\x09\x09MethodAdded new\x0a\x09\x09\x09\x09\x09method: aMethod;\x0a\x09\x09\x09\x09\x09yourself ]\x0a\x09\x09ifNotNil: [\x0a\x09\x09\x09MethodModified new\x0a\x09\x09\x09\x09\x09oldMethod: oldMethod;\x0a\x09\x09\x09\x09\x09method: aMethod;\x0a\x09\x09\x09\x09\x09yourself ].\x0a\x09\x09\x09\x09\x09\x0a\x09\x09\x09\x09\x09\x0a\x09SystemAnnouncer current\x0a\x09\x09\x09\x09announce: announcement",
+messageSends: ["at:ifAbsent:", "methodDictionary", "selector", "ifNotNil:", "removeCompiledMethod:", "ifFalse:", "includes:", "protocols", "protocol", "addElement:", "organization", "basicAddCompiledMethod:", "ifNil:ifNotNil:", "method:", "new", "yourself", "oldMethod:", "announce:", "current"],
 referencedClasses: ["MethodAdded", "MethodModified", "SystemAnnouncer"]
 }),
 smalltalk.Behavior);

+ 3 - 5
st/Kernel-Classes.st

@@ -213,16 +213,14 @@ addCompiledMethod: aMethod
 		at: aMethod selector
 		ifAbsent: [ nil ].
 	
+	oldMethod ifNotNil: [
+		self removeCompiledMethod: oldMethod ].
+	
 	(self protocols includes: aMethod protocol)
 		ifFalse: [ self organization addElement: aMethod protocol ].
 
 	self basicAddCompiledMethod: aMethod.
 	
-	oldMethod ifNotNil: [
-		(self methods
-			select: [ :each | each protocol = oldMethod protocol ])
-			ifEmpty: [ self organization removeElement: oldMethod protocol ] ].
-
 	announcement := oldMethod
 		ifNil: [
 			MethodAdded new