Browse Source

CompiledMethod >> origin

Herby Vojčík 5 years ago
parent
commit
32338c76ee

+ 2 - 0
lang/API-CHANGES.txt

@@ -4,6 +4,8 @@
   + includingPossibleMetaDo:
 + Class >>
   + includingPossibleMetaDo:
++ CompiledMethod >>
+  + origin
 
 - SmalltalkImage >>
   - includesKey:

+ 3 - 3
lang/src/Compiler-AST.js

@@ -3373,18 +3373,18 @@ return $recv($globals.CompilerError)._signal_("Method source is empty");
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
 //>>excludeEnd("ctx");
 }));
-return $recv($recv($globals.Compiler)._new())._ast_forClass_protocol_($self._source(),$self._methodClass(),$self._protocol());
+return $recv($recv($globals.Compiler)._new())._ast_forClass_protocol_($self._source(),$self._origin(),$self._protocol());
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 }, function($ctx1) {$ctx1.fill(self,"ast",{})});
 //>>excludeEnd("ctx");
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: [],
-source: "ast\x0a\x09self source ifEmpty: [ CompilerError signal: 'Method source is empty' ].\x0a\x09\x0a\x09^ Compiler new\x0a\x09\x09ast: self source\x0a\x09\x09forClass: self methodClass\x0a\x09\x09protocol: self protocol",
+source: "ast\x0a\x09self source ifEmpty: [ CompilerError signal: 'Method source is empty' ].\x0a\x09\x0a\x09^ Compiler new\x0a\x09\x09ast: self source\x0a\x09\x09forClass: self origin\x0a\x09\x09protocol: self protocol",
 referencedClasses: ["CompilerError", "Compiler"],
 //>>excludeEnd("ide");
 pragmas: [],
-messageSends: ["ifEmpty:", "source", "signal:", "ast:forClass:protocol:", "new", "methodClass", "protocol"]
+messageSends: ["ifEmpty:", "source", "signal:", "ast:forClass:protocol:", "new", "origin", "protocol"]
 }),
 $globals.CompiledMethod);
 

+ 1 - 1
lang/src/Compiler-AST.st

@@ -820,7 +820,7 @@ ast
 	
 	^ Compiler new
 		ast: self source
-		forClass: self methodClass
+		forClass: self origin
 		protocol: self protocol
 ! !
 

+ 3 - 3
lang/src/Compiler-Core.js

@@ -1016,7 +1016,7 @@ return $recv($recv($recv(eachSide)._methodDictionary())._values())._do_displayin
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx3) {
 //>>excludeEnd("ctx");
-$1=$recv($recv(each)._methodClass()).__eq(eachSide);
+$1=$recv($recv(each)._origin()).__eq(eachSide);
 if($core.assert($1)){
 return $self._install_forClass_protocol_($recv(each)._source(),eachSide,$recv(each)._protocol());
 }
@@ -1035,11 +1035,11 @@ return self;
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: ["aClass"],
-source: "recompile: aClass\x0a\x09aClass includingPossibleMetaDo: [ :eachSide |\x0a\x09\x09eachSide methodDictionary values\x0a\x09\x09\x09do: [ :each | each methodClass = eachSide ifTrue: [ \x0a\x09\x09\x09\x09self \x0a\x09\x09\x09\x09\x09install: each source \x0a\x09\x09\x09\x09\x09forClass: eachSide \x0a\x09\x09\x09\x09\x09protocol: each protocol ] ]\x0a\x09\x09\x09displayingProgress: 'Recompiling ', eachSide name ]",
+source: "recompile: aClass\x0a\x09aClass includingPossibleMetaDo: [ :eachSide |\x0a\x09\x09eachSide methodDictionary values\x0a\x09\x09\x09do: [ :each | each origin = eachSide ifTrue: [ \x0a\x09\x09\x09\x09self \x0a\x09\x09\x09\x09\x09install: each source \x0a\x09\x09\x09\x09\x09forClass: eachSide \x0a\x09\x09\x09\x09\x09protocol: each protocol ] ]\x0a\x09\x09\x09displayingProgress: 'Recompiling ', eachSide name ]",
 referencedClasses: [],
 //>>excludeEnd("ide");
 pragmas: [],
-messageSends: ["includingPossibleMetaDo:", "do:displayingProgress:", "values", "methodDictionary", "ifTrue:", "=", "methodClass", "install:forClass:protocol:", "source", "protocol", ",", "name"]
+messageSends: ["includingPossibleMetaDo:", "do:displayingProgress:", "values", "methodDictionary", "ifTrue:", "=", "origin", "install:forClass:protocol:", "source", "protocol", ",", "name"]
 }),
 $globals.Compiler);
 

+ 1 - 1
lang/src/Compiler-Core.st

