Browse Source

Class creation API transitive closure.

Herby Vojčík 5 years ago
parent
commit
f52d88ddde

+ 29 - 7
lang/src/Kernel-Classes.js

@@ -1203,25 +1203,47 @@ $core.addMethod(
 $core.method({
 selector: "uses:instanceVariableNames:",
 protocol: "accessing",
+fn: function (aTraitCompositionDescription,aString){
+var self=this,$self=this;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+return $self._uses_slots_(aTraitCompositionDescription,$self._slotsFromInstanceVariablesString_(aString));
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"uses:instanceVariableNames:",{aTraitCompositionDescription:aTraitCompositionDescription,aString:aString},$globals.Metaclass)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: ["aTraitCompositionDescription", "aString"],
+source: "uses: aTraitCompositionDescription instanceVariableNames: aString\x0a\x09\x22Kept for file-in compatibility.\x22\x0a\x09^ self uses: aTraitCompositionDescription slots: (self slotsFromInstanceVariablesString: aString)",
+referencedClasses: [],
+//>>excludeEnd("ide");
+messageSends: ["uses:slots:", "slotsFromInstanceVariablesString:"]
+}),
+$globals.Metaclass);
+
+$core.addMethod(
+$core.method({
+selector: "uses:slots:",
+protocol: "accessing",
 fn: function (aTraitCompositionDescription,aCollection){
 var self=this,$self=this;
-var metaclass;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
-metaclass=$self._instanceVariableNames_(aCollection);
-$recv(metaclass)._setTraitComposition_($recv(aTraitCompositionDescription)._asTraitComposition());
-return metaclass;
+$self._slots_(aCollection);
+$self._setTraitComposition_($recv(aTraitCompositionDescription)._asTraitComposition());
+return self;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx1) {$ctx1.fill(self,"uses:instanceVariableNames:",{aTraitCompositionDescription:aTraitCompositionDescription,aCollection:aCollection,metaclass:metaclass},$globals.Metaclass)});
+}, function($ctx1) {$ctx1.fill(self,"uses:slots:",{aTraitCompositionDescription:aTraitCompositionDescription,aCollection:aCollection},$globals.Metaclass)});
 //>>excludeEnd("ctx");
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: ["aTraitCompositionDescription", "aCollection"],
-source: "uses: aTraitCompositionDescription instanceVariableNames: aCollection\x0a\x09| metaclass |\x0a\x09metaclass := self instanceVariableNames: aCollection.\x0a\x09metaclass setTraitComposition: aTraitCompositionDescription asTraitComposition.\x0a\x09^ metaclass",
+source: "uses: aTraitCompositionDescription slots: aCollection\x0a\x09self\x0a\x09\x09slots: aCollection;\x0a\x09\x09setTraitComposition: aTraitCompositionDescription asTraitComposition.\x0a\x09^ self",
 referencedClasses: [],
 //>>excludeEnd("ide");
-messageSends: ["instanceVariableNames:", "setTraitComposition:", "asTraitComposition"]
+messageSends: ["slots:", "setTraitComposition:", "asTraitComposition"]
 }),
 $globals.Metaclass);
 

+ 10 - 5
lang/src/Kernel-Classes.st

@@ -270,11 +270,16 @@ theNonMetaClass
 	^ self instanceClass
 !
 
-uses: aTraitCompositionDescription instanceVariableNames: aCollection
-	| metaclass |
-	metaclass := self instanceVariableNames: aCollection.
-	metaclass setTraitComposition: aTraitCompositionDescription asTraitComposition.
-	^ metaclass
+uses: aTraitCompositionDescription instanceVariableNames: aString
+	"Kept for file-in compatibility."
+	^ self uses: aTraitCompositionDescription slots: (self slotsFromInstanceVariablesString: aString)
+!
+
+uses: aTraitCompositionDescription slots: aCollection
+	self
+		slots: aCollection;
+		setTraitComposition: aTraitCompositionDescription asTraitComposition.
+	^ self
 ! !
 
 !Metaclass methodsFor: 'converting'!

+ 152 - 14
lang/src/Kernel-Helpers.js

