Browse Source

Push up to Behavior / Trait.

Herby Vojčík 5 years ago
parent
commit
9c245b2f2b

+ 83 - 85
lang/src/Kernel-Classes.js

@@ -1028,23 +1028,22 @@ $core.addMethod(
 $core.method({
 selector: "instanceVariableNames:",
 protocol: "accessing",
-fn: function (aCollection){
+fn: function (aString){
 var self=this,$self=this;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
-$recv($recv($globals.ClassBuilder)._new())._class_instanceVariableNames_(self,aCollection);
-return self;
+return $self._slots_($self._slotsFromInstanceVariablesString_(aString));
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx1) {$ctx1.fill(self,"instanceVariableNames:",{aCollection:aCollection},$globals.Metaclass)});
+}, function($ctx1) {$ctx1.fill(self,"instanceVariableNames:",{aString:aString},$globals.Metaclass)});
 //>>excludeEnd("ctx");
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
-args: ["aCollection"],
-source: "instanceVariableNames: aCollection\x0a\x09ClassBuilder new\x0a\x09\x09class: self instanceVariableNames: aCollection.\x0a\x09^ self",
-referencedClasses: ["ClassBuilder"],
+args: ["aString"],
+source: "instanceVariableNames: aString\x0a\x09\x22Kept for file-in compatibility.\x22\x0a\x09^ self slots: (self slotsFromInstanceVariablesString: aString)",
+referencedClasses: [],
 //>>excludeEnd("ide");
-messageSends: ["class:instanceVariableNames:", "new"]
+messageSends: ["slots:", "slotsFromInstanceVariablesString:"]
 }),
 $globals.Metaclass);
 
@@ -1112,6 +1111,30 @@ messageSends: ["package", "instanceClass"]
 }),
 $globals.Metaclass);
 
+$core.addMethod(
+$core.method({
+selector: "slots:",
+protocol: "accessing",
+fn: function (aCollection){
+var self=this,$self=this;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+$recv($recv($globals.ClassBuilder)._new())._class_slots_(self,aCollection);
+return self;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"slots:",{aCollection:aCollection},$globals.Metaclass)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: ["aCollection"],
+source: "slots: aCollection\x0a\x09ClassBuilder new\x0a\x09\x09class: self slots: aCollection.\x0a\x09^ self",
+referencedClasses: ["ClassBuilder"],
+//>>excludeEnd("ide");
+messageSends: ["class:slots:", "new"]
+}),
+$globals.Metaclass);
+
 $core.addMethod(
 $core.method({
 selector: "subclasses",
@@ -1444,31 +1467,7 @@ $globals.ClassBuilder);
 
 $core.addMethod(
 $core.method({
-selector: "class:instanceVariableNames:",
-protocol: "class definition",
-fn: function (aClass,ivarNames){
-var self=this,$self=this;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-return $core.withContext(function($ctx1) {
-//>>excludeEnd("ctx");
-$self._class_instanceVariables_(aClass,$self._slotsFromInstanceVariablesString_(ivarNames));
-return self;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx1) {$ctx1.fill(self,"class:instanceVariableNames:",{aClass:aClass,ivarNames:ivarNames},$globals.ClassBuilder)});
-//>>excludeEnd("ctx");
-},
-//>>excludeStart("ide", pragmas.excludeIdeData);
-args: ["aClass", "ivarNames"],
-source: "class: aClass instanceVariableNames: ivarNames\x0a\x09self class: aClass instanceVariables:  (self slotsFromInstanceVariablesString: ivarNames)",
-referencedClasses: [],
-//>>excludeEnd("ide");
-messageSends: ["class:instanceVariables:", "slotsFromInstanceVariablesString:"]
-}),
-$globals.ClassBuilder);
-
-$core.addMethod(
-$core.method({
-selector: "class:instanceVariables:",
+selector: "class:slots:",
 protocol: "class definition",
 fn: function (aClass,aCollection){
 var self=this,$self=this;
@@ -1484,12 +1483,12 @@ $2=$recv($3)._yourself();
 $recv($1)._announce_($2);
 return self;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx1) {$ctx1.fill(self,"class:instanceVariables:",{aClass:aClass,aCollection:aCollection},$globals.ClassBuilder)});
+}, function($ctx1) {$ctx1.fill(self,"class:slots:",{aClass:aClass,aCollection:aCollection},$globals.ClassBuilder)});
 //>>excludeEnd("ctx");
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: ["aClass", "aCollection"],
-source: "class: aClass instanceVariables: aCollection\x0a\x09self basicClass: aClass instanceVariables: aCollection.\x0a\x09\x0a\x09SystemAnnouncer current\x0a\x09\x09announce: (ClassDefinitionChanged new\x0a\x09\x09\x09theClass: aClass;\x0a\x09\x09\x09yourself)",
+source: "class: aClass slots: aCollection\x0a\x09self basicClass: aClass instanceVariables: aCollection.\x0a\x09\x0a\x09SystemAnnouncer current\x0a\x09\x09announce: (ClassDefinitionChanged new\x0a\x09\x09\x09theClass: aClass;\x0a\x09\x09\x09yourself)",
 referencedClasses: ["SystemAnnouncer", "ClassDefinitionChanged"],
 //>>excludeEnd("ide");
 messageSends: ["basicClass:instanceVariables:", "announce:", "current", "theClass:", "new", "yourself"]
@@ -1830,37 +1829,6 @@ messageSends: ["basicRenameClass:to:", "recompile", "announce:", "current", "the
 }),
 $globals.ClassBuilder);
 
