1
0
فهرست منبع

More meta protocol for packages in Smalltalk and some cleanups of old modules code.

Göran Krampe 14 سال پیش
والد
کامیت
3d596a2c6e
3فایلهای تغییر یافته به همراه218 افزوده شده و 234 حذف شده
  1. 40 65
      js/Kernel.deploy.js
  2. 78 113
      js/Kernel.js
  3. 100 56
      st/Kernel.st

+ 40 - 65
js/Kernel.deploy.js

@@ -659,23 +659,56 @@ return self;}
 smalltalk.Smalltalk);
 smalltalk.Smalltalk);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_modules',
+'_packages',
 smalltalk.method({
 smalltalk.method({
-selector: 'modules',
+selector: 'packages',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-return self.modules.all();
+return self.packages.all();
 return self;}
 return self;}
 }),
 }),
 smalltalk.Smalltalk);
 smalltalk.Smalltalk);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_packages',
+'_packageAt_',
 smalltalk.method({
 smalltalk.method({
-selector: 'packages',
-fn: function (){
+selector: 'packageAt:',
+fn: function (packageName){
 var self=this;
 var self=this;
-return self.packages.all();
+return self.packages[packageName];
+return self;}
+}),
+smalltalk.Smalltalk);
+
+smalltalk.addMethod(
+'_packageAt_ifAbsent_',
+smalltalk.method({
+selector: 'packageAt:ifAbsent:',
+fn: function (packageName, aBlock){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_packageAt_", [packageName]), "_ifNil_", [aBlock]);
+return self;}
+}),
+smalltalk.Smalltalk);
+
+smalltalk.addMethod(
+'_createPackage_',
+smalltalk.method({
+selector: 'createPackage:',
+fn: function (packageName){
+var self=this;
+return smalltalk.addPackage(packageName);
+return self;}
+}),
+smalltalk.Smalltalk);
+
+smalltalk.addMethod(
+'_deletePackage_',
+smalltalk.method({
+selector: 'deletePackage:',
+fn: function (packageName){
+var self=this;
+delete smalltalk.packages[packageName];
 return self;}
 return self;}
 }),
 }),
 smalltalk.Smalltalk);
 smalltalk.Smalltalk);
@@ -1114,28 +1147,6 @@ return self;}
 }),
 }),
 smalltalk.Class);
 smalltalk.Class);
 
 
-smalltalk.addMethod(
-'_module',
-smalltalk.method({
-selector: 'module',
-fn: function (){
-var self=this;
-return self.module;
-return self;}
-}),
-smalltalk.Class);
-
-smalltalk.addMethod(
-'_module_',
-smalltalk.method({
-selector: 'module:',
-fn: function (aModule){
-var self=this;
-self.module = aModule;
-return self;}
-}),
-smalltalk.Class);
-
 smalltalk.addMethod(
 smalltalk.addMethod(
 '_subclass_instanceVariableNames_module_',
 '_subclass_instanceVariableNames_module_',
 smalltalk.method({
 smalltalk.method({
@@ -4431,42 +4442,6 @@ smalltalk.MethodContext);
 
 
 
 
 
 
-smalltalk.addClass('Module', smalltalk.Object, [], 'Kernel');
-smalltalk.addMethod(
-'_name',
-smalltalk.method({
-selector: 'name',
-fn: function (){
-var self=this;
-return self.moduleName || nil;
-return self;}
-}),
-smalltalk.Module);
-
-smalltalk.addMethod(
-'_requires',
-smalltalk.method({
-selector: 'requires',
-fn: function (){
-var self=this;
-return self.requires || nil;
-return self;}
-}),
-smalltalk.Module);
-
-smalltalk.addMethod(
-'_name_',
-smalltalk.method({
-selector: 'name:',
-fn: function (aString){
-var self=this;
-return self.moduleName = aString;
-return self;}
-}),
-smalltalk.Module);
-
-
-
 smalltalk.addClass('Association', smalltalk.Object, ['key', 'value'], 'Kernel');
 smalltalk.addClass('Association', smalltalk.Object, ['key', 'value'], 'Kernel');
 smalltalk.addMethod(
 smalltalk.addMethod(
 '__eq',
 '__eq',

+ 78 - 113
js/Kernel.js

@@ -187,7 +187,7 @@ return self;},
 args: ["anObject"],
 args: ["anObject"],
 source: unescape('-%3E%20anObject%0A%09%5EAssociation%20key%3A%20self%20value%3A%20anObject'),
 source: unescape('-%3E%20anObject%0A%09%5EAssociation%20key%3A%20self%20value%3A%20anObject'),
 messageSends: ["key:value:"],
 messageSends: ["key:value:"],
-referencedClasses: [smalltalk.Association]
+referencedClasses: [smalltalk.nil]
 }),
 }),
 smalltalk.Object);
 smalltalk.Object);
 
 
