Browse Source

Ivar names filtered from slots, reorganize.

Herby Vojčík 3 years ago
parent
commit
137cdb1ce7
3 changed files with 132 additions and 96 deletions
  1. 12 0
      lang/API-CHANGES.txt
  2. 99 78
      lang/src/Kernel-Classes.js
  3. 21 18
      lang/src/Kernel-Classes.st

+ 12 - 0
lang/API-CHANGES.txt

@@ -13,9 +13,21 @@
 + ClassBuilder >>
   + addSubclass:named:slots:package:
   + migrateClassNamed:superclass:slots:package:
++ TBehaviorDefaults >>
+  + slots
++ TBehaviorProvider >>
+  + allInstanceVariableNames
+  + allSlots
+  + instanceVariableNames
 + UndefinedObject >>
   + asJavaScriptSource
 
+- Behavior >>
+  - allInstanceVariableNames
+  - instanceVariableNames
+- TBehaviorDefaults >>
+  - allInstanceVariableNames
+
 
 0.29.1:
 

+ 99 - 78
lang/src/Kernel-Classes.js

@@ -8,42 +8,6 @@ $core.setSlots($globals.Behavior, ["organization", "slots", "fn", "superclass"])
 //>>excludeStart("ide", pragmas.excludeIdeData);
 $globals.Behavior.comment="I am the superclass of all class objects.\x0a\x0aIn addition to BehaviorBody, I define superclass/subclass relationships and instantiation.\x0a\x0aI define the protocol for creating instances of a class with `#basicNew` and `#new` (see `boot.js` for class constructors details).\x0a\x0aMy instances know about the subclass/superclass relationships between classes and contain the description that instances are created from.\x0a\x0aI also provide iterating over the class hierarchy.";
 //>>excludeEnd("ide");
-$core.addMethod(
-$core.method({
-selector: "allInstanceVariableNames",
-protocol: "accessing",
-//>>excludeStart("ide", pragmas.excludeIdeData);
-args: [],
-source: "allInstanceVariableNames\x0a\x09| result |\x0a\x09result := self instanceVariableNames copy.\x0a\x09self superclass ifNotNil: [\x0a\x09\x09result addAll: self superclass allInstanceVariableNames ].\x0a\x09^ result",
-referencedClasses: [],
-//>>excludeEnd("ide");
-pragmas: [],
-messageSends: ["copy", "instanceVariableNames", "ifNotNil:", "superclass", "addAll:", "allInstanceVariableNames"]
-}, function ($methodClass){ return function (){
-var self=this,$self=this;
-var result;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-return $core.withContext(function($ctx1) {
-//>>excludeEnd("ctx");
-var $1;
-result=$recv($self._instanceVariableNames())._copy();
-$1=[$self._superclass()
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-,$ctx1.sendIdx["superclass"]=1
-//>>excludeEnd("ctx");
-][0];
-if($1 == null || $1.a$nil){
-$1;
-} else {
-$recv(result)._addAll_($recv($self._superclass())._allInstanceVariableNames());
-}
-return result;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx1) {$ctx1.fill(self,"allInstanceVariableNames",{result:result})});
-//>>excludeEnd("ctx");
-}; }),
-$globals.Behavior);
-
 $core.addMethod(
 $core.method({
 selector: "allSelectors",
@@ -400,29 +364,6 @@ return $recv(superClass)._includesBehavior_(aClass);
 }; }),
 $globals.Behavior);
 