@@ -249,7 +249,7 @@ parseExpression: aString
 recompile: aClass
 	aClass includingPossibleMetaDo: [ :eachSide |
 		eachSide methodDictionary values
-			do: [ :each | each methodClass = eachSide ifTrue: [ 
+			do: [ :each | each origin = eachSide ifTrue: [ 
 				self 
 					install: each source 
 					forClass: eachSide 

+ 3 - 3
lang/src/Compiler-Interpreter.js

@@ -681,7 +681,7 @@ $1=$self._method();
 $ctx1.sendIdx["method"]=1;
 //>>excludeEnd("ctx");
 $self.ast=$recv($1)._ast();
-$recv($recv($globals.SemanticAnalyzer)._on_($recv($self._method())._methodClass()))._visit_($self.ast);
+$recv($recv($globals.SemanticAnalyzer)._on_($recv($self._method())._origin()))._visit_($self.ast);
 return self;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 }, function($ctx1) {$ctx1.fill(self,"initializeAST",{})});
@@ -689,11 +689,11 @@ return self;
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: [],
-source: "initializeAST\x0a\x09ast := self method ast.\x0a\x09(SemanticAnalyzer on: self method methodClass)\x0a\x09\x09visit: ast",
+source: "initializeAST\x0a\x09ast := self method ast.\x0a\x09(SemanticAnalyzer on: self method origin)\x0a\x09\x09visit: ast",
 referencedClasses: ["SemanticAnalyzer"],
 //>>excludeEnd("ide");
 pragmas: [],
-messageSends: ["ast", "method", "visit:", "on:", "methodClass"]
+messageSends: ["ast", "method", "visit:", "on:", "origin"]
 }),
 $globals.AIContext);
 

+ 1 - 1
lang/src/Compiler-Interpreter.st

@@ -238,7 +238,7 @@ newInnerContext
 
 initializeAST
 	ast := self method ast.
-	(SemanticAnalyzer on: self method methodClass)
+	(SemanticAnalyzer on: self method origin)
 		visit: ast
 !
 

+ 8 - 8
lang/src/Kernel-Classes.js