@@ -14,17 +14,17 @@ var self=this,$self=this;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
-return $self._subclass_instanceVariableNames_package_(aString,"",nil);
+return $self._subclass_slots_package_(aString,[],nil);
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 }, function($ctx1) {$ctx1.fill(self,"subclass:",{aString:aString},$globals.TSubclassable)});
 //>>excludeEnd("ctx");
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: ["aString"],
-source: "subclass: aString \x0a\x09\x22Kept for file-in compatibility.\x22\x0a\x09^ self subclass: aString instanceVariableNames: '' package: nil",
+source: "subclass: aString \x0a\x09\x22Kept for file-in compatibility.\x22\x0a\x09^ self subclass: aString slots: #() package: nil",
 referencedClasses: [],
 //>>excludeEnd("ide");
-messageSends: ["subclass:instanceVariableNames:package:"]
+messageSends: ["subclass:slots:package:"]
 }),
 $globals.TSubclassable);
 
@@ -106,17 +106,109 @@ var self=this,$self=this;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
-return $recv($recv($globals.ClassBuilder)._new())._superclass_subclass_slots_package_(self,$recv(aString)._asString(),$self._slotsFromInstanceVariablesString_(aString2),aString3);
+return $self._subclass_slots_package_(aString,$self._slotsFromInstanceVariablesString_(aString2),aString3);
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 }, function($ctx1) {$ctx1.fill(self,"subclass:instanceVariableNames:package:",{aString:aString,aString2:aString2,aString3:aString3},$globals.TSubclassable)});
 //>>excludeEnd("ctx");
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: ["aString", "aString2", "aString3"],
-source: "subclass: aString instanceVariableNames: aString2 package: aString3\x0a\x09\x22Kept for file-in compatibility.\x22\x0a\x09^ ClassBuilder new\x0a\x09\x09superclass: self subclass: aString asString slots: (self slotsFromInstanceVariablesString: aString2) package: aString3",
+source: "subclass: aString instanceVariableNames: aString2 package: aString3\x0a\x09\x22Kept for file-in compatibility.\x22\x0a\x09^ self subclass: aString slots: (self slotsFromInstanceVariablesString: aString2) package: aString3",
+referencedClasses: [],
+//>>excludeEnd("ide");
+messageSends: ["subclass:slots:package:", "slotsFromInstanceVariablesString:"]
+}),
+$globals.TSubclassable);
+
+$core.addMethod(
+$core.method({
+selector: "subclass:slots:",
+protocol: "class creation",
+fn: function (aString,aCollection){
+var self=this,$self=this;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+return $self._subclass_slots_package_(aString,aCollection,nil);
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"subclass:slots:",{aString:aString,aCollection:aCollection},$globals.TSubclassable)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: ["aString", "aCollection"],
+source: "subclass: aString slots: aCollection\x0a\x09\x22Kept for file-in compatibility.\x22\x0a\x09^ self subclass: aString slots: aCollection package: nil",
+referencedClasses: [],
+//>>excludeEnd("ide");
+messageSends: ["subclass:slots:package:"]
+}),
+$globals.TSubclassable);
+
+$core.addMethod(
+$core.method({
+selector: "subclass:slots:classVariables:package:",
+protocol: "class creation",
+fn: function (aString,aCollection,anObject,anotherString){
+var self=this,$self=this;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+return $recv($recv($globals.ClassBuilder)._new())._superclass_subclass_slots_package_(self,aString,aCollection,anotherString);
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"subclass:slots:classVariables:package:",{aString:aString,aCollection:aCollection,anObject:anObject,anotherString:anotherString},$globals.TSubclassable)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: ["aString", "aCollection", "anObject", "anotherString"],
+source: "subclass: aString slots: aCollection classVariables: anObject package: anotherString\x0a\x09\x22Kept for file-in compatibility. ignores class variables.\x22\x0a\x09^ ClassBuilder new\x0a\x09\x09superclass: self subclass: aString slots: aCollection package: anotherString",
+referencedClasses: ["ClassBuilder"],
+//>>excludeEnd("ide");
+messageSends: ["superclass:subclass:slots:package:", "new"]
+}),
+$globals.TSubclassable);
+
+$core.addMethod(
+$core.method({
+selector: "subclass:slots:classVariables:poolDictionaries:package:",
+protocol: "class creation",
+fn: function (aString,aCollection,anObject,anotherObject,anotherString){
+var self=this,$self=this;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+return $recv($recv($globals.ClassBuilder)._new())._superclass_subclass_slots_package_(self,aString,aCollection,anotherString);
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"subclass:slots:classVariables:poolDictionaries:package:",{aString:aString,aCollection:aCollection,anObject:anObject,anotherObject:anotherObject,anotherString:anotherString},$globals.TSubclassable)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: ["aString", "aCollection", "anObject", "anotherObject", "anotherString"],
+source: "subclass: aString slots: aCollection classVariables: anObject poolDictionaries: anotherObject package: anotherString\x0a\x09\x22Kept for file-in compatibility. ignores class variables and pools.\x22\x0a\x09^ ClassBuilder new\x0a\x09\x09superclass: self subclass: aString slots: aCollection package: anotherString",
+referencedClasses: ["ClassBuilder"],
+//>>excludeEnd("ide");
+messageSends: ["superclass:subclass:slots:package:", "new"]
+}),
+$globals.TSubclassable);
+
+$core.addMethod(
+$core.method({
+selector: "subclass:slots:package:",
+protocol: "class creation",
+fn: function (aString,aCollection,anotherString){
+var self=this,$self=this;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+return $recv($recv($globals.ClassBuilder)._new())._superclass_subclass_slots_package_(self,aString,aCollection,anotherString);
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"subclass:slots:package:",{aString:aString,aCollection:aCollection,anotherString:anotherString},$globals.TSubclassable)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: ["aString", "aCollection", "anotherString"],
+source: "subclass: aString slots: aCollection package: anotherString\x0a\x09^ ClassBuilder new\x0a\x09\x09superclass: self subclass: aString slots: aCollection package: anotherString",
 referencedClasses: ["ClassBuilder"],
 //>>excludeEnd("ide");
-messageSends: ["superclass:subclass:slots:package:", "new", "asString", "slotsFromInstanceVariablesString:"]
+messageSends: ["superclass:subclass:slots:package:", "new"]
 }),
 $globals.TSubclassable);
 