@@ -683,7 +683,7 @@ return self;},
 args: ["aMessage"],
 args: ["aMessage"],
 source: unescape('doesNotUnderstand%3A%20aMessage%0A%09MessageNotUnderstood%20new%0A%09%09receiver%3A%20self%3B%0A%09%09message%3A%20aMessage%3B%0A%09%09signal'),
 source: unescape('doesNotUnderstand%3A%20aMessage%0A%09MessageNotUnderstood%20new%0A%09%09receiver%3A%20self%3B%0A%09%09message%3A%20aMessage%3B%0A%09%09signal'),
 messageSends: ["receiver:", "message:", "signal", "new"],
 messageSends: ["receiver:", "message:", "signal", "new"],
-referencedClasses: [smalltalk.MessageNotUnderstood]
+referencedClasses: [smalltalk.nil]
 }),
 }),
 smalltalk.Object);
 smalltalk.Object);
 
 
@@ -939,32 +939,80 @@ referencedClasses: [smalltalk.String,smalltalk.Error]
 smalltalk.Smalltalk);
 smalltalk.Smalltalk);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_modules',
+'_packages',
 smalltalk.method({
 smalltalk.method({
-selector: 'modules',
-category: 'accessing',
+selector: 'packages',
+category: 'packages',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-return self.modules.all();
+return self.packages.all();
 return self;},
 return self;},
 args: [],
 args: [],
-source: unescape('modules%0A%09%3Creturn%20self.modules.all%28%29%3E'),
+source: unescape('packages%0A%09%3Creturn%20self.packages.all%28%29%3E'),
 messageSends: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
 smalltalk.Smalltalk);
 smalltalk.Smalltalk);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_packages',
+'_packageAt_',
 smalltalk.method({
 smalltalk.method({
-selector: 'packages',
-category: 'accessing',
-fn: function (){
+selector: 'packageAt:',
+category: 'packages',
+fn: function (packageName){
 var self=this;
 var self=this;
-return self.packages.all();
+return self.packages[packageName];
 return self;},
 return self;},
-args: [],
-source: unescape('packages%0A%09%3Creturn%20self.packages.all%28%29%3E'),
+args: ["packageName"],
+source: unescape('packageAt%3A%20packageName%0A%20%20%20%20%20%20%20%3Creturn%20self.packages%5BpackageName%5D%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Smalltalk);
+
+smalltalk.addMethod(
+'_packageAt_ifAbsent_',
+smalltalk.method({
+selector: 'packageAt:ifAbsent:',
+category: 'packages',
+fn: function (packageName, aBlock){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_packageAt_", [packageName]), "_ifNil_", [aBlock]);
+return self;},
+args: ["packageName", "aBlock"],
+source: unescape('packageAt%3A%20packageName%20ifAbsent%3A%20aBlock%0A%20%20%20%20%20%20%20%5E%28self%20packageAt%3A%20packageName%29%20ifNil%3A%20aBlock'),
+messageSends: ["ifNil:", "packageAt:"],
+referencedClasses: []
+}),
+smalltalk.Smalltalk);
+
+smalltalk.addMethod(
+'_createPackage_',
+smalltalk.method({
+selector: 'createPackage:',
+category: 'packages',
+fn: function (packageName){
+var self=this;
+return smalltalk.addPackage(packageName);
+return self;},
+args: ["packageName"],
+source: unescape('createPackage%3A%20packageName%0A%20%20%20%20%20%20%20%3Creturn%20smalltalk.addPackage%28packageName%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Smalltalk);
+
+smalltalk.addMethod(
+'_deletePackage_',
+smalltalk.method({
+selector: 'deletePackage:',
+category: 'packages',
+fn: function (packageName){
+var self=this;
+delete smalltalk.packages[packageName];
+return self;},
+args: ["packageName"],
+source: unescape('deletePackage%3A%20packageName%0A%20%20%20%20%20%20%20%3Cdelete%20smalltalk.packages%5BpackageName%5D%3E'),
 messageSends: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
@@ -1207,7 +1255,7 @@ return self;},
 args: ["aString"],
 args: ["aString"],
 source: unescape('methodsFor%3A%20aString%0A%09%5EClassCategoryReader%20new%0A%09%20%20%20%20class%3A%20self%20category%3A%20aString%3B%0A%09%20%20%20%20yourself'),
 source: unescape('methodsFor%3A%20aString%0A%09%5EClassCategoryReader%20new%0A%09%20%20%20%20class%3A%20self%20category%3A%20aString%3B%0A%09%20%20%20%20yourself'),
 messageSends: ["class:category:", "yourself", "new"],
 messageSends: ["class:category:", "yourself", "new"],
-referencedClasses: [smalltalk.ClassCategoryReader]
+referencedClasses: [smalltalk.nil]
 }),
 }),
 smalltalk.Behavior);
 smalltalk.Behavior);
 
 
@@ -1287,7 +1335,7 @@ return self;},
 args: [],
 args: [],
 source: unescape('commentStamp%0A%20%20%20%20%5EClassCommentReader%20new%0A%09class%3A%20self%3B%0A%09yourself'),
 source: unescape('commentStamp%0A%20%20%20%20%5EClassCommentReader%20new%0A%09class%3A%20self%3B%0A%09yourself'),
 messageSends: ["class:", "yourself", "new"],
 messageSends: ["class:", "yourself", "new"],
-referencedClasses: [smalltalk.ClassCommentReader]
+referencedClasses: [smalltalk.nil]
 }),
 }),
 smalltalk.Behavior);
 smalltalk.Behavior);
 
 