@@ -1644,9 +1644,9 @@ $recv($1)._valuesDo_((function(each){
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx2) {
 //>>excludeEnd("ctx");
-$3=$recv(each)._methodClass();
+$3=$recv(each)._origin();
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
-$ctx2.sendIdx["methodClass"]=1;
+$ctx2.sendIdx["origin"]=1;
 //>>excludeEnd("ctx");
 $2=$recv($3).__eq(aClass);
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
@@ -1704,7 +1704,7 @@ $recv($11)._valuesDo_((function(each){
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx2) {
 //>>excludeEnd("ctx");
-$14=$recv(each)._methodClass();
+$14=$recv(each)._origin();
 $15=$recv(aClass)._class();
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx2.sendIdx["class"]=4;
@@ -1735,11 +1735,11 @@ return self;
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: ["aClass", "anotherClass"],
-source: "copyClass: aClass to: anotherClass\x0a\x0a\x09anotherClass comment: aClass comment.\x0a\x0a\x09aClass methodDictionary valuesDo: [ :each |\x0a\x09\x09each methodClass = aClass ifTrue: [\x0a\x09\x09\x09Compiler new install: each source forClass: anotherClass protocol: each protocol ] ].\x0a\x09anotherClass setTraitComposition: aClass traitComposition.\x0a\x0a\x09self basicClass: anotherClass class instanceVariables: aClass class instanceVariableNames.\x0a\x0a\x09aClass class methodDictionary valuesDo: [ :each |\x0a\x09\x09each methodClass = aClass class ifTrue: [\x0a\x09\x09\x09Compiler new install: each source forClass: anotherClass class protocol: each protocol ] ].\x0a\x09anotherClass class setTraitComposition: aClass class traitComposition",
+source: "copyClass: aClass to: anotherClass\x0a\x0a\x09anotherClass comment: aClass comment.\x0a\x0a\x09aClass methodDictionary valuesDo: [ :each |\x0a\x09\x09each origin = aClass ifTrue: [\x0a\x09\x09\x09Compiler new install: each source forClass: anotherClass protocol: each protocol ] ].\x0a\x09anotherClass setTraitComposition: aClass traitComposition.\x0a\x0a\x09self basicClass: anotherClass class instanceVariables: aClass class instanceVariableNames.\x0a\x0a\x09aClass class methodDictionary valuesDo: [ :each |\x0a\x09\x09each origin = aClass class ifTrue: [\x0a\x09\x09\x09Compiler new install: each source forClass: anotherClass class protocol: each protocol ] ].\x0a\x09anotherClass class setTraitComposition: aClass class traitComposition",
 referencedClasses: ["Compiler"],
 //>>excludeEnd("ide");
 pragmas: [],
-messageSends: ["comment:", "comment", "valuesDo:", "methodDictionary", "ifTrue:", "=", "methodClass", "install:forClass:protocol:", "new", "source", "protocol", "setTraitComposition:", "traitComposition", "basicClass:instanceVariables:", "class", "instanceVariableNames"]
+messageSends: ["comment:", "comment", "valuesDo:", "methodDictionary", "ifTrue:", "=", "origin", "install:forClass:protocol:", "new", "source", "protocol", "setTraitComposition:", "traitComposition", "basicClass:instanceVariables:", "class", "instanceVariableNames"]
 }),
 $globals.ClassBuilder);
 
@@ -2862,7 +2862,7 @@ return $recv($self._methodsInProtocol_(aString))._select_((function(each){
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx2) {
 //>>excludeEnd("ctx");
-return $recv($recv(each)._methodClass()).__eq(self);
+return $recv($recv(each)._origin()).__eq(self);
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
 //>>excludeEnd("ctx");
@@ -2873,11 +2873,11 @@ return $recv($recv(each)._methodClass()).__eq(self);
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: ["aString"],
-source: "ownMethodsInProtocol: aString\x0a\x09^ (self methodsInProtocol: aString) select: [ :each | each methodClass = self ]",
+source: "ownMethodsInProtocol: aString\x0a\x09^ (self methodsInProtocol: aString) select: [ :each | each origin = self ]",
 referencedClasses: [],
 //>>excludeEnd("ide");
 pragmas: [],
-messageSends: ["select:", "methodsInProtocol:", "=", "methodClass"]
+messageSends: ["select:", "methodsInProtocol:", "=", "origin"]
 }),
 $globals.TBehaviorProvider);
 

+ 3 - 3
lang/src/Kernel-Classes.st

@@ -461,14 +461,14 @@ copyClass: aClass to: anotherClass
 	anotherClass comment: aClass comment.
 
 	aClass methodDictionary valuesDo: [ :each |
-		each methodClass = aClass ifTrue: [
+		each origin = aClass ifTrue: [
 			Compiler new install: each source forClass: anotherClass protocol: each protocol ] ].
 	anotherClass setTraitComposition: aClass traitComposition.
 
 	self basicClass: anotherClass class instanceVariables: aClass class instanceVariableNames.
 
 	aClass class methodDictionary valuesDo: [ :each |
-		each methodClass = aClass class ifTrue: [
+		each origin = aClass class ifTrue: [
 			Compiler new install: each source forClass: anotherClass class protocol: each protocol ] ].
 	anotherClass class setTraitComposition: aClass class traitComposition
 ! !
@@ -690,7 +690,7 @@ ownMethods
 !
 
 ownMethodsInProtocol: aString
-	^ (self methodsInProtocol: aString) select: [ :each | each methodClass = self ]
+	^ (self methodsInProtocol: aString) select: [ :each | each origin = self ]
 !
 
 ownProtocols

+ 174 - 86
lang/src/Kernel-Methods.js

@@ -789,6 +789,141 @@ messageSends: ["ifNil:"]
 }),
 $globals.CompiledMethod);
 
+$core.addMethod(
+$core.method({
+selector: "asString",
+protocol: "converting",
+fn: function (){
+var self=this,$self=this;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+return $self._asStringForClass_($self._methodClass());
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"asString",{})});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: [],
+source: "asString\x0a\x09^ self asStringForClass: self methodClass",
+referencedClasses: [],
+//>>excludeEnd("ide");
+pragmas: [],
+messageSends: ["asStringForClass:", "methodClass"]
+}),
+$globals.CompiledMethod);
+
+$core.addMethod(
+$core.method({
+selector: "asStringForClass:",
+protocol: "converting",
+fn: function (aClass){
+var self=this,$self=this;
+var result;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+var $2,$1,$4,$6,$7,$5,$3,$10,$9,$12,$11,$8,$14,$16,$15,$13,$17,$receiver;
+result=$recv(aClass)._name();
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx["name"]=1;
+//>>excludeEnd("ctx");
+$2=$self._methodClass();
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx["methodClass"]=1;
+//>>excludeEnd("ctx");
+$1=$recv($2).__eq(aClass);
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx["="]=1;
+//>>excludeEnd("ctx");
+if(!$core.assert($1)){
+$4=$recv(result).__comma(" (");
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx[","]=3;
+//>>excludeEnd("ctx");
+$6=$self._methodClass();
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx["methodClass"]=2;
+//>>excludeEnd("ctx");
+if(($receiver = $6) == null || $receiver.a$nil){
+$5="nil";
+} else {
+$7=$self._methodClass();
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx["methodClass"]=3;
+//>>excludeEnd("ctx");
+$5=$recv($7)._name();
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx["name"]=2;
+//>>excludeEnd("ctx");
+}
+$3=$recv($4).__comma($5);
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx[","]=2;
+//>>excludeEnd("ctx");
+result=$recv($3).__comma(")");
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx[","]=1;
+//>>excludeEnd("ctx");
+result;
+}
+$10=$self._origin();
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx["origin"]=1;
+//>>excludeEnd("ctx");
+$9=$recv($10).__eq(aClass);
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx["="]=2;
+//>>excludeEnd("ctx");
+$12=$self._origin();
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx["origin"]=2;
+//>>excludeEnd("ctx");
+$11=$recv($12).__eq($self._methodClass());
+$8=$recv($9).__or($11);
+if(!$core.assert($8)){
+$14=$recv(result).__comma(" /");
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx[","]=6;
+//>>excludeEnd("ctx");
+$16=$self._origin();
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx["origin"]=3;
+//>>excludeEnd("ctx");
+if(($receiver = $16) == null || $receiver.a$nil){
+$15="nil";
+} else {
+$15=$recv($self._origin())._name();
+}
+$13=$recv($14).__comma($15);
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx[","]=5;
+//>>excludeEnd("ctx");
+result=$recv($13).__comma("/");
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx[","]=4;
+//>>excludeEnd("ctx");
+result;
+}
+$17=$recv($recv(result).__comma(" >> ")).__comma($recv($self._selector())._symbolPrintString());
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx[","]=7;
+//>>excludeEnd("ctx");
+return $17;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"asStringForClass:",{aClass:aClass,result:result})});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: ["aClass"],
+source: "asStringForClass: aClass\x0a\x09| result |\x0a\x09result := aClass name.\x0a\x09self methodClass = aClass \x0a\x09\x09ifFalse: [ result := result, ' (', (self methodClass ifNil: [ 'nil' ] ifNotNil: [ self methodClass name ]), ')'].\x0a\x09(self origin = aClass | (self origin = self methodClass)) \x0a\x09\x09ifFalse: [ result := result, ' /', (self origin ifNil: [ 'nil' ] ifNotNil: [ self origin name ]), '/'].\x0a\x09^ result, ' >> ', self selector symbolPrintString",
+referencedClasses: [],
+//>>excludeEnd("ide");
+pragmas: [],
+messageSends: ["name", "ifFalse:", "=", "methodClass", ",", "ifNil:ifNotNil:", "|", "origin", "symbolPrintString", "selector"]
+}),
+$globals.CompiledMethod);
+
 $core.addMethod(
 $core.method({
 selector: "basicPragmas",
@@ -1064,6 +1199,25 @@ messageSends: []
 }),
 $globals.CompiledMethod);
 
