Browse Source

Migrate / copy copies trait composition for classes.

Herbert Vojčík 7 years ago
parent
commit
b6fb71ee1c
2 changed files with 37 additions and 16 deletions
  1. 34 15
      src/Kernel-Classes.js
  2. 3 1
      src/Kernel-Classes.st

+ 34 - 15
src/Kernel-Classes.js

@@ -3379,7 +3379,7 @@ var self=this;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
-var $1,$3,$2,$4,$5,$6,$7,$9,$8,$11,$10,$13,$14,$12;
+var $1,$3,$2,$4,$5,$6,$7,$8,$10,$9,$12,$11,$14,$15,$13,$16,$17,$18,$19;
 $recv(anotherClass)._comment_($recv(aClass)._comment());
 $1=$recv(aClass)._methodDictionary();
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
@@ -3422,38 +3422,57 @@ $ctx2.sendIdx["install:forClass:protocol:"]=1;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx1.sendIdx["valuesDo:"]=1;
 //>>excludeEnd("ctx");
-$7=$recv(anotherClass)._class();
+$7=$recv(aClass)._traitComposition();
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx["traitComposition"]=1;
+//>>excludeEnd("ctx");
+$recv(anotherClass)._setTraitComposition_($7);
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx["setTraitComposition:"]=1;
+//>>excludeEnd("ctx");
+$8=$recv(anotherClass)._class();
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx1.sendIdx["class"]=1;
 //>>excludeEnd("ctx");
-$9=$recv(aClass)._class();
+$10=$recv(aClass)._class();
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx1.sendIdx["class"]=2;
 //>>excludeEnd("ctx");
-$8=$recv($9)._instanceVariableNames();
-self._basicClass_instanceVariables_($7,$8);
-$11=$recv(aClass)._class();
+$9=$recv($10)._instanceVariableNames();
+self._basicClass_instanceVariables_($8,$9);
+$12=$recv(aClass)._class();
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx1.sendIdx["class"]=3;
 //>>excludeEnd("ctx");
-$10=$recv($11)._methodDictionary();
-$recv($10)._valuesDo_((function(each){
+$11=$recv($12)._methodDictionary();
+$recv($11)._valuesDo_((function(each){
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx2) {
 //>>excludeEnd("ctx");
-$13=$recv(each)._methodClass();
-$14=$recv(aClass)._class();
+$14=$recv(each)._methodClass();
+$15=$recv(aClass)._class();
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx2.sendIdx["class"]=4;
 //>>excludeEnd("ctx");
-$12=$recv($13).__eq($14);
-if($core.assert($12)){
-return $recv($recv($globals.Compiler)._new())._install_forClass_protocol_($recv(each)._source(),$recv(anotherClass)._class(),$recv(each)._protocol());
+$13=$recv($14).__eq($15);
+if($core.assert($13)){
+$16=$recv($globals.Compiler)._new();
+$17=$recv(each)._source();
+$18=$recv(anotherClass)._class();
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx2.sendIdx["class"]=5;
+//>>excludeEnd("ctx");
+return $recv($16)._install_forClass_protocol_($17,$18,$recv(each)._protocol());
 }
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)});
 //>>excludeEnd("ctx");
 }));
+$19=$recv(anotherClass)._class();
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx["class"]=6;
+//>>excludeEnd("ctx");
+$recv($19)._setTraitComposition_($recv($recv(aClass)._class())._traitComposition());
 return self;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 }, function($ctx1) {$ctx1.fill(self,"copyClass:to:",{aClass:aClass,anotherClass:anotherClass},$globals.ClassBuilder)});
@@ -3461,10 +3480,10 @@ 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\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 ] ]",
+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",
 referencedClasses: ["Compiler"],
 //>>excludeEnd("ide");
-messageSends: ["comment:", "comment", "valuesDo:", "methodDictionary", "ifTrue:", "=", "methodClass", "install:forClass:protocol:", "new", "source", "protocol", "basicClass:instanceVariables:", "class", "instanceVariableNames"]
+messageSends: ["comment:", "comment", "valuesDo:", "methodDictionary", "ifTrue:", "=", "methodClass", "install:forClass:protocol:", "new", "source", "protocol", "setTraitComposition:", "traitComposition", "basicClass:instanceVariables:", "class", "instanceVariableNames"]
 }),
 $globals.ClassBuilder);
 

+ 3 - 1
src/Kernel-Classes.st

@@ -872,12 +872,14 @@ copyClass: aClass to: anotherClass
 	aClass methodDictionary valuesDo: [ :each |
 		each methodClass = 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: [
-			Compiler new install: each source forClass: anotherClass class protocol: each protocol ] ]
+			Compiler new install: each source forClass: anotherClass class protocol: each protocol ] ].
+	anotherClass class setTraitComposition: aClass class traitComposition
 ! !
 
 !ClassBuilder methodsFor: 'method definition'!