@@ -129,17 +221,17 @@ var self=this,$self=this;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
-return $self._subclass_uses_instanceVariableNames_package_(aString,aTraitCompositionDescription,"",nil);
+return $self._subclass_uses_slots_package_(aString,aTraitCompositionDescription,[],nil);
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 }, function($ctx1) {$ctx1.fill(self,"subclass:uses:",{aString:aString,aTraitCompositionDescription:aTraitCompositionDescription},$globals.TSubclassable)});
 //>>excludeEnd("ctx");
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: ["aString", "aTraitCompositionDescription"],
-source: "subclass: aString uses: aTraitCompositionDescription \x0a\x09\x22Kept for file-in compatibility.\x22\x0a\x09^ self subclass: aString uses: aTraitCompositionDescription instanceVariableNames: '' package: nil",
+source: "subclass: aString uses: aTraitCompositionDescription \x0a\x09\x22Kept for file-in compatibility.\x22\x0a\x09^ self subclass: aString uses: aTraitCompositionDescription slots: #() package: nil",
 referencedClasses: [],
 //>>excludeEnd("ide");
-messageSends: ["subclass:uses:instanceVariableNames:package:"]
+messageSends: ["subclass:uses:slots:package:"]
 }),
 $globals.TSubclassable);
 
@@ -218,23 +310,69 @@ selector: "subclass:uses:instanceVariableNames:package:",
 protocol: "class creation",
 fn: function (aString,aTraitCompositionDescription,aString2,aString3){
 var self=this,$self=this;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+return $self._subclass_uses_slots_package_(aString,aTraitCompositionDescription,$self._slotsFromInstanceVariablesString_(aString2),aString3);
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"subclass:uses:instanceVariableNames:package:",{aString:aString,aTraitCompositionDescription:aTraitCompositionDescription,aString2:aString2,aString3:aString3},$globals.TSubclassable)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: ["aString", "aTraitCompositionDescription", "aString2", "aString3"],
+source: "subclass: aString uses: aTraitCompositionDescription instanceVariableNames: aString2 package: aString3\x0a\x09\x22Kept for file-in compatibility.\x22\x0a\x09^ self subclass: aString uses: aTraitCompositionDescription slots: (self slotsFromInstanceVariablesString: aString2) package: aString3",
+referencedClasses: [],
+//>>excludeEnd("ide");
+messageSends: ["subclass:uses:slots:package:", "slotsFromInstanceVariablesString:"]
+}),
+$globals.TSubclassable);
+
+$core.addMethod(
+$core.method({
+selector: "subclass:uses:slots:",
+protocol: "class creation",
+fn: function (aString,aTraitCompositionDescription,aCollection){
+var self=this,$self=this;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+return $self._subclass_uses_slots_package_(aString,aTraitCompositionDescription,aCollection,nil);
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"subclass:uses:slots:",{aString:aString,aTraitCompositionDescription:aTraitCompositionDescription,aCollection:aCollection},$globals.TSubclassable)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: ["aString", "aTraitCompositionDescription", "aCollection"],
+source: "subclass: aString uses: aTraitCompositionDescription slots: aCollection\x0a\x09\x22Kept for file-in compatibility.\x22\x0a\x09^ self subclass: aString uses: aTraitCompositionDescription slots: aCollection package: nil",
+referencedClasses: [],
+//>>excludeEnd("ide");
+messageSends: ["subclass:uses:slots:package:"]
+}),
+$globals.TSubclassable);
+
+$core.addMethod(
+$core.method({
+selector: "subclass:uses:slots:package:",
+protocol: "class creation",
+fn: function (aString,aTraitCompositionDescription,aCollection,aString3){
+var self=this,$self=this;
 var cls;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
-cls=$self._subclass_instanceVariableNames_package_(aString,aString2,aString3);
+cls=$self._subclass_slots_package_(aString,aCollection,aString3);
 $recv(cls)._setTraitComposition_($recv(aTraitCompositionDescription)._asTraitComposition());
 return cls;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx1) {$ctx1.fill(self,"subclass:uses:instanceVariableNames:package:",{aString:aString,aTraitCompositionDescription:aTraitCompositionDescription,aString2:aString2,aString3:aString3,cls:cls},$globals.TSubclassable)});
+}, function($ctx1) {$ctx1.fill(self,"subclass:uses:slots:package:",{aString:aString,aTraitCompositionDescription:aTraitCompositionDescription,aCollection:aCollection,aString3:aString3,cls:cls},$globals.TSubclassable)});
 //>>excludeEnd("ctx");
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
-args: ["aString", "aTraitCompositionDescription", "aString2", "aString3"],
-source: "subclass: aString uses: aTraitCompositionDescription instanceVariableNames: aString2 package: aString3\x0a\x09| cls |\x0a\x09cls := self subclass: aString instanceVariableNames: aString2 package: aString3.\x0a\x09cls setTraitComposition: aTraitCompositionDescription asTraitComposition.\x0a\x09^ cls",
+args: ["aString", "aTraitCompositionDescription", "aCollection", "aString3"],
+source: "subclass: aString uses: aTraitCompositionDescription slots: aCollection package: aString3\x0a\x09| cls |\x0a\x09cls := self subclass: aString slots: aCollection package: aString3.\x0a\x09cls setTraitComposition: aTraitCompositionDescription asTraitComposition.\x0a\x09^ cls",
 referencedClasses: [],
 //>>excludeEnd("ide");