@@ -1359,7 +1407,7 @@ return self;},
 args: ["aBlock"],
 args: ["aBlock"],
 source: unescape('protocolsDo%3A%20aBlock%0A%09%22Execute%20aBlock%20for%20each%20method%20category%20with%0A%09its%20collection%20of%20methods%20in%20the%20sort%20order%20of%20category%20name.%22%0A%0A%09%7C%20methodsByCategory%20%7C%0A%09methodsByCategory%20%3A%3D%20Dictionary%20new.%0A%09self%20methodDictionary%20values%20do%3A%20%5B%3Am%20%7C%0A%09%09%28methodsByCategory%20at%3A%20m%20category%20ifAbsentPut%3A%20%5BArray%20new%5D%29%0A%20%09%09%09add%3A%20m%5D.%20%0A%09self%20protocols%20do%3A%20%5B%3Acategory%20%7C%0A%09%09aBlock%20value%3A%20category%20value%3A%20%28methodsByCategory%20at%3A%20category%29%5D'),
 source: unescape('protocolsDo%3A%20aBlock%0A%09%22Execute%20aBlock%20for%20each%20method%20category%20with%0A%09its%20collection%20of%20methods%20in%20the%20sort%20order%20of%20category%20name.%22%0A%0A%09%7C%20methodsByCategory%20%7C%0A%09methodsByCategory%20%3A%3D%20Dictionary%20new.%0A%09self%20methodDictionary%20values%20do%3A%20%5B%3Am%20%7C%0A%09%09%28methodsByCategory%20at%3A%20m%20category%20ifAbsentPut%3A%20%5BArray%20new%5D%29%0A%20%09%09%09add%3A%20m%5D.%20%0A%09self%20protocols%20do%3A%20%5B%3Acategory%20%7C%0A%09%09aBlock%20value%3A%20category%20value%3A%20%28methodsByCategory%20at%3A%20category%29%5D'),
 messageSends: ["new", "do:", "values", "methodDictionary", "add:", "at:ifAbsentPut:", "category", "protocols", "value:value:", "at:"],
 messageSends: ["new", "do:", "values", "methodDictionary", "add:", "at:ifAbsentPut:", "category", "protocols", "value:value:", "at:"],
-referencedClasses: [smalltalk.Dictionary,smalltalk.Array]
+referencedClasses: [smalltalk.nil,smalltalk.Array]
 }),
 }),
 smalltalk.Behavior);
 smalltalk.Behavior);
 
 