+$core.addMethod(
+$core.method({
+selector: "origin",
+protocol: "accessing",
+fn: function (){
+var self=this,$self=this;
+return $self.owner;
+
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: [],
+source: "origin\x0a\x09^ owner",
+referencedClasses: [],
+//>>excludeEnd("ide");
+pragmas: [],
+messageSends: []
+}),
+$globals.CompiledMethod);
+
 $core.addMethod(
 $core.method({
 selector: "package",
@@ -1074,7 +1228,7 @@ var self=this,$self=this;
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
 var $1,$receiver;
-$1=$self._methodClass();
+$1=$self._origin();
 if(($receiver = $1) == null || $receiver.a$nil){
 return $1;
 } else {
@@ -1088,11 +1242,11 @@ return $recv(class_)._packageOfProtocol_($self._protocol());
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: [],
-source: "package\x0a\x09\x22Answer the package the receiver belongs to:\x0a\x09- if it is an extension method, answer the corresponding package\x0a\x09- else answer the `methodClass` package\x22\x0a\x09\x0a\x09^ self methodClass ifNotNil: [ :class | class packageOfProtocol: self protocol ]",
+source: "package\x0a\x09\x22Answer the package the receiver belongs to:\x0a\x09- if it is an extension method, answer the corresponding package\x0a\x09- else answer the `methodClass` package\x22\x0a\x09\x0a\x09^ self origin ifNotNil: [ :class | class packageOfProtocol: self protocol ]",
 referencedClasses: [],
 //>>excludeEnd("ide");
 pragmas: [],
-messageSends: ["ifNotNil:", "methodClass", "packageOfProtocol:", "protocol"]
+messageSends: ["ifNotNil:", "origin", "packageOfProtocol:", "protocol"]
 }),
 $globals.CompiledMethod);
 
@@ -1215,14 +1369,14 @@ $recv($4)._oldProtocol_(oldProtocol);
 $3=$recv($4)._yourself();
 $recv($2)._announce_($3);
 }
-$5=$self._methodClass();
+$5=$self._origin();
 if(($receiver = $5) == null || $receiver.a$nil){
 $5;
 } else {
-var methodClass;
-methodClass=$receiver;
-$recv($recv(methodClass)._organization())._addElement_(aString);
-$recv(methodClass)._removeProtocolIfEmpty_(oldProtocol);
+var origin;
+origin=$receiver;
+$recv($recv(origin)._organization())._addElement_(aString);
+$recv(origin)._removeProtocolIfEmpty_(oldProtocol);
 }
 return self;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
@@ -1231,11 +1385,11 @@ return self;
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: ["aString"],
-source: "protocol: aString\x0a\x09| oldProtocol |\x0a\x09oldProtocol := self protocol.\x0a\x09protocol := aString.\x0a\x0a\x09oldProtocol ifNotNil: [\x0a\x09\x09SystemAnnouncer current announce: (MethodMoved new\x0a\x09\x09\x09method: self;\x0a\x09\x09\x09oldProtocol: oldProtocol;\x0a\x09\x09\x09yourself) ].\x0a\x0a\x09self methodClass ifNotNil: [ :methodClass |\x0a\x09\x09methodClass organization addElement: aString.\x0a\x09\x09methodClass removeProtocolIfEmpty: oldProtocol ]",
+source: "protocol: aString\x0a\x09| oldProtocol |\x0a\x09oldProtocol := self protocol.\x0a\x09protocol := aString.\x0a\x0a\x09oldProtocol ifNotNil: [\x0a\x09\x09SystemAnnouncer current announce: (MethodMoved new\x0a\x09\x09\x09method: self;\x0a\x09\x09\x09oldProtocol: oldProtocol;\x0a\x09\x09\x09yourself) ].\x0a\x0a\x09self origin ifNotNil: [ :origin |\x0a\x09\x09origin organization addElement: aString.\x0a\x09\x09origin removeProtocolIfEmpty: oldProtocol ]",
 referencedClasses: ["SystemAnnouncer", "MethodMoved"],
 //>>excludeEnd("ide");
 pragmas: [],
-messageSends: ["protocol", "ifNotNil:", "announce:", "current", "method:", "new", "oldProtocol:", "yourself", "methodClass", "addElement:", "organization", "removeProtocolIfEmpty:"]
+messageSends: ["protocol", "ifNotNil:", "announce:", "current", "method:", "new", "oldProtocol:", "yourself", "origin", "addElement:", "organization", "removeProtocolIfEmpty:"]
 }),
 $globals.CompiledMethod);
 