-messageSends: ["subclass:instanceVariableNames:package:", "setTraitComposition:", "asTraitComposition"]
+messageSends: ["subclass:slots:package:", "setTraitComposition:", "asTraitComposition"]
 }),
 $globals.TSubclassable);
 

+ 35 - 4
lang/src/Kernel-Helpers.st

@@ -6,7 +6,7 @@ Trait named: #TSubclassable
 
 subclass: aString 
 	"Kept for file-in compatibility."
-	^ self subclass: aString instanceVariableNames: '' package: nil
+	^ self subclass: aString slots: #() package: nil
 !
 
 subclass: aString instanceVariableNames: anotherString
@@ -26,13 +26,34 @@ subclass: aString instanceVariableNames: aString2 classVariableNames: classVars
 
 subclass: aString instanceVariableNames: aString2 package: aString3
 	"Kept for file-in compatibility."
+	^ self subclass: aString slots: (self slotsFromInstanceVariablesString: aString2) package: aString3
+!
+
+subclass: aString slots: aCollection
+	"Kept for file-in compatibility."
+	^ self subclass: aString slots: aCollection package: nil
+!
+
+subclass: aString slots: aCollection classVariables: anObject package: anotherString
+	"Kept for file-in compatibility. ignores class variables."
+	^ ClassBuilder new
+		superclass: self subclass: aString slots: aCollection package: anotherString
+!
+
+subclass: aString slots: aCollection classVariables: anObject poolDictionaries: anotherObject package: anotherString
+	"Kept for file-in compatibility. ignores class variables and pools."
 	^ ClassBuilder new
-		superclass: self subclass: aString asString slots: (self slotsFromInstanceVariablesString: aString2) package: aString3
+		superclass: self subclass: aString slots: aCollection package: anotherString
+!
+
+subclass: aString slots: aCollection package: anotherString
+	^ ClassBuilder new
+		superclass: self subclass: aString slots: aCollection package: anotherString
 !
 
 subclass: aString uses: aTraitCompositionDescription 
 	"Kept for file-in compatibility."
