Browse Source

Revert "Refactor "image" startup code."

This reverts commit ceb306f
Herby Vojčík 6 years ago
parent
commit
b823fb6a70
3 changed files with 47 additions and 256 deletions
  1. 0 14
      API-CHANGES.txt
  2. 35 198
      src/Kernel-Infrastructure.js
  3. 12 44
      src/Kernel-Infrastructure.st

+ 0 - 14
API-CHANGES.txt

@@ -1,21 +1,7 @@
 0.22.0:
 
-+ AmberBootstrapInitialization
-  + initializeClasses:
-  + initializeMethodsOf:
-  + organizeClasses:
-  + processArrivals
-+ JSObjectProxy >>
-  + removeKey:
 + Number >>
   + ln1p
-+ SmalltalkImage
-  + withArrivalsDo:
-
-- AmberBootstrapInitialization
-  - initializeClasses
-  - initializeMethods
-  - organizeClasses
 
 0.21.1:
 

+ 35 - 198
src/Kernel-Infrastructure.js

@@ -9,15 +9,15 @@ $core.addClass("AmberBootstrapInitialization", $globals.Object, [], "Kernel-Infr
 
 $core.addMethod(
 $core.method({
-selector: "initializeClasses:",
+selector: "initializeClasses",
 protocol: "initialization",
-fn: function (classes){
+fn: function (){
 var self=this,$self=this;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
 var $1;
-$recv(classes)._do_((function(each){
+$recv($recv($globals.Smalltalk)._classes())._do_((function(each){
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx2) {
 //>>excludeEnd("ctx");
@@ -31,28 +31,28 @@ return $recv(each)._initialize();
 }));
 return self;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx1) {$ctx1.fill(self,"initializeClasses:",{classes:classes},$globals.AmberBootstrapInitialization.a$cls)});
+}, function($ctx1) {$ctx1.fill(self,"initializeClasses",{},$globals.AmberBootstrapInitialization.a$cls)});
 //>>excludeEnd("ctx");
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
-args: ["classes"],
-source: "initializeClasses: classes\x0a\x09classes do: [ :each |\x0a\x09\x09each = SmalltalkImage ifFalse: [ each initialize ] ]",
-referencedClasses: ["SmalltalkImage"],
+args: [],
+source: "initializeClasses\x0a\x09Smalltalk classes do: [ :each |\x0a\x09\x09each = SmalltalkImage ifFalse: [ each initialize ] ]",
+referencedClasses: ["Smalltalk", "SmalltalkImage"],
 //>>excludeEnd("ide");
-messageSends: ["do:", "ifFalse:", "=", "initialize"]
+messageSends: ["do:", "classes", "ifFalse:", "=", "initialize"]
 }),
 $globals.AmberBootstrapInitialization.a$cls);
 
 $core.addMethod(
 $core.method({
-selector: "organizeClasses:",
+selector: "organizeClasses",
 protocol: "organization",
-fn: function (classes){
+fn: function (){
 var self=this,$self=this;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
-$recv(classes)._do_((function(each){
+$recv($recv($globals.Smalltalk)._classes())._do_((function(each){
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx2) {
 //>>excludeEnd("ctx");
@@ -63,28 +63,28 @@ return $recv(each)._enterOrganization();
 }));
 return self;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx1) {$ctx1.fill(self,"organizeClasses:",{classes:classes},$globals.AmberBootstrapInitialization.a$cls)});
+}, function($ctx1) {$ctx1.fill(self,"organizeClasses",{},$globals.AmberBootstrapInitialization.a$cls)});
 //>>excludeEnd("ctx");
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
-args: ["classes"],
-source: "organizeClasses: classes\x0a\x09classes do: [ :each | each enterOrganization ]",
-referencedClasses: [],
+args: [],
+source: "organizeClasses\x0a\x09Smalltalk classes do: [ :each | each enterOrganization ]",
+referencedClasses: ["Smalltalk"],
 //>>excludeEnd("ide");
-messageSends: ["do:", "enterOrganization"]
+messageSends: ["do:", "classes", "enterOrganization"]
 }),
 $globals.AmberBootstrapInitialization.a$cls);
 
 $core.addMethod(
 $core.method({
-selector: "organizeMethodsOf:",
+selector: "organizeMethods",
 protocol: "organization",
-fn: function (classes){
+fn: function (){
 var self=this,$self=this;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
-$recv(classes)._do_((function(eachClass){
+$recv($recv($globals.Smalltalk)._classes())._do_((function(eachClass){
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx2) {
 //>>excludeEnd("ctx");
@@ -106,78 +106,15 @@ $ctx1.sendIdx["do:"]=1;
 //>>excludeEnd("ctx");
 return self;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx1) {$ctx1.fill(self,"organizeMethodsOf:",{classes:classes},$globals.AmberBootstrapInitialization.a$cls)});
-//>>excludeEnd("ctx");
-},
-//>>excludeStart("ide", pragmas.excludeIdeData);
-args: ["classes"],
-source: "organizeMethodsOf: classes\x0a\x09classes do: [ :eachClass |\x0a\x09\x09eachClass definedMethods do: [ :eachMethod |\x0a\x09\x09\x09eachMethod methodClass methodOrganizationEnter: eachMethod andLeave: nil ] ]",
-referencedClasses: [],
-//>>excludeEnd("ide");
-messageSends: ["do:", "definedMethods", "methodOrganizationEnter:andLeave:", "methodClass"]
-}),
-$globals.AmberBootstrapInitialization.a$cls);
-
-$core.addMethod(
-$core.method({
-selector: "processArrivals",
-protocol: "public api",
-fn: function(){
-var self=this,$self=this;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-return $core.withContext(function($ctx1) {
-//>>excludeEnd("ctx");
-$recv($globals.Smalltalk)._withArrivalsDo_((function(newPackages){
-var names,classes;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-return $core.withContext(function($ctx2) {
-//>>excludeEnd("ctx");
-names=$recv($recv(newPackages)._collect_((function(each){
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-return $core.withContext(function($ctx3) {
-//>>excludeEnd("ctx");
-return $recv(each)._name();
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,2)});
-//>>excludeEnd("ctx");
-})))._asSet();
-names;
-classes=$recv($recv($globals.Smalltalk)._classes())._select_((function(each){
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-return $core.withContext(function($ctx3) {
-//>>excludeEnd("ctx");
-return $recv($recv($recv(each)._package())._isNil())._and_((function(){
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-return $core.withContext(function($ctx4) {
-//>>excludeEnd("ctx");
-return $recv(names)._includes_($recv(each)._basicAt_("category"));
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx4) {$ctx4.fillBlock({},$ctx3,4)});
-//>>excludeEnd("ctx");
-}));
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,3)});
-//>>excludeEnd("ctx");
-}));
-classes;
-$self._organizeClasses_(classes);
-$self._organizeMethodsOf_(classes);
-return $self._initializeClasses_(classes);
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx2) {$ctx2.fillBlock({newPackages:newPackages,names:names,classes:classes},$ctx1,1)});
-//>>excludeEnd("ctx");
-}));
-return self;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx1) {$ctx1.fill(self,"processArrivals",{},$globals.AmberBootstrapInitialization.a$cls)});
+}, function($ctx1) {$ctx1.fill(self,"organizeMethods",{},$globals.AmberBootstrapInitialization.a$cls)});
 //>>excludeEnd("ctx");
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: [],
-source: "processArrivals\x0a\x09Smalltalk withArrivalsDo: [ :newPackages |\x0a\x09\x09| names classes |\x0a\x09\x09names := (newPackages collect: [ :each | each name ]) asSet.\x0a\x09\x09classes := Smalltalk classes select: [ :each |\x0a\x09\x09\x09each package isNil and: [ names includes: (each basicAt: 'category') ] ].\x0a\x0a\x09\x09self\x0a\x09\x09\x09organizeClasses: classes;\x0a\x09\x09\x09organizeMethodsOf: classes;\x0a\x09\x09\x09initializeClasses: classes ]",
+source: "organizeMethods\x0a\x09Smalltalk classes do: [ :eachClass |\x0a\x09\x09eachClass definedMethods do: [ :eachMethod |\x0a\x09\x09\x09eachMethod methodClass methodOrganizationEnter: eachMethod andLeave: nil ] ]",
 referencedClasses: ["Smalltalk"],
 //>>excludeEnd("ide");
-messageSends: ["withArrivalsDo:", "asSet", "collect:", "name", "select:", "classes", "and:", "isNil", "package", "includes:", "basicAt:", "organizeClasses:", "organizeMethodsOf:", "initializeClasses:"]
+messageSends: ["do:", "classes", "definedMethods", "methodOrganizationEnter:andLeave:", "methodClass"]
 }),
 $globals.AmberBootstrapInitialization.a$cls);
 
@@ -185,13 +122,16 @@ $core.addMethod(
 $core.method({
 selector: "run",
 protocol: "public api",
-fn: function(){
+fn: function (){
 var self=this,$self=this;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
 $recv($globals.SmalltalkImage)._initialize();
-$self._processArrivals();
+$recv($globals.Smalltalk)._adoptPackageDictionary();
+$self._organizeClasses();
+$self._organizeMethods();
+$self._initializeClasses();
 return self;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 }, function($ctx1) {$ctx1.fill(self,"run",{},$globals.AmberBootstrapInitialization.a$cls)});
@@ -199,10 +139,10 @@ return self;
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: [],
-source: "run\x0a\x09SmalltalkImage initialize.\x0a\x09self processArrivals",
-referencedClasses: ["SmalltalkImage"],
+source: "run\x0a\x09SmalltalkImage initialize.\x0a\x09Smalltalk adoptPackageDictionary.\x0a\x09self\x0a\x09\x09organizeClasses;\x0a\x09\x09organizeMethods;\x0a\x09\x09initializeClasses",
+referencedClasses: ["SmalltalkImage", "Smalltalk"],
 //>>excludeEnd("ide");
-messageSends: ["initialize", "processArrivals"]
+messageSends: ["initialize", "adoptPackageDictionary", "organizeClasses", "organizeMethods", "initializeClasses"]
 }),
 $globals.AmberBootstrapInitialization.a$cls);
 
@@ -651,30 +591,6 @@ messageSends: ["nextPutJSObject:"]
 }),
 $globals.JSObjectProxy);
 
-$core.addMethod(
-$core.method({
-selector: "removeKey:",
-protocol: "accessing",
-fn: function(aString){
-var self=this,$self=this;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-return $core.withContext(function($ctx1) {
-//>>excludeEnd("ctx");
-delete $self['@jsObject'][aString]; return aString;
-return self;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx1) {$ctx1.fill(self,"removeKey:",{aString:aString},$globals.JSObjectProxy)});
-//>>excludeEnd("ctx");
-},
-//>>excludeStart("ide", pragmas.excludeIdeData);
-args: ["aString"],
-source: "removeKey: aString\x0a\x09<inlineJS: 'delete $self[''@jsObject''][aString]; return aString'>",
-referencedClasses: [],
-//>>excludeEnd("ide");
-messageSends: []
-}),
-$globals.JSObjectProxy);
-
 $core.addMethod(
 $core.method({
 selector: "then:",
@@ -3038,31 +2954,29 @@ selector: "adoptPackageDictionary",
 protocol: "private",
 fn: function (){
 var self=this,$self=this;
-var adopted;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
-adopted=[];
 $recv($recv($self._core())._packageDescriptors())._keysAndValuesDo_((function(key,value){
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx2) {
 //>>excludeEnd("ctx");
-return $recv(adopted)._add_($recv($globals.Package)._named_javaScriptDescriptor_(key,value));
+return $recv($globals.Package)._named_javaScriptDescriptor_(key,value);
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1,1)});
 //>>excludeEnd("ctx");
 }));
-return adopted;
+return self;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx1) {$ctx1.fill(self,"adoptPackageDictionary",{adopted:adopted},$globals.SmalltalkImage)});
+}, function($ctx1) {$ctx1.fill(self,"adoptPackageDictionary",{},$globals.SmalltalkImage)});
 //>>excludeEnd("ctx");
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: [],
-source: "adoptPackageDictionary\x0a\x09| adopted |\x0a\x09adopted := #().\x0a\x09self core packageDescriptors keysAndValuesDo: [ :key :value |\x0a\x09\x09adopted add: (Package named: key javaScriptDescriptor: value) ].\x0a\x09^ adopted",
+source: "adoptPackageDictionary\x0a\x09self core packageDescriptors keysAndValuesDo: [ :key :value | Package named: key javaScriptDescriptor: value ]",
 referencedClasses: ["Package"],
 //>>excludeEnd("ide");