@@ -3214,100 +3368,34 @@ var self=this,$self=this;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
-var $2,$3,$4,$6,$8,$7,$5,$12,$11,$10,$9,$13,$17,$16,$19,$18,$15,$14,$1,$receiver;
-$2=$self._isBlockContext();
-if($core.assert($2)){
-$3="a block (in ".__comma($recv($self._methodContext())._asString());
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-$ctx1.sendIdx[","]=2;
-//>>excludeEnd("ctx");
-$1=$recv($3).__comma(")");
+var $1,$2,$receiver;
+$1=$self._isBlockContext();
+if($core.assert($1)){
+return $recv("a block (in ".__comma($recv($self._methodContext())._asString())).__comma(")");
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx1.sendIdx[","]=1;
 //>>excludeEnd("ctx");
 } else {
-var methodClass;
-$4=$self._method();
-if(($receiver = $4) == null || $receiver.a$nil){
-methodClass=$4;
+$2=$self._method();
+if(($receiver = $2) == null || $receiver.a$nil){
+return $2;
 } else {
 var method;
 method=$receiver;
-methodClass=$recv(method)._methodClass();
-}
-$6=methodClass;
-$8=$self._receiver();
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-$ctx1.sendIdx["receiver"]=1;
-//>>excludeEnd("ctx");
-$7=$recv($8)._class();
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-$ctx1.sendIdx["class"]=1;
-//>>excludeEnd("ctx");
-$5=$recv($6).__eq($7);
-if($core.assert($5)){
-$12=$self._receiver();
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-$ctx1.sendIdx["receiver"]=2;
-//>>excludeEnd("ctx");
-$11=$recv($12)._class();
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-$ctx1.sendIdx["class"]=2;
-//>>excludeEnd("ctx");
-$10=$recv($11)._name();
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-$ctx1.sendIdx["name"]=1;
-//>>excludeEnd("ctx");
-$9=$recv($10).__comma(" >> ");
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-$ctx1.sendIdx[","]=4;
-//>>excludeEnd("ctx");
-$13=$self._selector();
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-$ctx1.sendIdx["selector"]=1;
-//>>excludeEnd("ctx");
-$1=$recv($9).__comma($13);
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-$ctx1.sendIdx[","]=3;
-//>>excludeEnd("ctx");
-} else {
-$17=$recv($recv($self._receiver())._class())._name();
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-$ctx1.sendIdx["name"]=2;
-//>>excludeEnd("ctx");
-$16=$recv($17).__comma("(");
-$19=methodClass;
-if(($receiver = $19) == null || $receiver.a$nil){
-$18="nil";
-} else {
-$18=$recv(methodClass)._name();
+return $recv(method)._asStringForClass_($recv($self._receiver())._class());
 }
-$15=$recv($16).__comma($18);
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-$ctx1.sendIdx[","]=7;
-//>>excludeEnd("ctx");
-$14=$recv($15).__comma(") >> ");
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-$ctx1.sendIdx[","]=6;
-//>>excludeEnd("ctx");
-$1=$recv($14).__comma($self._selector());
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-$ctx1.sendIdx[","]=5;
-//>>excludeEnd("ctx");
 }
-}
-return $1;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 }, function($ctx1) {$ctx1.fill(self,"asString",{})});
 //>>excludeEnd("ctx");
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: [],
-source: "asString\x0a\x09^ self isBlockContext\x0a\x09\x09ifTrue: [ 'a block (in ', self methodContext asString, ')' ]\x0a\x09\x09ifFalse: [ \x0a\x09\x09\x09| methodClass |\x0a\x09\x09\x09methodClass := self method ifNotNil: [ :method | method methodClass ].\x0a\x09\x09\x09methodClass = self receiver class \x0a\x09\x09\x09\x09ifTrue: [ self receiver class name, ' >> ', self selector ]\x0a\x09\x09\x09\x09ifFalse: [ self receiver class name, '(', (methodClass ifNil: [ 'nil' ] ifNotNil: [ methodClass name ]), ') >> ', self selector ] ]",
+source: "asString\x0a\x09^ self isBlockContext\x0a\x09\x09ifTrue: [ 'a block (in ', self methodContext asString, ')' ]\x0a\x09\x09ifFalse: [ self method ifNotNil: [ :method | method asStringForClass: self receiver class ] ]",
 referencedClasses: [],
 //>>excludeEnd("ide");
 pragmas: [],