@@ -1461,7 +1509,7 @@ return self;},
 args: ["aString", "anotherString"],
 args: ["aString", "anotherString"],
 source: unescape('compile%3A%20aString%20category%3A%20anotherString%0A%09%7C%20method%20%7C%0A%09method%20%3A%3D%20Compiler%20new%20load%3A%20aString%20forClass%3A%20self.%0A%09method%20category%3A%20anotherString.%0A%09self%20addCompiledMethod%3A%20method'),
 source: unescape('compile%3A%20aString%20category%3A%20anotherString%0A%09%7C%20method%20%7C%0A%09method%20%3A%3D%20Compiler%20new%20load%3A%20aString%20forClass%3A%20self.%0A%09method%20category%3A%20anotherString.%0A%09self%20addCompiledMethod%3A%20method'),
 messageSends: ["load:forClass:", "new", "category:", "addCompiledMethod:"],
 messageSends: ["load:forClass:", "new", "category:", "addCompiledMethod:"],
-referencedClasses: [smalltalk.Compiler]
+referencedClasses: [smalltalk.nil]
 }),
 }),
 smalltalk.Behavior);
 smalltalk.Behavior);
 
 
@@ -1584,38 +1632,6 @@ referencedClasses: []
 }),
 }),
 smalltalk.Class);
 smalltalk.Class);
 
 
-smalltalk.addMethod(
-'_module',
-smalltalk.method({
-selector: 'module',
-category: 'accessing',
-fn: function (){
-var self=this;
-return self.module;
-return self;},
-args: [],
-source: unescape('module%0A%09%3Creturn%20self.module%3E'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.Class);
-
-smalltalk.addMethod(
-'_module_',
-smalltalk.method({
-selector: 'module:',
-category: 'accessing',
-fn: function (aModule){
-var self=this;
-self.module = aModule;
-return self;},
-args: ["aModule"],
-source: unescape('module%3A%20aModule%0A%09%3Cself.module%20%3D%20aModule%3E'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.Class);
-
 smalltalk.addMethod(
 smalltalk.addMethod(
 '_subclass_instanceVariableNames_module_',
 '_subclass_instanceVariableNames_module_',
 smalltalk.method({
 smalltalk.method({
@@ -1676,7 +1692,7 @@ return self;},
 args: ["aString", "aString2", "aString3"],
 args: ["aString", "aString2", "aString3"],
 source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3%0A%09%5EClassBuilder%20new%0A%09%20%20%20%20superclass%3A%20self%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3'),
 source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3%0A%09%5EClassBuilder%20new%0A%09%20%20%20%20superclass%3A%20self%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3'),
 messageSends: ["superclass:subclass:instanceVariableNames:package:", "new"],
 messageSends: ["superclass:subclass:instanceVariableNames:package:", "new"],
-referencedClasses: [smalltalk.ClassBuilder]
+referencedClasses: [smalltalk.nil]
 }),
 }),
 smalltalk.Class);
 smalltalk.Class);
 
 
@@ -1711,7 +1727,7 @@ return self;},
 args: ["aCollection"],
 args: ["aCollection"],
 source: unescape('instanceVariableNames%3A%20aCollection%0A%09ClassBuilder%20new%0A%09%20%20%20%20class%3A%20self%20instanceVariableNames%3A%20aCollection'),
 source: unescape('instanceVariableNames%3A%20aCollection%0A%09ClassBuilder%20new%0A%09%20%20%20%20class%3A%20self%20instanceVariableNames%3A%20aCollection'),
 messageSends: ["class:instanceVariableNames:", "new"],
 messageSends: ["class:instanceVariableNames:", "new"],
-referencedClasses: [smalltalk.ClassBuilder]
+referencedClasses: [smalltalk.nil]
 }),
 }),
 smalltalk.Metaclass);
 smalltalk.Metaclass);
 
 
@@ -2293,7 +2309,7 @@ return self;},
 args: [],
 args: [],
 source: unescape('atRandom%0A%20%20%20%20%5E%28Random%20new%20next%20*%20self%29%20truncated%20+%201'),
 source: unescape('atRandom%0A%20%20%20%20%5E%28Random%20new%20next%20*%20self%29%20truncated%20+%201'),
 messageSends: [unescape("+"), "truncated", unescape("*"), "next", "new"],
 messageSends: [unescape("+"), "truncated", unescape("*"), "next", "new"],
-referencedClasses: [smalltalk.Random]
+referencedClasses: [smalltalk.nil]
 }),
 }),
 smalltalk.Number);
 smalltalk.Number);
 
 
@@ -2309,7 +2325,7 @@ return self;},
 args: ["aNumber"],
 args: ["aNumber"],
 source: unescape('@%20aNumber%0A%09%5EPoint%20x%3A%20self%20y%3A%20aNumber'),
 source: unescape('@%20aNumber%0A%09%5EPoint%20x%3A%20self%20y%3A%20aNumber'),
 messageSends: ["x:y:"],
 messageSends: ["x:y:"],