-$core.addMethod(
-$core.method({
-selector: "slotsFromInstanceVariablesString:",
-protocol: "accessing",
-fn: function (aString){
-var self=this,$self=this;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-return $core.withContext(function($ctx1) {
-//>>excludeEnd("ctx");
-return $recv($recv(aString)._tokenize_(" "))._reject_((function(each){
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-return $core.withContext(function($ctx2) {
-//>>excludeEnd("ctx");
-return $recv(each)._isEmpty();
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
-//>>excludeEnd("ctx");
-}));
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx1) {$ctx1.fill(self,"slotsFromInstanceVariablesString:",{aString:aString},$globals.ClassBuilder)});
-//>>excludeEnd("ctx");
-},
-//>>excludeStart("ide", pragmas.excludeIdeData);
-args: ["aString"],
-source: "slotsFromInstanceVariablesString: aString\x0a\x09^ (aString tokenize: ' ') reject: [ :each | each isEmpty ]",
-referencedClasses: [],
-//>>excludeEnd("ide");
-messageSends: ["reject:", "tokenize:", "isEmpty"]
-}),
-$globals.ClassBuilder);
-
 $core.addMethod(
 $core.method({
 selector: "superclass:subclass:",
@@ -1870,54 +1838,53 @@ var self=this,$self=this;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
-return $self._superclass_subclass_instanceVariableNames_package_(aClass,className,"",nil);
+return $self._superclass_subclass_slots_package_(aClass,className,[],nil);
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 }, function($ctx1) {$ctx1.fill(self,"superclass:subclass:",{aClass:aClass,className:className},$globals.ClassBuilder)});
 //>>excludeEnd("ctx");
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: ["aClass", "className"],
-source: "superclass: aClass subclass: className\x0a\x09^ self superclass: aClass subclass: className instanceVariableNames: '' package: nil",
+source: "superclass: aClass subclass: className\x0a\x09^ self superclass: aClass subclass: className slots: #() package: nil",
 referencedClasses: [],
 //>>excludeEnd("ide");
-messageSends: ["superclass:subclass:instanceVariableNames:package:"]
+messageSends: ["superclass:subclass:slots:package:"]
 }),
 $globals.ClassBuilder);
 
 $core.addMethod(
 $core.method({
-selector: "superclass:subclass:instanceVariableNames:package:",
+selector: "superclass:subclass:slots:package:",
 protocol: "class definition",
-fn: function (aClass,className,ivarNames,packageName){
+fn: function (aClass,className,aCollection,packageName){
 var self=this,$self=this;
 var newClass;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
-var $1,$2,$3,$5,$4,$receiver;
-$1=$self._slotsFromInstanceVariablesString_(ivarNames);
+var $1,$2,$4,$3,$receiver;
 if(($receiver = packageName) == null || $receiver.a$nil){
-$2="unclassified";
+$1="unclassified";
 } else {
-$2=packageName;
+$1=packageName;
 }
-newClass=$self._addSubclassOf_named_instanceVariableNames_package_(aClass,className,$1,$2);
-$3=$recv($globals.SystemAnnouncer)._current();
-$5=$recv($globals.ClassAdded)._new();
-$recv($5)._theClass_(newClass);
-$4=$recv($5)._yourself();
-$recv($3)._announce_($4);
+newClass=$self._addSubclassOf_named_instanceVariableNames_package_(aClass,className,aCollection,$1);
+$2=$recv($globals.SystemAnnouncer)._current();
+$4=$recv($globals.ClassAdded)._new();
+$recv($4)._theClass_(newClass);
+$3=$recv($4)._yourself();
+$recv($2)._announce_($3);
 return newClass;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx1) {$ctx1.fill(self,"superclass:subclass:instanceVariableNames:package:",{aClass:aClass,className:className,ivarNames:ivarNames,packageName:packageName,newClass:newClass},$globals.ClassBuilder)});
+}, function($ctx1) {$ctx1.fill(self,"superclass:subclass:slots:package:",{aClass:aClass,className:className,aCollection:aCollection,packageName:packageName,newClass:newClass},$globals.ClassBuilder)});
 //>>excludeEnd("ctx");
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
-args: ["aClass", "className", "ivarNames", "packageName"],
-source: "superclass: aClass subclass: className instanceVariableNames: ivarNames package: packageName\x0a\x09| newClass |\x0a\x09\x0a\x09newClass := self addSubclassOf: aClass\x0a\x09\x09named: className instanceVariableNames: (self slotsFromInstanceVariablesString: ivarNames)\x0a\x09\x09package: (packageName ifNil: [ 'unclassified' ]).\x0a\x09\x0a\x09SystemAnnouncer current\x0a\x09\x09announce: (ClassAdded new\x0a\x09\x09\x09theClass: newClass;\x0a\x09\x09\x09yourself).\x0a\x09\x0a\x09^ newClass",
+args: ["aClass", "className", "aCollection", "packageName"],
+source: "superclass: aClass subclass: className slots: aCollection package: packageName\x0a\x09| newClass |\x0a\x09\x0a\x09newClass := self addSubclassOf: aClass\x0a\x09\x09named: className instanceVariableNames: aCollection\x0a\x09\x09package: (packageName ifNil: [ 'unclassified' ]).\x0a\x09\x0a\x09SystemAnnouncer current\x0a\x09\x09announce: (ClassAdded new\x0a\x09\x09\x09theClass: newClass;\x0a\x09\x09\x09yourself).\x0a\x09\x0a\x09^ newClass",
 referencedClasses: ["SystemAnnouncer", "ClassAdded"],
 //>>excludeEnd("ide");
-messageSends: ["addSubclassOf:named:instanceVariableNames:package:", "slotsFromInstanceVariablesString:", "ifNil:", "announce:", "current", "theClass:", "new", "yourself"]
+messageSends: ["addSubclassOf:named:instanceVariableNames:package:", "ifNil:", "announce:", "current", "theClass:", "new", "yourself"]
 }),
 $globals.ClassBuilder);
 