-	^ self subclass: aString uses: aTraitCompositionDescription instanceVariableNames: '' package: nil
+	^ self subclass: aString uses: aTraitCompositionDescription slots: #() package: nil
 !
 
 subclass: aString uses: aTraitCompositionDescription instanceVariableNames: anotherString
@@ -51,8 +72,18 @@ subclass: aString uses: aTraitCompositionDescription instanceVariableNames: aStr
 !
 
 subclass: aString uses: aTraitCompositionDescription instanceVariableNames: aString2 package: aString3
+	"Kept for file-in compatibility."
+	^ self subclass: aString uses: aTraitCompositionDescription slots: (self slotsFromInstanceVariablesString: aString2) package: aString3
+!
+
+subclass: aString uses: aTraitCompositionDescription slots: aCollection
+	"Kept for file-in compatibility."
+	^ self subclass: aString uses: aTraitCompositionDescription slots: aCollection package: nil
+!
+
+subclass: aString uses: aTraitCompositionDescription slots: aCollection package: aString3
 	| cls |
-	cls := self subclass: aString instanceVariableNames: aString2 package: aString3.
+	cls := self subclass: aString slots: aCollection package: aString3.
 	cls setTraitComposition: aTraitCompositionDescription asTraitComposition.
 	^ cls
 ! !

+ 24 - 32
lang/src/Kernel-Tests.js

@@ -2095,7 +2095,7 @@ var instance,oldClass;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
-var $2,$1,$4,$3,$5,$6,$7,$8,$10,$9,$12,$11;
+var $2,$1,$3,$4,$5,$6,$8,$7,$10,$9;
 oldClass=$recv($self.builder)._copyClass_named_($globals.ObjectMock,"ObjectMock2");
 $2=$recv($globals.Smalltalk)._globals();
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
@@ -2106,28 +2106,20 @@ $1=$recv($2)._at_("ObjectMock2");
 $ctx1.sendIdx["at:"]=1;
 //>>excludeEnd("ctx");
 instance=$recv($1)._new();
-$4=$recv($globals.Smalltalk)._globals();
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-$ctx1.sendIdx["globals"]=2;
-//>>excludeEnd("ctx");
-$3=$recv($4)._at_("ObjectMock2");
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-$ctx1.sendIdx["at:"]=2;
-//>>excludeEnd("ctx");
-$recv($globals.ObjectMock)._subclass_instanceVariableNames_package_($3,"","Kernel-Tests");
-$5=$recv(oldClass).__eq_eq($globals.ObjectMock2);
+$recv($globals.ObjectMock)._subclass_instanceVariableNames_package_("ObjectMock2","","Kernel-Tests");
+$3=$recv(oldClass).__eq_eq($globals.ObjectMock2);
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx1.sendIdx["=="]=1;
 //>>excludeEnd("ctx");
-$self._deny_($5);
+$self._deny_($3);
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx1.sendIdx["deny:"]=1;
 //>>excludeEnd("ctx");
-$6=$recv($recv($globals.ObjectMock2)._superclass()).__eq_eq($globals.ObjectMock);
+$4=$recv($recv($globals.ObjectMock2)._superclass()).__eq_eq($globals.ObjectMock);
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx1.sendIdx["=="]=2;
 //>>excludeEnd("ctx");
-$self._assert_($6);
+$self._assert_($4);
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx1.sendIdx["assert:"]=1;
 //>>excludeEnd("ctx");