-referencedClasses: [smalltalk.Point]
+referencedClasses: [smalltalk.nil]
 }),
 }),
 smalltalk.Number);
 smalltalk.Number);
 
 
@@ -2325,7 +2341,7 @@ return self;},
 args: [],
 args: [],
 source: unescape('asPoint%0A%09%5EPoint%20x%3A%20self%20y%3A%20self'),
 source: unescape('asPoint%0A%09%5EPoint%20x%3A%20self%20y%3A%20self'),
 messageSends: ["x:y:"],
 messageSends: ["x:y:"],
-referencedClasses: [smalltalk.Point]
+referencedClasses: [smalltalk.nil]
 }),
 }),
 smalltalk.Number);
 smalltalk.Number);
 
 
@@ -3885,7 +3901,7 @@ return self;},
 args: ["aString", "aString2", "aString3"],
 args: ["aString", "aString2", "aString3"],
 source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3%0A%09%5EClassBuilder%20new%0A%09%20%20%20%20superclass%3A%20self%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3'),
 source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3%0A%09%5EClassBuilder%20new%0A%09%20%20%20%20superclass%3A%20self%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3'),
 messageSends: ["superclass:subclass:instanceVariableNames:package:", "new"],
 messageSends: ["superclass:subclass:instanceVariableNames:package:", "new"],
-referencedClasses: [smalltalk.ClassBuilder]
+referencedClasses: [smalltalk.nil]
 }),
 }),
 smalltalk.UndefinedObject);
 smalltalk.UndefinedObject);
 
 
@@ -4332,7 +4348,7 @@ return self;},
 args: [],
 args: [],
 source: unescape('asSet%0A%09%5ESet%20withAll%3A%20self'),
 source: unescape('asSet%0A%09%5ESet%20withAll%3A%20self'),
 messageSends: ["withAll:"],
 messageSends: ["withAll:"],
-referencedClasses: [smalltalk.Set]
+referencedClasses: [smalltalk.nil]
 }),
 }),
 smalltalk.Collection);
 smalltalk.Collection);
 
 
@@ -4381,7 +4397,7 @@ return self;},
 args: [],
 args: [],
 source: unescape('streamClass%0A%09%20%20%20%20%5EStream'),
 source: unescape('streamClass%0A%09%20%20%20%20%5EStream'),
 messageSends: [],
 messageSends: [],
-referencedClasses: [smalltalk.Stream]
+referencedClasses: [smalltalk.nil]
 }),
 }),
 smalltalk.Collection.klass);
 smalltalk.Collection.klass);
 
 
@@ -5574,7 +5590,7 @@ return self;},
 args: [],
 args: [],
 source: unescape('streamClass%0A%09%20%20%20%20%5EStringStream'),
 source: unescape('streamClass%0A%09%20%20%20%20%5EStringStream'),
 messageSends: [],
 messageSends: [],
-referencedClasses: [smalltalk.StringStream]
+referencedClasses: [smalltalk.nil]
 }),
 }),
 smalltalk.String.klass);
 smalltalk.String.klass);
 
 