-messageSends: ["ifTrue:ifFalse:", "isBlockContext", ",", "asString", "methodContext", "ifNotNil:", "method", "methodClass", "=", "class", "receiver", "name", "selector", "ifNil:ifNotNil:"]
+messageSends: ["ifTrue:ifFalse:", "isBlockContext", ",", "asString", "methodContext", "ifNotNil:", "method", "asStringForClass:", "class", "receiver"]
 }),
 $globals.TMethodContext);
 

+ 25 - 10
lang/src/Kernel-Methods.st

@@ -253,12 +253,16 @@ methodClass
 	^ owner
 !
 
+origin
+	^ owner
+!
+
 package
 	"Answer the package the receiver belongs to:
 	- if it is an extension method, answer the corresponding package
 	- else answer the `methodClass` package"
 	
-	^ self methodClass ifNotNil: [ :class | class packageOfProtocol: self protocol ]
+	^ self origin ifNotNil: [ :class | class packageOfProtocol: self protocol ]
 !
 
 pragmas
@@ -284,9 +288,9 @@ protocol: aString
 			oldProtocol: oldProtocol;
 			yourself) ].
 
-	self methodClass ifNotNil: [ :methodClass |
-		methodClass organization addElement: aString.
-		methodClass removeProtocolIfEmpty: oldProtocol ]
+	self origin ifNotNil: [ :origin |
+		origin organization addElement: aString.
+		origin removeProtocolIfEmpty: oldProtocol ]
 !
 
 referencedClasses
@@ -315,6 +319,22 @@ browse
 	Finder findMethod: self
 ! !
 
+!CompiledMethod methodsFor: 'converting'!
+
+asString
+	^ self asStringForClass: self methodClass
+!
+
+asStringForClass: aClass
+	| result |
+	result := aClass name.
+	self methodClass = aClass 
+		ifFalse: [ result := result, ' (', (self methodClass ifNil: [ 'nil' ] ifNotNil: [ self methodClass name ]), ')'].
+	(self origin = aClass | (self origin = self methodClass)) 
+		ifFalse: [ result := result, ' /', (self origin ifNil: [ 'nil' ] ifNotNil: [ self origin name ]), '/'].
+	^ result, ' >> ', self selector symbolPrintString
+! !
+
 !CompiledMethod methodsFor: 'defaults'!
 
 defaultProtocol
@@ -906,12 +926,7 @@ supercall
 asString
 	^ self isBlockContext
 		ifTrue: [ 'a block (in ', self methodContext asString, ')' ]
-		ifFalse: [ 
-			| methodClass |
-			methodClass := self method ifNotNil: [ :method | method methodClass ].
-			methodClass = self receiver class 
-				ifTrue: [ self receiver class name, ' >> ', self selector ]
-				ifFalse: [ self receiver class name, '(', (methodClass ifNil: [ 'nil' ] ifNotNil: [ methodClass name ]), ') >> ', self selector ] ]
+		ifFalse: [ self method ifNotNil: [ :method | method asStringForClass: self receiver class ] ]
 ! !
 
 !TMethodContext methodsFor: 'printing'!

+ 3 - 3
lang/src/Platform-ImportExport.js

@@ -1395,7 +1395,7 @@ $recv(aStream)._lf();
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx1.sendIdx["lf"]=13;
 //>>excludeEnd("ctx");