-$core.addMethod(
-$core.method({
-selector: "instanceVariableNames",
-protocol: "accessing",
-//>>excludeStart("ide", pragmas.excludeIdeData);
-args: [],
-source: "instanceVariableNames\x0a\x09^ slots select: #isString",
-referencedClasses: [],
-//>>excludeEnd("ide");
-pragmas: [],
-messageSends: ["select:"]
-}, function ($methodClass){ return function (){
-var self=this,$self=this;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-return $core.withContext(function($ctx1) {
-//>>excludeEnd("ctx");
-return $recv($self.slots)._select_("isString");
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx1) {$ctx1.fill(self,"instanceVariableNames",{})});
-//>>excludeEnd("ctx");
-}; }),
-$globals.Behavior);
-
 $core.addMethod(
 $core.method({
 selector: "isBehavior",
@@ -2168,24 +2109,6 @@ $globals.ClassBuilder.a$cls);
 
 
 $core.addTrait("TBehaviorDefaults", "Kernel-Classes");
-$core.addMethod(
-$core.method({
-selector: "allInstanceVariableNames",
-protocol: "accessing",
-//>>excludeStart("ide", pragmas.excludeIdeData);
-args: [],
-source: "allInstanceVariableNames\x0a\x09\x22Default for non-classes; to be able to send #allInstanceVariableNames to any class / trait.\x22\x0a\x09^ #()",
-referencedClasses: [],
-//>>excludeEnd("ide");
-pragmas: [],
-messageSends: []
-}, function ($methodClass){ return function (){
-var self=this,$self=this;
-return [];
-
-}; }),
-$globals.TBehaviorDefaults);
-
 $core.addMethod(
 $core.method({
 selector: "allSubclassesDo:",
@@ -2286,6 +2209,24 @@ return self;
 }; }),
 $globals.TBehaviorDefaults);
 
+$core.addMethod(
+$core.method({
+selector: "slots",
+protocol: "accessing",
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: [],
+source: "slots\x0a\x09\x22Default for non-classes; to be able to send #slots to any class / trait.\x22\x0a\x09^ #()",
+referencedClasses: [],
+//>>excludeEnd("ide");
+pragmas: [],
+messageSends: []
+}, function ($methodClass){ return function (){
+var self=this,$self=this;
+return [];
+
+}; }),
+$globals.TBehaviorDefaults);
+
 $core.addMethod(
 $core.method({
 selector: "superclass",
@@ -2325,7 +2266,7 @@ $globals.TBehaviorDefaults);
 
 $core.addTrait("TBehaviorProvider", "Kernel-Classes");
 //>>excludeStart("ide", pragmas.excludeIdeData);
-$globals.TBehaviorProvider.comment="I have method dictionary and organization.";
+$globals.TBehaviorProvider.comment="I have method dictionary, slots and organization.";
 //>>excludeEnd("ide");
 $core.addMethod(
 $core.method({
@@ -2404,6 +2345,63 @@ return self;
 }; }),
 $globals.TBehaviorProvider);
 
+$core.addMethod(
+$core.method({
+selector: "allInstanceVariableNames",
+protocol: "accessing",
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: [],
+source: "allInstanceVariableNames\x0a\x09^ self allSlots select: #isString",
+referencedClasses: [],
+//>>excludeEnd("ide");
+pragmas: [],
+messageSends: ["select:", "allSlots"]
+}, function ($methodClass){ return function (){
+var self=this,$self=this;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+return $recv($self._allSlots())._select_("isString");
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"allInstanceVariableNames",{})});
+//>>excludeEnd("ctx");
+}; }),
+$globals.TBehaviorProvider);
+
+$core.addMethod(
+$core.method({
+selector: "allSlots",
+protocol: "accessing",
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: [],
+source: "allSlots\x0a\x09| result |\x0a\x09result := self slots copy.\x0a\x09self superclass ifNotNil: [ :s | result addAll: s allSlots ].\x0a\x09^ result",
+referencedClasses: [],
+//>>excludeEnd("ide");
+pragmas: [],
+messageSends: ["copy", "slots", "ifNotNil:", "superclass", "addAll:", "allSlots"]
+}, function ($methodClass){ return function (){
+var self=this,$self=this;
+var result;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+var $1;
+result=$recv($self._slots())._copy();
+$1=$self._superclass();
+if($1 == null || $1.a$nil){
+$1;
+} else {
+var s;
+s=$1;
+$recv(result)._addAll_($recv(s)._allSlots());
+}
+return result;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"allSlots",{result:result})});
+//>>excludeEnd("ctx");
+}; }),
+$globals.TBehaviorProvider);
+
 $core.addMethod(
 $core.method({
 selector: "basicAddCompiledMethod:",
@@ -2498,6 +2496,29 @@ return $recv($self._methodDictionary())._includesKey_(aString);
 }; }),
 $globals.TBehaviorProvider);
 
+$core.addMethod(
+$core.method({
+selector: "instanceVariableNames",
+protocol: "accessing",
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: [],
+source: "instanceVariableNames\x0a\x09^ self slots select: #isString",
+referencedClasses: [],
+//>>excludeEnd("ide");
+pragmas: [],
+messageSends: ["select:", "slots"]
+}, function ($methodClass){ return function (){
+var self=this,$self=this;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+return $recv($self._slots())._select_("isString");
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"instanceVariableNames",{})});
+//>>excludeEnd("ctx");
+}; }),
+$globals.TBehaviorProvider);
+
 $core.addMethod(
 $core.method({
 selector: "methodAt:",

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

@@ -15,14 +15,6 @@ I also provide iterating over the class hierarchy.!
 
 !Behavior methodsFor: 'accessing'!
 
-allInstanceVariableNames
-	| result |
-	result := self instanceVariableNames copy.
-	self superclass ifNotNil: [
-		result addAll: self superclass allInstanceVariableNames ].
-	^ result
-!
-
 allSelectors
 	^ self allSuperclasses
 		inject: self selectors
@@ -66,10 +58,6 @@ beJavaScriptSubclassOf: aJavaScriptFunction
 	Smalltalk core detachClass: self
 !
 
-instanceVariableNames
-	^ slots select: #isString
-!
-
 javaScriptConstructor
 	"Answer the JS constructor used to instantiate. See kernel-language.js"
 	
@@ -595,15 +583,15 @@ Trait named: #TBehaviorDefaults
 
 !TBehaviorDefaults methodsFor: 'accessing'!
 
-allInstanceVariableNames
-	"Default for non-classes; to be able to send #allInstanceVariableNames to any class / trait."
-	^ #()
-!
-
 name
 	^ nil
 !
 
+slots
+	"Default for non-classes; to be able to send #slots to any class / trait."
+	^ #()
+!
+
 superclass
 	"Default for non-classes; to be able to send #superclass to any class / trait."
 	^ nil
@@ -636,7 +624,7 @@ printOn: aStream
 Trait named: #TBehaviorProvider
 	package: 'Kernel-Classes'!
 !TBehaviorProvider commentStamp!
-I have method dictionary and organization.!
+I have method dictionary, slots and organization.!
 
 !TBehaviorProvider methodsFor: 'accessing'!
 
@@ -644,6 +632,21 @@ I have method dictionary and organization.!
 	^ self methodAt: aString
 !
 
+allInstanceVariableNames
+	^ self allSlots select: #isString
+!
+
+allSlots
+	| result |
+	result := self slots copy.
+	self superclass ifNotNil: [ :s | result addAll: s allSlots ].
+	^ result
+!
+
+instanceVariableNames
+	^ self slots select: #isString
+!
+
 methodAt: aString
 	^ self methodDictionary at: aString
 !