@@ -6317,57 +6333,6 @@ smalltalk.MethodContext);
 
 
 
 
 
 
-smalltalk.addClass('Module', smalltalk.Object, [], 'Kernel');
-smalltalk.addMethod(
-'_name',
-smalltalk.method({
-selector: 'name',
-category: 'accessing',
-fn: function (){
-var self=this;
-return self.moduleName || nil;
-return self;},
-args: [],
-source: unescape('name%0A%09%3Creturn%20self.moduleName%20%7C%7C%20nil%3E'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.Module);
-
-smalltalk.addMethod(
-'_requires',
-smalltalk.method({
-selector: 'requires',
-category: 'accessing',
-fn: function (){
-var self=this;
-return self.requires || nil;
-return self;},
-args: [],
-source: unescape('requires%0A%09%3Creturn%20self.requires%20%7C%7C%20nil%3E'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.Module);
-
-smalltalk.addMethod(
-'_name_',
-smalltalk.method({
-selector: 'name:',
-category: 'accessing',
-fn: function (aString){
-var self=this;
-return self.moduleName = aString;
-return self;},
-args: ["aString"],
-source: unescape('name%3A%20aString%0A%09%3Creturn%20self.moduleName%20%3D%20aString%3E'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.Module);
-
-
-
 smalltalk.addClass('Association', smalltalk.Object, ['key', 'value'], 'Kernel');
 smalltalk.addClass('Association', smalltalk.Object, ['key', 'value'], 'Kernel');
 smalltalk.addMethod(
 smalltalk.addMethod(
 '__eq',
 '__eq',
@@ -7128,7 +7093,7 @@ return self;},
 args: [],
 args: [],
 source: unescape('initialize%0A%09super%20initialize.%0A%09chunkParser%20%3A%3D%20ChunkParser%20new.'),
 source: unescape('initialize%0A%09super%20initialize.%0A%09chunkParser%20%3A%3D%20ChunkParser%20new.'),
 messageSends: ["initialize", "new"],
 messageSends: ["initialize", "new"],
-referencedClasses: [smalltalk.ChunkParser]
+referencedClasses: [smalltalk.nil]
 }),
 }),
 smalltalk.ClassCategoryReader);
 smalltalk.ClassCategoryReader);
 
 
@@ -7181,7 +7146,7 @@ return self;},
 args: ["aString"],
 args: ["aString"],
 source: unescape('compileMethod%3A%20aString%0A%09%7C%20method%20%7C%0A%09method%20%3A%3D%20Compiler%20new%20load%3A%20aString%20forClass%3A%20class.%0A%09method%20category%3A%20category.%0A%09class%20addCompiledMethod%3A%20method'),
 source: unescape('compileMethod%3A%20aString%0A%09%7C%20method%20%7C%0A%09method%20%3A%3D%20Compiler%20new%20load%3A%20aString%20forClass%3A%20class.%0A%09method%20category%3A%20category.%0A%09class%20addCompiledMethod%3A%20method'),
 messageSends: ["load:forClass:", "new", "category:", "addCompiledMethod:"],
 messageSends: ["load:forClass:", "new", "category:", "addCompiledMethod:"],
-referencedClasses: [smalltalk.Compiler]
+referencedClasses: [smalltalk.nil]
 }),
 }),
 smalltalk.ClassCategoryReader);
 smalltalk.ClassCategoryReader);
 
 
@@ -7749,7 +7714,7 @@ return self;},
 args: [],
 args: [],
 source: unescape('initialize%0A%09super%20initialize.%0A%09chunkParser%20%3A%3D%20ChunkParser%20new.'),
 source: unescape('initialize%0A%09super%20initialize.%0A%09chunkParser%20%3A%3D%20ChunkParser%20new.'),
 messageSends: ["initialize", "new"],
 messageSends: ["initialize", "new"],
-referencedClasses: [smalltalk.ChunkParser]
+referencedClasses: [smalltalk.nil]
 }),
 }),
 smalltalk.ClassCommentReader);
 smalltalk.ClassCommentReader);
 
 

+ 100 - 56
st/Kernel.st

@@ -1,43 +1,3 @@
-!ClassBuilder methodsFor: 'class creation'!
-
-superclass: aClass subclass: aString
-	^self superclass: aClass subclass: aString instanceVariableNames: '' package: nil
-!
-
-class: aClass instanceVariableNames: aString
-	aClass isMetaclass ifFalse: [self error: aClass name, ' is not a metaclass'].
-	aClass basicAt: 'iVarNames' put: (self instanceVariableNamesFor: aString).
-	self setupClass: aClass
-!
-
-superclass: aClass subclass: aString instanceVariableNames: aString2 package: aString3
-	| newClass |
-	newClass := self addSubclassOf: aClass
-				named: aString instanceVariableNames: (self instanceVariableNamesFor: aString2)
-				package: (aString3 ifNil: ['unclassified']).
-	self setupClass: newClass
-! !
-
-!ClassBuilder methodsFor: 'private'!
-
-instanceVariableNamesFor: aString
-	^(aString tokenize: ' ') reject: [:each | each isEmpty]
-!
-
-addSubclassOf: aClass named: aString instanceVariableNames: aCollection
-	<smalltalk.addClass(aString, aClass, aCollection);
-	    return smalltalk[aString]>
-!
-
-setupClass: aClass
-	<smalltalk.init(aClass);>
-!
-
-addSubclassOf: aClass named: aString instanceVariableNames: aCollection package: packageName
-	<smalltalk.addClass(aString, aClass, aCollection, packageName);
-	    return smalltalk[aString]>
-! !
-
 nil subclass: #Object
 nil subclass: #Object
 	instanceVariableNames: ''
 	instanceVariableNames: ''
 	category: 'Kernel'!
 	category: 'Kernel'!