@@ -3059,6 +3026,37 @@ messageSends: []
 }),
 $globals.TBehaviorProvider);
 
+$core.addMethod(
+$core.method({
+selector: "slotsFromInstanceVariablesString:",
+protocol: "accessing",
+fn: function (aString){
+var self=this,$self=this;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+return $recv($recv(aString)._tokenize_(" "))._reject_((function(each){
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx2) {
+//>>excludeEnd("ctx");
+return $recv(each)._isEmpty();
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
+//>>excludeEnd("ctx");
+}));
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"slotsFromInstanceVariablesString:",{aString:aString},$globals.TBehaviorProvider)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: ["aString"],
+source: "slotsFromInstanceVariablesString: aString\x0a\x09^ (aString tokenize: ' ') reject: [ :each | each isEmpty ]",
+referencedClasses: [],
+//>>excludeEnd("ide");
+messageSends: ["reject:", "tokenize:", "isEmpty"]
+}),
+$globals.TBehaviorProvider);
+
 $core.addMethod(
 $core.method({
 selector: "traitComposition",

+ 17 - 18
lang/src/Kernel-Classes.st

@@ -239,10 +239,9 @@ instanceClass
 	^ instanceClass
 !
 
-instanceVariableNames: aCollection
-	ClassBuilder new
-		class: self instanceVariableNames: aCollection.
-	^ self
+instanceVariableNames: aString
+	"Kept for file-in compatibility."
+	^ self slots: (self slotsFromInstanceVariablesString: aString)
 !
 
 name
@@ -253,6 +252,12 @@ package
 	^ self instanceClass package
 !
 
+slots: aCollection
+	ClassBuilder new
+		class: self slots: aCollection.
+	^ self
+!
+
 subclasses
 	^ Smalltalk core metaSubclasses: self
 !
@@ -292,12 +297,6 @@ I am responsible for compiling new classes or modifying existing classes in the
 
 Rather than using me directly to compile a class, use `Class >> subclass:instanceVariableNames:package:`.!
 
-!ClassBuilder methodsFor: 'accessing'!
-
-slotsFromInstanceVariablesString: aString
-	^ (aString tokenize: ' ') reject: [ :each | each isEmpty ]
-! !
-
 !ClassBuilder methodsFor: 'class definition'!
 
 addSubclassOf: aClass named: className instanceVariableNames: aCollection package: packageName
@@ -335,11 +334,7 @@ addTraitNamed: traitName package: packageName
 		package: packageName
 !
 
-class: aClass instanceVariableNames: ivarNames
-	self class: aClass instanceVariables:  (self slotsFromInstanceVariablesString: ivarNames)
-!
-
-class: aClass instanceVariables: aCollection
+class: aClass slots: aCollection
 	self basicClass: aClass instanceVariables: aCollection.
 	
 	SystemAnnouncer current
@@ -349,14 +344,14 @@ class: aClass instanceVariables: aCollection
 !
 
 superclass: aClass subclass: className
-	^ self superclass: aClass subclass: className instanceVariableNames: '' package: nil
+	^ self superclass: aClass subclass: className slots: #() package: nil
 !
 
-superclass: aClass subclass: className instanceVariableNames: ivarNames package: packageName
+superclass: aClass subclass: className slots: aCollection package: packageName
 	| newClass |
 	
 	newClass := self addSubclassOf: aClass
-		named: className instanceVariableNames: (self slotsFromInstanceVariablesString: ivarNames)
+		named: className instanceVariableNames: aCollection
 		package: (packageName ifNil: [ 'unclassified' ]).
 	
 	SystemAnnouncer current
@@ -723,6 +718,10 @@ selectors
 	^ self methodDictionary keys
 !
 
+slotsFromInstanceVariablesString: aString
+	^ (aString tokenize: ' ') reject: [ :each | each isEmpty ]
+!
+
 traitComposition
 	^ (self basicAt: 'traitComposition')
 		ifNil: [ #() ]

+ 3 - 3
lang/src/Kernel-Helpers.js

@@ -106,17 +106,17 @@ var self=this,$self=this;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
-return $recv($recv($globals.ClassBuilder)._new())._superclass_subclass_instanceVariableNames_package_(self,$recv(aString)._asString(),aString2,aString3);
+return $recv($recv($globals.ClassBuilder)._new())._superclass_subclass_slots_package_(self,$recv(aString)._asString(),$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^ ClassBuilder new\x0a\x09\x09superclass: self subclass: aString asString instanceVariableNames: aString2 package: 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",
 referencedClasses: ["ClassBuilder"],
 //>>excludeEnd("ide");
-messageSends: ["superclass:subclass:instanceVariableNames:package:", "new", "asString"]
+messageSends: ["superclass:subclass:slots:package:", "new", "asString", "slotsFromInstanceVariablesString:"]
 }),
 $globals.TSubclassable);
 

+ 2 - 1
lang/src/Kernel-Helpers.st

@@ -25,8 +25,9 @@ subclass: aString instanceVariableNames: aString2 classVariableNames: classVars
 !
 
 subclass: aString instanceVariableNames: aString2 package: aString3
+	"Kept for file-in compatibility."
 	^ ClassBuilder new
-		superclass: self subclass: aString asString instanceVariableNames: aString2 package: aString3
+		superclass: self subclass: aString asString slots: (self slotsFromInstanceVariablesString: aString2) package: aString3
 !
 
 subclass: aString uses: aTraitCompositionDescription 

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

@@ -2287,30 +2287,6 @@ messageSends: ["copyClass:named:", "subclass:instanceVariableNames:package:", "a
 }),
 $globals.ClassBuilderTest);
 