-messageSends: ["keysAndValuesDo:", "packageDescriptors", "core", "add:", "named:javaScriptDescriptor:"]
+messageSends: ["keysAndValuesDo:", "packageDescriptors", "core", "named:javaScriptDescriptor:"]
 }),
 $globals.SmalltalkImage);
 
@@ -4012,58 +3926,6 @@ messageSends: []
 }),
 $globals.SmalltalkImage);
 
-$core.addMethod(
-$core.method({
-selector: "sweepPackageDictionary",
-protocol: "private",
-fn: function(){
-var self=this,$self=this;
-var pd,adopted;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-return $core.withContext(function($ctx1) {
-//>>excludeEnd("ctx");
-pd=$recv($self._core())._packageDescriptors();
-adopted=[];
-$recv(pd)._keysAndValuesDo_((function(each){
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-return $core.withContext(function($ctx2) {
-//>>excludeEnd("ctx");
-return $self._packageAt_ifPresent_(each,(function(){
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-return $core.withContext(function($ctx3) {
-//>>excludeEnd("ctx");
-return $recv(adopted)._add_(each);
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
-//>>excludeEnd("ctx");
-}));
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
-//>>excludeEnd("ctx");
-}));
-$recv(adopted)._do_((function(key){
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-return $core.withContext(function($ctx2) {
-//>>excludeEnd("ctx");
-return $recv(pd)._removeKey_(key);
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx2) {$ctx2.fillBlock({key:key},$ctx1,3)});
-//>>excludeEnd("ctx");
-}));
-return self;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx1) {$ctx1.fill(self,"sweepPackageDictionary",{pd:pd,adopted:adopted},$globals.SmalltalkImage)});
-//>>excludeEnd("ctx");
-},
-//>>excludeStart("ide", pragmas.excludeIdeData);
-args: [],
-source: "sweepPackageDictionary\x0a\x09| pd adopted |\x09\x0a\x09pd := self core packageDescriptors.\x0a\x09adopted := #().\x0a\x09pd keysAndValuesDo: [ :each | self packageAt: each ifPresent: [ adopted add: each ] ].\x0a\x09adopted do: [ :key | pd removeKey: key ]",
-referencedClasses: [],
-//>>excludeEnd("ide");
-messageSends: ["packageDescriptors", "core", "keysAndValuesDo:", "packageAt:ifPresent:", "add:", "do:", "removeKey:"]
-}),
-$globals.SmalltalkImage);
-
 $core.addMethod(
 $core.method({
 selector: "version",
@@ -4082,31 +3944,6 @@ messageSends: []
 }),
 $globals.SmalltalkImage);
 
-$core.addMethod(
-$core.method({
-selector: "withArrivalsDo:",
-protocol: "startup",
-fn: function (aBlock){
-var self=this,$self=this;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-return $core.withContext(function($ctx1) {
-//>>excludeEnd("ctx");
-$recv(aBlock)._value_($self._adoptPackageDictionary());
-$self._sweepPackageDictionary();
-return self;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx1) {$ctx1.fill(self,"withArrivalsDo:",{aBlock:aBlock},$globals.SmalltalkImage)});
-//>>excludeEnd("ctx");
-},
-//>>excludeStart("ide", pragmas.excludeIdeData);
-args: ["aBlock"],
-source: "withArrivalsDo: aBlock\x0a\x09aBlock value: self adoptPackageDictionary.\x0a\x09self sweepPackageDictionary",
-referencedClasses: [],
-//>>excludeEnd("ide");
-messageSends: ["value:", "adoptPackageDictionary", "sweepPackageDictionary"]
-}),
-$globals.SmalltalkImage);
-
 
 $globals.SmalltalkImage.a$cls.iVarNames = ["current"];
 $core.addMethod(

+ 12 - 44
src/Kernel-Infrastructure.st

@@ -5,41 +5,32 @@ Object subclass: #AmberBootstrapInitialization
 
 !AmberBootstrapInitialization class methodsFor: 'initialization'!
 
-initializeClasses: classes
-	classes do: [ :each |
+initializeClasses
+	Smalltalk classes do: [ :each |
 		each = SmalltalkImage ifFalse: [ each initialize ] ]
 ! !
 
 !AmberBootstrapInitialization class methodsFor: 'organization'!
 
-organizeClasses: classes
-	classes do: [ :each | each enterOrganization ]
+organizeClasses
+	Smalltalk classes do: [ :each | each enterOrganization ]
 !
 
-organizeMethodsOf: classes
-	classes do: [ :eachClass |
+organizeMethods
+	Smalltalk classes do: [ :eachClass |
 		eachClass definedMethods do: [ :eachMethod |
 			eachMethod methodClass methodOrganizationEnter: eachMethod andLeave: nil ] ]
 ! !
 
 !AmberBootstrapInitialization class methodsFor: 'public api'!
 
-processArrivals
-	Smalltalk withArrivalsDo: [ :newPackages |
-		| names classes |
-		names := (newPackages collect: [ :each | each name ]) asSet.
-		classes := Smalltalk classes select: [ :each |
-			each package isNil and: [ names includes: (each basicAt: 'category') ] ].
-
-		self
-			organizeClasses: classes;
-			organizeMethodsOf: classes;
-			initializeClasses: classes ]
-!
-
 run
 	SmalltalkImage initialize.
-	self processArrivals
+	Smalltalk adoptPackageDictionary.
+	self
+		organizeClasses;
+		organizeMethods;
+		initializeClasses
 ! !
 
 ProtoObject subclass: #JSObjectProxy
@@ -111,10 +102,6 @@ in: aValuable
 
 jsObject
 	^ jsObject
-!
-
-removeKey: aString
-	<inlineJS: 'delete $self[''@jsObject''][aString]; return aString'>
 ! !
 
 !JSObjectProxy methodsFor: 'comparing'!
@@ -1042,11 +1029,7 @@ renamePackage: packageName to: newName
 !SmalltalkImage methodsFor: 'private'!
 
 adoptPackageDictionary
-	| adopted |
-	adopted := #().
-	self core packageDescriptors keysAndValuesDo: [ :key :value |
-		adopted add: (Package named: key javaScriptDescriptor: value) ].
-	^ adopted
+	self core packageDescriptors keysAndValuesDo: [ :key :value | Package named: key javaScriptDescriptor: value ]
 !
 
 basicCreatePackage: packageName
@@ -1062,21 +1045,6 @@ deleteClass: aClass
 	"Deletes a class by deleting its binding only. Use #removeClass instead"
 	
 	<inlineJS: '$core.removeClass(aClass)'>
-!
-
-sweepPackageDictionary
-	| pd adopted |	
-	pd := self core packageDescriptors.
-	adopted := #().
-	pd keysAndValuesDo: [ :each | self packageAt: each ifPresent: [ adopted add: each ] ].
-	adopted do: [ :key | pd removeKey: key ]
-! !
-
-!SmalltalkImage methodsFor: 'startup'!
-
-withArrivalsDo: aBlock
-	aBlock value: self adoptPackageDictionary.
-	self sweepPackageDictionary
 ! !
 
 !SmalltalkImage methodsFor: 'testing'!