@@ -338,10 +298,28 @@ parseError: anException parsing: aString
                   lines withIndexDo: [:l :i |
                   lines withIndexDo: [:l :i |
                      s nextPutAll: i asString, ': ', l, String lf]].
                      s nextPutAll: i asString, ': ', l, String lf]].
 	^ Error new messageText: ('Parse error on line ' , row , ' column ' , col , ' : ' , message , ' Below is code with line numbers and ===> marker inserted:' , String lf, code)
 	^ Error new messageText: ('Parse error on line ' , row , ' column ' , col , ' : ' , message , ' Below is code with line numbers and ===> marker inserted:' , String lf, code)
-!
+! !
+
+!Smalltalk methodsFor: 'packages'!
 
 
 packages
 packages
 	<return self.packages.all()>
 	<return self.packages.all()>
+!
+
+packageAt: packageName
+       <return self.packages[packageName]>
+!
+
+packageAt: packageName ifAbsent: aBlock
+       ^(self packageAt: packageName) ifNil: aBlock
+!
+
+createPackage: packageName
+       <return smalltalk.addPackage(packageName)>
+!
+
+deletePackage: packageName
+       <delete smalltalk.packages[packageName]>
 ! !
 ! !
 
 
 Smalltalk class instanceVariableNames: 'current'!
 Smalltalk class instanceVariableNames: 'current'!
@@ -547,11 +525,6 @@ package: aPackage
 
 
 !Class methodsFor: 'class creation'!
 !Class methodsFor: 'class creation'!
 
 
-subclass: aString instanceVariableNames: aString2 package: aString3
-	^ClassBuilder new
-	    superclass: self subclass: aString instanceVariableNames: aString2 package: aString3
-!
-
 subclass: aString instanceVariableNames: anotherString
 subclass: aString instanceVariableNames: anotherString
 	"Kept for compatibility."
 	"Kept for compatibility."
 	^self subclass: aString instanceVariableNames: anotherString package: nil
 	^self subclass: aString instanceVariableNames: anotherString package: nil
@@ -565,6 +538,16 @@ subclass: aString instanceVariableNames: aString2 category: aString3
 subclass: aString instanceVariableNames: aString2 classVariableNames: classVars poolDictionaries: pools category: aString3
 subclass: aString instanceVariableNames: aString2 classVariableNames: classVars poolDictionaries: pools category: aString3
 	"Just ignore class variables and pools. Added for compatibility."
 	"Just ignore class variables and pools. Added for compatibility."
 	^self subclass: aString instanceVariableNames: aString2 package: aString3
 	^self subclass: aString instanceVariableNames: aString2 package: aString3
+!
+
+subclass: aString instanceVariableNames: aString2 module: aString3
+	^ClassBuilder new
+	    superclass: self subclass: aString instanceVariableNames: aString2 module: aString3
+!
+
+subclass: aString instanceVariableNames: aString2 package: aString3
+	^ClassBuilder new
+	    superclass: self subclass: aString instanceVariableNames: aString2 package: aString3
 ! !
 ! !
 
 
 !Class methodsFor: 'printing'!
 !Class methodsFor: 'printing'!
@@ -704,6 +687,11 @@ negated
 
 
 !Number methodsFor: 'comparing'!
 !Number methodsFor: 'comparing'!
 
 
+= aNumber
+	aNumber class = self class ifFalse: [^false]. 
+	<return Number(self) == aNumber>
+!
+
 > aNumber
 > aNumber
 	"Inlined in the Compiler"
 	"Inlined in the Compiler"
 	<return self >> aNumber>
 	<return self >> aNumber>
@@ -724,11 +712,6 @@ negated
 	<return self <= aNumber>
 	<return self <= aNumber>
 !
 !
 
 
-= aNumber
-	aNumber class = self class ifFalse: [^false]. 
-	<return Number(self) == aNumber>
-!
-
 == aNumber
 == aNumber
 	aNumber class = self class ifFalse: [^false]. 
 	aNumber class = self class ifFalse: [^false]. 
 	<return Number(self) === Number(aNumber)>
 	<return Number(self) === Number(aNumber)>