@@ -2135,41 +2127,41 @@ $self._assert_($recv($recv($globals.ObjectMock2)._instanceVariableNames())._isEm
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx1.sendIdx["assert:"]=2;
 //>>excludeEnd("ctx");
-$7=$recv($globals.ObjectMock2)._selectors();
+$5=$recv($globals.ObjectMock2)._selectors();
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx1.sendIdx["selectors"]=1;
 //>>excludeEnd("ctx");
-$self._assert_equals_($7,$recv(oldClass)._selectors());
+$self._assert_equals_($5,$recv(oldClass)._selectors());
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx1.sendIdx["assert:equals:"]=1;
 //>>excludeEnd("ctx");
-$8=$recv($globals.ObjectMock2)._comment();
+$6=$recv($globals.ObjectMock2)._comment();
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx1.sendIdx["comment"]=1;
 //>>excludeEnd("ctx");
-$self._assert_equals_($8,$recv(oldClass)._comment());
+$self._assert_equals_($6,$recv(oldClass)._comment());
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx1.sendIdx["assert:equals:"]=2;
 //>>excludeEnd("ctx");
-$10=$recv($globals.ObjectMock2)._package();
+$8=$recv($globals.ObjectMock2)._package();
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx1.sendIdx["package"]=1;
 //>>excludeEnd("ctx");
-$9=$recv($10)._name();
+$7=$recv($8)._name();
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx1.sendIdx["name"]=1;
 //>>excludeEnd("ctx");
-$self._assert_equals_($9,"Kernel-Tests");
+$self._assert_equals_($7,"Kernel-Tests");
 $self._assert_($recv($recv($recv($globals.ObjectMock2)._package())._classes())._includes_($globals.ObjectMock2));
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx1.sendIdx["assert:"]=3;
 //>>excludeEnd("ctx");
-$12=$recv(instance)._class();
+$10=$recv(instance)._class();
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx1.sendIdx["class"]=1;
 //>>excludeEnd("ctx");
-$11=$recv($12).__eq_eq($globals.ObjectMock2);
-$self._deny_($11);
+$9=$recv($10).__eq_eq($globals.ObjectMock2);
+$self._deny_($9);
 $self._assert_($recv($recv($recv($globals.Smalltalk)._globals())._at_($recv($recv(instance)._class())._name()))._isNil());
 $recv($globals.Smalltalk)._removeClass_($globals.ObjectMock2);
 return self;
@@ -2179,7 +2171,7 @@ return self;
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: [],
-source: "testClassMigration\x0a\x09| instance oldClass |\x0a\x09\x0a\x09oldClass := builder copyClass: ObjectMock named: 'ObjectMock2'.\x0a\x09instance := (Smalltalk globals at: 'ObjectMock2') new.\x0a\x09\x0a\x09\x22Change the superclass of ObjectMock2\x22\x0a\x09ObjectMock subclass: (Smalltalk globals at: 'ObjectMock2')\x0a\x09\x09instanceVariableNames: ''\x0a\x09\x09package: 'Kernel-Tests'.\x0a\x09\x0a\x09self deny: oldClass == ObjectMock2.\x0a\x09\x0a\x09self assert: ObjectMock2 superclass == ObjectMock.\x0a\x09self assert: ObjectMock2 instanceVariableNames isEmpty.\x0a\x09self assert: ObjectMock2 selectors equals: oldClass selectors.\x0a\x09self assert: ObjectMock2 comment equals: oldClass comment.\x0a\x09self assert: ObjectMock2 package name equals: 'Kernel-Tests'.\x0a\x09self assert: (ObjectMock2 package classes includes: ObjectMock2).\x0a\x09\x0a\x09self deny: instance class == ObjectMock2.\x0a\x09\x22Commeting this out. Tests implementation detail.\x22\x0a\x09\x22self assert: instance class name equals: 'OldObjectMock2'.\x22\x0a\x09\x0a\x09self assert: (Smalltalk globals at: instance class name) isNil.\x0a\x09\x0a\x09Smalltalk removeClass: ObjectMock2",
+source: "testClassMigration\x0a\x09| instance oldClass |\x0a\x09\x0a\x09oldClass := builder copyClass: ObjectMock named: 'ObjectMock2'.\x0a\x09instance := (Smalltalk globals at: 'ObjectMock2') new.\x0a\x09\x0a\x09\x22Change the superclass of ObjectMock2\x22\x0a\x09ObjectMock subclass: #ObjectMock2\x0a\x09\x09instanceVariableNames: ''\x0a\x09\x09package: 'Kernel-Tests'.\x0a\x09\x0a\x09self deny: oldClass == ObjectMock2.\x0a\x09\x0a\x09self assert: ObjectMock2 superclass == ObjectMock.\x0a\x09self assert: ObjectMock2 instanceVariableNames isEmpty.\x0a\x09self assert: ObjectMock2 selectors equals: oldClass selectors.\x0a\x09self assert: ObjectMock2 comment equals: oldClass comment.\x0a\x09self assert: ObjectMock2 package name equals: 'Kernel-Tests'.\x0a\x09self assert: (ObjectMock2 package classes includes: ObjectMock2).\x0a\x09\x0a\x09self deny: instance class == ObjectMock2.\x0a\x09\x22Commeting this out. Tests implementation detail.\x22\x0a\x09\x22self assert: instance class name equals: 'OldObjectMock2'.\x22\x0a\x09\x0a\x09self assert: (Smalltalk globals at: instance class name) isNil.\x0a\x09\x0a\x09Smalltalk removeClass: ObjectMock2",
 referencedClasses: ["ObjectMock", "Smalltalk", "ObjectMock2"],
 //>>excludeEnd("ide");
 messageSends: ["copyClass:named:", "new", "at:", "globals", "subclass:instanceVariableNames:package:", "deny:", "==", "assert:", "superclass", "isEmpty", "instanceVariableNames", "assert:equals:", "selectors", "comment", "name", "package", "includes:", "classes", "class", "isNil", "removeClass:"]
@@ -2202,7 +2194,7 @@ $1=$recv($globals.ObjectMock2)._class();
 $ctx1.sendIdx["class"]=1;
 //>>excludeEnd("ctx");
 $recv($1)._instanceVariableNames_("foo bar");
-$recv($globals.ObjectMock)._subclass_instanceVariableNames_package_($recv($recv($globals.Smalltalk)._globals())._at_("ObjectMock2"),"","Kernel-Tests");
+$recv($globals.ObjectMock)._subclass_instanceVariableNames_package_($recv($recv($recv($globals.Smalltalk)._globals())._at_("ObjectMock2"))._name(),"","Kernel-Tests");
 $self._assert_equals_($recv($recv($globals.ObjectMock2)._class())._instanceVariableNames(),["foo", "bar"]);
 $recv($globals.Smalltalk)._removeClass_($globals.ObjectMock2);
 return self;
@@ -2212,10 +2204,10 @@ return self;
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: [],
-source: "testClassMigrationWithClassInstanceVariables\x0a\x09\x0a\x09builder copyClass: ObjectMock named: 'ObjectMock2'.\x0a\x09ObjectMock2 class instanceVariableNames: 'foo bar'.\x0a\x09\x0a\x09\x22Change the superclass of ObjectMock2\x22\x0a\x09ObjectMock subclass: (Smalltalk globals at: 'ObjectMock2')\x0a\x09\x09instanceVariableNames: ''\x0a\x09\x09package: 'Kernel-Tests'.\x0a\x09\x0a\x09self assert: ObjectMock2 class instanceVariableNames equals: #('foo' 'bar').\x0a\x09\x0a\x09Smalltalk removeClass: ObjectMock2",
+source: "testClassMigrationWithClassInstanceVariables\x0a\x09\x0a\x09builder copyClass: ObjectMock named: 'ObjectMock2'.\x0a\x09ObjectMock2 class instanceVariableNames: 'foo bar'.\x0a\x09\x0a\x09\x22Change the superclass of ObjectMock2\x22\x0a\x09ObjectMock subclass: (Smalltalk globals at: 'ObjectMock2') name\x0a\x09\x09instanceVariableNames: ''\x0a\x09\x09package: 'Kernel-Tests'.\x0a\x09\x0a\x09self assert: ObjectMock2 class instanceVariableNames equals: #('foo' 'bar').\x0a\x09\x0a\x09Smalltalk removeClass: ObjectMock2",
 referencedClasses: ["ObjectMock", "ObjectMock2", "Smalltalk"],
 //>>excludeEnd("ide");
-messageSends: ["copyClass:named:", "instanceVariableNames:", "class", "subclass:instanceVariableNames:package:", "at:", "globals", "assert:equals:", "instanceVariableNames", "removeClass:"]
+messageSends: ["copyClass:named:", "instanceVariableNames:", "class", "subclass:instanceVariableNames:package:", "name", "at:", "globals", "assert:equals:", "instanceVariableNames", "removeClass:"]
 }),
 $globals.ClassBuilderTest);
 