-$recv(aStream)._write_([$recv($recv(aMethod)._methodClass())._asJavaScriptSource(),");"]);
+$recv(aStream)._write_([$recv($recv(aMethod)._origin())._asJavaScriptSource(),");"]);
 $recv(aStream)._lf();
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx1.sendIdx["lf"]=14;
@@ -1408,11 +1408,11 @@ return self;
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: ["aMethod", "aStream"],
-source: "exportMethod: aMethod on: aStream\x0a\x09aStream\x0a\x09\x09write: '$core.addMethod('; lf;\x0a\x09\x09write: '$core.method({'; lf;\x0a\x09\x09write: { 'selector: '. aMethod selector asJavaScriptSource. ',' }; lf;\x0a\x09\x09write: { 'protocol: '. aMethod protocol asJavaScriptSource. ',' }; lf;\x0a\x09\x09write: { 'fn: '. aMethod fn compiledSource. ',' }; lf;\x0a\x09\x09write: '//>>excludeStart(\x22ide\x22, pragmas.excludeIdeData);'; lf;\x0a\x09\x09write: { 'args: '. aMethod arguments asJavaScriptSource. ',' }; lf;\x0a\x09\x09write: { 'source: '. aMethod source asJavaScriptSource. ',' }; lf;\x0a\x09\x09write: { 'referencedClasses: '. aMethod referencedClasses asJavaScriptSource. ',' }; lf;\x0a\x09\x09write: '//>>excludeEnd(\x22ide\x22);'; lf;\x0a\x09\x09write: { 'pragmas: '. aMethod basicPragmas asJavaScriptSource. ',' }; lf;\x0a\x09\x09write: { 'messageSends: '. aMethod messageSends asJavaScriptSource }; lf;\x0a\x09\x09write: '}),'; lf;\x0a\x09\x09write: { aMethod methodClass asJavaScriptSource. ');' }; lf; lf",
+source: "exportMethod: aMethod on: aStream\x0a\x09aStream\x0a\x09\x09write: '$core.addMethod('; lf;\x0a\x09\x09write: '$core.method({'; lf;\x0a\x09\x09write: { 'selector: '. aMethod selector asJavaScriptSource. ',' }; lf;\x0a\x09\x09write: { 'protocol: '. aMethod protocol asJavaScriptSource. ',' }; lf;\x0a\x09\x09write: { 'fn: '. aMethod fn compiledSource. ',' }; lf;\x0a\x09\x09write: '//>>excludeStart(\x22ide\x22, pragmas.excludeIdeData);'; lf;\x0a\x09\x09write: { 'args: '. aMethod arguments asJavaScriptSource. ',' }; lf;\x0a\x09\x09write: { 'source: '. aMethod source asJavaScriptSource. ',' }; lf;\x0a\x09\x09write: { 'referencedClasses: '. aMethod referencedClasses asJavaScriptSource. ',' }; lf;\x0a\x09\x09write: '//>>excludeEnd(\x22ide\x22);'; lf;\x0a\x09\x09write: { 'pragmas: '. aMethod basicPragmas asJavaScriptSource. ',' }; lf;\x0a\x09\x09write: { 'messageSends: '. aMethod messageSends asJavaScriptSource }; lf;\x0a\x09\x09write: '}),'; lf;\x0a\x09\x09write: { aMethod origin asJavaScriptSource. ');' }; lf; lf",
 referencedClasses: [],
 //>>excludeEnd("ide");
 pragmas: [],
-messageSends: ["write:", "lf", "asJavaScriptSource", "selector", "protocol", "compiledSource", "fn", "arguments", "source", "referencedClasses", "basicPragmas", "messageSends", "methodClass"]
+messageSends: ["write:", "lf", "asJavaScriptSource", "selector", "protocol", "compiledSource", "fn", "arguments", "source", "referencedClasses", "basicPragmas", "messageSends", "origin"]
 }),
 $globals.Exporter);
 

+ 1 - 1
lang/src/Platform-ImportExport.st

@@ -344,7 +344,7 @@ exportMethod: aMethod on: aStream
 		write: { 'pragmas: '. aMethod basicPragmas asJavaScriptSource. ',' }; lf;
 		write: { 'messageSends: '. aMethod messageSends asJavaScriptSource }; lf;
 		write: '}),'; lf;
-		write: { aMethod methodClass asJavaScriptSource. ');' }; lf; lf
+		write: { aMethod origin asJavaScriptSource. ');' }; lf; lf
 !
 
 exportPackage: aPackage on: aStream

+ 13 - 13
lang/src/Platform-Services.js

@@ -871,17 +871,17 @@ return $core.withContext(function($ctx1) {
 var $2,$3,$1,$5,$4;
 destinationClass=$self._classNamed_(aClassName);
 $2=destinationClass;
-$3=$recv(aMethod)._methodClass();
+$3=$recv(aMethod)._origin();
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
-$ctx1.sendIdx["methodClass"]=1;
+$ctx1.sendIdx["origin"]=1;
 //>>excludeEnd("ctx");
 $1=$recv($2).__eq_eq($3);
 if($core.assert($1)){
 return self;
 }
-$5=$recv(aMethod)._methodClass();
+$5=$recv(aMethod)._origin();
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
-$ctx1.sendIdx["methodClass"]=2;
+$ctx1.sendIdx["origin"]=2;
 //>>excludeEnd("ctx");
 $4=$recv($5)._isMetaclass();
 if($core.assert($4)){
@@ -889,7 +889,7 @@ destinationClass=$recv(destinationClass)._theMetaClass();
 destinationClass;
 }
 $recv(destinationClass)._compile_protocol_($recv(aMethod)._source(),$recv(aMethod)._protocol());
-$recv($recv(aMethod)._methodClass())._removeCompiledMethod_(aMethod);
+$recv($recv(aMethod)._origin())._removeCompiledMethod_(aMethod);
 return self;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 }, function($ctx1) {$ctx1.fill(self,"moveMethod:toClass:",{aMethod:aMethod,aClassName:aClassName,destinationClass:destinationClass})});