@@ -1233,6 +1216,11 @@ subclass: aString instanceVariableNames: aString2 category: aString3
 	^self subclass: aString instanceVariableNames: aString2 package: aString3
 	^self subclass: aString instanceVariableNames: aString2 package: aString3
 !
 !
 
 
+subclass: aString instanceVariableNames: aString2 module: aString3
+	^ClassBuilder new
+	    superclass: self subclass: aString instanceVariableNames: aString2 module: aString3
+!
+
 subclass: aString instanceVariableNames: aString2 package: aString3
 subclass: aString instanceVariableNames: aString2 package: aString3
 	^ClassBuilder new
 	^ClassBuilder new
 	    superclass: self subclass: aString instanceVariableNames: aString2 package: aString3
 	    superclass: self subclass: aString instanceVariableNames: aString2 package: aString3
@@ -1641,6 +1629,11 @@ remove: anObject
 
 
 !String methodsFor: 'comparing'!
 !String methodsFor: 'comparing'!
 
 
+= aString
+	aString class = self class ifFalse: [^false].
+	<return String(self) == aString>
+!
+
 > aString
 > aString
 	<return String(self) >> aString>
 	<return String(self) >> aString>
 !
 !
@@ -1657,11 +1650,6 @@ remove: anObject
 	<return String(self) <= aString>
 	<return String(self) <= aString>
 !
 !
 
 
-= aString
-	aString class = self class ifFalse: [^false].
-	<return String(self) == aString>
-!
-
 == aString
 == aString
 	aString class = self class ifFalse: [^false].
 	aString class = self class ifFalse: [^false].
 	<return String(self) === String(aString)>
 	<return String(self) === String(aString)>
@@ -2373,6 +2361,58 @@ Object subclass: #ClassBuilder
 	instanceVariableNames: ''
 	instanceVariableNames: ''
 	category: 'Kernel'!
 	category: 'Kernel'!
 
 
+!ClassBuilder methodsFor: 'class creation'!
+
+superclass: aClass subclass: aString
+	^self superclass: aClass subclass: aString instanceVariableNames: '' package: nil
+!
+
+class: aClass instanceVariableNames: aString
+	aClass isMetaclass ifFalse: [self error: aClass name, ' is not a metaclass'].
+	aClass basicAt: 'iVarNames' put: (self instanceVariableNamesFor: aString).
+	self setupClass: aClass
+!
+
+superclass: aClass subclass: aString instanceVariableNames: aString2 module: aString3
+	| newClass |
+	newClass := self addSubclassOf: aClass
+				named: aString instanceVariableNames: (self instanceVariableNamesFor: aString2)
+				module: (aString3 ifNil: ['unclassified']).
+	self setupClass: newClass
+!
+
+superclass: aClass subclass: aString instanceVariableNames: aString2 package: aString3
+	| newClass |
+	newClass := self addSubclassOf: aClass
+				named: aString instanceVariableNames: (self instanceVariableNamesFor: aString2)
+				package: (aString3 ifNil: ['unclassified']).
+	self setupClass: newClass
+! !
+
+!ClassBuilder methodsFor: 'private'!
+
+instanceVariableNamesFor: aString
+	^(aString tokenize: ' ') reject: [:each | each isEmpty]
+!
+
+addSubclassOf: aClass named: aString instanceVariableNames: aCollection
+	<smalltalk.addClass(aString, aClass, aCollection);
+	    return smalltalk[aString]>
+!
+
+setupClass: aClass
+	<smalltalk.init(aClass);>
+!
+
+addSubclassOf: aClass named: aString instanceVariableNames: aCollection module: moduleName
+	<smalltalk.addClass(aString, aClass, aCollection, moduleName);
+	    return smalltalk[aString]>
+!
+
+addSubclassOf: aClass named: aString instanceVariableNames: aCollection package: packageName
+	<smalltalk.addClass(aString, aClass, aCollection, packageName);
+	    return smalltalk[aString]>
+! !
 
 
 Object subclass: #ClassCategoryReader
 Object subclass: #ClassCategoryReader
 	instanceVariableNames: 'class category chunkParser'
 	instanceVariableNames: 'class category chunkParser'
@@ -2791,6 +2831,10 @@ setCurrent: anHandler
 
 
 !ErrorHandler class methodsFor: 'initialization'!
 !ErrorHandler class methodsFor: 'initialization'!
 
 
+initialize
+	self register
+!
+
 register
 register
 	ErrorHandler setCurrent: self new
 	ErrorHandler setCurrent: self new
 ! !
 ! !