-$core.addMethod(
-$core.method({
-selector: "testSlotsFromInstanceVariablesString",
-protocol: "tests",
-fn: function (){
-var self=this,$self=this;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-return $core.withContext(function($ctx1) {
-//>>excludeEnd("ctx");
-$self._assert_equals_($recv($self.builder)._slotsFromInstanceVariablesString_("  hello   world   "),["hello", "world"]);
-return self;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx1) {$ctx1.fill(self,"testSlotsFromInstanceVariablesString",{},$globals.ClassBuilderTest)});
-//>>excludeEnd("ctx");
-},
-//>>excludeStart("ide", pragmas.excludeIdeData);
-args: [],
-source: "testSlotsFromInstanceVariablesString\x0a\x09self assert: (builder slotsFromInstanceVariablesString: '  hello   world   ') equals: #('hello' 'world')",
-referencedClasses: [],
-//>>excludeEnd("ide");
-messageSends: ["assert:equals:", "slotsFromInstanceVariablesString:"]
-}),
-$globals.ClassBuilderTest);
-
 $core.addMethod(
 $core.method({
 selector: "testSubclass",
@@ -2663,6 +2639,48 @@ messageSends: ["copyClass:named:", "javascriptConstructor:", "jsConstructor", "a
 }),
 $globals.ClassTest);
 
+$core.addMethod(
+$core.method({
+selector: "testSlotsFromInstanceVariablesString",
+protocol: "tests",
+fn: function (){
+var self=this,$self=this;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+var $2,$1,$4,$3;
+$2=$self._class();
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx["class"]=1;
+//>>excludeEnd("ctx");
+$1=$recv($2)._slotsFromInstanceVariablesString_("  hello   world   ");
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx["slotsFromInstanceVariablesString:"]=1;
+//>>excludeEnd("ctx");
+$self._assert_equals_($1,["hello", "world"]);
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx["assert:equals:"]=1;
+//>>excludeEnd("ctx");
+$4=$recv($self._class())._class();
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.sendIdx["class"]=2;
+//>>excludeEnd("ctx");
+$3=$recv($4)._slotsFromInstanceVariablesString_("  hello   world   ");
+$self._assert_equals_($3,["hello", "world"]);
+return self;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"testSlotsFromInstanceVariablesString",{},$globals.ClassTest)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: [],
+source: "testSlotsFromInstanceVariablesString\x0a\x09self assert: (self class slotsFromInstanceVariablesString: '  hello   world   ') equals: #('hello' 'world').\x0a\x09self assert: (self class class slotsFromInstanceVariablesString: '  hello   world   ') equals: #('hello' 'world')",
+referencedClasses: [],
+//>>excludeEnd("ide");
+messageSends: ["assert:equals:", "slotsFromInstanceVariablesString:", "class"]
+}),
+$globals.ClassTest);
+
 $core.addMethod(
 $core.method({
 selector: "testTrickySetJavaScriptConstructor",

+ 5 - 4
lang/src/Kernel-Tests.st

@@ -436,10 +436,6 @@ testClassMigrationWithSubclasses
 	ObjectMock allSubclasses reverseDo: [ :each | Smalltalk removeClass: each ]
 !
 
-testSlotsFromInstanceVariablesString
-	self assert: (builder slotsFromInstanceVariablesString: '  hello   world   ') equals: #('hello' 'world')
-!
-
 testSubclass
 	theClass := builder addSubclassOf: ObjectMock named: 'ObjectMock2' instanceVariableNames: #(foo bar) package: 'Kernel-Tests'.
 	self assert: theClass superclass equals: ObjectMock.
@@ -526,6 +522,11 @@ testSetJavaScriptConstructor
 	self assert: instance foo equals: 9
 !
 
+testSlotsFromInstanceVariablesString
+	self assert: (self class slotsFromInstanceVariablesString: '  hello   world   ') equals: #('hello' 'world').
+	self assert: (self class class slotsFromInstanceVariablesString: '  hello   world   ') equals: #('hello' 'world')
+!
+
 testTrickySetJavaScriptConstructor
 	| instance |
 	theClass := builder copyClass: ObjectMock named: 'ObjectMock2'.

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

@@ -318,7 +318,7 @@ $2=$self._classBuilder();
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 $ctx1.sendIdx["classBuilder"]=1;
 //>>excludeEnd("ctx");
-$recv($2)._class_instanceVariables_(aClass,newInstVars);
+$recv($2)._class_slots_(aClass,newInstVars);
 } else {
 $3=$self._classBuilder();
 $4=$recv(aClass)._superclass();
@@ -335,10 +335,10 @@ return self;
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: ["aString", "aClass"],
-source: "addInstVarNamed: aString to: aClass\x0a\x09| newInstVars |\x0a\x09newInstVars := aClass instanceVariableNames copyWith: aString.\x0a\x0a\x09aClass isMetaclass\x0a\x09\x09ifTrue: [ self classBuilder\x0a\x09\x09\x09class: aClass instanceVariables: newInstVars ]\x0a\x09\x09ifFalse: [ self classBuilder\x0a\x09\x09\x09addSubclassOf: aClass superclass \x0a\x09\x09\x09named: aClass name \x0a\x09\x09\x09instanceVariableNames: newInstVars\x0a\x09\x09\x09package: aClass package name ]",
+source: "addInstVarNamed: aString to: aClass\x0a\x09| newInstVars |\x0a\x09newInstVars := aClass instanceVariableNames copyWith: aString.\x0a\x0a\x09aClass isMetaclass\x0a\x09\x09ifTrue: [ self classBuilder\x0a\x09\x09\x09class: aClass slots: newInstVars ]\x0a\x09\x09ifFalse: [ self classBuilder\x0a\x09\x09\x09addSubclassOf: aClass superclass \x0a\x09\x09\x09named: aClass name \x0a\x09\x09\x09instanceVariableNames: newInstVars\x0a\x09\x09\x09package: aClass package name ]",
 referencedClasses: [],
 //>>excludeEnd("ide");
-messageSends: ["copyWith:", "instanceVariableNames", "ifTrue:ifFalse:", "isMetaclass", "class:instanceVariables:", "classBuilder", "addSubclassOf:named:instanceVariableNames:package:", "superclass", "name", "package"]
+messageSends: ["copyWith:", "instanceVariableNames", "ifTrue:ifFalse:", "isMetaclass", "class:slots:", "classBuilder", "addSubclassOf:named:instanceVariableNames:package:", "superclass", "name", "package"]
 }),
 $globals.Environment);
 

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

@@ -228,7 +228,7 @@ addInstVarNamed: aString to: aClass
 
 	aClass isMetaclass
 		ifTrue: [ self classBuilder
-			class: aClass instanceVariables: newInstVars ]
+			class: aClass slots: newInstVars ]
 		ifFalse: [ self classBuilder
 			addSubclassOf: aClass superclass 
 			named: aClass name