@@ -2238,7 +2230,7 @@ $recv($globals.ObjectMock3)._subclass_instanceVariableNames_package_("ObjectMock
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx1.sendIdx["subclass:instanceVariableNames:package:"]=2;
 //>>excludeEnd("ctx");
-$recv($globals.ObjectMock)._subclass_instanceVariableNames_package_($recv($recv($globals.Smalltalk)._globals())._at_("ObjectMock2"),"","Kernel-Tests");
+$recv($globals.ObjectMock)._subclass_instanceVariableNames_package_("ObjectMock2","","Kernel-Tests");
 $2=$recv($globals.ObjectMock)._subclasses();
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx1.sendIdx["subclasses"]=1;
@@ -2280,10 +2272,10 @@ return self;
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: [],
-source: "testClassMigrationWithSubclasses\x0a\x09\x0a\x09builder copyClass: ObjectMock named: 'ObjectMock2'.\x0a\x09ObjectMock2 subclass: 'ObjectMock3' instanceVariableNames: '' package: 'Kernel-Tests'.\x0a\x09ObjectMock3 subclass: 'ObjectMock4' instanceVariableNames: '' package: 'Kernel-Tests'.\x0a\x09\x0a\x09\x22Change the superclass of ObjectMock2\x22\x0a\x09ObjectMock subclass: (Smalltalk globals at: 'ObjectMock2')\x0a\x09\x09instanceVariableNames: ''\x0a\x09\x09package: 'Kernel-Tests'.\x0a\x09\x0a\x09self assert: (ObjectMock subclasses includes: ObjectMock2).\x0a\x09self assert: (ObjectMock2 subclasses includes: ObjectMock3).\x0a\x09self assert: (ObjectMock3 subclasses includes: ObjectMock4).\x0a\x09\x0a\x09ObjectMock allSubclasses reverseDo: [ :each | Smalltalk removeClass: each ]",
-referencedClasses: ["ObjectMock", "ObjectMock2", "ObjectMock3", "Smalltalk", "ObjectMock4"],
+source: "testClassMigrationWithSubclasses\x0a\x09\x0a\x09builder copyClass: ObjectMock named: 'ObjectMock2'.\x0a\x09ObjectMock2 subclass: 'ObjectMock3' instanceVariableNames: '' package: 'Kernel-Tests'.\x0a\x09ObjectMock3 subclass: 'ObjectMock4' instanceVariableNames: '' package: 'Kernel-Tests'.\x0a\x09\x0a\x09\x22Change the superclass of ObjectMock2\x22\x0a\x09ObjectMock subclass: 'ObjectMock2'\x0a\x09\x09instanceVariableNames: ''\x0a\x09\x09package: 'Kernel-Tests'.\x0a\x09\x0a\x09self assert: (ObjectMock subclasses includes: ObjectMock2).\x0a\x09self assert: (ObjectMock2 subclasses includes: ObjectMock3).\x0a\x09self assert: (ObjectMock3 subclasses includes: ObjectMock4).\x0a\x09\x0a\x09ObjectMock allSubclasses reverseDo: [ :each | Smalltalk removeClass: each ]",
+referencedClasses: ["ObjectMock", "ObjectMock2", "ObjectMock3", "ObjectMock4", "Smalltalk"],
 //>>excludeEnd("ide");
-messageSends: ["copyClass:named:", "subclass:instanceVariableNames:package:", "at:", "globals", "assert:", "includes:", "subclasses", "reverseDo:", "allSubclasses", "removeClass:"]
+messageSends: ["copyClass:named:", "subclass:instanceVariableNames:package:", "assert:", "includes:", "subclasses", "reverseDo:", "allSubclasses", "removeClass:"]
 }),
 $globals.ClassBuilderTest);
 

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