@@ -897,11 +897,11 @@ return self;
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: ["aMethod", "aClassName"],
-source: "moveMethod: aMethod toClass: aClassName\x0a\x09| destinationClass |\x0a\x09\x0a\x09destinationClass := self classNamed: aClassName.\x0a\x09destinationClass == aMethod methodClass ifTrue: [ ^ self ].\x0a\x09\x0a\x09aMethod methodClass isMetaclass ifTrue: [ \x0a\x09\x09destinationClass := destinationClass theMetaClass ].\x0a\x09\x0a\x09destinationClass \x0a\x09\x09compile: aMethod source\x0a\x09\x09protocol: aMethod protocol.\x0a\x09aMethod methodClass \x0a\x09\x09removeCompiledMethod: aMethod",
+source: "moveMethod: aMethod toClass: aClassName\x0a\x09| destinationClass |\x0a\x09\x0a\x09destinationClass := self classNamed: aClassName.\x0a\x09destinationClass == aMethod origin ifTrue: [ ^ self ].\x0a\x09\x0a\x09aMethod origin isMetaclass ifTrue: [ \x0a\x09\x09destinationClass := destinationClass theMetaClass ].\x0a\x09\x0a\x09destinationClass \x0a\x09\x09compile: aMethod source\x0a\x09\x09protocol: aMethod protocol.\x0a\x09aMethod origin \x0a\x09\x09removeCompiledMethod: aMethod",
 referencedClasses: [],
 //>>excludeEnd("ide");
 pragmas: [],
-messageSends: ["classNamed:", "ifTrue:", "==", "methodClass", "isMetaclass", "theMetaClass", "compile:protocol:", "source", "protocol", "removeCompiledMethod:"]
+messageSends: ["classNamed:", "ifTrue:", "==", "origin", "isMetaclass", "theMetaClass", "compile:protocol:", "source", "protocol", "removeCompiledMethod:"]
 }),
 $globals.Environment);
 
@@ -915,7 +915,7 @@ var self=this,$self=this;
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
 $recv(aMethod)._protocol_(aProtocol);
-$recv($recv(aMethod)._methodClass())._compile_protocol_($recv(aMethod)._source(),$recv(aMethod)._protocol());
+$recv($recv(aMethod)._origin())._compile_protocol_($recv(aMethod)._source(),$recv(aMethod)._protocol());
 return self;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 }, function($ctx1) {$ctx1.fill(self,"moveMethod:toProtocol:",{aMethod:aMethod,aProtocol:aProtocol})});
@@ -923,11 +923,11 @@ return self;
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: ["aMethod", "aProtocol"],
-source: "moveMethod: aMethod toProtocol: aProtocol\x0a\x09aMethod protocol: aProtocol.\x0a\x0a\x09aMethod methodClass\x0a\x09\x09compile: aMethod source\x0a\x09\x09protocol: aMethod protocol",
+source: "moveMethod: aMethod toProtocol: aProtocol\x0a\x09aMethod protocol: aProtocol.\x0a\x0a\x09aMethod origin\x0a\x09\x09compile: aMethod source\x0a\x09\x09protocol: aMethod protocol",
 referencedClasses: [],
 //>>excludeEnd("ide");
 pragmas: [],
-messageSends: ["protocol:", "compile:protocol:", "methodClass", "source", "protocol"]
+messageSends: ["protocol:", "compile:protocol:", "origin", "source", "protocol"]
 }),
 $globals.Environment);
 
@@ -1114,7 +1114,7 @@ var self=this,$self=this;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
-$recv($recv(aMethod)._methodClass())._removeCompiledMethod_(aMethod);
+$recv($recv(aMethod)._origin())._removeCompiledMethod_(aMethod);
 return self;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 }, function($ctx1) {$ctx1.fill(self,"removeMethod:",{aMethod:aMethod})});
@@ -1122,11 +1122,11 @@ return self;
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: ["aMethod"],
-source: "removeMethod: aMethod\x0a\x09aMethod methodClass removeCompiledMethod: aMethod",
+source: "removeMethod: aMethod\x0a\x09aMethod origin removeCompiledMethod: aMethod",
 referencedClasses: [],
 //>>excludeEnd("ide");
 pragmas: [],
-messageSends: ["removeCompiledMethod:", "methodClass"]
+messageSends: ["removeCompiledMethod:", "origin"]
 }),
 $globals.Environment);
 

+ 5 - 5
lang/src/Platform-Services.st

@@ -167,22 +167,22 @@ moveMethod: aMethod toClass: aClassName
 	| destinationClass |
 	
 	destinationClass := self classNamed: aClassName.
-	destinationClass == aMethod methodClass ifTrue: [ ^ self ].
+	destinationClass == aMethod origin ifTrue: [ ^ self ].
 	
-	aMethod methodClass isMetaclass ifTrue: [ 
+	aMethod origin isMetaclass ifTrue: [ 
 		destinationClass := destinationClass theMetaClass ].
 	
 	destinationClass 
 		compile: aMethod source
 		protocol: aMethod protocol.
-	aMethod methodClass 
+	aMethod origin 
 		removeCompiledMethod: aMethod
 !
 
 moveMethod: aMethod toProtocol: aProtocol
 	aMethod protocol: aProtocol.
 
-	aMethod methodClass
+	aMethod origin
 		compile: aMethod source
 		protocol: aMethod protocol
 !
@@ -192,7 +192,7 @@ removeClass: aClass
 !
 
 removeMethod: aMethod
-	aMethod methodClass removeCompiledMethod: aMethod
+	aMethod origin removeCompiledMethod: aMethod
 !
 
 removeProtocol: aString from: aClass