@@ -381,7 +381,7 @@ testClassMigration
 	instance := (Smalltalk globals at: 'ObjectMock2') new.
 	
 	"Change the superclass of ObjectMock2"
-	ObjectMock subclass: (Smalltalk globals at: 'ObjectMock2')
+	ObjectMock subclass: #ObjectMock2
 		instanceVariableNames: ''
 		package: 'Kernel-Tests'.
 	
@@ -409,7 +409,7 @@ testClassMigrationWithClassInstanceVariables
 	ObjectMock2 class instanceVariableNames: 'foo bar'.
 	
 	"Change the superclass of ObjectMock2"
-	ObjectMock subclass: (Smalltalk globals at: 'ObjectMock2')
+	ObjectMock subclass: (Smalltalk globals at: 'ObjectMock2') name
 		instanceVariableNames: ''
 		package: 'Kernel-Tests'.
 	
@@ -425,7 +425,7 @@ testClassMigrationWithSubclasses
 	ObjectMock3 subclass: 'ObjectMock4' instanceVariableNames: '' package: 'Kernel-Tests'.
 	
 	"Change the superclass of ObjectMock2"
-	ObjectMock subclass: (Smalltalk globals at: 'ObjectMock2')
+	ObjectMock subclass: 'ObjectMock2'
 		instanceVariableNames: ''
 		package: 'Kernel-Tests'.