Przeglądaj źródła

fileout all of the system packages using the new formatter

Dale Henrichs 12 lat temu
rodzic
commit
c6fb057f36

Plik diff jest za duży
+ 871 - 907
js/Canvas.deploy.js


Plik diff jest za duży
+ 1534 - 1585
js/Canvas.js


+ 6 - 6
js/Examples.deploy.js

@@ -1,24 +1,24 @@
 smalltalk.addPackage('Examples', {});
 smalltalk.addClass('Counter', smalltalk.Widget, ['count', 'header'], 'Examples');
 smalltalk.addMethod(
-unescape('_increase'),
+unescape('_decrease'),
 smalltalk.method({
-selector: unescape('increase'),
+selector: unescape('decrease'),
 fn: function (){
 var self=this;
-(self['@count']=((($receiver = self['@count']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));
+(self['@count']=((($receiver = self['@count']).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])));
 smalltalk.send(self['@header'], "_contents_", [(function(html){return smalltalk.send(html, "_with_", [smalltalk.send(self['@count'], "_asString", [])]);})]);
 return self;}
 }),
 smalltalk.Counter);
 
 smalltalk.addMethod(
-unescape('_decrease'),
+unescape('_increase'),
 smalltalk.method({
-selector: unescape('decrease'),
+selector: unescape('increase'),
 fn: function (){
 var self=this;
-(self['@count']=((($receiver = self['@count']).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])));
+(self['@count']=((($receiver = self['@count']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));
 smalltalk.send(self['@header'], "_contents_", [(function(html){return smalltalk.send(html, "_with_", [smalltalk.send(self['@count'], "_asString", [])]);})]);
 return self;}
 }),

+ 10 - 10
js/Examples.js

@@ -1,35 +1,35 @@
 smalltalk.addPackage('Examples', {});
 smalltalk.addClass('Counter', smalltalk.Widget, ['count', 'header'], 'Examples');
 smalltalk.addMethod(
-unescape('_increase'),
+unescape('_decrease'),
 smalltalk.method({
-selector: unescape('increase'),
+selector: unescape('decrease'),
 category: 'actions',
 fn: function (){
 var self=this;
-(self['@count']=((($receiver = self['@count']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));
+(self['@count']=((($receiver = self['@count']).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])));
 smalltalk.send(self['@header'], "_contents_", [(function(html){return smalltalk.send(html, "_with_", [smalltalk.send(self['@count'], "_asString", [])]);})]);
 return self;},
 args: [],
-source: unescape('increase%0A%20%20%20%20count%20%3A%3D%20count%20+%201.%0A%20%20%20%20header%20contents%3A%20%5B%3Ahtml%20%7C%20html%20with%3A%20count%20asString%5D'),
-messageSends: [unescape("+"), "contents:", "with:", "asString"],
+source: unescape('decrease%0A%20%20%20%20count%20%3A%3D%20count%20-%201.%0A%20%20%20%20header%20contents%3A%20%5B%3Ahtml%20%7C%20html%20with%3A%20count%20asString%5D'),
+messageSends: [unescape("-"), "contents:", "with:", "asString"],
 referencedClasses: []
 }),
 smalltalk.Counter);
 
 smalltalk.addMethod(
-unescape('_decrease'),
+unescape('_increase'),
 smalltalk.method({
-selector: unescape('decrease'),
+selector: unescape('increase'),
 category: 'actions',
 fn: function (){
 var self=this;
-(self['@count']=((($receiver = self['@count']).klass === smalltalk.Number) ? $receiver -(1) : smalltalk.send($receiver, "__minus", [(1)])));
+(self['@count']=((($receiver = self['@count']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));
 smalltalk.send(self['@header'], "_contents_", [(function(html){return smalltalk.send(html, "_with_", [smalltalk.send(self['@count'], "_asString", [])]);})]);
 return self;},
 args: [],
-source: unescape('decrease%0A%20%20%20%20count%20%3A%3D%20count%20-%201.%0A%20%20%20%20header%20contents%3A%20%5B%3Ahtml%20%7C%20html%20with%3A%20count%20asString%5D'),
-messageSends: [unescape("-"), "contents:", "with:", "asString"],
+source: unescape('increase%0A%20%20%20%20count%20%3A%3D%20count%20+%201.%0A%20%20%20%20header%20contents%3A%20%5B%3Ahtml%20%7C%20html%20with%3A%20count%20asString%5D'),
+messageSends: [unescape("+"), "contents:", "with:", "asString"],
 referencedClasses: []
 }),
 smalltalk.Counter);

+ 325 - 325
js/Kernel-Classes.deploy.js

@@ -1,232 +1,193 @@
 smalltalk.addPackage('Kernel-Classes', {});
-smalltalk.addClass('ClassCommentReader', smalltalk.Object, ['class', 'chunkParser'], 'Kernel-Classes');
-smalltalk.addMethod(
-unescape('_class_'),
-smalltalk.method({
-selector: unescape('class%3A'),
-fn: function (aClass){
-var self=this;
-(self['@class']=aClass);
-return self;}
-}),
-smalltalk.ClassCommentReader);
-
+smalltalk.addClass('Behavior', smalltalk.Object, [], 'Kernel-Classes');
 smalltalk.addMethod(
-unescape('_scanFrom_'),
+unescape('_addCompiledMethod_'),
 smalltalk.method({
-selector: unescape('scanFrom%3A'),
-fn: function (aChunkParser){
+selector: unescape('addCompiledMethod%3A'),
+fn: function (aMethod){
 var self=this;
-var chunk=nil;
-(chunk=smalltalk.send(aChunkParser, "_nextChunk", []));
-((($receiver = smalltalk.send(chunk, "_isEmpty", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_setComment_", [chunk]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_setComment_", [chunk]);})]));
+smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self);
 return self;}
 }),
-smalltalk.ClassCommentReader);
+smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_initialize'),
+unescape('_allInstanceVariableNames'),
 smalltalk.method({
-selector: unescape('initialize'),
+selector: unescape('allInstanceVariableNames'),
 fn: function (){
 var self=this;
-smalltalk.send(self, "_initialize", [], smalltalk.Object);
-(self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", []));
-return self;}
-}),
-smalltalk.ClassCommentReader);
-
-smalltalk.addMethod(
-unescape('_setComment_'),
-smalltalk.method({
-selector: unescape('setComment%3A'),
-fn: function (aString){
-var self=this;
-smalltalk.send(self['@class'], "_comment_", [aString]);
+var result=nil;
+(result=smalltalk.send(smalltalk.send(self, "_instanceVariableNames", []), "_copy", []));
+(($receiver = smalltalk.send(self, "_superclass", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(result, "_addAll_", [smalltalk.send(smalltalk.send(self, "_superclass", []), "_allInstanceVariableNames", [])]);})() : nil;
+return result;
 return self;}
 }),
-smalltalk.ClassCommentReader);
-
-
+smalltalk.Behavior);
 
-smalltalk.addClass('ClassCategoryReader', smalltalk.Object, ['class', 'category', 'chunkParser'], 'Kernel-Classes');
 smalltalk.addMethod(
-unescape('_initialize'),
+unescape('_allSubclasses'),
 smalltalk.method({
-selector: unescape('initialize'),
+selector: unescape('allSubclasses'),
 fn: function (){
 var self=this;
-smalltalk.send(self, "_initialize", [], smalltalk.Object);
-(self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", []));
+var result=nil;
+(result=smalltalk.send(self, "_subclasses", []));
+smalltalk.send(smalltalk.send(self, "_subclasses", []), "_do_", [(function(each){return smalltalk.send(result, "_addAll_", [smalltalk.send(each, "_allSubclasses", [])]);})]);
+return result;
 return self;}
 }),
-smalltalk.ClassCategoryReader);
+smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_class_category_'),
+unescape('_basicNew'),
 smalltalk.method({
-selector: unescape('class%3Acategory%3A'),
-fn: function (aClass, aString){
+selector: unescape('basicNew'),
+fn: function (){
 var self=this;
-(self['@class']=aClass);
-(self['@category']=aString);
+return new self.fn();
 return self;}
 }),
-smalltalk.ClassCategoryReader);
+smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_scanFrom_'),
+unescape('_comment'),
 smalltalk.method({
-selector: unescape('scanFrom%3A'),
-fn: function (aChunkParser){
+selector: unescape('comment'),
+fn: function (){
 var self=this;
-var chunk=nil;
-(function(){while(!(function(){(chunk=smalltalk.send(aChunkParser, "_nextChunk", []));return smalltalk.send(chunk, "_isEmpty", []);})()) {(function(){return smalltalk.send(self, "_compileMethod_", [chunk]);})()}})();
+return (($receiver = smalltalk.send(self, "_basicAt_", ["comment"])) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver;
 return self;}
 }),
-smalltalk.ClassCategoryReader);
+smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_compileMethod_'),
+unescape('_comment_'),
 smalltalk.method({
-selector: unescape('compileMethod%3A'),
+selector: unescape('comment%3A'),
 fn: function (aString){
 var self=this;
-var method=nil;
-var compiler=nil;
-(method=smalltalk.send((compiler=smalltalk.send((smalltalk.Compiler || Compiler), "_new", [])), "_load_forClass_", [aString, self['@class']]));
-smalltalk.send(method, "_category_", [self['@category']]);
-smalltalk.send(self['@class'], "_addCompiledMethod_", [method]);
-smalltalk.send(compiler, "_setupClass_", [self['@class']]);
+smalltalk.send(self, "_basicAt_put_", ["comment", aString]);
 return self;}
 }),
-smalltalk.ClassCategoryReader);
-
-
+smalltalk.Behavior);
 
-smalltalk.addClass('ClassBuilder', smalltalk.Object, [], 'Kernel-Classes');
 smalltalk.addMethod(
-unescape('_superclass_subclass_'),
+unescape('_commentStamp'),
 smalltalk.method({
-selector: unescape('superclass%3Asubclass%3A'),
-fn: function (aClass, aString){
+selector: unescape('commentStamp'),
+fn: function (){
 var self=this;
-return smalltalk.send(self, "_superclass_subclass_instanceVariableNames_package_", [aClass, aString, "", nil]);
+return (function($rec){smalltalk.send($rec, "_class_", [self]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCommentReader || ClassCommentReader), "_new", []));
 return self;}
 }),
-smalltalk.ClassBuilder);
+smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_class_instanceVariableNames_'),
+unescape('_commentStamp_prior_'),
 smalltalk.method({
-selector: unescape('class%3AinstanceVariableNames%3A'),
-fn: function (aClass, aString){
+selector: unescape('commentStamp%3Aprior%3A'),
+fn: function (aStamp, prior){
 var self=this;
-((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_error_", [smalltalk.send(smalltalk.send(aClass, "_name", []), "__comma", [" is not a metaclass"])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_error_", [smalltalk.send(smalltalk.send(aClass, "_name", []), "__comma", [" is not a metaclass"])]);})]));
-smalltalk.send(aClass, "_basicAt_put_", ["iVarNames", smalltalk.send(self, "_instanceVariableNamesFor_", [aString])]);
-smalltalk.send(self, "_setupClass_", [aClass]);
+return smalltalk.send(self, "_commentStamp", []);
 return self;}
 }),
-smalltalk.ClassBuilder);
+smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_instanceVariableNamesFor_'),
+unescape('_compile_'),
 smalltalk.method({
-selector: unescape('instanceVariableNamesFor%3A'),
+selector: unescape('compile%3A'),
 fn: function (aString){
 var self=this;
-return smalltalk.send(smalltalk.send(aString, "_tokenize_", [" "]), "_reject_", [(function(each){return smalltalk.send(each, "_isEmpty", []);})]);
+smalltalk.send(self, "_compile_category_", [aString, ""]);
 return self;}
 }),
-smalltalk.ClassBuilder);
+smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_addSubclassOf_named_instanceVariableNames_'),
+unescape('_compile_category_'),
 smalltalk.method({
-selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3A'),
-fn: function (aClass, aString, aCollection){
+selector: unescape('compile%3Acategory%3A'),
+fn: function (aString, anotherString){
 var self=this;
-smalltalk.addClass(aString, aClass, aCollection);
-	    return smalltalk[aString];
+var method=nil;
+(method=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [aString, self]));
+smalltalk.send(method, "_category_", [anotherString]);
+smalltalk.send(self, "_addCompiledMethod_", [method]);
 return self;}
 }),
-smalltalk.ClassBuilder);
+smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_setupClass_'),
+unescape('_inheritsFrom_'),
 smalltalk.method({
-selector: unescape('setupClass%3A'),
+selector: unescape('inheritsFrom%3A'),
 fn: function (aClass){
 var self=this;
-smalltalk.init(aClass);;
+return smalltalk.send(smalltalk.send(aClass, "_allSubclasses", []), "_includes_", [self]);
 return self;}
 }),
-smalltalk.ClassBuilder);
+smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_superclass_subclass_instanceVariableNames_package_'),
+unescape('_instanceVariableNames'),
 smalltalk.method({
-selector: unescape('superclass%3Asubclass%3AinstanceVariableNames%3Apackage%3A'),
-fn: function (aClass, aString, aString2, aString3){
+selector: unescape('instanceVariableNames'),
+fn: function (){
 var self=this;
-var newClass=nil;
-(newClass=smalltalk.send(self, "_addSubclassOf_named_instanceVariableNames_package_", [aClass, aString, smalltalk.send(self, "_instanceVariableNamesFor_", [aString2]), (($receiver = aString3) == nil || $receiver == undefined) ? (function(){return "unclassified";})() : $receiver]));
-smalltalk.send(self, "_setupClass_", [newClass]);
-return newClass;
+return self.iVarNames;
 return self;}
 }),
-smalltalk.ClassBuilder);
+smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_addSubclassOf_named_instanceVariableNames_package_'),
+unescape('_methodAt_'),
 smalltalk.method({
-selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3Apackage%3A'),
-fn: function (aClass, aString, aCollection, packageName){
+selector: unescape('methodAt%3A'),
+fn: function (aString){
 var self=this;
-smalltalk.addClass(aString, aClass, aCollection, packageName);
-	    return smalltalk[aString];
+return smalltalk.methods(self)[aString];
 return self;}
 }),
-smalltalk.ClassBuilder);
+smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_copyClass_named_'),
+unescape('_methodDictionary'),
 smalltalk.method({
-selector: unescape('copyClass%3Anamed%3A'),
-fn: function (aClass, aString){
+selector: unescape('methodDictionary'),
+fn: function (){
 var self=this;
-var newClass=nil;
-(newClass=smalltalk.send(self, "_addSubclassOf_named_instanceVariableNames_package_", [smalltalk.send(aClass, "_superclass", []), aString, smalltalk.send(aClass, "_instanceVariableNames", []), smalltalk.send(smalltalk.send(aClass, "_package", []), "_name", [])]));
-smalltalk.send(self, "_setupClass_", [newClass]);
-smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_values", []), "_do_", [(function(each){smalltalk.send(newClass, "_addCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [smalltalk.send(each, "_source", []), newClass])]);return smalltalk.send(smalltalk.send(smalltalk.send(newClass, "_methodDictionary", []), "_at_", [smalltalk.send(each, "_selector", [])]), "_category_", [smalltalk.send(each, "_category", [])]);})]);
-smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_methodDictionary", []), "_values", []), "_do_", [(function(each){smalltalk.send(smalltalk.send(newClass, "_class", []), "_addCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [smalltalk.send(each, "_source", []), smalltalk.send(newClass, "_class", [])])]);return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(newClass, "_class", []), "_methodDictionary", []), "_at_", [smalltalk.send(each, "_selector", [])]), "_category_", [smalltalk.send(each, "_category", [])]);})]);
-smalltalk.send(self, "_setupClass_", [newClass]);
-return newClass;
+var dict = smalltalk.HashedCollection._new();
+	var methods = self.fn.prototype.methods;
+	for(var i in methods) {
+		if(methods[i].selector) {
+			dict._at_put_(methods[i].selector, methods[i]);
+		}
+	};
+	return dict;
 return self;}
 }),
-smalltalk.ClassBuilder);
-
-
+smalltalk.Behavior);
 
-smalltalk.addClass('Behavior', smalltalk.Object, [], 'Kernel-Classes');
 smalltalk.addMethod(
-unescape('_new'),
+unescape('_methodsFor_'),
 smalltalk.method({
-selector: unescape('new'),
-fn: function (){
+selector: unescape('methodsFor%3A'),
+fn: function (aString){
 var self=this;
-return smalltalk.send(smalltalk.send(self, "_basicNew", []), "_initialize", []);
+return (function($rec){smalltalk.send($rec, "_class_category_", [self, aString]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCategoryReader || ClassCategoryReader), "_new", []));
 return self;}
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_basicNew'),
+unescape('_methodsFor_stamp_'),
 smalltalk.method({
-selector: unescape('basicNew'),
-fn: function (){
+selector: unescape('methodsFor%3Astamp%3A'),
+fn: function (aString, aStamp){
 var self=this;
-return new self.fn();
+return smalltalk.send(self, "_methodsFor_", [aString]);
 return self;}
 }),
 smalltalk.Behavior);
@@ -243,435 +204,474 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_superclass'),
+unescape('_new'),
 smalltalk.method({
-selector: unescape('superclass'),
+selector: unescape('new'),
 fn: function (){
 var self=this;
-return self.superclass || nil;
+return smalltalk.send(smalltalk.send(self, "_basicNew", []), "_initialize", []);
 return self;}
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_subclasses'),
+unescape('_protocols'),
 smalltalk.method({
-selector: unescape('subclasses'),
+selector: unescape('protocols'),
 fn: function (){
 var self=this;
-return smalltalk.subclasses(self);
+var protocols=nil;
+(protocols=smalltalk.send((smalltalk.Array || Array), "_new", []));
+smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_do_", [(function(each){return ((($receiver = smalltalk.send(protocols, "_includes_", [smalltalk.send(each, "_category", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(protocols, "_add_", [smalltalk.send(each, "_category", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(protocols, "_add_", [smalltalk.send(each, "_category", [])]);})]));})]);
+return smalltalk.send(protocols, "_sort", []);
 return self;}
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_allSubclasses'),
+unescape('_protocolsDo_'),
 smalltalk.method({
-selector: unescape('allSubclasses'),
-fn: function (){
+selector: unescape('protocolsDo%3A'),
+fn: function (aBlock){
 var self=this;
-var result=nil;
-(result=smalltalk.send(self, "_subclasses", []));
-smalltalk.send(smalltalk.send(self, "_subclasses", []), "_do_", [(function(each){return smalltalk.send(result, "_addAll_", [smalltalk.send(each, "_allSubclasses", [])]);})]);
-return result;
+var methodsByCategory=nil;
+(methodsByCategory=smalltalk.send((smalltalk.HashedCollection || HashedCollection), "_new", []));
+smalltalk.send(smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_values", []), "_do_", [(function(m){return smalltalk.send(smalltalk.send(methodsByCategory, "_at_ifAbsentPut_", [smalltalk.send(m, "_category", []), (function(){return smalltalk.send((smalltalk.Array || Array), "_new", []);})]), "_add_", [m]);})]);
+smalltalk.send(smalltalk.send(self, "_protocols", []), "_do_", [(function(category){return smalltalk.send(aBlock, "_value_value_", [category, smalltalk.send(methodsByCategory, "_at_", [category])]);})]);
 return self;}
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_withAllSubclasses'),
+unescape('_prototype'),
 smalltalk.method({
-selector: unescape('withAllSubclasses'),
+selector: unescape('prototype'),
 fn: function (){
 var self=this;
-return (function($rec){smalltalk.send($rec, "_addAll_", [smalltalk.send(self, "_allSubclasses", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Array || Array), "_with_", [self]));
+return self.fn.prototype;
 return self;}
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_prototype'),
+unescape('_removeCompiledMethod_'),
 smalltalk.method({
-selector: unescape('prototype'),
-fn: function (){
+selector: unescape('removeCompiledMethod%3A'),
+fn: function (aMethod){
 var self=this;
-return self.fn.prototype;
+delete self.fn.prototype[aMethod.selector._asSelector()];
+	delete self.fn.prototype.methods[aMethod.selector];
+	smalltalk.init(self);;
 return self;}
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_methodDictionary'),
+unescape('_subclasses'),
 smalltalk.method({
-selector: unescape('methodDictionary'),
+selector: unescape('subclasses'),
 fn: function (){
 var self=this;
-var dict = smalltalk.HashedCollection._new();
-	var methods = self.fn.prototype.methods;
-	for(var i in methods) {
-		if(methods[i].selector) {
-			dict._at_put_(methods[i].selector, methods[i]);
-		}
-	};
-	return dict;
+return smalltalk.subclasses(self);
 return self;}
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_methodsFor_'),
+unescape('_superclass'),
 smalltalk.method({
-selector: unescape('methodsFor%3A'),
-fn: function (aString){
+selector: unescape('superclass'),
+fn: function (){
 var self=this;
-return (function($rec){smalltalk.send($rec, "_class_category_", [self, aString]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCategoryReader || ClassCategoryReader), "_new", []));
+return self.superclass || nil;
 return self;}
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_addCompiledMethod_'),
+unescape('_withAllSubclasses'),
 smalltalk.method({
-selector: unescape('addCompiledMethod%3A'),
-fn: function (aMethod){
+selector: unescape('withAllSubclasses'),
+fn: function (){
 var self=this;
-smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self);
+return (function($rec){smalltalk.send($rec, "_addAll_", [smalltalk.send(self, "_allSubclasses", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Array || Array), "_with_", [self]));
 return self;}
 }),
 smalltalk.Behavior);
 
+
+
+smalltalk.addClass('Class', smalltalk.Behavior, [], 'Kernel-Classes');
 smalltalk.addMethod(
-unescape('_instanceVariableNames'),
+unescape('_category'),
 smalltalk.method({
-selector: unescape('instanceVariableNames'),
+selector: unescape('category'),
 fn: function (){
 var self=this;
-return self.iVarNames;
+return (($receiver = smalltalk.send(self, "_package", [])) == nil || $receiver == undefined) ? (function(){return "Unclassified";})() : (function(){return smalltalk.send(smalltalk.send(self, "_package", []), "_name", []);})();
 return self;}
 }),
-smalltalk.Behavior);
+smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_comment'),
+unescape('_isClass'),
 smalltalk.method({
-selector: unescape('comment'),
+selector: unescape('isClass'),
 fn: function (){
 var self=this;
-return (($receiver = smalltalk.send(self, "_basicAt_", ["comment"])) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver;
+return true;
 return self;}
 }),
-smalltalk.Behavior);
+smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_comment_'),
+unescape('_package'),
 smalltalk.method({
-selector: unescape('comment%3A'),
-fn: function (aString){
+selector: unescape('package'),
+fn: function (){
 var self=this;
-smalltalk.send(self, "_basicAt_put_", ["comment", aString]);
+return self.pkg;
 return self;}
 }),
-smalltalk.Behavior);
+smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_commentStamp'),
+unescape('_package_'),
 smalltalk.method({
-selector: unescape('commentStamp'),
-fn: function (){
+selector: unescape('package%3A'),
+fn: function (aPackage){
 var self=this;
-return (function($rec){smalltalk.send($rec, "_class_", [self]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCommentReader || ClassCommentReader), "_new", []));
+self.pkg = aPackage;
 return self;}
 }),
-smalltalk.Behavior);
+smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_removeCompiledMethod_'),
+unescape('_printString'),
 smalltalk.method({
-selector: unescape('removeCompiledMethod%3A'),
-fn: function (aMethod){
+selector: unescape('printString'),
+fn: function (){
 var self=this;
-delete self.fn.prototype[aMethod.selector._asSelector()];
-	delete self.fn.prototype.methods[aMethod.selector];
-	smalltalk.init(self);;
+return smalltalk.send(self, "_name", []);
 return self;}
 }),
-smalltalk.Behavior);
+smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_inheritsFrom_'),
+unescape('_rename_'),
 smalltalk.method({
-selector: unescape('inheritsFrom%3A'),
-fn: function (aClass){
+selector: unescape('rename%3A'),
+fn: function (aString){
 var self=this;
-return smalltalk.send(smalltalk.send(aClass, "_allSubclasses", []), "_includes_", [self]);
+
+		smalltalk[aString] = self;
+		delete smalltalk[self.className];
+		self.className = aString;
+	;
 return self;}
 }),
-smalltalk.Behavior);
+smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_protocols'),
+unescape('_subclass_instanceVariableNames_'),
 smalltalk.method({
-selector: unescape('protocols'),
-fn: function (){
+selector: unescape('subclass%3AinstanceVariableNames%3A'),
+fn: function (aString, anotherString){
 var self=this;
-var protocols=nil;
-(protocols=smalltalk.send((smalltalk.Array || Array), "_new", []));
-smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_do_", [(function(each){return ((($receiver = smalltalk.send(protocols, "_includes_", [smalltalk.send(each, "_category", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(protocols, "_add_", [smalltalk.send(each, "_category", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(protocols, "_add_", [smalltalk.send(each, "_category", [])]);})]));})]);
-return smalltalk.send(protocols, "_sort", []);
+return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, anotherString, nil]);
 return self;}
 }),
-smalltalk.Behavior);
+smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_protocolsDo_'),
+unescape('_subclass_instanceVariableNames_category_'),
 smalltalk.method({
-selector: unescape('protocolsDo%3A'),
-fn: function (aBlock){
+selector: unescape('subclass%3AinstanceVariableNames%3Acategory%3A'),
+fn: function (aString, aString2, aString3){
 var self=this;
-var methodsByCategory=nil;
-(methodsByCategory=smalltalk.send((smalltalk.HashedCollection || HashedCollection), "_new", []));
-smalltalk.send(smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_values", []), "_do_", [(function(m){return smalltalk.send(smalltalk.send(methodsByCategory, "_at_ifAbsentPut_", [smalltalk.send(m, "_category", []), (function(){return smalltalk.send((smalltalk.Array || Array), "_new", []);})]), "_add_", [m]);})]);
-smalltalk.send(smalltalk.send(self, "_protocols", []), "_do_", [(function(category){return smalltalk.send(aBlock, "_value_value_", [category, smalltalk.send(methodsByCategory, "_at_", [category])]);})]);
+smalltalk.send(self, "_deprecatedAPI", []);
+return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]);
 return self;}
 }),
-smalltalk.Behavior);
+smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_allInstanceVariableNames'),
+unescape('_subclass_instanceVariableNames_classVariableNames_poolDictionaries_category_'),
 smalltalk.method({
-selector: unescape('allInstanceVariableNames'),
-fn: function (){
+selector: unescape('subclass%3AinstanceVariableNames%3AclassVariableNames%3ApoolDictionaries%3Acategory%3A'),
+fn: function (aString, aString2, classVars, pools, aString3){
 var self=this;
-var result=nil;
-(result=smalltalk.send(smalltalk.send(self, "_instanceVariableNames", []), "_copy", []));
-(($receiver = smalltalk.send(self, "_superclass", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(result, "_addAll_", [smalltalk.send(smalltalk.send(self, "_superclass", []), "_allInstanceVariableNames", [])]);})() : nil;
-return result;
+return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]);
 return self;}
 }),
-smalltalk.Behavior);
+smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_methodAt_'),
+unescape('_subclass_instanceVariableNames_package_'),
 smalltalk.method({
-selector: unescape('methodAt%3A'),
-fn: function (aString){
+selector: unescape('subclass%3AinstanceVariableNames%3Apackage%3A'),
+fn: function (aString, aString2, aString3){
 var self=this;
-return smalltalk.methods(self)[aString];
+return smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_superclass_subclass_instanceVariableNames_package_", [self, smalltalk.send(aString, "_asString", []), aString2, aString3]);
 return self;}
 }),
-smalltalk.Behavior);
+smalltalk.Class);
 
+
+
+smalltalk.addClass('Metaclass', smalltalk.Behavior, [], 'Kernel-Classes');
 smalltalk.addMethod(
-unescape('_methodsFor_stamp_'),
+unescape('_instanceClass'),
 smalltalk.method({
-selector: unescape('methodsFor%3Astamp%3A'),
-fn: function (aString, aStamp){
+selector: unescape('instanceClass'),
+fn: function (){
 var self=this;
-return smalltalk.send(self, "_methodsFor_", [aString]);
+return self.instanceClass;
 return self;}
 }),
-smalltalk.Behavior);
+smalltalk.Metaclass);
 
 smalltalk.addMethod(
-unescape('_commentStamp_prior_'),
+unescape('_instanceVariableNames_'),
 smalltalk.method({
-selector: unescape('commentStamp%3Aprior%3A'),
-fn: function (aStamp, prior){
+selector: unescape('instanceVariableNames%3A'),
+fn: function (aCollection){
 var self=this;
-return smalltalk.send(self, "_commentStamp", []);
+smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_class_instanceVariableNames_", [self, aCollection]);
 return self;}
 }),
-smalltalk.Behavior);
+smalltalk.Metaclass);
 
 smalltalk.addMethod(
-unescape('_compile_'),
+unescape('_isMetaclass'),
 smalltalk.method({
-selector: unescape('compile%3A'),
-fn: function (aString){
+selector: unescape('isMetaclass'),
+fn: function (){
 var self=this;
-smalltalk.send(self, "_compile_category_", [aString, ""]);
+return true;
 return self;}
 }),
-smalltalk.Behavior);
+smalltalk.Metaclass);
 
 smalltalk.addMethod(
-unescape('_compile_category_'),
+unescape('_printString'),
 smalltalk.method({
-selector: unescape('compile%3Acategory%3A'),
-fn: function (aString, anotherString){
+selector: unescape('printString'),
+fn: function (){
 var self=this;
-var method=nil;
-(method=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [aString, self]));
-smalltalk.send(method, "_category_", [anotherString]);
-smalltalk.send(self, "_addCompiledMethod_", [method]);
+return smalltalk.send(smalltalk.send(smalltalk.send(self, "_instanceClass", []), "_name", []), "__comma", [" class"]);
 return self;}
 }),
-smalltalk.Behavior);
+smalltalk.Metaclass);
 
 
 
-smalltalk.addClass('Class', smalltalk.Behavior, [], 'Kernel-Classes');
+smalltalk.addClass('ClassBuilder', smalltalk.Object, [], 'Kernel-Classes');
 smalltalk.addMethod(
-unescape('_category'),
+unescape('_addSubclassOf_named_instanceVariableNames_'),
 smalltalk.method({
-selector: unescape('category'),
-fn: function (){
+selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3A'),
+fn: function (aClass, aString, aCollection){
 var self=this;
-return (($receiver = smalltalk.send(self, "_package", [])) == nil || $receiver == undefined) ? (function(){return "Unclassified";})() : (function(){return smalltalk.send(smalltalk.send(self, "_package", []), "_name", []);})();
+smalltalk.addClass(aString, aClass, aCollection);
+	    return smalltalk[aString];
 return self;}
 }),
-smalltalk.Class);
+smalltalk.ClassBuilder);
 
 smalltalk.addMethod(
-unescape('_subclass_instanceVariableNames_'),
+unescape('_addSubclassOf_named_instanceVariableNames_package_'),
 smalltalk.method({
-selector: unescape('subclass%3AinstanceVariableNames%3A'),
-fn: function (aString, anotherString){
+selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3Apackage%3A'),
+fn: function (aClass, aString, aCollection, packageName){
 var self=this;
-return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, anotherString, nil]);
+smalltalk.addClass(aString, aClass, aCollection, packageName);
+	    return smalltalk[aString];
 return self;}
 }),
-smalltalk.Class);
+smalltalk.ClassBuilder);
 
 smalltalk.addMethod(
-unescape('_subclass_instanceVariableNames_category_'),
+unescape('_class_instanceVariableNames_'),
 smalltalk.method({
-selector: unescape('subclass%3AinstanceVariableNames%3Acategory%3A'),
-fn: function (aString, aString2, aString3){
+selector: unescape('class%3AinstanceVariableNames%3A'),
+fn: function (aClass, aString){
 var self=this;
-smalltalk.send(self, "_deprecatedAPI", []);
-return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]);
+((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_error_", [smalltalk.send(smalltalk.send(aClass, "_name", []), "__comma", [" is not a metaclass"])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_error_", [smalltalk.send(smalltalk.send(aClass, "_name", []), "__comma", [" is not a metaclass"])]);})]));
+smalltalk.send(aClass, "_basicAt_put_", ["iVarNames", smalltalk.send(self, "_instanceVariableNamesFor_", [aString])]);
+smalltalk.send(self, "_setupClass_", [aClass]);
 return self;}
 }),
-smalltalk.Class);
+smalltalk.ClassBuilder);
 
 smalltalk.addMethod(
-unescape('_isClass'),
+unescape('_copyClass_named_'),
 smalltalk.method({
-selector: unescape('isClass'),
-fn: function (){
+selector: unescape('copyClass%3Anamed%3A'),
+fn: function (aClass, aString){
 var self=this;
-return true;
+var newClass=nil;
+(newClass=smalltalk.send(self, "_addSubclassOf_named_instanceVariableNames_package_", [smalltalk.send(aClass, "_superclass", []), aString, smalltalk.send(aClass, "_instanceVariableNames", []), smalltalk.send(smalltalk.send(aClass, "_package", []), "_name", [])]));
+smalltalk.send(self, "_setupClass_", [newClass]);
+smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_values", []), "_do_", [(function(each){smalltalk.send(newClass, "_addCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [smalltalk.send(each, "_source", []), newClass])]);return smalltalk.send(smalltalk.send(smalltalk.send(newClass, "_methodDictionary", []), "_at_", [smalltalk.send(each, "_selector", [])]), "_category_", [smalltalk.send(each, "_category", [])]);})]);
+smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_methodDictionary", []), "_values", []), "_do_", [(function(each){smalltalk.send(smalltalk.send(newClass, "_class", []), "_addCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [smalltalk.send(each, "_source", []), smalltalk.send(newClass, "_class", [])])]);return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(newClass, "_class", []), "_methodDictionary", []), "_at_", [smalltalk.send(each, "_selector", [])]), "_category_", [smalltalk.send(each, "_category", [])]);})]);
+smalltalk.send(self, "_setupClass_", [newClass]);
+return newClass;
 return self;}
 }),
-smalltalk.Class);
+smalltalk.ClassBuilder);
 
 smalltalk.addMethod(
-unescape('_printString'),
+unescape('_instanceVariableNamesFor_'),
 smalltalk.method({
-selector: unescape('printString'),
-fn: function (){
+selector: unescape('instanceVariableNamesFor%3A'),
+fn: function (aString){
 var self=this;
-return smalltalk.send(self, "_name", []);
+return smalltalk.send(smalltalk.send(aString, "_tokenize_", [" "]), "_reject_", [(function(each){return smalltalk.send(each, "_isEmpty", []);})]);
 return self;}
 }),
-smalltalk.Class);
+smalltalk.ClassBuilder);
 
 smalltalk.addMethod(
-unescape('_rename_'),
+unescape('_setupClass_'),
 smalltalk.method({
-selector: unescape('rename%3A'),
-fn: function (aString){
+selector: unescape('setupClass%3A'),
+fn: function (aClass){
 var self=this;
+smalltalk.init(aClass);;
+return self;}
+}),
+smalltalk.ClassBuilder);
 
-		smalltalk[aString] = self;
-		delete smalltalk[self.className];
-		self.className = aString;
-	;
+smalltalk.addMethod(
+unescape('_superclass_subclass_'),
+smalltalk.method({
+selector: unescape('superclass%3Asubclass%3A'),
+fn: function (aClass, aString){
+var self=this;
+return smalltalk.send(self, "_superclass_subclass_instanceVariableNames_package_", [aClass, aString, "", nil]);
 return self;}
 }),
-smalltalk.Class);
+smalltalk.ClassBuilder);
 
 smalltalk.addMethod(
-unescape('_subclass_instanceVariableNames_classVariableNames_poolDictionaries_category_'),
+unescape('_superclass_subclass_instanceVariableNames_package_'),
 smalltalk.method({
-selector: unescape('subclass%3AinstanceVariableNames%3AclassVariableNames%3ApoolDictionaries%3Acategory%3A'),
-fn: function (aString, aString2, classVars, pools, aString3){
+selector: unescape('superclass%3Asubclass%3AinstanceVariableNames%3Apackage%3A'),
+fn: function (aClass, aString, aString2, aString3){
 var self=this;
-return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]);
+var newClass=nil;
+(newClass=smalltalk.send(self, "_addSubclassOf_named_instanceVariableNames_package_", [aClass, aString, smalltalk.send(self, "_instanceVariableNamesFor_", [aString2]), (($receiver = aString3) == nil || $receiver == undefined) ? (function(){return "unclassified";})() : $receiver]));
+smalltalk.send(self, "_setupClass_", [newClass]);
+return newClass;
 return self;}
 }),
-smalltalk.Class);
+smalltalk.ClassBuilder);
+
 
+
+smalltalk.addClass('ClassCategoryReader', smalltalk.Object, ['class', 'category', 'chunkParser'], 'Kernel-Classes');
 smalltalk.addMethod(
-unescape('_package'),
+unescape('_class_category_'),
 smalltalk.method({
-selector: unescape('package'),
-fn: function (){
+selector: unescape('class%3Acategory%3A'),
+fn: function (aClass, aString){
 var self=this;
-return self.pkg;
+(self['@class']=aClass);
+(self['@category']=aString);
 return self;}
 }),
-smalltalk.Class);
+smalltalk.ClassCategoryReader);
 
 smalltalk.addMethod(
-unescape('_package_'),
+unescape('_compileMethod_'),
 smalltalk.method({
-selector: unescape('package%3A'),
-fn: function (aPackage){
+selector: unescape('compileMethod%3A'),
+fn: function (aString){
 var self=this;
-self.pkg = aPackage;
+var method=nil;
+var compiler=nil;
+(method=smalltalk.send((compiler=smalltalk.send((smalltalk.Compiler || Compiler), "_new", [])), "_load_forClass_", [aString, self['@class']]));
+smalltalk.send(method, "_category_", [self['@category']]);
+smalltalk.send(self['@class'], "_addCompiledMethod_", [method]);
+smalltalk.send(compiler, "_setupClass_", [self['@class']]);
 return self;}
 }),
-smalltalk.Class);
+smalltalk.ClassCategoryReader);
 
 smalltalk.addMethod(
-unescape('_subclass_instanceVariableNames_package_'),
+unescape('_initialize'),
 smalltalk.method({
-selector: unescape('subclass%3AinstanceVariableNames%3Apackage%3A'),
-fn: function (aString, aString2, aString3){
+selector: unescape('initialize'),
+fn: function (){
 var self=this;
-return smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_superclass_subclass_instanceVariableNames_package_", [self, smalltalk.send(aString, "_asString", []), aString2, aString3]);
+smalltalk.send(self, "_initialize", [], smalltalk.Object);
+(self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", []));
 return self;}
 }),
-smalltalk.Class);
+smalltalk.ClassCategoryReader);
+
+smalltalk.addMethod(
+unescape('_scanFrom_'),
+smalltalk.method({
+selector: unescape('scanFrom%3A'),
+fn: function (aChunkParser){
+var self=this;
+var chunk=nil;
+(function(){while(!(function(){(chunk=smalltalk.send(aChunkParser, "_nextChunk", []));return smalltalk.send(chunk, "_isEmpty", []);})()) {(function(){return smalltalk.send(self, "_compileMethod_", [chunk]);})()}})();
+return self;}
+}),
+smalltalk.ClassCategoryReader);
 
 
 
-smalltalk.addClass('Metaclass', smalltalk.Behavior, [], 'Kernel-Classes');
+smalltalk.addClass('ClassCommentReader', smalltalk.Object, ['class', 'chunkParser'], 'Kernel-Classes');
 smalltalk.addMethod(
-unescape('_instanceClass'),
+unescape('_class_'),
 smalltalk.method({
-selector: unescape('instanceClass'),
-fn: function (){
+selector: unescape('class%3A'),
+fn: function (aClass){
 var self=this;
-return self.instanceClass;
+(self['@class']=aClass);
 return self;}
 }),
-smalltalk.Metaclass);
+smalltalk.ClassCommentReader);
 
 smalltalk.addMethod(
-unescape('_instanceVariableNames_'),
+unescape('_initialize'),
 smalltalk.method({
-selector: unescape('instanceVariableNames%3A'),
-fn: function (aCollection){
+selector: unescape('initialize'),
+fn: function (){
 var self=this;
-smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_class_instanceVariableNames_", [self, aCollection]);
+smalltalk.send(self, "_initialize", [], smalltalk.Object);
+(self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", []));
 return self;}
 }),
-smalltalk.Metaclass);
+smalltalk.ClassCommentReader);
 
 smalltalk.addMethod(
-unescape('_isMetaclass'),
+unescape('_scanFrom_'),
 smalltalk.method({
-selector: unescape('isMetaclass'),
-fn: function (){
+selector: unescape('scanFrom%3A'),
+fn: function (aChunkParser){
 var self=this;
-return true;
+var chunk=nil;
+(chunk=smalltalk.send(aChunkParser, "_nextChunk", []));
+((($receiver = smalltalk.send(chunk, "_isEmpty", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_setComment_", [chunk]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_setComment_", [chunk]);})]));
 return self;}
 }),
-smalltalk.Metaclass);
+smalltalk.ClassCommentReader);
 
 smalltalk.addMethod(
-unescape('_printString'),
+unescape('_setComment_'),
 smalltalk.method({
-selector: unescape('printString'),
-fn: function (){
+selector: unescape('setComment%3A'),
+fn: function (aString){
 var self=this;
-return smalltalk.send(smalltalk.send(smalltalk.send(self, "_instanceClass", []), "_name", []), "__comma", [" class"]);
+smalltalk.send(self['@class'], "_comment_", [aString]);
 return self;}
 }),
-smalltalk.Metaclass);
+smalltalk.ClassCommentReader);
 
 
 

+ 531 - 531
js/Kernel-Classes.js

@@ -1,298 +1,294 @@
 smalltalk.addPackage('Kernel-Classes', {});
-smalltalk.addClass('ClassCommentReader', smalltalk.Object, ['class', 'chunkParser'], 'Kernel-Classes');
-smalltalk.ClassCommentReader.comment=unescape('ClassCommentReader%20represents%20a%20mechanism%20for%20retrieving%20class%20descriptions%20stored%20on%20a%20file.%0ASee%20%60ClassCategoryReader%60%20too.')
+smalltalk.addClass('Behavior', smalltalk.Object, [], 'Kernel-Classes');
+smalltalk.Behavior.comment=unescape('Behavior%20is%20the%20superclass%20of%20all%20class%20objects.%20%0A%0AIt%20defines%20the%20protocol%20for%20creating%20instances%20of%20a%20class%20with%20%60%23basicNew%60%20and%20%60%23new%60%20%28see%20%60boot.js%60%20for%20class%20constructors%20details%29.%0AInstances%20know%20about%20the%20subclass/superclass%20relationships%20between%20classes%2C%20contain%20the%20description%20that%20instances%20are%20created%20from%2C%20%0Aand%20hold%20the%20method%20dictionary%20that%27s%20associated%20with%20each%20class.%0A%0ABehavior%20also%20%20provides%20methods%20for%20compiling%20methods%2C%20examining%20the%20method%20dictionary%2C%20and%20iterating%20over%20the%20class%20hierarchy.')
 smalltalk.addMethod(
-unescape('_class_'),
+unescape('_addCompiledMethod_'),
 smalltalk.method({
-selector: unescape('class%3A'),
-category: 'accessing',
-fn: function (aClass){
+selector: unescape('addCompiledMethod%3A'),
+category: 'compiling',
+fn: function (aMethod){
 var self=this;
-(self['@class']=aClass);
+smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self);
 return self;},
-args: ["aClass"],
-source: unescape('class%3A%20aClass%0A%09class%20%3A%3D%20aClass'),
+args: ["aMethod"],
+source: unescape('addCompiledMethod%3A%20aMethod%0A%09%3Csmalltalk.addMethod%28aMethod.selector._asSelector%28%29%2C%20aMethod%2C%20self%29%3E'),
 messageSends: [],
 referencedClasses: []
 }),
-smalltalk.ClassCommentReader);
+smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_scanFrom_'),
+unescape('_allInstanceVariableNames'),
 smalltalk.method({
-selector: unescape('scanFrom%3A'),
-category: 'fileIn',
-fn: function (aChunkParser){
+selector: unescape('allInstanceVariableNames'),
+category: 'accessing',
+fn: function (){
 var self=this;
-var chunk=nil;
-(chunk=smalltalk.send(aChunkParser, "_nextChunk", []));
-((($receiver = smalltalk.send(chunk, "_isEmpty", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_setComment_", [chunk]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_setComment_", [chunk]);})]));
+var result=nil;
+(result=smalltalk.send(smalltalk.send(self, "_instanceVariableNames", []), "_copy", []));
+(($receiver = smalltalk.send(self, "_superclass", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(result, "_addAll_", [smalltalk.send(smalltalk.send(self, "_superclass", []), "_allInstanceVariableNames", [])]);})() : nil;
+return result;
 return self;},
-args: ["aChunkParser"],
-source: unescape('scanFrom%3A%20aChunkParser%0A%09%7C%20chunk%20%7C%0A%09chunk%20%3A%3D%20aChunkParser%20nextChunk.%0A%09chunk%20isEmpty%20ifFalse%3A%20%5B%0A%09%20%20%20%20self%20setComment%3A%20chunk%5D.'),
-messageSends: ["nextChunk", "ifFalse:", "isEmpty", "setComment:"],
+args: [],
+source: unescape('allInstanceVariableNames%0A%09%7C%20result%20%7C%0A%09result%20%3A%3D%20self%20instanceVariableNames%20copy.%0A%09self%20superclass%20ifNotNil%3A%20%5B%0A%09%20%20%20%20result%20addAll%3A%20self%20superclass%20allInstanceVariableNames%5D.%0A%09%5Eresult'),
+messageSends: ["copy", "instanceVariableNames", "ifNotNil:", "superclass", "addAll:", "allInstanceVariableNames"],
 referencedClasses: []
 }),
-smalltalk.ClassCommentReader);
+smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_initialize'),
+unescape('_allSubclasses'),
 smalltalk.method({
-selector: unescape('initialize'),
-category: 'initialization',
+selector: unescape('allSubclasses'),
+category: 'accessing',
 fn: function (){
 var self=this;
-smalltalk.send(self, "_initialize", [], smalltalk.Object);
-(self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", []));
+var result=nil;
+(result=smalltalk.send(self, "_subclasses", []));
+smalltalk.send(smalltalk.send(self, "_subclasses", []), "_do_", [(function(each){return smalltalk.send(result, "_addAll_", [smalltalk.send(each, "_allSubclasses", [])]);})]);
+return result;
 return self;},
 args: [],
-source: unescape('initialize%0A%09super%20initialize.%0A%09chunkParser%20%3A%3D%20ChunkParser%20new.'),
-messageSends: ["initialize", "new"],
-referencedClasses: ["ChunkParser"]
-}),
-smalltalk.ClassCommentReader);
-
-smalltalk.addMethod(
-unescape('_setComment_'),
-smalltalk.method({
-selector: unescape('setComment%3A'),
-category: 'private',
-fn: function (aString){
-var self=this;
-smalltalk.send(self['@class'], "_comment_", [aString]);
-return self;},
-args: ["aString"],
-source: unescape('setComment%3A%20aString%0A%20%20%20%20class%20comment%3A%20aString'),
-messageSends: ["comment:"],
+source: unescape('allSubclasses%0A%09%7C%20result%20%7C%0A%09result%20%3A%3D%20self%20subclasses.%0A%09self%20subclasses%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20result%20addAll%3A%20each%20allSubclasses%5D.%0A%09%5Eresult'),
+messageSends: ["subclasses", "do:", "addAll:", "allSubclasses"],
 referencedClasses: []
 }),
-smalltalk.ClassCommentReader);
-
-
+smalltalk.Behavior);
 
-smalltalk.addClass('ClassCategoryReader', smalltalk.Object, ['class', 'category', 'chunkParser'], 'Kernel-Classes');
-smalltalk.ClassCategoryReader.comment=unescape('ClassCategoryReader%20represents%20a%20mechanism%20for%20retrieving%20class%20descriptions%20stored%20on%20a%20file.')
 smalltalk.addMethod(
-unescape('_initialize'),
+unescape('_basicNew'),
 smalltalk.method({
-selector: unescape('initialize'),
-category: 'initialization',
+selector: unescape('basicNew'),
+category: 'instance creation',
 fn: function (){
 var self=this;
-smalltalk.send(self, "_initialize", [], smalltalk.Object);
-(self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", []));
+return new self.fn();
 return self;},
 args: [],
-source: unescape('initialize%0A%09super%20initialize.%0A%09chunkParser%20%3A%3D%20ChunkParser%20new.'),
-messageSends: ["initialize", "new"],
-referencedClasses: ["ChunkParser"]
-}),
-smalltalk.ClassCategoryReader);
-
-smalltalk.addMethod(
-unescape('_class_category_'),
-smalltalk.method({
-selector: unescape('class%3Acategory%3A'),
-category: 'accessing',
-fn: function (aClass, aString){
-var self=this;
-(self['@class']=aClass);
-(self['@category']=aString);
-return self;},
-args: ["aClass", "aString"],
-source: unescape('class%3A%20aClass%20category%3A%20aString%0A%09class%20%3A%3D%20aClass.%0A%09category%20%3A%3D%20aString'),
+source: unescape('basicNew%0A%09%3Creturn%20new%20self.fn%28%29%3E'),
 messageSends: [],
 referencedClasses: []
 }),
-smalltalk.ClassCategoryReader);
+smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_scanFrom_'),
+unescape('_comment'),
 smalltalk.method({
-selector: unescape('scanFrom%3A'),
-category: 'fileIn',
-fn: function (aChunkParser){
+selector: unescape('comment'),
+category: 'accessing',
+fn: function (){
 var self=this;
-var chunk=nil;
-(function(){while(!(function(){(chunk=smalltalk.send(aChunkParser, "_nextChunk", []));return smalltalk.send(chunk, "_isEmpty", []);})()) {(function(){return smalltalk.send(self, "_compileMethod_", [chunk]);})()}})();
+return (($receiver = smalltalk.send(self, "_basicAt_", ["comment"])) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver;
 return self;},
-args: ["aChunkParser"],
-source: unescape('scanFrom%3A%20aChunkParser%0A%09%7C%20chunk%20%7C%0A%09%5Bchunk%20%3A%3D%20aChunkParser%20nextChunk.%0A%09chunk%20isEmpty%5D%20whileFalse%3A%20%5B%0A%09%20%20%20%20self%20compileMethod%3A%20chunk%5D'),
-messageSends: ["whileFalse:", "nextChunk", "isEmpty", "compileMethod:"],
+args: [],
+source: unescape('comment%0A%20%20%20%20%5E%28self%20basicAt%3A%20%27comment%27%29%20ifNil%3A%20%5B%27%27%5D'),
+messageSends: ["ifNil:", "basicAt:"],
 referencedClasses: []
 }),
-smalltalk.ClassCategoryReader);
+smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_compileMethod_'),
+unescape('_comment_'),
 smalltalk.method({
-selector: unescape('compileMethod%3A'),
-category: 'private',
+selector: unescape('comment%3A'),
+category: 'accessing',
 fn: function (aString){
 var self=this;
-var method=nil;
-var compiler=nil;
-(method=smalltalk.send((compiler=smalltalk.send((smalltalk.Compiler || Compiler), "_new", [])), "_load_forClass_", [aString, self['@class']]));
-smalltalk.send(method, "_category_", [self['@category']]);
-smalltalk.send(self['@class'], "_addCompiledMethod_", [method]);
-smalltalk.send(compiler, "_setupClass_", [self['@class']]);
+smalltalk.send(self, "_basicAt_put_", ["comment", aString]);
 return self;},
 args: ["aString"],
-source: unescape('compileMethod%3A%20aString%0A%09%7C%20method%20compiler%20%7C%0A%09method%20%3A%3D%20%28compiler%20%3A%3D%20Compiler%20new%29%20load%3A%20aString%20forClass%3A%20class.%0A%09method%20category%3A%20category.%0A%09class%20addCompiledMethod%3A%20method.%0A%09compiler%20setupClass%3A%20class.'),
-messageSends: ["load:forClass:", "new", "category:", "addCompiledMethod:", "setupClass:"],
-referencedClasses: ["Compiler"]
+source: unescape('comment%3A%20aString%0A%20%20%20%20self%20basicAt%3A%20%27comment%27%20put%3A%20aString'),
+messageSends: ["basicAt:put:"],
+referencedClasses: []
 }),
-smalltalk.ClassCategoryReader);
-
-
+smalltalk.Behavior);
 
-smalltalk.addClass('ClassBuilder', smalltalk.Object, [], 'Kernel-Classes');
-smalltalk.ClassBuilder.comment=unescape('ClassBuilder%20is%20responsible%20for%20compiling%20new%20classes%20or%20modifying%20existing%20classes%20in%20the%20system.%0A%0ARather%20than%20using%20ClassBuilder%20directly%20to%20compile%20a%20class%2C%20use%20%60Class%20%3E%3E%20subclass%3AinstanceVariableNames%3Apackage%3A%60.')
 smalltalk.addMethod(
-unescape('_superclass_subclass_'),
+unescape('_commentStamp'),
 smalltalk.method({
-selector: unescape('superclass%3Asubclass%3A'),
-category: 'class creation',
-fn: function (aClass, aString){
+selector: unescape('commentStamp'),
+category: 'accessing',
+fn: function (){
 var self=this;
-return smalltalk.send(self, "_superclass_subclass_instanceVariableNames_package_", [aClass, aString, "", nil]);
+return (function($rec){smalltalk.send($rec, "_class_", [self]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCommentReader || ClassCommentReader), "_new", []));
 return self;},
-args: ["aClass", "aString"],
-source: unescape('superclass%3A%20aClass%20subclass%3A%20aString%0A%09%5Eself%20superclass%3A%20aClass%20subclass%3A%20aString%20instanceVariableNames%3A%20%27%27%20package%3A%20nil'),
-messageSends: ["superclass:subclass:instanceVariableNames:package:"],
-referencedClasses: []
+args: [],
+source: unescape('commentStamp%0A%20%20%20%20%5EClassCommentReader%20new%0A%09class%3A%20self%3B%0A%09yourself'),
+messageSends: ["class:", "yourself", "new"],
+referencedClasses: ["ClassCommentReader"]
 }),
-smalltalk.ClassBuilder);
+smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_class_instanceVariableNames_'),
+unescape('_commentStamp_prior_'),
 smalltalk.method({
-selector: unescape('class%3AinstanceVariableNames%3A'),
-category: 'class creation',
-fn: function (aClass, aString){
+selector: unescape('commentStamp%3Aprior%3A'),
+category: 'accessing',
+fn: function (aStamp, prior){
 var self=this;
-((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_error_", [smalltalk.send(smalltalk.send(aClass, "_name", []), "__comma", [" is not a metaclass"])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_error_", [smalltalk.send(smalltalk.send(aClass, "_name", []), "__comma", [" is not a metaclass"])]);})]));
-smalltalk.send(aClass, "_basicAt_put_", ["iVarNames", smalltalk.send(self, "_instanceVariableNamesFor_", [aString])]);
-smalltalk.send(self, "_setupClass_", [aClass]);
+return smalltalk.send(self, "_commentStamp", []);
 return self;},
-args: ["aClass", "aString"],
-source: unescape('class%3A%20aClass%20instanceVariableNames%3A%20aString%0A%09aClass%20isMetaclass%20ifFalse%3A%20%5Bself%20error%3A%20aClass%20name%2C%20%27%20is%20not%20a%20metaclass%27%5D.%0A%09aClass%20basicAt%3A%20%27iVarNames%27%20put%3A%20%28self%20instanceVariableNamesFor%3A%20aString%29.%0A%09self%20setupClass%3A%20aClass'),
-messageSends: ["ifFalse:", "isMetaclass", "error:", unescape("%2C"), "name", "basicAt:put:", "instanceVariableNamesFor:", "setupClass:"],
+args: ["aStamp", "prior"],
+source: unescape('commentStamp%3A%20aStamp%20prior%3A%20prior%0A%20%20%20%20%20%20%20%20%5Eself%20commentStamp'),
+messageSends: ["commentStamp"],
 referencedClasses: []
 }),
-smalltalk.ClassBuilder);
+smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_instanceVariableNamesFor_'),
+unescape('_compile_'),
 smalltalk.method({
-selector: unescape('instanceVariableNamesFor%3A'),
-category: 'private',
+selector: unescape('compile%3A'),
+category: 'compiling',
 fn: function (aString){
 var self=this;
-return smalltalk.send(smalltalk.send(aString, "_tokenize_", [" "]), "_reject_", [(function(each){return smalltalk.send(each, "_isEmpty", []);})]);
+smalltalk.send(self, "_compile_category_", [aString, ""]);
 return self;},
 args: ["aString"],
-source: unescape('instanceVariableNamesFor%3A%20aString%0A%09%5E%28aString%20tokenize%3A%20%27%20%27%29%20reject%3A%20%5B%3Aeach%20%7C%20each%20isEmpty%5D'),
-messageSends: ["reject:", "tokenize:", "isEmpty"],
+source: unescape('compile%3A%20aString%0A%09self%20compile%3A%20aString%20category%3A%20%27%27'),
+messageSends: ["compile:category:"],
 referencedClasses: []
 }),
-smalltalk.ClassBuilder);
+smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_addSubclassOf_named_instanceVariableNames_'),
+unescape('_compile_category_'),
 smalltalk.method({
-selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3A'),
-category: 'private',
-fn: function (aClass, aString, aCollection){
+selector: unescape('compile%3Acategory%3A'),
+category: 'compiling',
+fn: function (aString, anotherString){
 var self=this;
-smalltalk.addClass(aString, aClass, aCollection);
-	    return smalltalk[aString];
+var method=nil;
+(method=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [aString, self]));
+smalltalk.send(method, "_category_", [anotherString]);
+smalltalk.send(self, "_addCompiledMethod_", [method]);
 return self;},
-args: ["aClass", "aString", "aCollection"],
-source: unescape('addSubclassOf%3A%20aClass%20named%3A%20aString%20instanceVariableNames%3A%20aCollection%0A%09%3Csmalltalk.addClass%28aString%2C%20aClass%2C%20aCollection%29%3B%0A%09%20%20%20%20return%20smalltalk%5BaString%5D%3E'),
-messageSends: [],
-referencedClasses: []
+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'),
+messageSends: ["load:forClass:", "new", "category:", "addCompiledMethod:"],
+referencedClasses: ["Compiler"]
 }),
-smalltalk.ClassBuilder);
+smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_setupClass_'),
+unescape('_inheritsFrom_'),
 smalltalk.method({
-selector: unescape('setupClass%3A'),
-category: 'private',
+selector: unescape('inheritsFrom%3A'),
+category: 'testing',
 fn: function (aClass){
 var self=this;
-smalltalk.init(aClass);;
+return smalltalk.send(smalltalk.send(aClass, "_allSubclasses", []), "_includes_", [self]);
 return self;},
 args: ["aClass"],
-source: unescape('setupClass%3A%20aClass%0A%09%3Csmalltalk.init%28aClass%29%3B%3E'),
-messageSends: [],
+source: unescape('inheritsFrom%3A%20aClass%0A%09%5EaClass%20allSubclasses%20includes%3A%20self'),
+messageSends: ["includes:", "allSubclasses"],
 referencedClasses: []
 }),
-smalltalk.ClassBuilder);
+smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_superclass_subclass_instanceVariableNames_package_'),
+unescape('_instanceVariableNames'),
 smalltalk.method({
-selector: unescape('superclass%3Asubclass%3AinstanceVariableNames%3Apackage%3A'),
-category: 'class creation',
-fn: function (aClass, aString, aString2, aString3){
+selector: unescape('instanceVariableNames'),
+category: 'accessing',
+fn: function (){
 var self=this;
-var newClass=nil;
-(newClass=smalltalk.send(self, "_addSubclassOf_named_instanceVariableNames_package_", [aClass, aString, smalltalk.send(self, "_instanceVariableNamesFor_", [aString2]), (($receiver = aString3) == nil || $receiver == undefined) ? (function(){return "unclassified";})() : $receiver]));
-smalltalk.send(self, "_setupClass_", [newClass]);
-return newClass;
+return self.iVarNames;
 return self;},
-args: ["aClass", "aString", "aString2", "aString3"],
-source: unescape('superclass%3A%20aClass%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3%0A%09%7C%20newClass%20%7C%0A%09newClass%20%3A%3D%20self%20addSubclassOf%3A%20aClass%0A%09%09%09%09named%3A%20aString%20instanceVariableNames%3A%20%28self%20instanceVariableNamesFor%3A%20aString2%29%0A%09%09%09%09package%3A%20%28aString3%20ifNil%3A%20%5B%27unclassified%27%5D%29.%0A%09self%20setupClass%3A%20newClass.%0A%09%5EnewClass'),
-messageSends: ["addSubclassOf:named:instanceVariableNames:package:", "instanceVariableNamesFor:", "ifNil:", "setupClass:"],
+args: [],
+source: unescape('instanceVariableNames%0A%09%3Creturn%20self.iVarNames%3E'),
+messageSends: [],
 referencedClasses: []
 }),
-smalltalk.ClassBuilder);
+smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_addSubclassOf_named_instanceVariableNames_package_'),
+unescape('_methodAt_'),
 smalltalk.method({
-selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3Apackage%3A'),
-category: 'private',
-fn: function (aClass, aString, aCollection, packageName){
+selector: unescape('methodAt%3A'),
+category: 'accessing',
+fn: function (aString){
 var self=this;
-smalltalk.addClass(aString, aClass, aCollection, packageName);
-	    return smalltalk[aString];
+return smalltalk.methods(self)[aString];
 return self;},
-args: ["aClass", "aString", "aCollection", "packageName"],
-source: unescape('addSubclassOf%3A%20aClass%20named%3A%20aString%20instanceVariableNames%3A%20aCollection%20package%3A%20packageName%0A%09%3Csmalltalk.addClass%28aString%2C%20aClass%2C%20aCollection%2C%20packageName%29%3B%0A%09%20%20%20%20return%20smalltalk%5BaString%5D%3E'),
+args: ["aString"],
+source: unescape('methodAt%3A%20aString%0A%09%3Creturn%20smalltalk.methods%28self%29%5BaString%5D%3E'),
 messageSends: [],
 referencedClasses: []
 }),
-smalltalk.ClassBuilder);
+smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_copyClass_named_'),
+unescape('_methodDictionary'),
 smalltalk.method({
-selector: unescape('copyClass%3Anamed%3A'),
-category: 'private',
-fn: function (aClass, aString){
+selector: unescape('methodDictionary'),
+category: 'accessing',
+fn: function (){
 var self=this;
-var newClass=nil;
-(newClass=smalltalk.send(self, "_addSubclassOf_named_instanceVariableNames_package_", [smalltalk.send(aClass, "_superclass", []), aString, smalltalk.send(aClass, "_instanceVariableNames", []), smalltalk.send(smalltalk.send(aClass, "_package", []), "_name", [])]));
-smalltalk.send(self, "_setupClass_", [newClass]);
-smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_values", []), "_do_", [(function(each){smalltalk.send(newClass, "_addCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [smalltalk.send(each, "_source", []), newClass])]);return smalltalk.send(smalltalk.send(smalltalk.send(newClass, "_methodDictionary", []), "_at_", [smalltalk.send(each, "_selector", [])]), "_category_", [smalltalk.send(each, "_category", [])]);})]);
-smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_methodDictionary", []), "_values", []), "_do_", [(function(each){smalltalk.send(smalltalk.send(newClass, "_class", []), "_addCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [smalltalk.send(each, "_source", []), smalltalk.send(newClass, "_class", [])])]);return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(newClass, "_class", []), "_methodDictionary", []), "_at_", [smalltalk.send(each, "_selector", [])]), "_category_", [smalltalk.send(each, "_category", [])]);})]);
-smalltalk.send(self, "_setupClass_", [newClass]);
-return newClass;
+var dict = smalltalk.HashedCollection._new();
+	var methods = self.fn.prototype.methods;
+	for(var i in methods) {
+		if(methods[i].selector) {
+			dict._at_put_(methods[i].selector, methods[i]);
+		}
+	};
+	return dict;
 return self;},
-args: ["aClass", "aString"],
-source: unescape('copyClass%3A%20aClass%20named%3A%20aString%0A%09%7C%20newClass%20%7C%0A%0A%09newClass%20%3A%3D%20self%20%0A%09%09addSubclassOf%3A%20aClass%20superclass%0A%09%09named%3A%20aString%20%0A%09%09instanceVariableNames%3A%20aClass%20instanceVariableNames%20%0A%09%09package%3A%20aClass%20package%20name.%0A%0A%09self%20setupClass%3A%20newClass.%0A%0A%09aClass%20methodDictionary%20values%20do%3A%20%5B%3Aeach%20%7C%0A%09%09newClass%20addCompiledMethod%3A%20%28Compiler%20new%20load%3A%20each%20source%20forClass%3A%20newClass%29.%0A%09%09%28newClass%20methodDictionary%20at%3A%20each%20selector%29%20category%3A%20each%20category%5D.%0A%0A%09aClass%20class%20methodDictionary%20values%20do%3A%20%5B%3Aeach%20%7C%0A%09%09newClass%20class%20addCompiledMethod%3A%20%28Compiler%20new%20load%3A%20each%20source%20forClass%3A%20newClass%20class%29.%0A%09%09%28newClass%20class%20methodDictionary%20at%3A%20each%20selector%29%20category%3A%20each%20category%5D.%0A%0A%09self%20setupClass%3A%20newClass.%0A%09%5EnewClass'),
-messageSends: ["addSubclassOf:named:instanceVariableNames:package:", "superclass", "instanceVariableNames", "name", "package", "setupClass:", "do:", "values", "methodDictionary", "addCompiledMethod:", "load:forClass:", "new", "source", "category:", "at:", "selector", "category", "class"],
-referencedClasses: ["Compiler"]
+args: [],
+source: unescape('methodDictionary%0A%09%3Cvar%20dict%20%3D%20smalltalk.HashedCollection._new%28%29%3B%0A%09var%20methods%20%3D%20self.fn.prototype.methods%3B%0A%09for%28var%20i%20in%20methods%29%20%7B%0A%09%09if%28methods%5Bi%5D.selector%29%20%7B%0A%09%09%09dict._at_put_%28methods%5Bi%5D.selector%2C%20methods%5Bi%5D%29%3B%0A%09%09%7D%0A%09%7D%3B%0A%09return%20dict%3E'),
+messageSends: [],
+referencedClasses: []
 }),
-smalltalk.ClassBuilder);
+smalltalk.Behavior);
+
+smalltalk.addMethod(
+unescape('_methodsFor_'),
+smalltalk.method({
+selector: unescape('methodsFor%3A'),
+category: 'accessing',
+fn: function (aString){
+var self=this;
+return (function($rec){smalltalk.send($rec, "_class_category_", [self, aString]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCategoryReader || ClassCategoryReader), "_new", []));
+return self;},
+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'),
+messageSends: ["class:category:", "yourself", "new"],
+referencedClasses: ["ClassCategoryReader"]
+}),
+smalltalk.Behavior);
 
+smalltalk.addMethod(
+unescape('_methodsFor_stamp_'),
+smalltalk.method({
+selector: unescape('methodsFor%3Astamp%3A'),
+category: 'accessing',
+fn: function (aString, aStamp){
+var self=this;
+return smalltalk.send(self, "_methodsFor_", [aString]);
+return self;},
+args: ["aString", "aStamp"],
+source: unescape('methodsFor%3A%20aString%20stamp%3A%20aStamp%0A%09%22Added%20for%20compatibility%2C%20right%20now%20ignores%20stamp.%22%0A%09%5Eself%20methodsFor%3A%20aString'),
+messageSends: ["methodsFor:"],
+referencedClasses: []
+}),
+smalltalk.Behavior);
 
+smalltalk.addMethod(
+unescape('_name'),
+smalltalk.method({
+selector: unescape('name'),
+category: 'accessing',
+fn: function (){
+var self=this;
+return self.className || nil;
+return self;},
+args: [],
+source: unescape('name%0A%09%3Creturn%20self.className%20%7C%7C%20nil%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Behavior);
 
-smalltalk.addClass('Behavior', smalltalk.Object, [], 'Kernel-Classes');
-smalltalk.Behavior.comment=unescape('Behavior%20is%20the%20superclass%20of%20all%20class%20objects.%20%0A%0AIt%20defines%20the%20protocol%20for%20creating%20instances%20of%20a%20class%20with%20%60%23basicNew%60%20and%20%60%23new%60%20%28see%20%60boot.js%60%20for%20class%20constructors%20details%29.%0AInstances%20know%20about%20the%20subclass/superclass%20relationships%20between%20classes%2C%20contain%20the%20description%20that%20instances%20are%20created%20from%2C%20%0Aand%20hold%20the%20method%20dictionary%20that%27s%20associated%20with%20each%20class.%0A%0ABehavior%20also%20%20provides%20methods%20for%20compiling%20methods%2C%20examining%20the%20method%20dictionary%2C%20and%20iterating%20over%20the%20class%20hierarchy.')
 smalltalk.addMethod(
 unescape('_new'),
 smalltalk.method({
@@ -310,48 +306,72 @@ referencedClasses: []
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_basicNew'),
+unescape('_protocols'),
 smalltalk.method({
-selector: unescape('basicNew'),
-category: 'instance creation',
+selector: unescape('protocols'),
+category: 'accessing',
 fn: function (){
 var self=this;
-return new self.fn();
+var protocols=nil;
+(protocols=smalltalk.send((smalltalk.Array || Array), "_new", []));
+smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_do_", [(function(each){return ((($receiver = smalltalk.send(protocols, "_includes_", [smalltalk.send(each, "_category", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(protocols, "_add_", [smalltalk.send(each, "_category", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(protocols, "_add_", [smalltalk.send(each, "_category", [])]);})]));})]);
+return smalltalk.send(protocols, "_sort", []);
 return self;},
 args: [],
-source: unescape('basicNew%0A%09%3Creturn%20new%20self.fn%28%29%3E'),
-messageSends: [],
-referencedClasses: []
+source: unescape('protocols%0A%20%20%20%20%7C%20protocols%20%7C%0A%20%20%20%20protocols%20%3A%3D%20Array%20new.%0A%20%20%20%20self%20methodDictionary%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20%28protocols%20includes%3A%20each%20category%29%20ifFalse%3A%20%5B%0A%09%09protocols%20add%3A%20each%20category%5D%5D.%0A%20%20%20%20%5Eprotocols%20sort'),
+messageSends: ["new", "do:", "methodDictionary", "ifFalse:", "includes:", "category", "add:", "sort"],
+referencedClasses: ["Array"]
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_name'),
+unescape('_protocolsDo_'),
 smalltalk.method({
-selector: unescape('name'),
+selector: unescape('protocolsDo%3A'),
+category: 'accessing',
+fn: function (aBlock){
+var self=this;
+var methodsByCategory=nil;
+(methodsByCategory=smalltalk.send((smalltalk.HashedCollection || HashedCollection), "_new", []));
+smalltalk.send(smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_values", []), "_do_", [(function(m){return smalltalk.send(smalltalk.send(methodsByCategory, "_at_ifAbsentPut_", [smalltalk.send(m, "_category", []), (function(){return smalltalk.send((smalltalk.Array || Array), "_new", []);})]), "_add_", [m]);})]);
+smalltalk.send(smalltalk.send(self, "_protocols", []), "_do_", [(function(category){return smalltalk.send(aBlock, "_value_value_", [category, smalltalk.send(methodsByCategory, "_at_", [category])]);})]);
+return self;},
+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%20HashedCollection%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:"],
+referencedClasses: ["HashedCollection", "Array"]
+}),
+smalltalk.Behavior);
+
+smalltalk.addMethod(
+unescape('_prototype'),
+smalltalk.method({
+selector: unescape('prototype'),
 category: 'accessing',
 fn: function (){
 var self=this;
-return self.className || nil;
+return self.fn.prototype;
 return self;},
 args: [],
-source: unescape('name%0A%09%3Creturn%20self.className%20%7C%7C%20nil%3E'),
+source: unescape('prototype%0A%09%3Creturn%20self.fn.prototype%3E'),
 messageSends: [],
 referencedClasses: []
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_superclass'),
+unescape('_removeCompiledMethod_'),
 smalltalk.method({
-selector: unescape('superclass'),
-category: 'accessing',
-fn: function (){
+selector: unescape('removeCompiledMethod%3A'),
+category: 'compiling',
+fn: function (aMethod){
 var self=this;
-return self.superclass || nil;
+delete self.fn.prototype[aMethod.selector._asSelector()];
+	delete self.fn.prototype.methods[aMethod.selector];
+	smalltalk.init(self);;
 return self;},
-args: [],
-source: unescape('superclass%0A%09%3Creturn%20self.superclass%20%7C%7C%20nil%3E'),
+args: ["aMethod"],
+source: unescape('removeCompiledMethod%3A%20aMethod%0A%09%3Cdelete%20self.fn.prototype%5BaMethod.selector._asSelector%28%29%5D%3B%0A%09delete%20self.fn.prototype.methods%5BaMethod.selector%5D%3B%0A%09smalltalk.init%28self%29%3B%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -374,20 +394,17 @@ referencedClasses: []
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_allSubclasses'),
+unescape('_superclass'),
 smalltalk.method({
-selector: unescape('allSubclasses'),
+selector: unescape('superclass'),
 category: 'accessing',
 fn: function (){
 var self=this;
-var result=nil;
-(result=smalltalk.send(self, "_subclasses", []));
-smalltalk.send(smalltalk.send(self, "_subclasses", []), "_do_", [(function(each){return smalltalk.send(result, "_addAll_", [smalltalk.send(each, "_allSubclasses", [])]);})]);
-return result;
+return self.superclass || nil;
 return self;},
 args: [],
-source: unescape('allSubclasses%0A%09%7C%20result%20%7C%0A%09result%20%3A%3D%20self%20subclasses.%0A%09self%20subclasses%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20result%20addAll%3A%20each%20allSubclasses%5D.%0A%09%5Eresult'),
-messageSends: ["subclasses", "do:", "addAll:", "allSubclasses"],
+source: unescape('superclass%0A%09%3Creturn%20self.superclass%20%7C%7C%20nil%3E'),
+messageSends: [],
 referencedClasses: []
 }),
 smalltalk.Behavior);
@@ -408,551 +425,534 @@ referencedClasses: ["Array"]
 }),
 smalltalk.Behavior);
 
+
+
+smalltalk.addClass('Class', smalltalk.Behavior, [], 'Kernel-Classes');
+smalltalk.Class.comment=unescape('Class%20is%20__the__%20class%20object.%20%0A%0AInstances%20are%20the%20classes%20of%20the%20system.%0AClass%20creation%20is%20done%20throught%20a%20%60ClassBuilder%60')
 smalltalk.addMethod(
-unescape('_prototype'),
+unescape('_category'),
 smalltalk.method({
-selector: unescape('prototype'),
+selector: unescape('category'),
 category: 'accessing',
 fn: function (){
 var self=this;
-return self.fn.prototype;
+return (($receiver = smalltalk.send(self, "_package", [])) == nil || $receiver == undefined) ? (function(){return "Unclassified";})() : (function(){return smalltalk.send(smalltalk.send(self, "_package", []), "_name", []);})();
 return self;},
 args: [],
-source: unescape('prototype%0A%09%3Creturn%20self.fn.prototype%3E'),
-messageSends: [],
+source: unescape('category%0A%09%5Eself%20package%20ifNil%3A%20%5B%27Unclassified%27%5D%20ifNotNil%3A%20%5Bself%20package%20name%5D'),
+messageSends: ["ifNil:ifNotNil:", "package", "name"],
 referencedClasses: []
 }),
-smalltalk.Behavior);
+smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_methodDictionary'),
+unescape('_isClass'),
 smalltalk.method({
-selector: unescape('methodDictionary'),
-category: 'accessing',
+selector: unescape('isClass'),
+category: 'testing',
 fn: function (){
 var self=this;
-var dict = smalltalk.HashedCollection._new();
-	var methods = self.fn.prototype.methods;
-	for(var i in methods) {
-		if(methods[i].selector) {
-			dict._at_put_(methods[i].selector, methods[i]);
-		}
-	};
-	return dict;
+return true;
 return self;},
 args: [],
-source: unescape('methodDictionary%0A%09%3Cvar%20dict%20%3D%20smalltalk.HashedCollection._new%28%29%3B%0A%09var%20methods%20%3D%20self.fn.prototype.methods%3B%0A%09for%28var%20i%20in%20methods%29%20%7B%0A%09%09if%28methods%5Bi%5D.selector%29%20%7B%0A%09%09%09dict._at_put_%28methods%5Bi%5D.selector%2C%20methods%5Bi%5D%29%3B%0A%09%09%7D%0A%09%7D%3B%0A%09return%20dict%3E'),
+source: unescape('isClass%0A%09%5Etrue'),
 messageSends: [],
 referencedClasses: []
 }),
-smalltalk.Behavior);
+smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_methodsFor_'),
+unescape('_package'),
 smalltalk.method({
-selector: unescape('methodsFor%3A'),
+selector: unescape('package'),
 category: 'accessing',
-fn: function (aString){
+fn: function (){
 var self=this;
-return (function($rec){smalltalk.send($rec, "_class_category_", [self, aString]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCategoryReader || ClassCategoryReader), "_new", []));
+return self.pkg;
 return self;},
-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'),
-messageSends: ["class:category:", "yourself", "new"],
-referencedClasses: ["ClassCategoryReader"]
+args: [],
+source: unescape('package%0A%09%3Creturn%20self.pkg%3E'),
+messageSends: [],
+referencedClasses: []
 }),
-smalltalk.Behavior);
+smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_addCompiledMethod_'),
+unescape('_package_'),
 smalltalk.method({
-selector: unescape('addCompiledMethod%3A'),
-category: 'compiling',
-fn: function (aMethod){
+selector: unescape('package%3A'),
+category: 'accessing',
+fn: function (aPackage){
 var self=this;
-smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self);
+self.pkg = aPackage;
 return self;},
-args: ["aMethod"],
-source: unescape('addCompiledMethod%3A%20aMethod%0A%09%3Csmalltalk.addMethod%28aMethod.selector._asSelector%28%29%2C%20aMethod%2C%20self%29%3E'),
+args: ["aPackage"],
+source: unescape('package%3A%20aPackage%0A%09%3Cself.pkg%20%3D%20aPackage%3E'),
 messageSends: [],
 referencedClasses: []
 }),
-smalltalk.Behavior);
+smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_instanceVariableNames'),
+unescape('_printString'),
 smalltalk.method({
-selector: unescape('instanceVariableNames'),
-category: 'accessing',
+selector: unescape('printString'),
+category: 'printing',
 fn: function (){
 var self=this;
-return self.iVarNames;
+return smalltalk.send(self, "_name", []);
 return self;},
 args: [],
-source: unescape('instanceVariableNames%0A%09%3Creturn%20self.iVarNames%3E'),
-messageSends: [],
+source: unescape('printString%0A%09%5Eself%20name'),
+messageSends: ["name"],
 referencedClasses: []
 }),
-smalltalk.Behavior);
+smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_comment'),
+unescape('_rename_'),
 smalltalk.method({
-selector: unescape('comment'),
+selector: unescape('rename%3A'),
 category: 'accessing',
-fn: function (){
+fn: function (aString){
 var self=this;
-return (($receiver = smalltalk.send(self, "_basicAt_", ["comment"])) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver;
+
+		smalltalk[aString] = self;
+		delete smalltalk[self.className];
+		self.className = aString;
+	;
 return self;},
-args: [],
-source: unescape('comment%0A%20%20%20%20%5E%28self%20basicAt%3A%20%27comment%27%29%20ifNil%3A%20%5B%27%27%5D'),
-messageSends: ["ifNil:", "basicAt:"],
+args: ["aString"],
+source: unescape('rename%3A%20aString%0A%09%3C%0A%09%09smalltalk%5BaString%5D%20%3D%20self%3B%0A%09%09delete%20smalltalk%5Bself.className%5D%3B%0A%09%09self.className%20%3D%20aString%3B%0A%09%3E'),
+messageSends: [],
 referencedClasses: []
 }),
-smalltalk.Behavior);
+smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_comment_'),
+unescape('_subclass_instanceVariableNames_'),
 smalltalk.method({
-selector: unescape('comment%3A'),
-category: 'accessing',
-fn: function (aString){
+selector: unescape('subclass%3AinstanceVariableNames%3A'),
+category: 'class creation',
+fn: function (aString, anotherString){
 var self=this;
-smalltalk.send(self, "_basicAt_put_", ["comment", aString]);
+return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, anotherString, nil]);
 return self;},
-args: ["aString"],
-source: unescape('comment%3A%20aString%0A%20%20%20%20self%20basicAt%3A%20%27comment%27%20put%3A%20aString'),
-messageSends: ["basicAt:put:"],
+args: ["aString", "anotherString"],
+source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%0A%09%22Kept%20for%20compatibility.%22%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%20package%3A%20nil'),
+messageSends: ["subclass:instanceVariableNames:package:"],
 referencedClasses: []
 }),
-smalltalk.Behavior);
+smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_commentStamp'),
+unescape('_subclass_instanceVariableNames_category_'),
 smalltalk.method({
-selector: unescape('commentStamp'),
-category: 'accessing',
-fn: function (){
+selector: unescape('subclass%3AinstanceVariableNames%3Acategory%3A'),
+category: 'class creation',
+fn: function (aString, aString2, aString3){
 var self=this;
-return (function($rec){smalltalk.send($rec, "_class_", [self]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCommentReader || ClassCommentReader), "_new", []));
+smalltalk.send(self, "_deprecatedAPI", []);
+return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]);
 return self;},
-args: [],
-source: unescape('commentStamp%0A%20%20%20%20%5EClassCommentReader%20new%0A%09class%3A%20self%3B%0A%09yourself'),
-messageSends: ["class:", "yourself", "new"],
-referencedClasses: ["ClassCommentReader"]
+args: ["aString", "aString2", "aString3"],
+source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20category%3A%20aString3%0A%09%22Kept%20for%20compatibility.%22%0A%09self%20deprecatedAPI.%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3'),
+messageSends: ["deprecatedAPI", "subclass:instanceVariableNames:package:"],
+referencedClasses: []
 }),
-smalltalk.Behavior);
+smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_removeCompiledMethod_'),
+unescape('_subclass_instanceVariableNames_classVariableNames_poolDictionaries_category_'),
 smalltalk.method({
-selector: unescape('removeCompiledMethod%3A'),
-category: 'compiling',
-fn: function (aMethod){
+selector: unescape('subclass%3AinstanceVariableNames%3AclassVariableNames%3ApoolDictionaries%3Acategory%3A'),
+category: 'class creation',
+fn: function (aString, aString2, classVars, pools, aString3){
 var self=this;
-delete self.fn.prototype[aMethod.selector._asSelector()];
-	delete self.fn.prototype.methods[aMethod.selector];
-	smalltalk.init(self);;
+return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]);
 return self;},
-args: ["aMethod"],
-source: unescape('removeCompiledMethod%3A%20aMethod%0A%09%3Cdelete%20self.fn.prototype%5BaMethod.selector._asSelector%28%29%5D%3B%0A%09delete%20self.fn.prototype.methods%5BaMethod.selector%5D%3B%0A%09smalltalk.init%28self%29%3B%3E'),
-messageSends: [],
+args: ["aString", "aString2", "classVars", "pools", "aString3"],
+source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20classVariableNames%3A%20classVars%20poolDictionaries%3A%20pools%20category%3A%20aString3%0A%09%22Just%20ignore%20class%20variables%20and%20pools.%20Added%20for%20compatibility.%22%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3'),
+messageSends: ["subclass:instanceVariableNames:package:"],
 referencedClasses: []
 }),
-smalltalk.Behavior);
+smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_inheritsFrom_'),
+unescape('_subclass_instanceVariableNames_package_'),
 smalltalk.method({
-selector: unescape('inheritsFrom%3A'),
-category: 'testing',
-fn: function (aClass){
+selector: unescape('subclass%3AinstanceVariableNames%3Apackage%3A'),
+category: 'class creation',
+fn: function (aString, aString2, aString3){
 var self=this;
-return smalltalk.send(smalltalk.send(aClass, "_allSubclasses", []), "_includes_", [self]);
+return smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_superclass_subclass_instanceVariableNames_package_", [self, smalltalk.send(aString, "_asString", []), aString2, aString3]);
 return self;},
-args: ["aClass"],
-source: unescape('inheritsFrom%3A%20aClass%0A%09%5EaClass%20allSubclasses%20includes%3A%20self'),
-messageSends: ["includes:", "allSubclasses"],
-referencedClasses: []
+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%20asString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3'),
+messageSends: ["superclass:subclass:instanceVariableNames:package:", "new", "asString"],
+referencedClasses: ["ClassBuilder"]
 }),
-smalltalk.Behavior);
+smalltalk.Class);
+
+
 
+smalltalk.addClass('Metaclass', smalltalk.Behavior, [], 'Kernel-Classes');
+smalltalk.Metaclass.comment=unescape('Metaclass%20is%20the%20root%20of%20the%20class%20hierarchy.%0A%0AMetaclass%20instances%20are%20metaclasses%2C%20one%20for%20each%20real%20class.%20%0AMetaclass%20instances%20have%20a%20single%20instance%2C%20which%20they%20hold%20onto%2C%20which%20is%20the%20class%20that%20they%20are%20the%20metaclass%20of.')
 smalltalk.addMethod(
-unescape('_protocols'),
+unescape('_instanceClass'),
 smalltalk.method({
-selector: unescape('protocols'),
+selector: unescape('instanceClass'),
 category: 'accessing',
 fn: function (){
 var self=this;
-var protocols=nil;
-(protocols=smalltalk.send((smalltalk.Array || Array), "_new", []));
-smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_do_", [(function(each){return ((($receiver = smalltalk.send(protocols, "_includes_", [smalltalk.send(each, "_category", [])])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(protocols, "_add_", [smalltalk.send(each, "_category", [])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(protocols, "_add_", [smalltalk.send(each, "_category", [])]);})]));})]);
-return smalltalk.send(protocols, "_sort", []);
+return self.instanceClass;
 return self;},
 args: [],
-source: unescape('protocols%0A%20%20%20%20%7C%20protocols%20%7C%0A%20%20%20%20protocols%20%3A%3D%20Array%20new.%0A%20%20%20%20self%20methodDictionary%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20%28protocols%20includes%3A%20each%20category%29%20ifFalse%3A%20%5B%0A%09%09protocols%20add%3A%20each%20category%5D%5D.%0A%20%20%20%20%5Eprotocols%20sort'),
-messageSends: ["new", "do:", "methodDictionary", "ifFalse:", "includes:", "category", "add:", "sort"],
-referencedClasses: ["Array"]
+source: unescape('instanceClass%0A%09%3Creturn%20self.instanceClass%3E'),
+messageSends: [],
+referencedClasses: []
 }),
-smalltalk.Behavior);
+smalltalk.Metaclass);
 
 smalltalk.addMethod(
-unescape('_protocolsDo_'),
+unescape('_instanceVariableNames_'),
 smalltalk.method({
-selector: unescape('protocolsDo%3A'),
+selector: unescape('instanceVariableNames%3A'),
 category: 'accessing',
-fn: function (aBlock){
+fn: function (aCollection){
 var self=this;
-var methodsByCategory=nil;
-(methodsByCategory=smalltalk.send((smalltalk.HashedCollection || HashedCollection), "_new", []));
-smalltalk.send(smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_values", []), "_do_", [(function(m){return smalltalk.send(smalltalk.send(methodsByCategory, "_at_ifAbsentPut_", [smalltalk.send(m, "_category", []), (function(){return smalltalk.send((smalltalk.Array || Array), "_new", []);})]), "_add_", [m]);})]);
-smalltalk.send(smalltalk.send(self, "_protocols", []), "_do_", [(function(category){return smalltalk.send(aBlock, "_value_value_", [category, smalltalk.send(methodsByCategory, "_at_", [category])]);})]);
+smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_class_instanceVariableNames_", [self, aCollection]);
 return self;},
-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%20HashedCollection%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:"],
-referencedClasses: ["HashedCollection", "Array"]
+args: ["aCollection"],
+source: unescape('instanceVariableNames%3A%20aCollection%0A%09ClassBuilder%20new%0A%09%20%20%20%20class%3A%20self%20instanceVariableNames%3A%20aCollection'),
+messageSends: ["class:instanceVariableNames:", "new"],
+referencedClasses: ["ClassBuilder"]
 }),
-smalltalk.Behavior);
+smalltalk.Metaclass);
 
 smalltalk.addMethod(
-unescape('_allInstanceVariableNames'),
+unescape('_isMetaclass'),
 smalltalk.method({
-selector: unescape('allInstanceVariableNames'),
-category: 'accessing',
+selector: unescape('isMetaclass'),
+category: 'testing',
 fn: function (){
 var self=this;
-var result=nil;
-(result=smalltalk.send(smalltalk.send(self, "_instanceVariableNames", []), "_copy", []));
-(($receiver = smalltalk.send(self, "_superclass", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(result, "_addAll_", [smalltalk.send(smalltalk.send(self, "_superclass", []), "_allInstanceVariableNames", [])]);})() : nil;
-return result;
+return true;
 return self;},
 args: [],
-source: unescape('allInstanceVariableNames%0A%09%7C%20result%20%7C%0A%09result%20%3A%3D%20self%20instanceVariableNames%20copy.%0A%09self%20superclass%20ifNotNil%3A%20%5B%0A%09%20%20%20%20result%20addAll%3A%20self%20superclass%20allInstanceVariableNames%5D.%0A%09%5Eresult'),
-messageSends: ["copy", "instanceVariableNames", "ifNotNil:", "superclass", "addAll:", "allInstanceVariableNames"],
-referencedClasses: []
-}),
-smalltalk.Behavior);
-
-smalltalk.addMethod(
-unescape('_methodAt_'),
-smalltalk.method({
-selector: unescape('methodAt%3A'),
-category: 'accessing',
-fn: function (aString){
-var self=this;
-return smalltalk.methods(self)[aString];
-return self;},
-args: ["aString"],
-source: unescape('methodAt%3A%20aString%0A%09%3Creturn%20smalltalk.methods%28self%29%5BaString%5D%3E'),
+source: unescape('isMetaclass%0A%09%5Etrue'),
 messageSends: [],
 referencedClasses: []
 }),
-smalltalk.Behavior);
+smalltalk.Metaclass);
 
 smalltalk.addMethod(
-unescape('_methodsFor_stamp_'),
+unescape('_printString'),
 smalltalk.method({
-selector: unescape('methodsFor%3Astamp%3A'),
-category: 'accessing',
-fn: function (aString, aStamp){
+selector: unescape('printString'),
+category: 'printing',
+fn: function (){
 var self=this;
-return smalltalk.send(self, "_methodsFor_", [aString]);
+return smalltalk.send(smalltalk.send(smalltalk.send(self, "_instanceClass", []), "_name", []), "__comma", [" class"]);
 return self;},
-args: ["aString", "aStamp"],
-source: unescape('methodsFor%3A%20aString%20stamp%3A%20aStamp%0A%09%22Added%20for%20compatibility%2C%20right%20now%20ignores%20stamp.%22%0A%09%5Eself%20methodsFor%3A%20aString'),
-messageSends: ["methodsFor:"],
+args: [],
+source: unescape('printString%0A%09%5Eself%20instanceClass%20name%2C%20%27%20class%27'),
+messageSends: [unescape("%2C"), "name", "instanceClass"],
 referencedClasses: []
 }),
-smalltalk.Behavior);
+smalltalk.Metaclass);
+
 
+
+smalltalk.addClass('ClassBuilder', smalltalk.Object, [], 'Kernel-Classes');
+smalltalk.ClassBuilder.comment=unescape('ClassBuilder%20is%20responsible%20for%20compiling%20new%20classes%20or%20modifying%20existing%20classes%20in%20the%20system.%0A%0ARather%20than%20using%20ClassBuilder%20directly%20to%20compile%20a%20class%2C%20use%20%60Class%20%3E%3E%20subclass%3AinstanceVariableNames%3Apackage%3A%60.')
 smalltalk.addMethod(
-unescape('_commentStamp_prior_'),
+unescape('_addSubclassOf_named_instanceVariableNames_'),
 smalltalk.method({
-selector: unescape('commentStamp%3Aprior%3A'),
-category: 'accessing',
-fn: function (aStamp, prior){
+selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3A'),
+category: 'private',
+fn: function (aClass, aString, aCollection){
 var self=this;
-return smalltalk.send(self, "_commentStamp", []);
+smalltalk.addClass(aString, aClass, aCollection);
+	    return smalltalk[aString];
 return self;},
-args: ["aStamp", "prior"],
-source: unescape('commentStamp%3A%20aStamp%20prior%3A%20prior%0A%20%20%20%20%20%20%20%20%5Eself%20commentStamp'),
-messageSends: ["commentStamp"],
+args: ["aClass", "aString", "aCollection"],
+source: unescape('addSubclassOf%3A%20aClass%20named%3A%20aString%20instanceVariableNames%3A%20aCollection%0A%09%3Csmalltalk.addClass%28aString%2C%20aClass%2C%20aCollection%29%3B%0A%09%20%20%20%20return%20smalltalk%5BaString%5D%3E'),
+messageSends: [],
 referencedClasses: []
 }),
-smalltalk.Behavior);
+smalltalk.ClassBuilder);
 
 smalltalk.addMethod(
-unescape('_compile_'),
+unescape('_addSubclassOf_named_instanceVariableNames_package_'),
 smalltalk.method({
-selector: unescape('compile%3A'),
-category: 'compiling',
-fn: function (aString){
+selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3Apackage%3A'),
+category: 'private',
+fn: function (aClass, aString, aCollection, packageName){
 var self=this;
-smalltalk.send(self, "_compile_category_", [aString, ""]);
+smalltalk.addClass(aString, aClass, aCollection, packageName);
+	    return smalltalk[aString];
 return self;},
-args: ["aString"],
-source: unescape('compile%3A%20aString%0A%09self%20compile%3A%20aString%20category%3A%20%27%27'),
-messageSends: ["compile:category:"],
+args: ["aClass", "aString", "aCollection", "packageName"],
+source: unescape('addSubclassOf%3A%20aClass%20named%3A%20aString%20instanceVariableNames%3A%20aCollection%20package%3A%20packageName%0A%09%3Csmalltalk.addClass%28aString%2C%20aClass%2C%20aCollection%2C%20packageName%29%3B%0A%09%20%20%20%20return%20smalltalk%5BaString%5D%3E'),
+messageSends: [],
 referencedClasses: []
 }),
-smalltalk.Behavior);
+smalltalk.ClassBuilder);
 
 smalltalk.addMethod(
-unescape('_compile_category_'),
+unescape('_class_instanceVariableNames_'),
 smalltalk.method({
-selector: unescape('compile%3Acategory%3A'),
-category: 'compiling',
-fn: function (aString, anotherString){
+selector: unescape('class%3AinstanceVariableNames%3A'),
+category: 'class creation',
+fn: function (aClass, aString){
 var self=this;
-var method=nil;
-(method=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [aString, self]));
-smalltalk.send(method, "_category_", [anotherString]);
-smalltalk.send(self, "_addCompiledMethod_", [method]);
+((($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_error_", [smalltalk.send(smalltalk.send(aClass, "_name", []), "__comma", [" is not a metaclass"])]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_error_", [smalltalk.send(smalltalk.send(aClass, "_name", []), "__comma", [" is not a metaclass"])]);})]));
+smalltalk.send(aClass, "_basicAt_put_", ["iVarNames", smalltalk.send(self, "_instanceVariableNamesFor_", [aString])]);
+smalltalk.send(self, "_setupClass_", [aClass]);
 return self;},
-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'),
-messageSends: ["load:forClass:", "new", "category:", "addCompiledMethod:"],
-referencedClasses: ["Compiler"]
+args: ["aClass", "aString"],
+source: unescape('class%3A%20aClass%20instanceVariableNames%3A%20aString%0A%09aClass%20isMetaclass%20ifFalse%3A%20%5Bself%20error%3A%20aClass%20name%2C%20%27%20is%20not%20a%20metaclass%27%5D.%0A%09aClass%20basicAt%3A%20%27iVarNames%27%20put%3A%20%28self%20instanceVariableNamesFor%3A%20aString%29.%0A%09self%20setupClass%3A%20aClass'),
+messageSends: ["ifFalse:", "isMetaclass", "error:", unescape("%2C"), "name", "basicAt:put:", "instanceVariableNamesFor:", "setupClass:"],
+referencedClasses: []
 }),
-smalltalk.Behavior);
-
-
+smalltalk.ClassBuilder);
 
-smalltalk.addClass('Class', smalltalk.Behavior, [], 'Kernel-Classes');
-smalltalk.Class.comment=unescape('Class%20is%20__the__%20class%20object.%20%0A%0AInstances%20are%20the%20classes%20of%20the%20system.%0AClass%20creation%20is%20done%20throught%20a%20%60ClassBuilder%60')
 smalltalk.addMethod(
-unescape('_category'),
+unescape('_copyClass_named_'),
 smalltalk.method({
-selector: unescape('category'),
-category: 'accessing',
-fn: function (){
+selector: unescape('copyClass%3Anamed%3A'),
+category: 'private',
+fn: function (aClass, aString){
 var self=this;
-return (($receiver = smalltalk.send(self, "_package", [])) == nil || $receiver == undefined) ? (function(){return "Unclassified";})() : (function(){return smalltalk.send(smalltalk.send(self, "_package", []), "_name", []);})();
+var newClass=nil;
+(newClass=smalltalk.send(self, "_addSubclassOf_named_instanceVariableNames_package_", [smalltalk.send(aClass, "_superclass", []), aString, smalltalk.send(aClass, "_instanceVariableNames", []), smalltalk.send(smalltalk.send(aClass, "_package", []), "_name", [])]));
+smalltalk.send(self, "_setupClass_", [newClass]);
+smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_values", []), "_do_", [(function(each){smalltalk.send(newClass, "_addCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [smalltalk.send(each, "_source", []), newClass])]);return smalltalk.send(smalltalk.send(smalltalk.send(newClass, "_methodDictionary", []), "_at_", [smalltalk.send(each, "_selector", [])]), "_category_", [smalltalk.send(each, "_category", [])]);})]);
+smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_methodDictionary", []), "_values", []), "_do_", [(function(each){smalltalk.send(smalltalk.send(newClass, "_class", []), "_addCompiledMethod_", [smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [smalltalk.send(each, "_source", []), smalltalk.send(newClass, "_class", [])])]);return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(newClass, "_class", []), "_methodDictionary", []), "_at_", [smalltalk.send(each, "_selector", [])]), "_category_", [smalltalk.send(each, "_category", [])]);})]);
+smalltalk.send(self, "_setupClass_", [newClass]);
+return newClass;
 return self;},
-args: [],
-source: unescape('category%0A%09%5Eself%20package%20ifNil%3A%20%5B%27Unclassified%27%5D%20ifNotNil%3A%20%5Bself%20package%20name%5D'),
-messageSends: ["ifNil:ifNotNil:", "package", "name"],
-referencedClasses: []
+args: ["aClass", "aString"],
+source: unescape('copyClass%3A%20aClass%20named%3A%20aString%0A%09%7C%20newClass%20%7C%0A%0A%09newClass%20%3A%3D%20self%20%0A%09%09addSubclassOf%3A%20aClass%20superclass%0A%09%09named%3A%20aString%20%0A%09%09instanceVariableNames%3A%20aClass%20instanceVariableNames%20%0A%09%09package%3A%20aClass%20package%20name.%0A%0A%09self%20setupClass%3A%20newClass.%0A%0A%09aClass%20methodDictionary%20values%20do%3A%20%5B%3Aeach%20%7C%0A%09%09newClass%20addCompiledMethod%3A%20%28Compiler%20new%20load%3A%20each%20source%20forClass%3A%20newClass%29.%0A%09%09%28newClass%20methodDictionary%20at%3A%20each%20selector%29%20category%3A%20each%20category%5D.%0A%0A%09aClass%20class%20methodDictionary%20values%20do%3A%20%5B%3Aeach%20%7C%0A%09%09newClass%20class%20addCompiledMethod%3A%20%28Compiler%20new%20load%3A%20each%20source%20forClass%3A%20newClass%20class%29.%0A%09%09%28newClass%20class%20methodDictionary%20at%3A%20each%20selector%29%20category%3A%20each%20category%5D.%0A%0A%09self%20setupClass%3A%20newClass.%0A%09%5EnewClass'),
+messageSends: ["addSubclassOf:named:instanceVariableNames:package:", "superclass", "instanceVariableNames", "name", "package", "setupClass:", "do:", "values", "methodDictionary", "addCompiledMethod:", "load:forClass:", "new", "source", "category:", "at:", "selector", "category", "class"],
+referencedClasses: ["Compiler"]
 }),
-smalltalk.Class);
+smalltalk.ClassBuilder);
 
 smalltalk.addMethod(
-unescape('_subclass_instanceVariableNames_'),
+unescape('_instanceVariableNamesFor_'),
 smalltalk.method({
-selector: unescape('subclass%3AinstanceVariableNames%3A'),
-category: 'class creation',
-fn: function (aString, anotherString){
+selector: unescape('instanceVariableNamesFor%3A'),
+category: 'private',
+fn: function (aString){
 var self=this;
-return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, anotherString, nil]);
+return smalltalk.send(smalltalk.send(aString, "_tokenize_", [" "]), "_reject_", [(function(each){return smalltalk.send(each, "_isEmpty", []);})]);
 return self;},
-args: ["aString", "anotherString"],
-source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%0A%09%22Kept%20for%20compatibility.%22%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20anotherString%20package%3A%20nil'),
-messageSends: ["subclass:instanceVariableNames:package:"],
+args: ["aString"],
+source: unescape('instanceVariableNamesFor%3A%20aString%0A%09%5E%28aString%20tokenize%3A%20%27%20%27%29%20reject%3A%20%5B%3Aeach%20%7C%20each%20isEmpty%5D'),
+messageSends: ["reject:", "tokenize:", "isEmpty"],
 referencedClasses: []
 }),
-smalltalk.Class);
+smalltalk.ClassBuilder);
 
 smalltalk.addMethod(
-unescape('_subclass_instanceVariableNames_category_'),
+unescape('_setupClass_'),
 smalltalk.method({
-selector: unescape('subclass%3AinstanceVariableNames%3Acategory%3A'),
-category: 'class creation',
-fn: function (aString, aString2, aString3){
+selector: unescape('setupClass%3A'),
+category: 'private',
+fn: function (aClass){
 var self=this;
-smalltalk.send(self, "_deprecatedAPI", []);
-return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]);
+smalltalk.init(aClass);;
 return self;},
-args: ["aString", "aString2", "aString3"],
-source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20category%3A%20aString3%0A%09%22Kept%20for%20compatibility.%22%0A%09self%20deprecatedAPI.%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3'),
-messageSends: ["deprecatedAPI", "subclass:instanceVariableNames:package:"],
+args: ["aClass"],
+source: unescape('setupClass%3A%20aClass%0A%09%3Csmalltalk.init%28aClass%29%3B%3E'),
+messageSends: [],
 referencedClasses: []
 }),
-smalltalk.Class);
+smalltalk.ClassBuilder);
 
 smalltalk.addMethod(
-unescape('_isClass'),
+unescape('_superclass_subclass_'),
 smalltalk.method({
-selector: unescape('isClass'),
-category: 'testing',
-fn: function (){
+selector: unescape('superclass%3Asubclass%3A'),
+category: 'class creation',
+fn: function (aClass, aString){
 var self=this;
-return true;
+return smalltalk.send(self, "_superclass_subclass_instanceVariableNames_package_", [aClass, aString, "", nil]);
 return self;},
-args: [],
-source: unescape('isClass%0A%09%5Etrue'),
-messageSends: [],
+args: ["aClass", "aString"],
+source: unescape('superclass%3A%20aClass%20subclass%3A%20aString%0A%09%5Eself%20superclass%3A%20aClass%20subclass%3A%20aString%20instanceVariableNames%3A%20%27%27%20package%3A%20nil'),
+messageSends: ["superclass:subclass:instanceVariableNames:package:"],
 referencedClasses: []
 }),
-smalltalk.Class);
+smalltalk.ClassBuilder);
 
 smalltalk.addMethod(
-unescape('_printString'),
+unescape('_superclass_subclass_instanceVariableNames_package_'),
 smalltalk.method({
-selector: unescape('printString'),
-category: 'printing',
-fn: function (){
+selector: unescape('superclass%3Asubclass%3AinstanceVariableNames%3Apackage%3A'),
+category: 'class creation',
+fn: function (aClass, aString, aString2, aString3){
 var self=this;
-return smalltalk.send(self, "_name", []);
+var newClass=nil;
+(newClass=smalltalk.send(self, "_addSubclassOf_named_instanceVariableNames_package_", [aClass, aString, smalltalk.send(self, "_instanceVariableNamesFor_", [aString2]), (($receiver = aString3) == nil || $receiver == undefined) ? (function(){return "unclassified";})() : $receiver]));
+smalltalk.send(self, "_setupClass_", [newClass]);
+return newClass;
 return self;},
-args: [],
-source: unescape('printString%0A%09%5Eself%20name'),
-messageSends: ["name"],
+args: ["aClass", "aString", "aString2", "aString3"],
+source: unescape('superclass%3A%20aClass%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3%0A%09%7C%20newClass%20%7C%0A%09newClass%20%3A%3D%20self%20addSubclassOf%3A%20aClass%0A%09%09%09%09named%3A%20aString%20instanceVariableNames%3A%20%28self%20instanceVariableNamesFor%3A%20aString2%29%0A%09%09%09%09package%3A%20%28aString3%20ifNil%3A%20%5B%27unclassified%27%5D%29.%0A%09self%20setupClass%3A%20newClass.%0A%09%5EnewClass'),
+messageSends: ["addSubclassOf:named:instanceVariableNames:package:", "instanceVariableNamesFor:", "ifNil:", "setupClass:"],
 referencedClasses: []
 }),
-smalltalk.Class);
+smalltalk.ClassBuilder);
+
 
+
+smalltalk.addClass('ClassCategoryReader', smalltalk.Object, ['class', 'category', 'chunkParser'], 'Kernel-Classes');
+smalltalk.ClassCategoryReader.comment=unescape('ClassCategoryReader%20represents%20a%20mechanism%20for%20retrieving%20class%20descriptions%20stored%20on%20a%20file.')
 smalltalk.addMethod(
-unescape('_rename_'),
+unescape('_class_category_'),
 smalltalk.method({
-selector: unescape('rename%3A'),
+selector: unescape('class%3Acategory%3A'),
 category: 'accessing',
-fn: function (aString){
+fn: function (aClass, aString){
 var self=this;
-
-		smalltalk[aString] = self;
-		delete smalltalk[self.className];
-		self.className = aString;
-	;
+(self['@class']=aClass);
+(self['@category']=aString);
 return self;},
-args: ["aString"],
-source: unescape('rename%3A%20aString%0A%09%3C%0A%09%09smalltalk%5BaString%5D%20%3D%20self%3B%0A%09%09delete%20smalltalk%5Bself.className%5D%3B%0A%09%09self.className%20%3D%20aString%3B%0A%09%3E'),
+args: ["aClass", "aString"],
+source: unescape('class%3A%20aClass%20category%3A%20aString%0A%09class%20%3A%3D%20aClass.%0A%09category%20%3A%3D%20aString'),
 messageSends: [],
 referencedClasses: []
 }),
-smalltalk.Class);
+smalltalk.ClassCategoryReader);
 
 smalltalk.addMethod(
-unescape('_subclass_instanceVariableNames_classVariableNames_poolDictionaries_category_'),
+unescape('_compileMethod_'),
 smalltalk.method({
-selector: unescape('subclass%3AinstanceVariableNames%3AclassVariableNames%3ApoolDictionaries%3Acategory%3A'),
-category: 'class creation',
-fn: function (aString, aString2, classVars, pools, aString3){
+selector: unescape('compileMethod%3A'),
+category: 'private',
+fn: function (aString){
 var self=this;
-return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]);
+var method=nil;
+var compiler=nil;
+(method=smalltalk.send((compiler=smalltalk.send((smalltalk.Compiler || Compiler), "_new", [])), "_load_forClass_", [aString, self['@class']]));
+smalltalk.send(method, "_category_", [self['@category']]);
+smalltalk.send(self['@class'], "_addCompiledMethod_", [method]);
+smalltalk.send(compiler, "_setupClass_", [self['@class']]);
 return self;},
-args: ["aString", "aString2", "classVars", "pools", "aString3"],
-source: unescape('subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20classVariableNames%3A%20classVars%20poolDictionaries%3A%20pools%20category%3A%20aString3%0A%09%22Just%20ignore%20class%20variables%20and%20pools.%20Added%20for%20compatibility.%22%0A%09%5Eself%20subclass%3A%20aString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3'),
-messageSends: ["subclass:instanceVariableNames:package:"],
-referencedClasses: []
+args: ["aString"],
+source: unescape('compileMethod%3A%20aString%0A%09%7C%20method%20compiler%20%7C%0A%09method%20%3A%3D%20%28compiler%20%3A%3D%20Compiler%20new%29%20load%3A%20aString%20forClass%3A%20class.%0A%09method%20category%3A%20category.%0A%09class%20addCompiledMethod%3A%20method.%0A%09compiler%20setupClass%3A%20class.'),
+messageSends: ["load:forClass:", "new", "category:", "addCompiledMethod:", "setupClass:"],
+referencedClasses: ["Compiler"]
 }),
-smalltalk.Class);
+smalltalk.ClassCategoryReader);
 
 smalltalk.addMethod(
-unescape('_package'),
+unescape('_initialize'),
 smalltalk.method({
-selector: unescape('package'),
-category: 'accessing',
+selector: unescape('initialize'),
+category: 'initialization',
 fn: function (){
 var self=this;
-return self.pkg;
+smalltalk.send(self, "_initialize", [], smalltalk.Object);
+(self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", []));
 return self;},
 args: [],
-source: unescape('package%0A%09%3Creturn%20self.pkg%3E'),
-messageSends: [],
-referencedClasses: []
+source: unescape('initialize%0A%09super%20initialize.%0A%09chunkParser%20%3A%3D%20ChunkParser%20new.'),
+messageSends: ["initialize", "new"],
+referencedClasses: ["ChunkParser"]
 }),
-smalltalk.Class);
+smalltalk.ClassCategoryReader);
 
 smalltalk.addMethod(
-unescape('_package_'),
+unescape('_scanFrom_'),
 smalltalk.method({
-selector: unescape('package%3A'),
-category: 'accessing',
-fn: function (aPackage){
+selector: unescape('scanFrom%3A'),
+category: 'fileIn',
+fn: function (aChunkParser){
 var self=this;
-self.pkg = aPackage;
+var chunk=nil;
+(function(){while(!(function(){(chunk=smalltalk.send(aChunkParser, "_nextChunk", []));return smalltalk.send(chunk, "_isEmpty", []);})()) {(function(){return smalltalk.send(self, "_compileMethod_", [chunk]);})()}})();
 return self;},
-args: ["aPackage"],
-source: unescape('package%3A%20aPackage%0A%09%3Cself.pkg%20%3D%20aPackage%3E'),
-messageSends: [],
+args: ["aChunkParser"],
+source: unescape('scanFrom%3A%20aChunkParser%0A%09%7C%20chunk%20%7C%0A%09%5Bchunk%20%3A%3D%20aChunkParser%20nextChunk.%0A%09chunk%20isEmpty%5D%20whileFalse%3A%20%5B%0A%09%20%20%20%20self%20compileMethod%3A%20chunk%5D'),
+messageSends: ["whileFalse:", "nextChunk", "isEmpty", "compileMethod:"],
 referencedClasses: []
 }),
-smalltalk.Class);
-
-smalltalk.addMethod(
-unescape('_subclass_instanceVariableNames_package_'),
-smalltalk.method({
-selector: unescape('subclass%3AinstanceVariableNames%3Apackage%3A'),
-category: 'class creation',
-fn: function (aString, aString2, aString3){
-var self=this;
-return smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_superclass_subclass_instanceVariableNames_package_", [self, smalltalk.send(aString, "_asString", []), aString2, aString3]);
-return self;},
-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%20asString%20instanceVariableNames%3A%20aString2%20package%3A%20aString3'),
-messageSends: ["superclass:subclass:instanceVariableNames:package:", "new", "asString"],
-referencedClasses: ["ClassBuilder"]
-}),
-smalltalk.Class);
+smalltalk.ClassCategoryReader);
 
 
 
-smalltalk.addClass('Metaclass', smalltalk.Behavior, [], 'Kernel-Classes');
-smalltalk.Metaclass.comment=unescape('Metaclass%20is%20the%20root%20of%20the%20class%20hierarchy.%0A%0AMetaclass%20instances%20are%20metaclasses%2C%20one%20for%20each%20real%20class.%20%0AMetaclass%20instances%20have%20a%20single%20instance%2C%20which%20they%20hold%20onto%2C%20which%20is%20the%20class%20that%20they%20are%20the%20metaclass%20of.')
+smalltalk.addClass('ClassCommentReader', smalltalk.Object, ['class', 'chunkParser'], 'Kernel-Classes');
+smalltalk.ClassCommentReader.comment=unescape('ClassCommentReader%20represents%20a%20mechanism%20for%20retrieving%20class%20descriptions%20stored%20on%20a%20file.%0ASee%20%60ClassCategoryReader%60%20too.')
 smalltalk.addMethod(
-unescape('_instanceClass'),
+unescape('_class_'),
 smalltalk.method({
-selector: unescape('instanceClass'),
+selector: unescape('class%3A'),
 category: 'accessing',
-fn: function (){
+fn: function (aClass){
 var self=this;
-return self.instanceClass;
+(self['@class']=aClass);
 return self;},
-args: [],
-source: unescape('instanceClass%0A%09%3Creturn%20self.instanceClass%3E'),
+args: ["aClass"],
+source: unescape('class%3A%20aClass%0A%09class%20%3A%3D%20aClass'),
 messageSends: [],
 referencedClasses: []
 }),
-smalltalk.Metaclass);
+smalltalk.ClassCommentReader);
 
 smalltalk.addMethod(
-unescape('_instanceVariableNames_'),
+unescape('_initialize'),
 smalltalk.method({
-selector: unescape('instanceVariableNames%3A'),
-category: 'accessing',
-fn: function (aCollection){
+selector: unescape('initialize'),
+category: 'initialization',
+fn: function (){
 var self=this;
-smalltalk.send(smalltalk.send((smalltalk.ClassBuilder || ClassBuilder), "_new", []), "_class_instanceVariableNames_", [self, aCollection]);
+smalltalk.send(self, "_initialize", [], smalltalk.Object);
+(self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", []));
 return self;},
-args: ["aCollection"],
-source: unescape('instanceVariableNames%3A%20aCollection%0A%09ClassBuilder%20new%0A%09%20%20%20%20class%3A%20self%20instanceVariableNames%3A%20aCollection'),
-messageSends: ["class:instanceVariableNames:", "new"],
-referencedClasses: ["ClassBuilder"]
+args: [],
+source: unescape('initialize%0A%09super%20initialize.%0A%09chunkParser%20%3A%3D%20ChunkParser%20new.'),
+messageSends: ["initialize", "new"],
+referencedClasses: ["ChunkParser"]
 }),
-smalltalk.Metaclass);
+smalltalk.ClassCommentReader);
 
 smalltalk.addMethod(
-unescape('_isMetaclass'),
+unescape('_scanFrom_'),
 smalltalk.method({
-selector: unescape('isMetaclass'),
-category: 'testing',
-fn: function (){
+selector: unescape('scanFrom%3A'),
+category: 'fileIn',
+fn: function (aChunkParser){
 var self=this;
-return true;
+var chunk=nil;
+(chunk=smalltalk.send(aChunkParser, "_nextChunk", []));
+((($receiver = smalltalk.send(chunk, "_isEmpty", [])).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_setComment_", [chunk]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_setComment_", [chunk]);})]));
 return self;},
-args: [],
-source: unescape('isMetaclass%0A%09%5Etrue'),
-messageSends: [],
+args: ["aChunkParser"],
+source: unescape('scanFrom%3A%20aChunkParser%0A%09%7C%20chunk%20%7C%0A%09chunk%20%3A%3D%20aChunkParser%20nextChunk.%0A%09chunk%20isEmpty%20ifFalse%3A%20%5B%0A%09%20%20%20%20self%20setComment%3A%20chunk%5D.'),
+messageSends: ["nextChunk", "ifFalse:", "isEmpty", "setComment:"],
 referencedClasses: []
 }),
-smalltalk.Metaclass);
+smalltalk.ClassCommentReader);
 
 smalltalk.addMethod(
-unescape('_printString'),
+unescape('_setComment_'),
 smalltalk.method({
-selector: unescape('printString'),
-category: 'printing',
-fn: function (){
+selector: unescape('setComment%3A'),
+category: 'private',
+fn: function (aString){
 var self=this;
-return smalltalk.send(smalltalk.send(smalltalk.send(self, "_instanceClass", []), "_name", []), "__comma", [" class"]);
+smalltalk.send(self['@class'], "_comment_", [aString]);
 return self;},
-args: [],
-source: unescape('printString%0A%09%5Eself%20instanceClass%20name%2C%20%27%20class%27'),
-messageSends: [unescape("%2C"), "name", "instanceClass"],
+args: ["aString"],
+source: unescape('setComment%3A%20aString%0A%20%20%20%20class%20comment%3A%20aString'),
+messageSends: ["comment:"],
 referencedClasses: []
 }),
-smalltalk.Metaclass);
+smalltalk.ClassCommentReader);
 
 
 

Plik diff jest za duży
+ 530 - 471
js/Kernel-Collections.deploy.js


Plik diff jest za duży
+ 601 - 398
js/Kernel-Collections.js


+ 61 - 61
js/Kernel-Exceptions.deploy.js

@@ -1,76 +1,76 @@
 smalltalk.addPackage('Kernel-Exceptions', {});
 smalltalk.addClass('Error', smalltalk.Object, ['messageText'], 'Kernel-Exceptions');
 smalltalk.addMethod(
-'_messageText',
+unescape('_context'),
 smalltalk.method({
-selector: 'messageText',
+selector: unescape('context'),
 fn: function (){
 var self=this;
-return self['@messageText'];
+return self.context;
 return self;}
 }),
 smalltalk.Error);
 
 smalltalk.addMethod(
-'_messageText_',
+unescape('_isSmalltalkError'),
 smalltalk.method({
-selector: 'messageText:',
-fn: function (aString){
+selector: unescape('isSmalltalkError'),
+fn: function (){
 var self=this;
-(self['@messageText']=aString);
+return self.smalltalkError === true;
 return self;}
 }),
 smalltalk.Error);
 
 smalltalk.addMethod(
-'_signal',
+unescape('_jsStack'),
 smalltalk.method({
-selector: 'signal',
+selector: unescape('jsStack'),
 fn: function (){
 var self=this;
-self.context = smalltalk.getThisContext(); self.smalltalkError = true; throw(self);
+return self.stack;
 return self;}
 }),
 smalltalk.Error);
 
 smalltalk.addMethod(
-'_context',
+unescape('_messageText'),
 smalltalk.method({
-selector: 'context',
+selector: unescape('messageText'),
 fn: function (){
 var self=this;
-return self.context;
+return self['@messageText'];
 return self;}
 }),
 smalltalk.Error);
 
 smalltalk.addMethod(
-'_jsStack',
+unescape('_messageText_'),
 smalltalk.method({
-selector: 'jsStack',
-fn: function (){
+selector: unescape('messageText%3A'),
+fn: function (aString){
 var self=this;
-return self.stack;
+(self['@messageText']=aString);
 return self;}
 }),
 smalltalk.Error);
 
 smalltalk.addMethod(
-'_isSmalltalkError',
+unescape('_signal'),
 smalltalk.method({
-selector: 'isSmalltalkError',
+selector: unescape('signal'),
 fn: function (){
 var self=this;
-return self.smalltalkError === true;
+self.context = smalltalk.getThisContext(); self.smalltalkError = true; throw(self);
 return self;}
 }),
 smalltalk.Error);
 
 
 smalltalk.addMethod(
-'_signal_',
+unescape('_signal_'),
 smalltalk.method({
-selector: 'signal:',
+selector: unescape('signal%3A'),
 fn: function (aString){
 var self=this;
 return (function($rec){smalltalk.send($rec, "_messageText_", [aString]);return smalltalk.send($rec, "_signal", []);})(smalltalk.send(self, "_new", []));
@@ -81,9 +81,9 @@ smalltalk.Error.klass);
 
 smalltalk.addClass('MessageNotUnderstood', smalltalk.Error, ['message', 'receiver'], 'Kernel-Exceptions');
 smalltalk.addMethod(
-'_message',
+unescape('_message'),
 smalltalk.method({
-selector: 'message',
+selector: unescape('message'),
 fn: function (){
 var self=this;
 return self['@message'];
@@ -92,9 +92,9 @@ return self;}
 smalltalk.MessageNotUnderstood);
 
 smalltalk.addMethod(
-'_message_',
+unescape('_message_'),
 smalltalk.method({
-selector: 'message:',
+selector: unescape('message%3A'),
 fn: function (aMessage){
 var self=this;
 (self['@message']=aMessage);
@@ -103,34 +103,34 @@ return self;}
 smalltalk.MessageNotUnderstood);
 
 smalltalk.addMethod(
-'_receiver',
+unescape('_messageText'),
 smalltalk.method({
-selector: 'receiver',
+selector: unescape('messageText'),
 fn: function (){
 var self=this;
-return self['@receiver'];
+return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_receiver", []), "_asString", []), "__comma", [unescape("%20does%20not%20understand%20%23")]), "__comma", [smalltalk.send(smalltalk.send(self, "_message", []), "_selector", [])]);
 return self;}
 }),
 smalltalk.MessageNotUnderstood);
 
 smalltalk.addMethod(
-'_receiver_',
+unescape('_receiver'),
 smalltalk.method({
-selector: 'receiver:',
-fn: function (anObject){
+selector: unescape('receiver'),
+fn: function (){
 var self=this;
-(self['@receiver']=anObject);
+return self['@receiver'];
 return self;}
 }),
 smalltalk.MessageNotUnderstood);
 
 smalltalk.addMethod(
-'_messageText',
+unescape('_receiver_'),
 smalltalk.method({
-selector: 'messageText',
-fn: function (){
+selector: unescape('receiver%3A'),
+fn: function (anObject){
 var self=this;
-return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_receiver", []), "_asString", []), "__comma", [unescape("%20does%20not%20understand%20%23")]), "__comma", [smalltalk.send(smalltalk.send(self, "_message", []), "_selector", [])]);
+(self['@receiver']=anObject);
 return self;}
 }),
 smalltalk.MessageNotUnderstood);
@@ -139,9 +139,9 @@ smalltalk.MessageNotUnderstood);
 
 smalltalk.addClass('ErrorHandler', smalltalk.Object, [], 'Kernel-Exceptions');
 smalltalk.addMethod(
-'_handleError_',
+unescape('_handleError_'),
 smalltalk.method({
-selector: 'handleError:',
+selector: unescape('handleError%3A'),
 fn: function (anError){
 var self=this;
 (($receiver = smalltalk.send(anError, "_context", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_logErrorContext_", [smalltalk.send(anError, "_context", [])]);})() : nil;
@@ -151,32 +151,32 @@ return self;}
 smalltalk.ErrorHandler);
 
 smalltalk.addMethod(
-'_logContext_',
+unescape('_log_'),
 smalltalk.method({
-selector: 'logContext:',
-fn: function (aContext){
+selector: unescape('log%3A'),
+fn: function (aString){
 var self=this;
-(($receiver = smalltalk.send(aContext, "_home", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_logContext_", [smalltalk.send(aContext, "_home", [])]);})() : nil;
-smalltalk.send(self, "_log_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aContext, "_receiver", []), "_asString", []), "__comma", [unescape("%3E%3E")]), "__comma", [smalltalk.send(aContext, "_selector", [])])]);
+smalltalk.send((typeof console == 'undefined' ? nil : console), "_log_", [aString]);
 return self;}
 }),
 smalltalk.ErrorHandler);
 
 smalltalk.addMethod(
-'_logErrorContext_',
+unescape('_logContext_'),
 smalltalk.method({
-selector: 'logErrorContext:',
+selector: unescape('logContext%3A'),
 fn: function (aContext){
 var self=this;
-(($receiver = aContext) != nil && $receiver != undefined) ? (function(){return (($receiver = smalltalk.send(aContext, "_home", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_logContext_", [smalltalk.send(aContext, "_home", [])]);})() : nil;})() : nil;
+(($receiver = smalltalk.send(aContext, "_home", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_logContext_", [smalltalk.send(aContext, "_home", [])]);})() : nil;
+smalltalk.send(self, "_log_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aContext, "_receiver", []), "_asString", []), "__comma", [unescape("%3E%3E")]), "__comma", [smalltalk.send(aContext, "_selector", [])])]);
 return self;}
 }),
 smalltalk.ErrorHandler);
 
 smalltalk.addMethod(
-'_logError_',
+unescape('_logError_'),
 smalltalk.method({
-selector: 'logError:',
+selector: unescape('logError%3A'),
 fn: function (anError){
 var self=this;
 smalltalk.send(self, "_log_", [smalltalk.send(anError, "_messageText", [])]);
@@ -185,12 +185,12 @@ return self;}
 smalltalk.ErrorHandler);
 
 smalltalk.addMethod(
-'_log_',
+unescape('_logErrorContext_'),
 smalltalk.method({
-selector: 'log:',
-fn: function (aString){
+selector: unescape('logErrorContext%3A'),
+fn: function (aContext){
 var self=this;
-smalltalk.send((typeof console == 'undefined' ? nil : console), "_log_", [aString]);
+(($receiver = aContext) != nil && $receiver != undefined) ? (function(){return (($receiver = smalltalk.send(aContext, "_home", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_logContext_", [smalltalk.send(aContext, "_home", [])]);})() : nil;})() : nil;
 return self;}
 }),
 smalltalk.ErrorHandler);
@@ -198,9 +198,9 @@ smalltalk.ErrorHandler);
 
 smalltalk.ErrorHandler.klass.iVarNames = ['current'];
 smalltalk.addMethod(
-'_current',
+unescape('_current'),
 smalltalk.method({
-selector: 'current',
+selector: unescape('current'),
 fn: function (){
 var self=this;
 return (($receiver = self['@current']) == nil || $receiver == undefined) ? (function(){return (self['@current']=smalltalk.send(self, "_new", []));})() : $receiver;
@@ -209,9 +209,9 @@ return self;}
 smalltalk.ErrorHandler.klass);
 
 smalltalk.addMethod(
-'_initialize',
+unescape('_initialize'),
 smalltalk.method({
-selector: 'initialize',
+selector: unescape('initialize'),
 fn: function (){
 var self=this;
 smalltalk.send(self, "_register", []);
@@ -220,9 +220,9 @@ return self;}
 smalltalk.ErrorHandler.klass);
 
 smalltalk.addMethod(
-'_register',
+unescape('_register'),
 smalltalk.method({
-selector: 'register',
+selector: unescape('register'),
 fn: function (){
 var self=this;
 smalltalk.send((smalltalk.ErrorHandler || ErrorHandler), "_setCurrent_", [smalltalk.send(self, "_new", [])]);
@@ -231,9 +231,9 @@ return self;}
 smalltalk.ErrorHandler.klass);
 
 smalltalk.addMethod(
-'_setCurrent_',
+unescape('_setCurrent_'),
 smalltalk.method({
-selector: 'setCurrent:',
+selector: unescape('setCurrent%3A'),
 fn: function (anHandler){
 var self=this;
 (self['@current']=anHandler);

+ 67 - 67
js/Kernel-Exceptions.js

@@ -1,96 +1,96 @@
 smalltalk.addPackage('Kernel-Exceptions', {});
 smalltalk.addClass('Error', smalltalk.Object, ['messageText'], 'Kernel-Exceptions');
 smalltalk.addMethod(
-unescape('_messageText'),
+unescape('_context'),
 smalltalk.method({
-selector: unescape('messageText'),
+selector: unescape('context'),
 category: 'accessing',
 fn: function (){
 var self=this;
-return self['@messageText'];
+return self.context;
 return self;},
 args: [],
-source: unescape('messageText%0A%09%5EmessageText'),
+source: unescape('context%0A%09%3Creturn%20self.context%3E'),
 messageSends: [],
 referencedClasses: []
 }),
 smalltalk.Error);
 
 smalltalk.addMethod(
-unescape('_messageText_'),
+unescape('_isSmalltalkError'),
 smalltalk.method({
-selector: unescape('messageText%3A'),
-category: 'accessing',
-fn: function (aString){
+selector: unescape('isSmalltalkError'),
+category: 'testing',
+fn: function (){
 var self=this;
-(self['@messageText']=aString);
+return self.smalltalkError === true;
 return self;},
-args: ["aString"],
-source: unescape('messageText%3A%20aString%0A%09messageText%20%3A%3D%20aString'),
+args: [],
+source: unescape('isSmalltalkError%0A%09%3Creturn%20self.smalltalkError%20%3D%3D%3D%20true%3E'),
 messageSends: [],
 referencedClasses: []
 }),
 smalltalk.Error);
 
 smalltalk.addMethod(
-unescape('_signal'),
+unescape('_jsStack'),
 smalltalk.method({
-selector: unescape('signal'),
-category: 'signaling',
+selector: unescape('jsStack'),
+category: 'accessing',
 fn: function (){
 var self=this;
-self.context = smalltalk.getThisContext(); self.smalltalkError = true; throw(self);
+return self.stack;
 return self;},
 args: [],
-source: unescape('signal%0A%09%3Cself.context%20%3D%20smalltalk.getThisContext%28%29%3B%20self.smalltalkError%20%3D%20true%3B%20throw%28self%29%3E'),
+source: unescape('jsStack%0A%09%3Creturn%20self.stack%3E'),
 messageSends: [],
 referencedClasses: []
 }),
 smalltalk.Error);
 
 smalltalk.addMethod(
-unescape('_context'),
+unescape('_messageText'),
 smalltalk.method({
-selector: unescape('context'),
+selector: unescape('messageText'),
 category: 'accessing',
 fn: function (){
 var self=this;
-return self.context;
+return self['@messageText'];
 return self;},
 args: [],
-source: unescape('context%0A%09%3Creturn%20self.context%3E'),
+source: unescape('messageText%0A%09%5EmessageText'),
 messageSends: [],
 referencedClasses: []
 }),
 smalltalk.Error);
 
 smalltalk.addMethod(
-unescape('_jsStack'),
+unescape('_messageText_'),
 smalltalk.method({
-selector: unescape('jsStack'),
+selector: unescape('messageText%3A'),
 category: 'accessing',
-fn: function (){
+fn: function (aString){
 var self=this;
-return self.stack;
+(self['@messageText']=aString);
 return self;},
-args: [],
-source: unescape('jsStack%0A%09%3Creturn%20self.stack%3E'),
+args: ["aString"],
+source: unescape('messageText%3A%20aString%0A%09messageText%20%3A%3D%20aString'),
 messageSends: [],
 referencedClasses: []
 }),
 smalltalk.Error);
 
 smalltalk.addMethod(
-unescape('_isSmalltalkError'),
+unescape('_signal'),
 smalltalk.method({
-selector: unescape('isSmalltalkError'),
-category: 'testing',
+selector: unescape('signal'),
+category: 'signaling',
 fn: function (){
 var self=this;
-return self.smalltalkError === true;
+self.context = smalltalk.getThisContext(); self.smalltalkError = true; throw(self);
 return self;},
 args: [],
-source: unescape('isSmalltalkError%0A%09%3Creturn%20self.smalltalkError%20%3D%3D%3D%20true%3E'),
+source: unescape('signal%0A%09%3Cself.context%20%3D%20smalltalk.getThisContext%28%29%3B%20self.smalltalkError%20%3D%20true%3B%20throw%28self%29%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -147,6 +147,22 @@ referencedClasses: []
 }),
 smalltalk.MessageNotUnderstood);
 
+smalltalk.addMethod(
+unescape('_messageText'),
+smalltalk.method({
+selector: unescape('messageText'),
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_receiver", []), "_asString", []), "__comma", [unescape("%20does%20not%20understand%20%23")]), "__comma", [smalltalk.send(smalltalk.send(self, "_message", []), "_selector", [])]);
+return self;},
+args: [],
+source: unescape('messageText%0A%09%5Eself%20receiver%20asString%2C%20%27%20does%20not%20understand%20%23%27%2C%20self%20message%20selector'),
+messageSends: [unescape("%2C"), "asString", "receiver", "selector", "message"],
+referencedClasses: []
+}),
+smalltalk.MessageNotUnderstood);
+
 smalltalk.addMethod(
 unescape('_receiver'),
 smalltalk.method({
@@ -179,22 +195,6 @@ referencedClasses: []
 }),
 smalltalk.MessageNotUnderstood);
 
-smalltalk.addMethod(
-unescape('_messageText'),
-smalltalk.method({
-selector: unescape('messageText'),
-category: 'accessing',
-fn: function (){
-var self=this;
-return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_receiver", []), "_asString", []), "__comma", [unescape("%20does%20not%20understand%20%23")]), "__comma", [smalltalk.send(smalltalk.send(self, "_message", []), "_selector", [])]);
-return self;},
-args: [],
-source: unescape('messageText%0A%09%5Eself%20receiver%20asString%2C%20%27%20does%20not%20understand%20%23%27%2C%20self%20message%20selector'),
-messageSends: [unescape("%2C"), "asString", "receiver", "selector", "message"],
-referencedClasses: []
-}),
-smalltalk.MessageNotUnderstood);
-
 
 
 smalltalk.addClass('ErrorHandler', smalltalk.Object, [], 'Kernel-Exceptions');
@@ -216,34 +216,34 @@ referencedClasses: []
 smalltalk.ErrorHandler);
 
 smalltalk.addMethod(
-unescape('_logContext_'),
+unescape('_log_'),
 smalltalk.method({
-selector: unescape('logContext%3A'),
+selector: unescape('log%3A'),
 category: 'private',
-fn: function (aContext){
+fn: function (aString){
 var self=this;
-(($receiver = smalltalk.send(aContext, "_home", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_logContext_", [smalltalk.send(aContext, "_home", [])]);})() : nil;
-smalltalk.send(self, "_log_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aContext, "_receiver", []), "_asString", []), "__comma", [unescape("%3E%3E")]), "__comma", [smalltalk.send(aContext, "_selector", [])])]);
+smalltalk.send((typeof console == 'undefined' ? nil : console), "_log_", [aString]);
 return self;},
-args: ["aContext"],
-source: unescape('logContext%3A%20aContext%0A%09aContext%20home%20ifNotNil%3A%20%5B%0A%09%09self%20logContext%3A%20aContext%20home%5D.%0A%09self%20log%3A%20aContext%20receiver%20asString%2C%20%27%3E%3E%27%2C%20aContext%20selector'),
-messageSends: ["ifNotNil:", "home", "logContext:", "log:", unescape("%2C"), "asString", "receiver", "selector"],
+args: ["aString"],
+source: unescape('log%3A%20aString%0A%09console%20log%3A%20aString'),
+messageSends: ["log:"],
 referencedClasses: []
 }),
 smalltalk.ErrorHandler);
 
 smalltalk.addMethod(
-unescape('_logErrorContext_'),
+unescape('_logContext_'),
 smalltalk.method({
-selector: unescape('logErrorContext%3A'),
+selector: unescape('logContext%3A'),
 category: 'private',
 fn: function (aContext){
 var self=this;
-(($receiver = aContext) != nil && $receiver != undefined) ? (function(){return (($receiver = smalltalk.send(aContext, "_home", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_logContext_", [smalltalk.send(aContext, "_home", [])]);})() : nil;})() : nil;
+(($receiver = smalltalk.send(aContext, "_home", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_logContext_", [smalltalk.send(aContext, "_home", [])]);})() : nil;
+smalltalk.send(self, "_log_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aContext, "_receiver", []), "_asString", []), "__comma", [unescape("%3E%3E")]), "__comma", [smalltalk.send(aContext, "_selector", [])])]);
 return self;},
 args: ["aContext"],
-source: unescape('logErrorContext%3A%20aContext%0A%09aContext%20ifNotNil%3A%20%5B%0A%09%09aContext%20home%20ifNotNil%3A%20%5B%0A%09%09%09self%20logContext%3A%20aContext%20home%5D%5D'),
-messageSends: ["ifNotNil:", "home", "logContext:"],
+source: unescape('logContext%3A%20aContext%0A%09aContext%20home%20ifNotNil%3A%20%5B%0A%09%09self%20logContext%3A%20aContext%20home%5D.%0A%09self%20log%3A%20aContext%20receiver%20asString%2C%20%27%3E%3E%27%2C%20aContext%20selector'),
+messageSends: ["ifNotNil:", "home", "logContext:", "log:", unescape("%2C"), "asString", "receiver", "selector"],
 referencedClasses: []
 }),
 smalltalk.ErrorHandler);
@@ -265,17 +265,17 @@ referencedClasses: []
 smalltalk.ErrorHandler);
 
 smalltalk.addMethod(
-unescape('_log_'),
+unescape('_logErrorContext_'),
 smalltalk.method({
-selector: unescape('log%3A'),
+selector: unescape('logErrorContext%3A'),
 category: 'private',
-fn: function (aString){
+fn: function (aContext){
 var self=this;
-smalltalk.send((typeof console == 'undefined' ? nil : console), "_log_", [aString]);
+(($receiver = aContext) != nil && $receiver != undefined) ? (function(){return (($receiver = smalltalk.send(aContext, "_home", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_logContext_", [smalltalk.send(aContext, "_home", [])]);})() : nil;})() : nil;
 return self;},
-args: ["aString"],
-source: unescape('log%3A%20aString%0A%09console%20log%3A%20aString'),
-messageSends: ["log:"],
+args: ["aContext"],
+source: unescape('logErrorContext%3A%20aContext%0A%09aContext%20ifNotNil%3A%20%5B%0A%09%09aContext%20home%20ifNotNil%3A%20%5B%0A%09%09%09self%20logContext%3A%20aContext%20home%5D%5D'),
+messageSends: ["ifNotNil:", "home", "logContext:"],
 referencedClasses: []
 }),
 smalltalk.ErrorHandler);

+ 221 - 221
js/Kernel-Methods.deploy.js

@@ -1,202 +1,122 @@
 smalltalk.addPackage('Kernel-Methods', {});
-smalltalk.addClass('Message', smalltalk.Object, ['selector', 'arguments'], 'Kernel-Methods');
-smalltalk.addMethod(
-unescape('_selector'),
-smalltalk.method({
-selector: unescape('selector'),
-fn: function () {
-    var self = this;
-    return self['@selector'];
-    return self;
-}
-}),
-smalltalk.Message);
-
-smalltalk.addMethod(
-unescape('_selector_'),
-smalltalk.method({
-selector: unescape('selector%3A'),
-fn: function (aString) {
-    var self = this;
-    self['@selector'] = aString;
-    return self;
-}
-}),
-smalltalk.Message);
-
-smalltalk.addMethod(
-unescape('_arguments_'),
-smalltalk.method({
-selector: unescape('arguments%3A'),
-fn: function (anArray) {
-    var self = this;
-    self['@arguments'] = anArray;
-    return self;
-}
-}),
-smalltalk.Message);
-
-smalltalk.addMethod(
-unescape('_arguments'),
-smalltalk.method({
-selector: unescape('arguments'),
-fn: function () {
-    var self = this;
-    return self['@arguments'];
-    return self;
-}
-}),
-smalltalk.Message);
-
-smalltalk.addMethod(
-unescape('_printString'),
-smalltalk.method({
-selector: unescape('printString'),
-fn: function () {
-    var self = this;
-    return smalltalk.send(smalltalk.String || String, "_streamContents_", [function (aStream) {return function ($rec) {smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_printString", [], smalltalk.Object)]);smalltalk.send($rec, "_nextPutAll_", [unescape("%28")]);smalltalk.send($rec, "_nextPutAll_", [self['@selector']]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%29")]);}(aStream);}]);
-    return self;
-}
-}),
-smalltalk.Message);
-
-smalltalk.addMethod(
-unescape('_sendTo_'),
-smalltalk.method({
-selector: unescape('sendTo%3A'),
-fn: function (anObject) {
-    var self = this;
-    smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_send_to_arguments_", [smalltalk.send(self, "_selector", []), anObject, smalltalk.send(self, "_arguments", [])]);
-    return self;
-}
-}),
-smalltalk.Message);
-
-
+smalltalk.addClass('BlockClosure', smalltalk.Object, [], 'Kernel-Methods');
 smalltalk.addMethod(
-unescape('_selector_arguments_'),
+unescape('_applyTo_arguments_'),
 smalltalk.method({
-selector: unescape('selector%3Aarguments%3A'),
-fn: function (aString, anArray) {
+selector: unescape('applyTo%3Aarguments%3A'),
+fn: function (anObject, aCollection) {
     var self = this;
-    return function ($rec) {smalltalk.send($rec, "_selector_", [aString]);smalltalk.send($rec, "_arguments_", [anArray]);return smalltalk.send($rec, "_yourself", []);}(smalltalk.send(self, "_new", []));
+    return self.apply(anObject, aCollection);
     return self;
 }
 }),
-smalltalk.Message.klass);
-
+smalltalk.BlockClosure);
 
-smalltalk.addClass('MethodContext', smalltalk.Object, [], 'Kernel-Methods');
 smalltalk.addMethod(
-unescape('_receiver'),
+unescape('_compiledSource'),
 smalltalk.method({
-selector: unescape('receiver'),
+selector: unescape('compiledSource'),
 fn: function () {
     var self = this;
-    return self.receiver;
+    return self.toString();
     return self;
 }
 }),
-smalltalk.MethodContext);
+smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-unescape('_selector'),
+unescape('_ensure_'),
 smalltalk.method({
-selector: unescape('selector'),
-fn: function () {
+selector: unescape('ensure%3A'),
+fn: function (aBlock) {
     var self = this;
-    return smalltalk.convertSelector(self.selector);
+    var success = nil;
+    success = false;
+    return smalltalk.send(function () {smalltalk.send(self, "_value", []);success = true;return smalltalk.send(aBlock, "_value", []);}, "_on_do_", [smalltalk.Error || Error, function (ex) {($receiver = success).klass === smalltalk.Boolean ? !$receiver ? function () {return smalltalk.send(aBlock, "_value", []);}() : nil : smalltalk.send($receiver, "_ifFalse_", [function () {return smalltalk.send(aBlock, "_value", []);}]);return smalltalk.send(ex, "_signal", []);}]);
     return self;
 }
 }),
-smalltalk.MethodContext);
+smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-unescape('_home'),
+unescape('_new'),
 smalltalk.method({
-selector: unescape('home'),
+selector: unescape('new'),
 fn: function () {
     var self = this;
-    return self.homeContext;
+    return new self;
     return self;
 }
 }),
-smalltalk.MethodContext);
+smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-unescape('_temps'),
+unescape('_newValue_'),
 smalltalk.method({
-selector: unescape('temps'),
-fn: function () {
+selector: unescape('newValue%3A'),
+fn: function (anObject) {
     var self = this;
-    return self.temps;
+    return new self(anObject);
     return self;
 }
 }),
-smalltalk.MethodContext);
+smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-unescape('_printString'),
+unescape('_newValue_value_'),
 smalltalk.method({
-selector: unescape('printString'),
-fn: function () {
+selector: unescape('newValue%3Avalue%3A'),
+fn: function (anObject, anObject2) {
     var self = this;
-    return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_printString", [], smalltalk.Object), "__comma", [unescape("%28")]), "__comma", [smalltalk.send(self, "_asString", [])]), "__comma", [unescape("%29")]);
+    return new self(anObject, anObject2);
     return self;
 }
 }),
-smalltalk.MethodContext);
+smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-unescape('_asString'),
+unescape('_newValue_value_value_'),
 smalltalk.method({
-selector: unescape('asString'),
-fn: function () {
+selector: unescape('newValue%3Avalue%3Avalue%3A'),
+fn: function (anObject, anObject2, anObject3) {
     var self = this;
-    return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_receiver", []), "_class", []), "_printString", []), "__comma", [unescape("%20%3E%3E%20")]), "__comma", [smalltalk.send(self, "_selector", [])]);
+    return new self(anObject, anObject2);
     return self;
 }
 }),
-smalltalk.MethodContext);
-
-
+smalltalk.BlockClosure);
 
-smalltalk.addClass('BlockClosure', smalltalk.Object, [], 'Kernel-Methods');
 smalltalk.addMethod(
-unescape('_compiledSource'),
+unescape('_numArgs'),
 smalltalk.method({
-selector: unescape('compiledSource'),
+selector: unescape('numArgs'),
 fn: function () {
     var self = this;
-    return self.toString();
+    return self.length;
     return self;
 }
 }),
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-unescape('_whileTrue_'),
+unescape('_on_do_'),
 smalltalk.method({
-selector: unescape('whileTrue%3A'),
-fn: function (aBlock) {
+selector: unescape('on%3Ado%3A'),
+fn: function (anErrorClass, aBlock) {
     var self = this;
-    while (self()) {
-        aBlock();
-    }
+    return smalltalk.send(self, "_try_catch_", [self, function (error) {return ($receiver = smalltalk.send(error, "_isKindOf_", [anErrorClass])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(aBlock, "_value_", [error]);}() : function () {return smalltalk.send(error, "_signal", []);}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return smalltalk.send(aBlock, "_value_", [error]);}, function () {return smalltalk.send(error, "_signal", []);}]);}]);
     return self;
 }
 }),
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-unescape('_whileFalse_'),
+unescape('_timeToRun'),
 smalltalk.method({
-selector: unescape('whileFalse%3A'),
-fn: function (aBlock) {
+selector: unescape('timeToRun'),
+fn: function () {
     var self = this;
-    while (!self()) {
-        aBlock();
-    }
+    return smalltalk.send(smalltalk.Date || Date, "_millisecondsToRun_", [self]);
     return self;
 }
 }),
@@ -251,24 +171,24 @@ fn: function (firstArg, secondArg, thirdArg) {
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-unescape('_valueWithPossibleArguments_'),
+unescape('_valueWithInterval_'),
 smalltalk.method({
-selector: unescape('valueWithPossibleArguments%3A'),
-fn: function (aCollection) {
+selector: unescape('valueWithInterval%3A'),
+fn: function (aNumber) {
     var self = this;
-    return self.apply(null, aCollection);
+    return setInterval(self, aNumber);
     return self;
 }
 }),
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-unescape('_on_do_'),
+unescape('_valueWithPossibleArguments_'),
 smalltalk.method({
-selector: unescape('on%3Ado%3A'),
-fn: function (anErrorClass, aBlock) {
+selector: unescape('valueWithPossibleArguments%3A'),
+fn: function (aCollection) {
     var self = this;
-    return smalltalk.send(self, "_try_catch_", [self, function (error) {return ($receiver = smalltalk.send(error, "_isKindOf_", [anErrorClass])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(aBlock, "_value_", [error]);}() : function () {return smalltalk.send(error, "_signal", []);}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return smalltalk.send(aBlock, "_value_", [error]);}, function () {return smalltalk.send(error, "_signal", []);}]);}]);
+    return self.apply(null, aCollection);
     return self;
 }
 }),
@@ -287,24 +207,26 @@ fn: function (aNumber) {
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-unescape('_valueWithInterval_'),
+unescape('_whileFalse'),
 smalltalk.method({
-selector: unescape('valueWithInterval%3A'),
-fn: function (aNumber) {
+selector: unescape('whileFalse'),
+fn: function () {
     var self = this;
-    return setInterval(self, aNumber);
+    smalltalk.send(self, "_whileFalse_", [function () {return nil;}]);
     return self;
 }
 }),
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-unescape('_whileFalse'),
+unescape('_whileFalse_'),
 smalltalk.method({
-selector: unescape('whileFalse'),
-fn: function () {
+selector: unescape('whileFalse%3A'),
+fn: function (aBlock) {
     var self = this;
-    smalltalk.send(self, "_whileFalse_", [function () {return nil;}]);
+    while (!self()) {
+        aBlock();
+    }
     return self;
 }
 }),
@@ -323,106 +245,143 @@ fn: function () {
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-unescape('_new'),
+unescape('_whileTrue_'),
 smalltalk.method({
-selector: unescape('new'),
-fn: function () {
+selector: unescape('whileTrue%3A'),
+fn: function (aBlock) {
     var self = this;
-    return new self;
+    while (self()) {
+        aBlock();
+    }
     return self;
 }
 }),
 smalltalk.BlockClosure);
 
+
+
+smalltalk.addClass('CompiledMethod', smalltalk.Object, [], 'Kernel-Methods');
 smalltalk.addMethod(
-unescape('_applyTo_arguments_'),
+unescape('_arguments'),
 smalltalk.method({
-selector: unescape('applyTo%3Aarguments%3A'),
-fn: function (anObject, aCollection) {
+selector: unescape('arguments'),
+fn: function () {
     var self = this;
-    return self.apply(anObject, aCollection);
+    return self.args || [];
     return self;
 }
 }),
-smalltalk.BlockClosure);
+smalltalk.CompiledMethod);
 
 smalltalk.addMethod(
-unescape('_timeToRun'),
+unescape('_category'),
 smalltalk.method({
-selector: unescape('timeToRun'),
+selector: unescape('category'),
 fn: function () {
     var self = this;
-    return smalltalk.send(smalltalk.Date || Date, "_millisecondsToRun_", [self]);
+    return ($receiver = smalltalk.send(self, "_basicAt_", ["category"])) == nil ||
+        $receiver == undefined ? function () {return "";}() : $receiver;
     return self;
 }
 }),
-smalltalk.BlockClosure);
+smalltalk.CompiledMethod);
 
 smalltalk.addMethod(
-unescape('_numArgs'),
+unescape('_category_'),
 smalltalk.method({
-selector: unescape('numArgs'),
+selector: unescape('category%3A'),
+fn: function (aString) {
+    var self = this;
+    smalltalk.send(self, "_basicAt_put_", ["category", aString]);
+    return self;
+}
+}),
+smalltalk.CompiledMethod);
+
+smalltalk.addMethod(
+unescape('_fn'),
+smalltalk.method({
+selector: unescape('fn'),
 fn: function () {
     var self = this;
-    return self.length;
+    return smalltalk.send(self, "_basicAt_", ["fn"]);
     return self;
 }
 }),
-smalltalk.BlockClosure);
+smalltalk.CompiledMethod);
 
 smalltalk.addMethod(
-unescape('_ensure_'),
+unescape('_fn_'),
 smalltalk.method({
-selector: unescape('ensure%3A'),
+selector: unescape('fn%3A'),
 fn: function (aBlock) {
     var self = this;
-    var success = nil;
-    success = false;
-    return smalltalk.send(function () {smalltalk.send(self, "_value", []);success = true;return smalltalk.send(aBlock, "_value", []);}, "_on_do_", [smalltalk.Error || Error, function (ex) {($receiver = success).klass === smalltalk.Boolean ? !$receiver ? function () {return smalltalk.send(aBlock, "_value", []);}() : nil : smalltalk.send($receiver, "_ifFalse_", [function () {return smalltalk.send(aBlock, "_value", []);}]);return smalltalk.send(ex, "_signal", []);}]);
+    smalltalk.send(self, "_basicAt_put_", ["fn", aBlock]);
     return self;
 }
 }),
-smalltalk.BlockClosure);
+smalltalk.CompiledMethod);
 
 smalltalk.addMethod(
-unescape('_newValue_'),
+unescape('_messageSends'),
 smalltalk.method({
-selector: unescape('newValue%3A'),
-fn: function (anObject) {
+selector: unescape('messageSends'),
+fn: function () {
     var self = this;
-    return new self(anObject);
+    return smalltalk.send(self, "_basicAt_", ["messageSends"]);
     return self;
 }
 }),
-smalltalk.BlockClosure);
+smalltalk.CompiledMethod);
 
 smalltalk.addMethod(
-unescape('_newValue_value_'),
+unescape('_methodClass'),
 smalltalk.method({
-selector: unescape('newValue%3Avalue%3A'),
-fn: function (anObject, anObject2) {
+selector: unescape('methodClass'),
+fn: function () {
     var self = this;
-    return new self(anObject, anObject2);
+    return smalltalk.send(self, "_basicAt_", ["methodClass"]);
     return self;
 }
 }),
-smalltalk.BlockClosure);
+smalltalk.CompiledMethod);
 
 smalltalk.addMethod(
-unescape('_newValue_value_value_'),
+unescape('_referencedClasses'),
 smalltalk.method({
-selector: unescape('newValue%3Avalue%3Avalue%3A'),
-fn: function (anObject, anObject2, anObject3) {
+selector: unescape('referencedClasses'),
+fn: function () {
     var self = this;
-    return new self(anObject, anObject2);
+    return smalltalk.send(self, "_basicAt_", ["referencedClasses"]);
     return self;
 }
 }),
-smalltalk.BlockClosure);
+smalltalk.CompiledMethod);
 
+smalltalk.addMethod(
+unescape('_selector'),
+smalltalk.method({
+selector: unescape('selector'),
+fn: function () {
+    var self = this;
+    return smalltalk.send(self, "_basicAt_", ["selector"]);
+    return self;
+}
+}),
+smalltalk.CompiledMethod);
 
+smalltalk.addMethod(
+unescape('_selector_'),
+smalltalk.method({
+selector: unescape('selector%3A'),
+fn: function (aString) {
+    var self = this;
+    smalltalk.send(self, "_basicAt_put_", ["selector", aString]);
+    return self;
+}
+}),
+smalltalk.CompiledMethod);
 
-smalltalk.addClass('CompiledMethod', smalltalk.Object, [], 'Kernel-Methods');
 smalltalk.addMethod(
 unescape('_source'),
 smalltalk.method({
@@ -448,30 +407,44 @@ fn: function (aString) {
 }),
 smalltalk.CompiledMethod);
 
+
+
+smalltalk.addClass('Message', smalltalk.Object, ['selector', 'arguments'], 'Kernel-Methods');
 smalltalk.addMethod(
-unescape('_category'),
+unescape('_arguments'),
 smalltalk.method({
-selector: unescape('category'),
+selector: unescape('arguments'),
 fn: function () {
     var self = this;
-    return ($receiver = smalltalk.send(self, "_basicAt_", ["category"])) == nil ||
-        $receiver == undefined ? function () {return "";}() : $receiver;
+    return self['@arguments'];
     return self;
 }
 }),
-smalltalk.CompiledMethod);
+smalltalk.Message);
 
 smalltalk.addMethod(
-unescape('_category_'),
+unescape('_arguments_'),
 smalltalk.method({
-selector: unescape('category%3A'),
-fn: function (aString) {
+selector: unescape('arguments%3A'),
+fn: function (anArray) {
     var self = this;
-    smalltalk.send(self, "_basicAt_put_", ["category", aString]);
+    self['@arguments'] = anArray;
     return self;
 }
 }),
-smalltalk.CompiledMethod);
+smalltalk.Message);
+
+smalltalk.addMethod(
+unescape('_printString'),
+smalltalk.method({
+selector: unescape('printString'),
+fn: function () {
+    var self = this;
+    return smalltalk.send(smalltalk.String || String, "_streamContents_", [function (aStream) {return function ($rec) {smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_printString", [], smalltalk.Object)]);smalltalk.send($rec, "_nextPutAll_", [unescape("%28")]);smalltalk.send($rec, "_nextPutAll_", [self['@selector']]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%29")]);}(aStream);}]);
+    return self;
+}
+}),
+smalltalk.Message);
 
 smalltalk.addMethod(
 unescape('_selector'),
@@ -479,11 +452,11 @@ smalltalk.method({
 selector: unescape('selector'),
 fn: function () {
     var self = this;
-    return smalltalk.send(self, "_basicAt_", ["selector"]);
+    return self['@selector'];
     return self;
 }
 }),
-smalltalk.CompiledMethod);
+smalltalk.Message);
 
 smalltalk.addMethod(
 unescape('_selector_'),
@@ -491,83 +464,110 @@ smalltalk.method({
 selector: unescape('selector%3A'),
 fn: function (aString) {
     var self = this;
-    smalltalk.send(self, "_basicAt_put_", ["selector", aString]);
+    self['@selector'] = aString;
     return self;
 }
 }),
-smalltalk.CompiledMethod);
+smalltalk.Message);
 
 smalltalk.addMethod(
-unescape('_fn'),
+unescape('_sendTo_'),
 smalltalk.method({
-selector: unescape('fn'),
+selector: unescape('sendTo%3A'),
+fn: function (anObject) {
+    var self = this;
+    smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_send_to_arguments_", [smalltalk.send(self, "_selector", []), anObject, smalltalk.send(self, "_arguments", [])]);
+    return self;
+}
+}),
+smalltalk.Message);
+
+
+smalltalk.addMethod(
+unescape('_selector_arguments_'),
+smalltalk.method({
+selector: unescape('selector%3Aarguments%3A'),
+fn: function (aString, anArray) {
+    var self = this;
+    return function ($rec) {smalltalk.send($rec, "_selector_", [aString]);smalltalk.send($rec, "_arguments_", [anArray]);return smalltalk.send($rec, "_yourself", []);}(smalltalk.send(self, "_new", []));
+    return self;
+}
+}),
+smalltalk.Message.klass);
+
+
+smalltalk.addClass('MethodContext', smalltalk.Object, [], 'Kernel-Methods');
+smalltalk.addMethod(
+unescape('_asString'),
+smalltalk.method({
+selector: unescape('asString'),
 fn: function () {
     var self = this;
-    return smalltalk.send(self, "_basicAt_", ["fn"]);
+    return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_receiver", []), "_class", []), "_printString", []), "__comma", [unescape("%20%3E%3E%20")]), "__comma", [smalltalk.send(self, "_selector", [])]);
     return self;
 }
 }),
-smalltalk.CompiledMethod);
+smalltalk.MethodContext);
 
 smalltalk.addMethod(
-unescape('_fn_'),
+unescape('_home'),
 smalltalk.method({
-selector: unescape('fn%3A'),
-fn: function (aBlock) {
+selector: unescape('home'),
+fn: function () {
     var self = this;
-    smalltalk.send(self, "_basicAt_put_", ["fn", aBlock]);
+    return self.homeContext;
     return self;
 }
 }),
-smalltalk.CompiledMethod);
+smalltalk.MethodContext);
 
 smalltalk.addMethod(
-unescape('_messageSends'),
+unescape('_printString'),
 smalltalk.method({
-selector: unescape('messageSends'),
+selector: unescape('printString'),
 fn: function () {
     var self = this;
-    return smalltalk.send(self, "_basicAt_", ["messageSends"]);
+    return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_printString", [], smalltalk.Object), "__comma", [unescape("%28")]), "__comma", [smalltalk.send(self, "_asString", [])]), "__comma", [unescape("%29")]);
     return self;
 }
 }),
-smalltalk.CompiledMethod);
+smalltalk.MethodContext);
 
 smalltalk.addMethod(
-unescape('_methodClass'),
+unescape('_receiver'),
 smalltalk.method({
-selector: unescape('methodClass'),
+selector: unescape('receiver'),
 fn: function () {
     var self = this;
-    return smalltalk.send(self, "_basicAt_", ["methodClass"]);
+    return self.receiver;
     return self;
 }
 }),
-smalltalk.CompiledMethod);
+smalltalk.MethodContext);
 
 smalltalk.addMethod(
-unescape('_referencedClasses'),
+unescape('_selector'),
 smalltalk.method({
-selector: unescape('referencedClasses'),
+selector: unescape('selector'),
 fn: function () {
     var self = this;
-    return smalltalk.send(self, "_basicAt_", ["referencedClasses"]);
+    return smalltalk.convertSelector(self.selector);
     return self;
 }
 }),
-smalltalk.CompiledMethod);
+smalltalk.MethodContext);
 
 smalltalk.addMethod(
-unescape('_arguments'),
+unescape('_temps'),
 smalltalk.method({
-selector: unescape('arguments'),
+selector: unescape('temps'),
 fn: function () {
     var self = this;
-    return self.args || [];
+    return self.temps;
     return self;
 }
 }),
-smalltalk.CompiledMethod);
+smalltalk.MethodContext);
 
 
 

+ 352 - 352
js/Kernel-Methods.js

@@ -1,287 +1,175 @@
 smalltalk.addPackage('Kernel-Methods', {});
-smalltalk.addClass('Message', smalltalk.Object, ['selector', 'arguments'], 'Kernel-Methods');
-smalltalk.Message.comment=unescape('Generally%2C%20the%20system%20does%20not%20use%20instances%20of%20Message%20for%20efficiency%20reasons.%0AHowever%2C%20when%20a%20message%20is%20not%20understood%20by%20its%20receiver%2C%20the%20interpreter%20will%20make%20up%20an%20instance%20of%20it%20in%20order%20to%20capture%20the%20information%20involved%20in%20an%20actual%20message%20transmission.%20%0AThis%20instance%20is%20sent%20it%20as%20an%20argument%20with%20the%20message%20%60doesNotUnderstand%3A%60%20to%20the%20receiver.%0A%0ASee%20boot.js%2C%20%60messageNotUnderstood%60%20%20and%20its%20counterpart%20%60Object%3E%3EdoesNotUnderstand%3A%60')
-smalltalk.addMethod(
-unescape('_selector'),
-smalltalk.method({
-selector: unescape('selector'),
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return self['@selector'];
-    return self;
-},
-args: [],
-source: unescape('selector%0A%09%5Eselector'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.Message);
-
-smalltalk.addMethod(
-unescape('_selector_'),
-smalltalk.method({
-selector: unescape('selector%3A'),
-category: 'accessing',
-fn: function (aString) {
-    var self = this;
-    self['@selector'] = aString;
-    return self;
-},
-args: ["aString"],
-source: unescape('selector%3A%20aString%0A%09selector%20%3A%3D%20aString'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.Message);
-
+smalltalk.addClass('BlockClosure', smalltalk.Object, [], 'Kernel-Methods');
+smalltalk.BlockClosure.comment=unescape('A%20BlockClosure%20is%20a%20lexical%20closure.%0AThe%20JavaScript%20representation%20is%20a%20function.%0A%0AA%20BlockClosure%20is%20evaluated%20with%20the%20%60%23value*%60%20methods%20in%20the%20%27evaluating%27%20protocol.')
 smalltalk.addMethod(
-unescape('_arguments_'),
+unescape('_applyTo_arguments_'),
 smalltalk.method({
-selector: unescape('arguments%3A'),
-category: 'accessing',
-fn: function (anArray) {
+selector: unescape('applyTo%3Aarguments%3A'),
+category: 'evaluating',
+fn: function (anObject, aCollection) {
     var self = this;
-    self['@arguments'] = anArray;
+    return self.apply(anObject, aCollection);
     return self;
 },
-args: ["anArray"],
-source: unescape('arguments%3A%20anArray%0A%09arguments%20%3A%3D%20anArray'),
+args: ["anObject", "aCollection"],
+source: unescape('applyTo%3A%20anObject%20arguments%3A%20aCollection%0A%09%3Creturn%20self.apply%28anObject%2C%20aCollection%29%3E'),
 messageSends: [],
 referencedClasses: []
 }),
-smalltalk.Message);
+smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-unescape('_arguments'),
+unescape('_compiledSource'),
 smalltalk.method({
-selector: unescape('arguments'),
+selector: unescape('compiledSource'),
 category: 'accessing',
 fn: function () {
     var self = this;
-    return self['@arguments'];
+    return self.toString();
     return self;
 },
 args: [],
-source: unescape('arguments%0A%09%5Earguments'),
+source: unescape('compiledSource%0A%09%3Creturn%20self.toString%28%29%3E'),
 messageSends: [],
 referencedClasses: []
 }),
-smalltalk.Message);
-
-smalltalk.addMethod(
-unescape('_printString'),
-smalltalk.method({
-selector: unescape('printString'),
-category: 'printing',
-fn: function () {
-    var self = this;
-    return smalltalk.send(smalltalk.String || String, "_streamContents_", [function (aStream) {return function ($rec) {smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_printString", [], smalltalk.Object)]);smalltalk.send($rec, "_nextPutAll_", [unescape("%28")]);smalltalk.send($rec, "_nextPutAll_", [self['@selector']]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%29")]);}(aStream);}]);
-    return self;
-},
-args: [],
-source: unescape('printString%0A%09%5E%20String%20streamContents%3A%20%5B%3AaStream%7C%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09aStream%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09nextPutAll%3A%20super%20printString%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09nextPutAll%3A%20%27%28%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09nextPutAll%3A%20selector%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09nextPutAll%3A%20%27%29%27%20%09%09%09%09%5D'),
-messageSends: ["streamContents:", "nextPutAll:", "printString"],
-referencedClasses: ["String"]
-}),
-smalltalk.Message);
-
-smalltalk.addMethod(
-unescape('_sendTo_'),
-smalltalk.method({
-selector: unescape('sendTo%3A'),
-category: 'printing',
-fn: function (anObject) {
-    var self = this;
-    smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_send_to_arguments_", [smalltalk.send(self, "_selector", []), anObject, smalltalk.send(self, "_arguments", [])]);
-    return self;
-},
-args: ["anObject"],
-source: unescape('sendTo%3A%20anObject%0A%09Smalltalk%20current%20send%3A%20self%20selector%20to%3A%20anObject%20arguments%3A%20self%20arguments'),
-messageSends: ["send:to:arguments:", "current", "selector", "arguments"],
-referencedClasses: ["Smalltalk"]
-}),
-smalltalk.Message);
-
+smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-unescape('_selector_arguments_'),
+unescape('_ensure_'),
 smalltalk.method({
-selector: unescape('selector%3Aarguments%3A'),
-category: 'instance creation',
-fn: function (aString, anArray) {
+selector: unescape('ensure%3A'),
+category: 'evaluating',
+fn: function (aBlock) {
     var self = this;
-    return function ($rec) {smalltalk.send($rec, "_selector_", [aString]);smalltalk.send($rec, "_arguments_", [anArray]);return smalltalk.send($rec, "_yourself", []);}(smalltalk.send(self, "_new", []));
+    var success = nil;
+    success = false;
+    return smalltalk.send(function () {smalltalk.send(self, "_value", []);success = true;return smalltalk.send(aBlock, "_value", []);}, "_on_do_", [smalltalk.Error || Error, function (ex) {($receiver = success).klass === smalltalk.Boolean ? !$receiver ? function () {return smalltalk.send(aBlock, "_value", []);}() : nil : smalltalk.send($receiver, "_ifFalse_", [function () {return smalltalk.send(aBlock, "_value", []);}]);return smalltalk.send(ex, "_signal", []);}]);
     return self;
 },
-args: ["aString", "anArray"],
-source: unescape('selector%3A%20aString%20arguments%3A%20anArray%0A%09%5Eself%20new%0A%09%09selector%3A%20aString%3B%0A%09%09arguments%3A%20anArray%3B%0A%09%09yourself'),
-messageSends: ["selector:", "arguments:", "yourself", "new"],
-referencedClasses: []
+args: ["aBlock"],
+source: unescape('ensure%3A%20aBlock%0A%09%7C%20success%20%7C%0A%09success%20%3A%3D%20false.%0A%09%5E%5Bself%20value.%20success%20%3A%3D%20true.%20aBlock%20value%5D%0A%09%09on%3A%20Error%0A%09%09do%3A%20%5B%3Aex%20%7C%0A%09%09%09success%20ifFalse%3A%20%5BaBlock%20value%5D.%0A%09%09%09ex%20signal%5D'),
+messageSends: ["on:do:", "value", "ifFalse:", "signal"],
+referencedClasses: ["Error"]
 }),
-smalltalk.Message.klass);
-
+smalltalk.BlockClosure);
 
-smalltalk.addClass('MethodContext', smalltalk.Object, [], 'Kernel-Methods');
-smalltalk.MethodContext.comment=unescape('MethodContext%20holds%20all%20the%20dynamic%20state%20associated%20with%20the%20execution%20of%20either%20a%20method%20activation%20resulting%20from%20a%20message%20send.%20That%20is%20used%20to%20build%20the%20call%20stack%20while%20debugging.%0A%20%20%0AMethodContext%20instances%20are%20JavaScript%20%60SmalltalkMethodContext%60%20objects%20defined%20in%20boot.js%20%0A%0ACurrent%20limitation%3A%20MethodContext%20instances%20are%20not%20created%20on%20Block%20evaluation.%20That%20means%20it%27s%20actually%20impossible%20to%20debug%20inside%20a%20Block.')
 smalltalk.addMethod(
-unescape('_receiver'),
+unescape('_new'),
 smalltalk.method({
-selector: unescape('receiver'),
-category: 'accessing',
+selector: unescape('new'),
+category: 'evaluating',
 fn: function () {
     var self = this;
-    return self.receiver;
+    return new self;
     return self;
 },
 args: [],
-source: unescape('receiver%0A%09%3Creturn%20self.receiver%3E'),
+source: unescape('new%0A%09%22Use%20the%20receiver%20as%20a%20JS%20constructor.%20%0A%09*Do%20not*%20use%20this%20method%20to%20instanciate%20Smalltalk%20objects%21%22%0A%09%3Creturn%20new%20self%28%29%3E'),
 messageSends: [],
 referencedClasses: []
 }),
-smalltalk.MethodContext);
+smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-unescape('_selector'),
+unescape('_newValue_'),
 smalltalk.method({
-selector: unescape('selector'),
-category: 'accessing',
-fn: function () {
+selector: unescape('newValue%3A'),
+category: 'evaluating',
+fn: function (anObject) {
     var self = this;
-    return smalltalk.convertSelector(self.selector);
+    return new self(anObject);
     return self;
 },
-args: [],
-source: unescape('selector%0A%09%3Creturn%20smalltalk.convertSelector%28self.selector%29%3E'),
+args: ["anObject"],
+source: unescape('newValue%3A%20anObject%0A%09%22Use%20the%20receiver%20as%20a%20JS%20constructor.%20%0A%09*Do%20not*%20use%20this%20method%20to%20instanciate%20Smalltalk%20objects%21%22%0A%09%3Creturn%20new%20self%28anObject%29%3E'),
 messageSends: [],
 referencedClasses: []
 }),
-smalltalk.MethodContext);
+smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-unescape('_home'),
+unescape('_newValue_value_'),
 smalltalk.method({
-selector: unescape('home'),
-category: 'accessing',
-fn: function () {
+selector: unescape('newValue%3Avalue%3A'),
+category: 'evaluating',
+fn: function (anObject, anObject2) {
     var self = this;
-    return self.homeContext;
+    return new self(anObject, anObject2);
     return self;
 },
-args: [],
-source: unescape('home%0A%09%3Creturn%20self.homeContext%3E'),
+args: ["anObject", "anObject2"],
+source: unescape('newValue%3A%20%20anObject%20value%3A%20anObject2%0A%09%22Use%20the%20receiver%20as%20a%20JS%20constructor.%20%0A%09*Do%20not*%20use%20this%20method%20to%20instanciate%20Smalltalk%20objects%21%22%0A%09%3Creturn%20new%20self%28anObject%2C%20anObject2%29%3E'),
 messageSends: [],
 referencedClasses: []
 }),
-smalltalk.MethodContext);
+smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-unescape('_temps'),
+unescape('_newValue_value_value_'),
 smalltalk.method({
-selector: unescape('temps'),
-category: 'accessing',
-fn: function () {
+selector: unescape('newValue%3Avalue%3Avalue%3A'),
+category: 'evaluating',
+fn: function (anObject, anObject2, anObject3) {
     var self = this;
-    return self.temps;
+    return new self(anObject, anObject2);
     return self;
 },
-args: [],
-source: unescape('temps%0A%09%3Creturn%20self.temps%3E'),
+args: ["anObject", "anObject2", "anObject3"],
+source: unescape('newValue%3A%20%20anObject%20value%3A%20anObject2%20value%3A%20anObject3%0A%09%22Use%20the%20receiver%20as%20a%20JS%20constructor.%20%0A%09*Do%20not*%20use%20this%20method%20to%20instanciate%20Smalltalk%20objects%21%22%0A%09%3Creturn%20new%20self%28anObject%2C%20anObject2%29%3E'),
 messageSends: [],
 referencedClasses: []
 }),
-smalltalk.MethodContext);
-
-smalltalk.addMethod(
-unescape('_printString'),
-smalltalk.method({
-selector: unescape('printString'),
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_printString", [], smalltalk.Object), "__comma", [unescape("%28")]), "__comma", [smalltalk.send(self, "_asString", [])]), "__comma", [unescape("%29")]);
-    return self;
-},
-args: [],
-source: unescape('printString%0A%09%5Esuper%20printString%2C%20%27%28%27%2C%20self%20asString%2C%20%27%29%27'),
-messageSends: [unescape("%2C"), "printString", "asString"],
-referencedClasses: []
-}),
-smalltalk.MethodContext);
-
-smalltalk.addMethod(
-unescape('_asString'),
-smalltalk.method({
-selector: unescape('asString'),
-category: 'accessing',
-fn: function () {
-    var self = this;
-    return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_receiver", []), "_class", []), "_printString", []), "__comma", [unescape("%20%3E%3E%20")]), "__comma", [smalltalk.send(self, "_selector", [])]);
-    return self;
-},
-args: [],
-source: unescape('asString%0A%09%5Eself%20receiver%20class%20printString%2C%20%27%20%3E%3E%20%27%2C%20self%20selector'),
-messageSends: [unescape("%2C"), "printString", "class", "receiver", "selector"],
-referencedClasses: []
-}),
-smalltalk.MethodContext);
-
-
+smalltalk.BlockClosure);
 
-smalltalk.addClass('BlockClosure', smalltalk.Object, [], 'Kernel-Methods');
-smalltalk.BlockClosure.comment=unescape('A%20BlockClosure%20is%20a%20lexical%20closure.%0AThe%20JavaScript%20representation%20is%20a%20function.%0A%0AA%20BlockClosure%20is%20evaluated%20with%20the%20%60%23value*%60%20methods%20in%20the%20%27evaluating%27%20protocol.')
 smalltalk.addMethod(
-unescape('_compiledSource'),
+unescape('_numArgs'),
 smalltalk.method({
-selector: unescape('compiledSource'),
+selector: unescape('numArgs'),
 category: 'accessing',
 fn: function () {
     var self = this;
-    return self.toString();
+    return self.length;
     return self;
 },
 args: [],
-source: unescape('compiledSource%0A%09%3Creturn%20self.toString%28%29%3E'),
+source: unescape('numArgs%0A%09%3Creturn%20self.length%3E'),
 messageSends: [],
 referencedClasses: []
 }),
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-unescape('_whileTrue_'),
+unescape('_on_do_'),
 smalltalk.method({
-selector: unescape('whileTrue%3A'),
-category: 'controlling',
-fn: function (aBlock) {
+selector: unescape('on%3Ado%3A'),
+category: 'error handling',
+fn: function (anErrorClass, aBlock) {
     var self = this;
-    while (self()) {
-        aBlock();
-    }
+    return smalltalk.send(self, "_try_catch_", [self, function (error) {return ($receiver = smalltalk.send(error, "_isKindOf_", [anErrorClass])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(aBlock, "_value_", [error]);}() : function () {return smalltalk.send(error, "_signal", []);}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return smalltalk.send(aBlock, "_value_", [error]);}, function () {return smalltalk.send(error, "_signal", []);}]);}]);
     return self;
 },
-args: ["aBlock"],
-source: unescape('whileTrue%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%3Cwhile%28self%28%29%29%20%7BaBlock%28%29%7D%3E'),
-messageSends: [],
+args: ["anErrorClass", "aBlock"],
+source: unescape('on%3A%20anErrorClass%20do%3A%20aBlock%0A%09%5Eself%20try%3A%20self%20catch%3A%20%5B%3Aerror%20%7C%0A%09%20%20%20%20%28error%20isKindOf%3A%20anErrorClass%29%20%0A%09%20%20%20%20%20ifTrue%3A%20%5BaBlock%20value%3A%20error%5D%0A%09%20%20%20%20%20ifFalse%3A%20%5Berror%20signal%5D%5D'),
+messageSends: ["try:catch:", "ifTrue:ifFalse:", "isKindOf:", "value:", "signal"],
 referencedClasses: []
 }),
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-unescape('_whileFalse_'),
+unescape('_timeToRun'),
 smalltalk.method({
-selector: unescape('whileFalse%3A'),
-category: 'controlling',
-fn: function (aBlock) {
+selector: unescape('timeToRun'),
+category: 'evaluating',
+fn: function () {
     var self = this;
-    while (!self()) {
-        aBlock();
-    }
+    return smalltalk.send(smalltalk.Date || Date, "_millisecondsToRun_", [self]);
     return self;
 },
-args: ["aBlock"],
-source: unescape('whileFalse%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%3Cwhile%28%21self%28%29%29%20%7BaBlock%28%29%7D%3E'),
-messageSends: [],
-referencedClasses: []
+args: [],
+source: unescape('timeToRun%0A%09%22Answer%20the%20number%20of%20milliseconds%20taken%20to%20execute%20this%20block.%22%0A%0A%09%5E%20Date%20millisecondsToRun%3A%20self'),
+messageSends: ["millisecondsToRun:"],
+referencedClasses: ["Date"]
 }),
 smalltalk.BlockClosure);
 
@@ -354,35 +242,35 @@ referencedClasses: []
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-unescape('_valueWithPossibleArguments_'),
+unescape('_valueWithInterval_'),
 smalltalk.method({
-selector: unescape('valueWithPossibleArguments%3A'),
-category: 'evaluating',
-fn: function (aCollection) {
+selector: unescape('valueWithInterval%3A'),
+category: 'timeout/interval',
+fn: function (aNumber) {
     var self = this;
-    return self.apply(null, aCollection);
+    return setInterval(self, aNumber);
     return self;
 },
-args: ["aCollection"],
-source: unescape('valueWithPossibleArguments%3A%20aCollection%0A%09%3Creturn%20self.apply%28null%2C%20aCollection%29%3B%3E'),
+args: ["aNumber"],
+source: unescape('valueWithInterval%3A%20aNumber%0A%09%3Creturn%20setInterval%28self%2C%20aNumber%29%3E'),
 messageSends: [],
 referencedClasses: []
 }),
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-unescape('_on_do_'),
+unescape('_valueWithPossibleArguments_'),
 smalltalk.method({
-selector: unescape('on%3Ado%3A'),
-category: 'error handling',
-fn: function (anErrorClass, aBlock) {
+selector: unescape('valueWithPossibleArguments%3A'),
+category: 'evaluating',
+fn: function (aCollection) {
     var self = this;
-    return smalltalk.send(self, "_try_catch_", [self, function (error) {return ($receiver = smalltalk.send(error, "_isKindOf_", [anErrorClass])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(aBlock, "_value_", [error]);}() : function () {return smalltalk.send(error, "_signal", []);}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return smalltalk.send(aBlock, "_value_", [error]);}, function () {return smalltalk.send(error, "_signal", []);}]);}]);
+    return self.apply(null, aCollection);
     return self;
 },
-args: ["anErrorClass", "aBlock"],
-source: unescape('on%3A%20anErrorClass%20do%3A%20aBlock%0A%09%5Eself%20try%3A%20self%20catch%3A%20%5B%3Aerror%20%7C%0A%09%20%20%20%20%28error%20isKindOf%3A%20anErrorClass%29%20%0A%09%20%20%20%20%20ifTrue%3A%20%5BaBlock%20value%3A%20error%5D%0A%09%20%20%20%20%20ifFalse%3A%20%5Berror%20signal%5D%5D'),
-messageSends: ["try:catch:", "ifTrue:ifFalse:", "isKindOf:", "value:", "signal"],
+args: ["aCollection"],
+source: unescape('valueWithPossibleArguments%3A%20aCollection%0A%09%3Creturn%20self.apply%28null%2C%20aCollection%29%3B%3E'),
+messageSends: [],
 referencedClasses: []
 }),
 smalltalk.BlockClosure);
@@ -405,35 +293,37 @@ referencedClasses: []
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-unescape('_valueWithInterval_'),
+unescape('_whileFalse'),
 smalltalk.method({
-selector: unescape('valueWithInterval%3A'),
-category: 'timeout/interval',
-fn: function (aNumber) {
+selector: unescape('whileFalse'),
+category: 'controlling',
+fn: function () {
     var self = this;
-    return setInterval(self, aNumber);
+    smalltalk.send(self, "_whileFalse_", [function () {return nil;}]);
     return self;
 },
-args: ["aNumber"],
-source: unescape('valueWithInterval%3A%20aNumber%0A%09%3Creturn%20setInterval%28self%2C%20aNumber%29%3E'),
-messageSends: [],
+args: [],
+source: unescape('whileFalse%0A%09%22inlined%20in%20the%20Compiler%22%0A%09self%20whileFalse%3A%20%5B%5D'),
+messageSends: ["whileFalse:"],
 referencedClasses: []
 }),
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-unescape('_whileFalse'),
+unescape('_whileFalse_'),
 smalltalk.method({
-selector: unescape('whileFalse'),
+selector: unescape('whileFalse%3A'),
 category: 'controlling',
-fn: function () {
+fn: function (aBlock) {
     var self = this;
-    smalltalk.send(self, "_whileFalse_", [function () {return nil;}]);
+    while (!self()) {
+        aBlock();
+    }
     return self;
 },
-args: [],
-source: unescape('whileFalse%0A%09%22inlined%20in%20the%20Compiler%22%0A%09self%20whileFalse%3A%20%5B%5D'),
-messageSends: ["whileFalse:"],
+args: ["aBlock"],
+source: unescape('whileFalse%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%3Cwhile%28%21self%28%29%29%20%7BaBlock%28%29%7D%3E'),
+messageSends: [],
 referencedClasses: []
 }),
 smalltalk.BlockClosure);
@@ -456,147 +346,199 @@ referencedClasses: []
 smalltalk.BlockClosure);
 
 smalltalk.addMethod(
-unescape('_new'),
+unescape('_whileTrue_'),
 smalltalk.method({
-selector: unescape('new'),
-category: 'evaluating',
-fn: function () {
+selector: unescape('whileTrue%3A'),
+category: 'controlling',
+fn: function (aBlock) {
     var self = this;
-    return new self;
+    while (self()) {
+        aBlock();
+    }
     return self;
 },
-args: [],
-source: unescape('new%0A%09%22Use%20the%20receiver%20as%20a%20JS%20constructor.%20%0A%09*Do%20not*%20use%20this%20method%20to%20instanciate%20Smalltalk%20objects%21%22%0A%09%3Creturn%20new%20self%28%29%3E'),
+args: ["aBlock"],
+source: unescape('whileTrue%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%3Cwhile%28self%28%29%29%20%7BaBlock%28%29%7D%3E'),
 messageSends: [],
 referencedClasses: []
 }),
 smalltalk.BlockClosure);
 
+
+
+smalltalk.addClass('CompiledMethod', smalltalk.Object, [], 'Kernel-Methods');
+smalltalk.CompiledMethod.comment=unescape('CompiledMethod%20hold%20the%20source%20and%20compiled%20code%20of%20a%20class%20method.%0A%0AYou%20can%20get%20a%20CompiledMethod%20using%20%60Behavior%3E%3EmethodAt%3A%60%0A%0A%09String%20methodAt%3A%20%27lines%27%0A%0Aand%20read%20the%20source%20code%0A%0A%09%28String%20methodAt%3A%20%27lines%27%29%20source%0A%0ASee%20referenced%20classes%3A%0A%0A%09%28String%20methodAt%3A%20%27lines%27%29%20referencedClasses%0A%0Aor%20messages%20sent%20from%20this%20method%3A%0A%09%0A%09%28String%20methodAt%3A%20%27lines%27%29%20%20messageSends')
 smalltalk.addMethod(
-unescape('_applyTo_arguments_'),
+unescape('_arguments'),
 smalltalk.method({
-selector: unescape('applyTo%3Aarguments%3A'),
-category: 'evaluating',
-fn: function (anObject, aCollection) {
+selector: unescape('arguments'),
+category: 'accessing',
+fn: function () {
     var self = this;
-    return self.apply(anObject, aCollection);
+    return self.args || [];
     return self;
 },
-args: ["anObject", "aCollection"],
-source: unescape('applyTo%3A%20anObject%20arguments%3A%20aCollection%0A%09%3Creturn%20self.apply%28anObject%2C%20aCollection%29%3E'),
+args: [],
+source: unescape('arguments%0A%09%3Creturn%20self.args%20%7C%7C%20%5B%5D%3E'),
 messageSends: [],
 referencedClasses: []
 }),
-smalltalk.BlockClosure);
+smalltalk.CompiledMethod);
 
 smalltalk.addMethod(
-unescape('_timeToRun'),
+unescape('_category'),
 smalltalk.method({
-selector: unescape('timeToRun'),
-category: 'evaluating',
+selector: unescape('category'),
+category: 'accessing',
 fn: function () {
     var self = this;
-    return smalltalk.send(smalltalk.Date || Date, "_millisecondsToRun_", [self]);
+    return ($receiver = smalltalk.send(self, "_basicAt_", ["category"])) == nil ||
+        $receiver == undefined ? function () {return "";}() : $receiver;
     return self;
 },
 args: [],
-source: unescape('timeToRun%0A%09%22Answer%20the%20number%20of%20milliseconds%20taken%20to%20execute%20this%20block.%22%0A%0A%09%5E%20Date%20millisecondsToRun%3A%20self'),
-messageSends: ["millisecondsToRun:"],
-referencedClasses: ["Date"]
+source: unescape('category%0A%09%5E%28self%20basicAt%3A%20%27category%27%29%20ifNil%3A%20%5B%27%27%5D'),
+messageSends: ["ifNil:", "basicAt:"],
+referencedClasses: []
 }),
-smalltalk.BlockClosure);
+smalltalk.CompiledMethod);
 
 smalltalk.addMethod(
-unescape('_numArgs'),
+unescape('_category_'),
 smalltalk.method({
-selector: unescape('numArgs'),
+selector: unescape('category%3A'),
+category: 'accessing',
+fn: function (aString) {
+    var self = this;
+    smalltalk.send(self, "_basicAt_put_", ["category", aString]);
+    return self;
+},
+args: ["aString"],
+source: unescape('category%3A%20aString%0A%09self%20basicAt%3A%20%27category%27%20put%3A%20aString'),
+messageSends: ["basicAt:put:"],
+referencedClasses: []
+}),
+smalltalk.CompiledMethod);
+
+smalltalk.addMethod(
+unescape('_fn'),
+smalltalk.method({
+selector: unescape('fn'),
 category: 'accessing',
 fn: function () {
     var self = this;
-    return self.length;
+    return smalltalk.send(self, "_basicAt_", ["fn"]);
     return self;
 },
 args: [],
-source: unescape('numArgs%0A%09%3Creturn%20self.length%3E'),
-messageSends: [],
+source: unescape('fn%0A%09%5Eself%20basicAt%3A%20%27fn%27'),
+messageSends: ["basicAt:"],
 referencedClasses: []
 }),
-smalltalk.BlockClosure);
+smalltalk.CompiledMethod);
 
 smalltalk.addMethod(
-unescape('_ensure_'),
+unescape('_fn_'),
+smalltalk.method({
+selector: unescape('fn%3A'),
+category: 'accessing',
+fn: function (aBlock) {
+    var self = this;
+    smalltalk.send(self, "_basicAt_put_", ["fn", aBlock]);
+    return self;
+},
+args: ["aBlock"],
+source: unescape('fn%3A%20aBlock%0A%09self%20basicAt%3A%20%27fn%27%20put%3A%20aBlock'),
+messageSends: ["basicAt:put:"],
+referencedClasses: []
+}),
+smalltalk.CompiledMethod);
+
+smalltalk.addMethod(
+unescape('_messageSends'),
+smalltalk.method({
+selector: unescape('messageSends'),
+category: 'accessing',
+fn: function () {
+    var self = this;
+    return smalltalk.send(self, "_basicAt_", ["messageSends"]);
+    return self;
+},
+args: [],
+source: unescape('messageSends%0A%09%5Eself%20basicAt%3A%20%27messageSends%27'),
+messageSends: ["basicAt:"],
+referencedClasses: []
+}),
+smalltalk.CompiledMethod);
+
+smalltalk.addMethod(
+unescape('_methodClass'),
 smalltalk.method({
-selector: unescape('ensure%3A'),
-category: 'evaluating',
-fn: function (aBlock) {
+selector: unescape('methodClass'),
+category: 'accessing',
+fn: function () {
     var self = this;
-    var success = nil;
-    success = false;
-    return smalltalk.send(function () {smalltalk.send(self, "_value", []);success = true;return smalltalk.send(aBlock, "_value", []);}, "_on_do_", [smalltalk.Error || Error, function (ex) {($receiver = success).klass === smalltalk.Boolean ? !$receiver ? function () {return smalltalk.send(aBlock, "_value", []);}() : nil : smalltalk.send($receiver, "_ifFalse_", [function () {return smalltalk.send(aBlock, "_value", []);}]);return smalltalk.send(ex, "_signal", []);}]);
+    return smalltalk.send(self, "_basicAt_", ["methodClass"]);
     return self;
 },
-args: ["aBlock"],
-source: unescape('ensure%3A%20aBlock%0A%09%7C%20success%20%7C%0A%09success%20%3A%3D%20false.%0A%09%5E%5Bself%20value.%20success%20%3A%3D%20true.%20aBlock%20value%5D%0A%09%09on%3A%20Error%0A%09%09do%3A%20%5B%3Aex%20%7C%0A%09%09%09success%20ifFalse%3A%20%5BaBlock%20value%5D.%0A%09%09%09ex%20signal%5D'),
-messageSends: ["on:do:", "value", "ifFalse:", "signal"],
-referencedClasses: ["Error"]
+args: [],
+source: unescape('methodClass%0A%09%5Eself%20basicAt%3A%20%27methodClass%27'),
+messageSends: ["basicAt:"],
+referencedClasses: []
 }),
-smalltalk.BlockClosure);
+smalltalk.CompiledMethod);
 
 smalltalk.addMethod(
-unescape('_newValue_'),
+unescape('_referencedClasses'),
 smalltalk.method({
-selector: unescape('newValue%3A'),
-category: 'evaluating',
-fn: function (anObject) {
+selector: unescape('referencedClasses'),
+category: 'accessing',
+fn: function () {
     var self = this;
-    return new self(anObject);
+    return smalltalk.send(self, "_basicAt_", ["referencedClasses"]);
     return self;
 },
-args: ["anObject"],
-source: unescape('newValue%3A%20anObject%0A%09%22Use%20the%20receiver%20as%20a%20JS%20constructor.%20%0A%09*Do%20not*%20use%20this%20method%20to%20instanciate%20Smalltalk%20objects%21%22%0A%09%3Creturn%20new%20self%28anObject%29%3E'),
-messageSends: [],
+args: [],
+source: unescape('referencedClasses%0A%09%5Eself%20basicAt%3A%20%27referencedClasses%27'),
+messageSends: ["basicAt:"],
 referencedClasses: []
 }),
-smalltalk.BlockClosure);
+smalltalk.CompiledMethod);
 
 smalltalk.addMethod(
-unescape('_newValue_value_'),
+unescape('_selector'),
 smalltalk.method({
-selector: unescape('newValue%3Avalue%3A'),
-category: 'evaluating',
-fn: function (anObject, anObject2) {
+selector: unescape('selector'),
+category: 'accessing',
+fn: function () {
     var self = this;
-    return new self(anObject, anObject2);
+    return smalltalk.send(self, "_basicAt_", ["selector"]);
     return self;
 },
-args: ["anObject", "anObject2"],
-source: unescape('newValue%3A%20%20anObject%20value%3A%20anObject2%0A%09%22Use%20the%20receiver%20as%20a%20JS%20constructor.%20%0A%09*Do%20not*%20use%20this%20method%20to%20instanciate%20Smalltalk%20objects%21%22%0A%09%3Creturn%20new%20self%28anObject%2C%20anObject2%29%3E'),
-messageSends: [],
+args: [],
+source: unescape('selector%0A%09%5Eself%20basicAt%3A%20%27selector%27'),
+messageSends: ["basicAt:"],
 referencedClasses: []
 }),
-smalltalk.BlockClosure);
+smalltalk.CompiledMethod);
 
 smalltalk.addMethod(
-unescape('_newValue_value_value_'),
+unescape('_selector_'),
 smalltalk.method({
-selector: unescape('newValue%3Avalue%3Avalue%3A'),
-category: 'evaluating',
-fn: function (anObject, anObject2, anObject3) {
+selector: unescape('selector%3A'),
+category: 'accessing',
+fn: function (aString) {
     var self = this;
-    return new self(anObject, anObject2);
+    smalltalk.send(self, "_basicAt_put_", ["selector", aString]);
     return self;
 },
-args: ["anObject", "anObject2", "anObject3"],
-source: unescape('newValue%3A%20%20anObject%20value%3A%20anObject2%20value%3A%20anObject3%0A%09%22Use%20the%20receiver%20as%20a%20JS%20constructor.%20%0A%09*Do%20not*%20use%20this%20method%20to%20instanciate%20Smalltalk%20objects%21%22%0A%09%3Creturn%20new%20self%28anObject%2C%20anObject2%29%3E'),
-messageSends: [],
+args: ["aString"],
+source: unescape('selector%3A%20aString%0A%09self%20basicAt%3A%20%27selector%27%20put%3A%20aString'),
+messageSends: ["basicAt:put:"],
 referencedClasses: []
 }),
-smalltalk.BlockClosure);
-
-
+smalltalk.CompiledMethod);
 
-smalltalk.addClass('CompiledMethod', smalltalk.Object, [], 'Kernel-Methods');
-smalltalk.CompiledMethod.comment=unescape('CompiledMethod%20hold%20the%20source%20and%20compiled%20code%20of%20a%20class%20method.%0A%0AYou%20can%20get%20a%20CompiledMethod%20using%20%60Behavior%3E%3EmethodAt%3A%60%0A%0A%09String%20methodAt%3A%20%27lines%27%0A%0Aand%20read%20the%20source%20code%0A%0A%09%28String%20methodAt%3A%20%27lines%27%29%20source%0A%0ASee%20referenced%20classes%3A%0A%0A%09%28String%20methodAt%3A%20%27lines%27%29%20referencedClasses%0A%0Aor%20messages%20sent%20from%20this%20method%3A%0A%09%0A%09%28String%20methodAt%3A%20%27lines%27%29%20%20messageSends')
 smalltalk.addMethod(
 unescape('_source'),
 smalltalk.method({
@@ -632,40 +574,60 @@ referencedClasses: []
 }),
 smalltalk.CompiledMethod);
 
+
+
+smalltalk.addClass('Message', smalltalk.Object, ['selector', 'arguments'], 'Kernel-Methods');
+smalltalk.Message.comment=unescape('Generally%2C%20the%20system%20does%20not%20use%20instances%20of%20Message%20for%20efficiency%20reasons.%0AHowever%2C%20when%20a%20message%20is%20not%20understood%20by%20its%20receiver%2C%20the%20interpreter%20will%20make%20up%20an%20instance%20of%20it%20in%20order%20to%20capture%20the%20information%20involved%20in%20an%20actual%20message%20transmission.%20%0AThis%20instance%20is%20sent%20it%20as%20an%20argument%20with%20the%20message%20%60doesNotUnderstand%3A%60%20to%20the%20receiver.%0A%0ASee%20boot.js%2C%20%60messageNotUnderstood%60%20%20and%20its%20counterpart%20%60Object%3E%3EdoesNotUnderstand%3A%60')
 smalltalk.addMethod(
-unescape('_category'),
+unescape('_arguments'),
 smalltalk.method({
-selector: unescape('category'),
+selector: unescape('arguments'),
 category: 'accessing',
 fn: function () {
     var self = this;
-    return ($receiver = smalltalk.send(self, "_basicAt_", ["category"])) == nil ||
-        $receiver == undefined ? function () {return "";}() : $receiver;
+    return self['@arguments'];
     return self;
 },
 args: [],
-source: unescape('category%0A%09%5E%28self%20basicAt%3A%20%27category%27%29%20ifNil%3A%20%5B%27%27%5D'),
-messageSends: ["ifNil:", "basicAt:"],
+source: unescape('arguments%0A%09%5Earguments'),
+messageSends: [],
 referencedClasses: []
 }),
-smalltalk.CompiledMethod);
+smalltalk.Message);
 
 smalltalk.addMethod(
-unescape('_category_'),
+unescape('_arguments_'),
 smalltalk.method({
-selector: unescape('category%3A'),
+selector: unescape('arguments%3A'),
 category: 'accessing',
-fn: function (aString) {
+fn: function (anArray) {
     var self = this;
-    smalltalk.send(self, "_basicAt_put_", ["category", aString]);
+    self['@arguments'] = anArray;
     return self;
 },
-args: ["aString"],
-source: unescape('category%3A%20aString%0A%09self%20basicAt%3A%20%27category%27%20put%3A%20aString'),
-messageSends: ["basicAt:put:"],
+args: ["anArray"],
+source: unescape('arguments%3A%20anArray%0A%09arguments%20%3A%3D%20anArray'),
+messageSends: [],
 referencedClasses: []
 }),
-smalltalk.CompiledMethod);
+smalltalk.Message);
+
+smalltalk.addMethod(
+unescape('_printString'),
+smalltalk.method({
+selector: unescape('printString'),
+category: 'printing',
+fn: function () {
+    var self = this;
+    return smalltalk.send(smalltalk.String || String, "_streamContents_", [function (aStream) {return function ($rec) {smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_printString", [], smalltalk.Object)]);smalltalk.send($rec, "_nextPutAll_", [unescape("%28")]);smalltalk.send($rec, "_nextPutAll_", [self['@selector']]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%29")]);}(aStream);}]);
+    return self;
+},
+args: [],
+source: unescape('printString%0A%09%5E%20String%20streamContents%3A%20%5B%3AaStream%7C%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09aStream%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09nextPutAll%3A%20super%20printString%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09nextPutAll%3A%20%27%28%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09nextPutAll%3A%20selector%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09nextPutAll%3A%20%27%29%27%20%09%09%09%09%5D'),
+messageSends: ["streamContents:", "nextPutAll:", "printString"],
+referencedClasses: ["String"]
+}),
+smalltalk.Message);
 
 smalltalk.addMethod(
 unescape('_selector'),
@@ -674,15 +636,15 @@ selector: unescape('selector'),
 category: 'accessing',
 fn: function () {
     var self = this;
-    return smalltalk.send(self, "_basicAt_", ["selector"]);
+    return self['@selector'];
     return self;
 },
 args: [],
-source: unescape('selector%0A%09%5Eself%20basicAt%3A%20%27selector%27'),
-messageSends: ["basicAt:"],
+source: unescape('selector%0A%09%5Eselector'),
+messageSends: [],
 referencedClasses: []
 }),
-smalltalk.CompiledMethod);
+smalltalk.Message);
 
 smalltalk.addMethod(
 unescape('_selector_'),
@@ -691,117 +653,155 @@ selector: unescape('selector%3A'),
 category: 'accessing',
 fn: function (aString) {
     var self = this;
-    smalltalk.send(self, "_basicAt_put_", ["selector", aString]);
+    self['@selector'] = aString;
     return self;
 },
 args: ["aString"],
-source: unescape('selector%3A%20aString%0A%09self%20basicAt%3A%20%27selector%27%20put%3A%20aString'),
-messageSends: ["basicAt:put:"],
+source: unescape('selector%3A%20aString%0A%09selector%20%3A%3D%20aString'),
+messageSends: [],
 referencedClasses: []
 }),
-smalltalk.CompiledMethod);
+smalltalk.Message);
 
 smalltalk.addMethod(
-unescape('_fn'),
+unescape('_sendTo_'),
 smalltalk.method({
-selector: unescape('fn'),
+selector: unescape('sendTo%3A'),
+category: 'printing',
+fn: function (anObject) {
+    var self = this;
+    smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_send_to_arguments_", [smalltalk.send(self, "_selector", []), anObject, smalltalk.send(self, "_arguments", [])]);
+    return self;
+},
+args: ["anObject"],
+source: unescape('sendTo%3A%20anObject%0A%09Smalltalk%20current%20send%3A%20self%20selector%20to%3A%20anObject%20arguments%3A%20self%20arguments'),
+messageSends: ["send:to:arguments:", "current", "selector", "arguments"],
+referencedClasses: ["Smalltalk"]
+}),
+smalltalk.Message);
+
+
+smalltalk.addMethod(
+unescape('_selector_arguments_'),
+smalltalk.method({
+selector: unescape('selector%3Aarguments%3A'),
+category: 'instance creation',
+fn: function (aString, anArray) {
+    var self = this;
+    return function ($rec) {smalltalk.send($rec, "_selector_", [aString]);smalltalk.send($rec, "_arguments_", [anArray]);return smalltalk.send($rec, "_yourself", []);}(smalltalk.send(self, "_new", []));
+    return self;
+},
+args: ["aString", "anArray"],
+source: unescape('selector%3A%20aString%20arguments%3A%20anArray%0A%09%5Eself%20new%0A%09%09selector%3A%20aString%3B%0A%09%09arguments%3A%20anArray%3B%0A%09%09yourself'),
+messageSends: ["selector:", "arguments:", "yourself", "new"],
+referencedClasses: []
+}),
+smalltalk.Message.klass);
+
+
+smalltalk.addClass('MethodContext', smalltalk.Object, [], 'Kernel-Methods');
+smalltalk.MethodContext.comment=unescape('MethodContext%20holds%20all%20the%20dynamic%20state%20associated%20with%20the%20execution%20of%20either%20a%20method%20activation%20resulting%20from%20a%20message%20send.%20That%20is%20used%20to%20build%20the%20call%20stack%20while%20debugging.%0A%20%20%0AMethodContext%20instances%20are%20JavaScript%20%60SmalltalkMethodContext%60%20objects%20defined%20in%20boot.js%20%0A%0ACurrent%20limitation%3A%20MethodContext%20instances%20are%20not%20created%20on%20Block%20evaluation.%20That%20means%20it%27s%20actually%20impossible%20to%20debug%20inside%20a%20Block.')
+smalltalk.addMethod(
+unescape('_asString'),
+smalltalk.method({
+selector: unescape('asString'),
 category: 'accessing',
 fn: function () {
     var self = this;
-    return smalltalk.send(self, "_basicAt_", ["fn"]);
+    return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_receiver", []), "_class", []), "_printString", []), "__comma", [unescape("%20%3E%3E%20")]), "__comma", [smalltalk.send(self, "_selector", [])]);
     return self;
 },
 args: [],
-source: unescape('fn%0A%09%5Eself%20basicAt%3A%20%27fn%27'),
-messageSends: ["basicAt:"],
+source: unescape('asString%0A%09%5Eself%20receiver%20class%20printString%2C%20%27%20%3E%3E%20%27%2C%20self%20selector'),
+messageSends: [unescape("%2C"), "printString", "class", "receiver", "selector"],
 referencedClasses: []
 }),
-smalltalk.CompiledMethod);
+smalltalk.MethodContext);
 
 smalltalk.addMethod(
-unescape('_fn_'),
+unescape('_home'),
 smalltalk.method({
-selector: unescape('fn%3A'),
+selector: unescape('home'),
 category: 'accessing',
-fn: function (aBlock) {
+fn: function () {
     var self = this;
-    smalltalk.send(self, "_basicAt_put_", ["fn", aBlock]);
+    return self.homeContext;
     return self;
 },
-args: ["aBlock"],
-source: unescape('fn%3A%20aBlock%0A%09self%20basicAt%3A%20%27fn%27%20put%3A%20aBlock'),
-messageSends: ["basicAt:put:"],
+args: [],
+source: unescape('home%0A%09%3Creturn%20self.homeContext%3E'),
+messageSends: [],
 referencedClasses: []
 }),
-smalltalk.CompiledMethod);
+smalltalk.MethodContext);
 
 smalltalk.addMethod(
-unescape('_messageSends'),
+unescape('_printString'),
 smalltalk.method({
-selector: unescape('messageSends'),
+selector: unescape('printString'),
 category: 'accessing',
 fn: function () {
     var self = this;
-    return smalltalk.send(self, "_basicAt_", ["messageSends"]);
+    return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_printString", [], smalltalk.Object), "__comma", [unescape("%28")]), "__comma", [smalltalk.send(self, "_asString", [])]), "__comma", [unescape("%29")]);
     return self;
 },
 args: [],
-source: unescape('messageSends%0A%09%5Eself%20basicAt%3A%20%27messageSends%27'),
-messageSends: ["basicAt:"],
+source: unescape('printString%0A%09%5Esuper%20printString%2C%20%27%28%27%2C%20self%20asString%2C%20%27%29%27'),
+messageSends: [unescape("%2C"), "printString", "asString"],
 referencedClasses: []
 }),
-smalltalk.CompiledMethod);
+smalltalk.MethodContext);
 
 smalltalk.addMethod(
-unescape('_methodClass'),
+unescape('_receiver'),
 smalltalk.method({
-selector: unescape('methodClass'),
+selector: unescape('receiver'),
 category: 'accessing',
 fn: function () {
     var self = this;
-    return smalltalk.send(self, "_basicAt_", ["methodClass"]);
+    return self.receiver;
     return self;
 },
 args: [],
-source: unescape('methodClass%0A%09%5Eself%20basicAt%3A%20%27methodClass%27'),
-messageSends: ["basicAt:"],
+source: unescape('receiver%0A%09%3Creturn%20self.receiver%3E'),
+messageSends: [],
 referencedClasses: []
 }),
-smalltalk.CompiledMethod);
+smalltalk.MethodContext);
 
 smalltalk.addMethod(
-unescape('_referencedClasses'),
+unescape('_selector'),
 smalltalk.method({
-selector: unescape('referencedClasses'),
+selector: unescape('selector'),
 category: 'accessing',
 fn: function () {
     var self = this;
-    return smalltalk.send(self, "_basicAt_", ["referencedClasses"]);
+    return smalltalk.convertSelector(self.selector);
     return self;
 },
 args: [],
-source: unescape('referencedClasses%0A%09%5Eself%20basicAt%3A%20%27referencedClasses%27'),
-messageSends: ["basicAt:"],
+source: unescape('selector%0A%09%3Creturn%20smalltalk.convertSelector%28self.selector%29%3E'),
+messageSends: [],
 referencedClasses: []
 }),
-smalltalk.CompiledMethod);
+smalltalk.MethodContext);
 
 smalltalk.addMethod(
-unescape('_arguments'),
+unescape('_temps'),
 smalltalk.method({
-selector: unescape('arguments'),
+selector: unescape('temps'),
 category: 'accessing',
 fn: function () {
     var self = this;
-    return self.args || [];
+    return self.temps;
     return self;
 },
 args: [],
-source: unescape('arguments%0A%09%3Creturn%20self.args%20%7C%7C%20%5B%5D%3E'),
+source: unescape('temps%0A%09%3Creturn%20self.temps%3E'),
 messageSends: [],
 referencedClasses: []
 }),
-smalltalk.CompiledMethod);
+smalltalk.MethodContext);
 
 
 

Plik diff jest za duży
+ 541 - 429
js/Kernel-Tests.deploy.js


Plik diff jest za duży
+ 509 - 620
js/Kernel-Tests.js


+ 57 - 57
js/Kernel-Transcript.deploy.js

@@ -1,66 +1,71 @@
 smalltalk.addPackage('Kernel-Transcript', {});
-smalltalk.addClass('Transcript', smalltalk.Object, ['textarea'], 'Kernel-Transcript');
-
-smalltalk.Transcript.klass.iVarNames = ['current'];
+smalltalk.addClass('ConsoleTranscript', smalltalk.Object, ['textarea'], 'Kernel-Transcript');
 smalltalk.addMethod(
-'_open',
+unescape('_clear'),
 smalltalk.method({
-selector: 'open',
+selector: unescape('clear'),
 fn: function (){
 var self=this;
-smalltalk.send(smalltalk.send(self, "_current", []), "_open", []);
+
 return self;}
 }),
-smalltalk.Transcript.klass);
+smalltalk.ConsoleTranscript);
 
 smalltalk.addMethod(
-'_new',
+unescape('_cr'),
 smalltalk.method({
-selector: 'new',
+selector: unescape('cr'),
 fn: function (){
 var self=this;
-smalltalk.send(self, "_shouldNotImplement", []);
+
 return self;}
 }),
-smalltalk.Transcript.klass);
+smalltalk.ConsoleTranscript);
 
 smalltalk.addMethod(
-'_current',
+unescape('_open'),
 smalltalk.method({
-selector: 'current',
+selector: unescape('open'),
 fn: function (){
 var self=this;
-return self['@current'];
+
 return self;}
 }),
-smalltalk.Transcript.klass);
+smalltalk.ConsoleTranscript);
 
 smalltalk.addMethod(
-'_show_',
+unescape('_show_'),
 smalltalk.method({
-selector: 'show:',
+selector: unescape('show%3A'),
 fn: function (anObject){
 var self=this;
-smalltalk.send(smalltalk.send(self, "_current", []), "_show_", [anObject]);
+var string=nil;
+(string=smalltalk.send(anObject, "_asString", []));
+console.log(String(string));
 return self;}
 }),
-smalltalk.Transcript.klass);
+smalltalk.ConsoleTranscript);
+
 
 smalltalk.addMethod(
-'_cr',
+unescape('_initialize'),
 smalltalk.method({
-selector: 'cr',
+selector: unescape('initialize'),
 fn: function (){
 var self=this;
-smalltalk.send(smalltalk.send(self, "_current", []), "_show_", [smalltalk.send((smalltalk.String || String), "_cr", [])]);
+smalltalk.send((smalltalk.Transcript || Transcript), "_register_", [smalltalk.send(self, "_new", [])]);
 return self;}
 }),
-smalltalk.Transcript.klass);
+smalltalk.ConsoleTranscript.klass);
+
+
+smalltalk.addClass('Transcript', smalltalk.Object, ['textarea'], 'Kernel-Transcript');
 
+smalltalk.Transcript.klass.iVarNames = ['current'];
 smalltalk.addMethod(
-'_clear',
+unescape('_clear'),
 smalltalk.method({
-selector: 'clear',
+selector: unescape('clear'),
 fn: function (){
 var self=this;
 smalltalk.send(smalltalk.send(self, "_current", []), "_clear", []);
@@ -69,74 +74,69 @@ return self;}
 smalltalk.Transcript.klass);
 
 smalltalk.addMethod(
-'_register_',
+unescape('_cr'),
 smalltalk.method({
-selector: 'register:',
-fn: function (aTranscript){
+selector: unescape('cr'),
+fn: function (){
 var self=this;
-(self['@current']=aTranscript);
+smalltalk.send(smalltalk.send(self, "_current", []), "_show_", [smalltalk.send((smalltalk.String || String), "_cr", [])]);
 return self;}
 }),
 smalltalk.Transcript.klass);
 
-
-smalltalk.addClass('ConsoleTranscript', smalltalk.Object, ['textarea'], 'Kernel-Transcript');
 smalltalk.addMethod(
-'_clear',
+unescape('_current'),
 smalltalk.method({
-selector: 'clear',
+selector: unescape('current'),
 fn: function (){
 var self=this;
-
+return self['@current'];
 return self;}
 }),
-smalltalk.ConsoleTranscript);
+smalltalk.Transcript.klass);
 
 smalltalk.addMethod(
-'_cr',
+unescape('_new'),
 smalltalk.method({
-selector: 'cr',
+selector: unescape('new'),
 fn: function (){
 var self=this;
-
+smalltalk.send(self, "_shouldNotImplement", []);
 return self;}
 }),
-smalltalk.ConsoleTranscript);
+smalltalk.Transcript.klass);
 
 smalltalk.addMethod(
-'_show_',
+unescape('_open'),
 smalltalk.method({
-selector: 'show:',
-fn: function (anObject){
+selector: unescape('open'),
+fn: function (){
 var self=this;
-var string=nil;
-(string=smalltalk.send(anObject, "_asString", []));
-console.log(String(string));
+smalltalk.send(smalltalk.send(self, "_current", []), "_open", []);
 return self;}
 }),
-smalltalk.ConsoleTranscript);
+smalltalk.Transcript.klass);
 
 smalltalk.addMethod(
-'_open',
+unescape('_register_'),
 smalltalk.method({
-selector: 'open',
-fn: function (){
+selector: unescape('register%3A'),
+fn: function (aTranscript){
 var self=this;
-
+(self['@current']=aTranscript);
 return self;}
 }),
-smalltalk.ConsoleTranscript);
-
+smalltalk.Transcript.klass);
 
 smalltalk.addMethod(
-'_initialize',
+unescape('_show_'),
 smalltalk.method({
-selector: 'initialize',
-fn: function (){
+selector: unescape('show%3A'),
+fn: function (anObject){
 var self=this;
-smalltalk.send((smalltalk.Transcript || Transcript), "_register_", [smalltalk.send(self, "_new", [])]);
+smalltalk.send(smalltalk.send(self, "_current", []), "_show_", [anObject]);
 return self;}
 }),
-smalltalk.ConsoleTranscript.klass);
+smalltalk.Transcript.klass);
 
 

+ 89 - 89
js/Kernel-Transcript.js

@@ -1,54 +1,52 @@
 smalltalk.addPackage('Kernel-Transcript', {});
-smalltalk.addClass('Transcript', smalltalk.Object, ['textarea'], 'Kernel-Transcript');
-
-smalltalk.Transcript.klass.iVarNames = ['current'];
+smalltalk.addClass('ConsoleTranscript', smalltalk.Object, ['textarea'], 'Kernel-Transcript');
 smalltalk.addMethod(
-unescape('_open'),
+unescape('_clear'),
 smalltalk.method({
-selector: unescape('open'),
-category: 'instance creation',
+selector: unescape('clear'),
+category: 'printing',
 fn: function (){
 var self=this;
-smalltalk.send(smalltalk.send(self, "_current", []), "_open", []);
+
 return self;},
 args: [],
-source: unescape('open%0A%20%20%20%20self%20current%20open'),
-messageSends: ["open", "current"],
+source: unescape('clear%0A%09%22no%20op%22'),
+messageSends: [],
 referencedClasses: []
 }),
-smalltalk.Transcript.klass);
+smalltalk.ConsoleTranscript);
 
 smalltalk.addMethod(
-unescape('_new'),
+unescape('_cr'),
 smalltalk.method({
-selector: unescape('new'),
-category: 'instance creation',
+selector: unescape('cr'),
+category: 'printing',
 fn: function (){
 var self=this;
-smalltalk.send(self, "_shouldNotImplement", []);
+
 return self;},
 args: [],
-source: unescape('new%0A%20%20%20%20self%20shouldNotImplement'),
-messageSends: ["shouldNotImplement"],
+source: unescape('cr%0A%09%22no%20op%22'),
+messageSends: [],
 referencedClasses: []
 }),
-smalltalk.Transcript.klass);
+smalltalk.ConsoleTranscript);
 
 smalltalk.addMethod(
-unescape('_current'),
+unescape('_open'),
 smalltalk.method({
-selector: unescape('current'),
-category: 'instance creation',
+selector: unescape('open'),
+category: 'actions',
 fn: function (){
 var self=this;
-return self['@current'];
+
 return self;},
 args: [],
-source: unescape('current%0A%20%20%20%20%5Ecurrent'),
+source: unescape('open'),
 messageSends: [],
 referencedClasses: []
 }),
-smalltalk.Transcript.klass);
+smalltalk.ConsoleTranscript);
 
 smalltalk.addMethod(
 unescape('_show_'),
@@ -57,31 +55,38 @@ selector: unescape('show%3A'),
 category: 'printing',
 fn: function (anObject){
 var self=this;
-smalltalk.send(smalltalk.send(self, "_current", []), "_show_", [anObject]);
+var string=nil;
+(string=smalltalk.send(anObject, "_asString", []));
+console.log(String(string));
 return self;},
 args: ["anObject"],
-source: unescape('show%3A%20anObject%0A%20%20%20%20self%20current%20show%3A%20anObject'),
-messageSends: ["show:", "current"],
+source: unescape('show%3A%20anObject%0A%09%7C%20string%20%7C%0A%09string%20%3A%3D%20anObject%20asString.%0A%09%3Cconsole.log%28String%28string%29%29%3E'),
+messageSends: ["asString"],
 referencedClasses: []
 }),
-smalltalk.Transcript.klass);
+smalltalk.ConsoleTranscript);
+
 
 smalltalk.addMethod(
-unescape('_cr'),
+unescape('_initialize'),
 smalltalk.method({
-selector: unescape('cr'),
-category: 'printing',
+selector: unescape('initialize'),
+category: 'initialization',
 fn: function (){
 var self=this;
-smalltalk.send(smalltalk.send(self, "_current", []), "_show_", [smalltalk.send((smalltalk.String || String), "_cr", [])]);
+smalltalk.send((smalltalk.Transcript || Transcript), "_register_", [smalltalk.send(self, "_new", [])]);
 return self;},
 args: [],
-source: unescape('cr%0A%20%20%20%20self%20current%20show%3A%20String%20cr'),
-messageSends: ["show:", "current", "cr"],
-referencedClasses: ["String"]
+source: unescape('initialize%0A%09Transcript%20register%3A%20self%20new'),
+messageSends: ["register:", "new"],
+referencedClasses: ["Transcript"]
 }),
-smalltalk.Transcript.klass);
+smalltalk.ConsoleTranscript.klass);
+
 
+smalltalk.addClass('Transcript', smalltalk.Object, ['textarea'], 'Kernel-Transcript');
+
+smalltalk.Transcript.klass.iVarNames = ['current'];
 smalltalk.addMethod(
 unescape('_clear'),
 smalltalk.method({
@@ -99,104 +104,99 @@ referencedClasses: []
 smalltalk.Transcript.klass);
 
 smalltalk.addMethod(
-unescape('_register_'),
+unescape('_cr'),
 smalltalk.method({
-selector: unescape('register%3A'),
-category: 'instance creation',
-fn: function (aTranscript){
+selector: unescape('cr'),
+category: 'printing',
+fn: function (){
 var self=this;
-(self['@current']=aTranscript);
+smalltalk.send(smalltalk.send(self, "_current", []), "_show_", [smalltalk.send((smalltalk.String || String), "_cr", [])]);
 return self;},
-args: ["aTranscript"],
-source: unescape('register%3A%20aTranscript%0A%09current%20%3A%3D%20aTranscript'),
-messageSends: [],
-referencedClasses: []
+args: [],
+source: unescape('cr%0A%20%20%20%20self%20current%20show%3A%20String%20cr'),
+messageSends: ["show:", "current", "cr"],
+referencedClasses: ["String"]
 }),
 smalltalk.Transcript.klass);
 
-
-smalltalk.addClass('ConsoleTranscript', smalltalk.Object, ['textarea'], 'Kernel-Transcript');
 smalltalk.addMethod(
-unescape('_clear'),
+unescape('_current'),
 smalltalk.method({
-selector: unescape('clear'),
-category: 'printing',
+selector: unescape('current'),
+category: 'instance creation',
 fn: function (){
 var self=this;
-
+return self['@current'];
 return self;},
 args: [],
-source: unescape('clear%0A%09%22no%20op%22'),
+source: unescape('current%0A%20%20%20%20%5Ecurrent'),
 messageSends: [],
 referencedClasses: []
 }),
-smalltalk.ConsoleTranscript);
+smalltalk.Transcript.klass);
 
 smalltalk.addMethod(
-unescape('_cr'),
+unescape('_new'),
 smalltalk.method({
-selector: unescape('cr'),
-category: 'printing',
+selector: unescape('new'),
+category: 'instance creation',
 fn: function (){
 var self=this;
-
+smalltalk.send(self, "_shouldNotImplement", []);
 return self;},
 args: [],
-source: unescape('cr%0A%09%22no%20op%22'),
-messageSends: [],
+source: unescape('new%0A%20%20%20%20self%20shouldNotImplement'),
+messageSends: ["shouldNotImplement"],
 referencedClasses: []
 }),
-smalltalk.ConsoleTranscript);
+smalltalk.Transcript.klass);
 
 smalltalk.addMethod(
-unescape('_show_'),
+unescape('_open'),
 smalltalk.method({
-selector: unescape('show%3A'),
-category: 'printing',
-fn: function (anObject){
+selector: unescape('open'),
+category: 'instance creation',
+fn: function (){
 var self=this;
-var string=nil;
-(string=smalltalk.send(anObject, "_asString", []));
-console.log(String(string));
+smalltalk.send(smalltalk.send(self, "_current", []), "_open", []);
 return self;},
-args: ["anObject"],
-source: unescape('show%3A%20anObject%0A%09%7C%20string%20%7C%0A%09string%20%3A%3D%20anObject%20asString.%0A%09%3Cconsole.log%28String%28string%29%29%3E'),
-messageSends: ["asString"],
+args: [],
+source: unescape('open%0A%20%20%20%20self%20current%20open'),
+messageSends: ["open", "current"],
 referencedClasses: []
 }),
-smalltalk.ConsoleTranscript);
+smalltalk.Transcript.klass);
 
 smalltalk.addMethod(
-unescape('_open'),
+unescape('_register_'),
 smalltalk.method({
-selector: unescape('open'),
-category: 'actions',
-fn: function (){
+selector: unescape('register%3A'),
+category: 'instance creation',
+fn: function (aTranscript){
 var self=this;
-
+(self['@current']=aTranscript);
 return self;},
-args: [],
-source: unescape('open'),
+args: ["aTranscript"],
+source: unescape('register%3A%20aTranscript%0A%09current%20%3A%3D%20aTranscript'),
 messageSends: [],
 referencedClasses: []
 }),
-smalltalk.ConsoleTranscript);
-
+smalltalk.Transcript.klass);
 
 smalltalk.addMethod(
-unescape('_initialize'),
+unescape('_show_'),
 smalltalk.method({
-selector: unescape('initialize'),
-category: 'initialization',
-fn: function (){
+selector: unescape('show%3A'),
+category: 'printing',
+fn: function (anObject){
 var self=this;
-smalltalk.send((smalltalk.Transcript || Transcript), "_register_", [smalltalk.send(self, "_new", [])]);
+smalltalk.send(smalltalk.send(self, "_current", []), "_show_", [anObject]);
 return self;},
-args: [],
-source: unescape('initialize%0A%09Transcript%20register%3A%20self%20new'),
-messageSends: ["register:", "new"],
-referencedClasses: ["Transcript"]
+args: ["anObject"],
+source: unescape('show%3A%20anObject%0A%20%20%20%20self%20current%20show%3A%20anObject'),
+messageSends: ["show:", "current"],
+referencedClasses: []
 }),
-smalltalk.ConsoleTranscript.klass);
+smalltalk.Transcript.klass);
 
 

+ 112 - 112
js/SUnit.deploy.js

@@ -1,56 +1,56 @@
 smalltalk.addPackage('SUnit', {});
 smalltalk.addClass('TestCase', smalltalk.Object, ['testSelector'], 'SUnit');
 smalltalk.addMethod(
-unescape('_setTestSelector_'),
+unescape('_assert_'),
 smalltalk.method({
-selector: unescape('setTestSelector%3A'),
-fn: function (aSelector){
+selector: unescape('assert%3A'),
+fn: function (aBoolean){
 var self=this;
-(self['@testSelector']=aSelector);
+smalltalk.send(self, "_assert_description_", [aBoolean, "Assertion failed"]);
 return self;}
 }),
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-unescape('_selector'),
+unescape('_assert_description_'),
 smalltalk.method({
-selector: unescape('selector'),
-fn: function (){
+selector: unescape('assert%3Adescription%3A'),
+fn: function (aBoolean, aString){
 var self=this;
-return self['@testSelector'];
+((($receiver = aBoolean).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_signalFailure_", [aString]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_signalFailure_", [aString]);})]));
 return self;}
 }),
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-unescape('_signalFailure_'),
+unescape('_assert_equals_'),
 smalltalk.method({
-selector: unescape('signalFailure%3A'),
-fn: function (aString){
+selector: unescape('assert%3Aequals%3A'),
+fn: function (expected, actual){
 var self=this;
-(function($rec){smalltalk.send($rec, "_messageText_", [aString]);return smalltalk.send($rec, "_signal", []);})(smalltalk.send((smalltalk.TestFailure || TestFailure), "_new", []));
+return smalltalk.send(self, "_assert_description_", [smalltalk.send(expected, "__eq", [actual]), smalltalk.send(smalltalk.send(smalltalk.send("Expected: ", "__comma", [smalltalk.send(expected, "_asString", [])]), "__comma", [" but was: "]), "__comma", [smalltalk.send(actual, "_asString", [])])]);
 return self;}
 }),
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-unescape('_setUp'),
+unescape('_deny_'),
 smalltalk.method({
-selector: unescape('setUp'),
-fn: function (){
+selector: unescape('deny%3A'),
+fn: function (aBoolean){
 var self=this;
-
+smalltalk.send(self, "_assert_", [smalltalk.send(aBoolean, "_not", [])]);
 return self;}
 }),
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-unescape('_tearDown'),
+unescape('_performTestFor_'),
 smalltalk.method({
-selector: unescape('tearDown'),
-fn: function (){
+selector: unescape('performTestFor%3A'),
+fn: function (aResult){
 var self=this;
-
+smalltalk.send((function(){return smalltalk.send((function(){return smalltalk.send(self, "_perform_", [smalltalk.send(self, "_selector", [])]);}), "_on_do_", [(smalltalk.TestFailure || TestFailure), (function(ex){return smalltalk.send(aResult, "_addFailure_", [self]);})]);}), "_on_do_", [(smalltalk.Error || Error), (function(ex){return smalltalk.send(aResult, "_addError_", [self]);})]);
 return self;}
 }),
 smalltalk.TestCase);
@@ -70,101 +70,104 @@ return self;}
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-unescape('_performTestFor_'),
+unescape('_selector'),
 smalltalk.method({
-selector: unescape('performTestFor%3A'),
-fn: function (aResult){
+selector: unescape('selector'),
+fn: function (){
 var self=this;
-smalltalk.send((function(){return smalltalk.send((function(){return smalltalk.send(self, "_perform_", [smalltalk.send(self, "_selector", [])]);}), "_on_do_", [(smalltalk.TestFailure || TestFailure), (function(ex){return smalltalk.send(aResult, "_addFailure_", [self]);})]);}), "_on_do_", [(smalltalk.Error || Error), (function(ex){return smalltalk.send(aResult, "_addError_", [self]);})]);
+return self['@testSelector'];
 return self;}
 }),
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-unescape('_assert_'),
+unescape('_setTestSelector_'),
 smalltalk.method({
-selector: unescape('assert%3A'),
-fn: function (aBoolean){
+selector: unescape('setTestSelector%3A'),
+fn: function (aSelector){
 var self=this;
-smalltalk.send(self, "_assert_description_", [aBoolean, "Assertion failed"]);
+(self['@testSelector']=aSelector);
 return self;}
 }),
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-unescape('_deny_'),
+unescape('_setUp'),
 smalltalk.method({
-selector: unescape('deny%3A'),
-fn: function (aBoolean){
+selector: unescape('setUp'),
+fn: function (){
 var self=this;
-smalltalk.send(self, "_assert_", [smalltalk.send(aBoolean, "_not", [])]);
+
 return self;}
 }),
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-unescape('_assert_equals_'),
+unescape('_should_'),
 smalltalk.method({
-selector: unescape('assert%3Aequals%3A'),
-fn: function (expected, actual){
+selector: unescape('should%3A'),
+fn: function (aBlock){
 var self=this;
-return smalltalk.send(self, "_assert_description_", [smalltalk.send(expected, "__eq", [actual]), smalltalk.send(smalltalk.send(smalltalk.send("Expected: ", "__comma", [smalltalk.send(expected, "_asString", [])]), "__comma", [" but was: "]), "__comma", [smalltalk.send(actual, "_asString", [])])]);
+smalltalk.send(self, "_assert_", [smalltalk.send(aBlock, "_value", [])]);
 return self;}
 }),
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-unescape('_assert_description_'),
+unescape('_should_raise_'),
 smalltalk.method({
-selector: unescape('assert%3Adescription%3A'),
-fn: function (aBoolean, aString){
+selector: unescape('should%3Araise%3A'),
+fn: function (aBlock, anExceptionClass){
 var self=this;
-((($receiver = aBoolean).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_signalFailure_", [aString]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_signalFailure_", [aString]);})]));
+smalltalk.send(self, "_assert_", [smalltalk.send((function(){smalltalk.send(aBlock, "_value", []);return false;}), "_on_do_", [anExceptionClass, (function(ex){return true;})])]);
 return self;}
 }),
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-unescape('_should_'),
+unescape('_signalFailure_'),
 smalltalk.method({
-selector: unescape('should%3A'),
-fn: function (aBlock){
+selector: unescape('signalFailure%3A'),
+fn: function (aString){
 var self=this;
-smalltalk.send(self, "_assert_", [smalltalk.send(aBlock, "_value", [])]);
+(function($rec){smalltalk.send($rec, "_messageText_", [aString]);return smalltalk.send($rec, "_signal", []);})(smalltalk.send((smalltalk.TestFailure || TestFailure), "_new", []));
 return self;}
 }),
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-unescape('_should_raise_'),
+unescape('_tearDown'),
 smalltalk.method({
-selector: unescape('should%3Araise%3A'),
-fn: function (aBlock, anExceptionClass){
+selector: unescape('tearDown'),
+fn: function (){
 var self=this;
-smalltalk.send(self, "_assert_", [smalltalk.send((function(){smalltalk.send(aBlock, "_value", []);return false;}), "_on_do_", [anExceptionClass, (function(ex){return true;})])]);
+
 return self;}
 }),
 smalltalk.TestCase);
 
 
 smalltalk.addMethod(
-unescape('_testSelectors'),
+unescape('_allTestSelectors'),
 smalltalk.method({
-selector: unescape('testSelectors'),
+selector: unescape('allTestSelectors'),
 fn: function (){
 var self=this;
-return smalltalk.send(smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_keys", []), "_select_", [(function(each){return smalltalk.send(each, "_match_", [unescape("%5Etest")]);})]);
+var selectors=nil;
+(selectors=smalltalk.send(self, "_testSelectors", []));
+((($receiver = smalltalk.send(self, "_shouldInheritSelectors", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(selectors, "_addAll_", [smalltalk.send(smalltalk.send(self, "_superclass", []), "_allTestSelectors", [])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(selectors, "_addAll_", [smalltalk.send(smalltalk.send(self, "_superclass", []), "_allTestSelectors", [])]);})]));
+return selectors;
 return self;}
 }),
 smalltalk.TestCase.klass);
 
 smalltalk.addMethod(
-unescape('_selector_'),
+unescape('_buildSuite'),
 smalltalk.method({
-selector: unescape('selector%3A'),
-fn: function (aSelector){
+selector: unescape('buildSuite'),
+fn: function (){
 var self=this;
-return (function($rec){smalltalk.send($rec, "_setTestSelector_", [aSelector]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
+return smalltalk.send(smalltalk.send(self, "_allTestSelectors", []), "_collect_", [(function(each){return smalltalk.send(self, "_selector_", [each]);})]);
 return self;}
 }),
 smalltalk.TestCase.klass);
@@ -181,37 +184,34 @@ return self;}
 smalltalk.TestCase.klass);
 
 smalltalk.addMethod(
-unescape('_allTestSelectors'),
+unescape('_selector_'),
 smalltalk.method({
-selector: unescape('allTestSelectors'),
-fn: function (){
+selector: unescape('selector%3A'),
+fn: function (aSelector){
 var self=this;
-var selectors=nil;
-(selectors=smalltalk.send(self, "_testSelectors", []));
-((($receiver = smalltalk.send(self, "_shouldInheritSelectors", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(selectors, "_addAll_", [smalltalk.send(smalltalk.send(self, "_superclass", []), "_allTestSelectors", [])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(selectors, "_addAll_", [smalltalk.send(smalltalk.send(self, "_superclass", []), "_allTestSelectors", [])]);})]));
-return selectors;
+return (function($rec){smalltalk.send($rec, "_setTestSelector_", [aSelector]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
 return self;}
 }),
 smalltalk.TestCase.klass);
 
 smalltalk.addMethod(
-unescape('_buildSuite'),
+unescape('_shouldInheritSelectors'),
 smalltalk.method({
-selector: unescape('buildSuite'),
+selector: unescape('shouldInheritSelectors'),
 fn: function (){
 var self=this;
-return smalltalk.send(smalltalk.send(self, "_allTestSelectors", []), "_collect_", [(function(each){return smalltalk.send(self, "_selector_", [each]);})]);
+return smalltalk.send(self, "_~_eq", [smalltalk.send(self, "_lookupHierarchyRoot", [])]);
 return self;}
 }),
 smalltalk.TestCase.klass);
 
 smalltalk.addMethod(
-unescape('_shouldInheritSelectors'),
+unescape('_testSelectors'),
 smalltalk.method({
-selector: unescape('shouldInheritSelectors'),
+selector: unescape('testSelectors'),
 fn: function (){
 var self=this;
-return smalltalk.send(self, "_~_eq", [smalltalk.send(self, "_lookupHierarchyRoot", [])]);
+return smalltalk.send(smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_keys", []), "_select_", [(function(each){return smalltalk.send(each, "_match_", [unescape("%5Etest")]);})]);
 return self;}
 }),
 smalltalk.TestCase.klass);
@@ -222,127 +222,127 @@ smalltalk.addClass('TestFailure', smalltalk.Error, [], 'SUnit');
 
 smalltalk.addClass('TestResult', smalltalk.Object, ['timestamp', 'runs', 'errors', 'failures', 'total'], 'SUnit');
 smalltalk.addMethod(
-unescape('_timestamp'),
+unescape('_addError_'),
 smalltalk.method({
-selector: unescape('timestamp'),
-fn: function (){
+selector: unescape('addError%3A'),
+fn: function (anError){
 var self=this;
-return self['@timestamp'];
+smalltalk.send(smalltalk.send(self, "_errors", []), "_add_", [anError]);
 return self;}
 }),
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-unescape('_errors'),
+unescape('_addFailure_'),
 smalltalk.method({
-selector: unescape('errors'),
-fn: function (){
+selector: unescape('addFailure%3A'),
+fn: function (aFailure){
 var self=this;
-return self['@errors'];
+smalltalk.send(smalltalk.send(self, "_failures", []), "_add_", [aFailure]);
 return self;}
 }),
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-unescape('_failures'),
+unescape('_errors'),
 smalltalk.method({
-selector: unescape('failures'),
+selector: unescape('errors'),
 fn: function (){
 var self=this;
-return self['@failures'];
+return self['@errors'];
 return self;}
 }),
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-unescape('_total'),
+unescape('_failures'),
 smalltalk.method({
-selector: unescape('total'),
+selector: unescape('failures'),
 fn: function (){
 var self=this;
-return self['@total'];
+return self['@failures'];
 return self;}
 }),
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-unescape('_total_'),
+unescape('_increaseRuns'),
 smalltalk.method({
-selector: unescape('total%3A'),
-fn: function (aNumber){
+selector: unescape('increaseRuns'),
+fn: function (){
 var self=this;
-(self['@total']=aNumber);
+(self['@runs']=((($receiver = self['@runs']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));
 return self;}
 }),
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-unescape('_addError_'),
+unescape('_initialize'),
 smalltalk.method({
-selector: unescape('addError%3A'),
-fn: function (anError){
+selector: unescape('initialize'),
+fn: function (){
 var self=this;
-smalltalk.send(smalltalk.send(self, "_errors", []), "_add_", [anError]);
+smalltalk.send(self, "_initialize", [], smalltalk.Object);
+(self['@timestamp']=smalltalk.send((smalltalk.Date || Date), "_now", []));
+(self['@runs']=(0));
+(self['@errors']=smalltalk.send((smalltalk.Array || Array), "_new", []));
+(self['@failures']=smalltalk.send((smalltalk.Array || Array), "_new", []));
+(self['@total']=(0));
 return self;}
 }),
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-unescape('_addFailure_'),
+unescape('_runs'),
 smalltalk.method({
-selector: unescape('addFailure%3A'),
-fn: function (aFailure){
+selector: unescape('runs'),
+fn: function (){
 var self=this;
-smalltalk.send(smalltalk.send(self, "_failures", []), "_add_", [aFailure]);
+return self['@runs'];
 return self;}
 }),
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-unescape('_runs'),
+unescape('_status'),
 smalltalk.method({
-selector: unescape('runs'),
+selector: unescape('status'),
 fn: function (){
 var self=this;
-return self['@runs'];
+return ((($receiver = smalltalk.send(smalltalk.send(self, "_errors", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_failures", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "success";})() : (function(){return "failure";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "success";}), (function(){return "failure";})]));})() : (function(){return "error";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_failures", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "success";})() : (function(){return "failure";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "success";}), (function(){return "failure";})]));}), (function(){return "error";})]));
 return self;}
 }),
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-unescape('_increaseRuns'),
+unescape('_timestamp'),
 smalltalk.method({
-selector: unescape('increaseRuns'),
+selector: unescape('timestamp'),
 fn: function (){
 var self=this;
-(self['@runs']=((($receiver = self['@runs']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));
+return self['@timestamp'];
 return self;}
 }),
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-unescape('_status'),
+unescape('_total'),
 smalltalk.method({
-selector: unescape('status'),
+selector: unescape('total'),
 fn: function (){
 var self=this;
-return ((($receiver = smalltalk.send(smalltalk.send(self, "_errors", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_failures", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "success";})() : (function(){return "failure";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "success";}), (function(){return "failure";})]));})() : (function(){return "error";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_failures", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "success";})() : (function(){return "failure";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "success";}), (function(){return "failure";})]));}), (function(){return "error";})]));
+return self['@total'];
 return self;}
 }),
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-unescape('_initialize'),
+unescape('_total_'),
 smalltalk.method({
-selector: unescape('initialize'),
-fn: function (){
+selector: unescape('total%3A'),
+fn: function (aNumber){
 var self=this;
-smalltalk.send(self, "_initialize", [], smalltalk.Object);
-(self['@timestamp']=smalltalk.send((smalltalk.Date || Date), "_now", []));
-(self['@runs']=(0));
-(self['@errors']=smalltalk.send((smalltalk.Array || Array), "_new", []));
-(self['@failures']=smalltalk.send((smalltalk.Array || Array), "_new", []));
-(self['@total']=(0));
+(self['@total']=aNumber);
 return self;}
 }),
 smalltalk.TestResult);

+ 202 - 202
js/SUnit.js

@@ -1,82 +1,82 @@
 smalltalk.addPackage('SUnit', {});
 smalltalk.addClass('TestCase', smalltalk.Object, ['testSelector'], 'SUnit');
 smalltalk.addMethod(
-unescape('_setTestSelector_'),
+unescape('_assert_'),
 smalltalk.method({
-selector: unescape('setTestSelector%3A'),
-category: 'accessing',
-fn: function (aSelector){
+selector: unescape('assert%3A'),
+category: 'testing',
+fn: function (aBoolean){
 var self=this;
-(self['@testSelector']=aSelector);
+smalltalk.send(self, "_assert_description_", [aBoolean, "Assertion failed"]);
 return self;},
-args: ["aSelector"],
-source: unescape('setTestSelector%3A%20aSelector%0A%09testSelector%20%3A%3D%20aSelector'),
-messageSends: [],
+args: ["aBoolean"],
+source: unescape('assert%3A%20aBoolean%0A%09self%20assert%3A%20aBoolean%20description%3A%20%27Assertion%20failed%27'),
+messageSends: ["assert:description:"],
 referencedClasses: []
 }),
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-unescape('_selector'),
+unescape('_assert_description_'),
 smalltalk.method({
-selector: unescape('selector'),
-category: 'accessing',
-fn: function (){
+selector: unescape('assert%3Adescription%3A'),
+category: 'testing',
+fn: function (aBoolean, aString){
 var self=this;
-return self['@testSelector'];
+((($receiver = aBoolean).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_signalFailure_", [aString]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_signalFailure_", [aString]);})]));
 return self;},
-args: [],
-source: unescape('selector%0A%09%5EtestSelector'),
-messageSends: [],
+args: ["aBoolean", "aString"],
+source: unescape('assert%3A%20aBoolean%20description%3A%20aString%0A%09aBoolean%20ifFalse%3A%20%5Bself%20signalFailure%3A%20aString%5D'),
+messageSends: ["ifFalse:", "signalFailure:"],
 referencedClasses: []
 }),
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-unescape('_signalFailure_'),
+unescape('_assert_equals_'),
 smalltalk.method({
-selector: unescape('signalFailure%3A'),
-category: 'private',
-fn: function (aString){
+selector: unescape('assert%3Aequals%3A'),
+category: 'testing',
+fn: function (expected, actual){
 var self=this;
-(function($rec){smalltalk.send($rec, "_messageText_", [aString]);return smalltalk.send($rec, "_signal", []);})(smalltalk.send((smalltalk.TestFailure || TestFailure), "_new", []));
+return smalltalk.send(self, "_assert_description_", [smalltalk.send(expected, "__eq", [actual]), smalltalk.send(smalltalk.send(smalltalk.send("Expected: ", "__comma", [smalltalk.send(expected, "_asString", [])]), "__comma", [" but was: "]), "__comma", [smalltalk.send(actual, "_asString", [])])]);
 return self;},
-args: ["aString"],
-source: unescape('signalFailure%3A%20aString%0A%09TestFailure%20new%0A%09%09messageText%3A%20aString%3B%0A%09%09signal'),
-messageSends: ["messageText:", "signal", "new"],
-referencedClasses: ["TestFailure"]
+args: ["expected", "actual"],
+source: unescape('assert%3A%20expected%20equals%3A%20actual%0A%09%5E%20self%20assert%3A%20%28expected%20%3D%20actual%29%20description%3A%20%27Expected%3A%20%27%2C%20expected%20asString%2C%20%27%20but%20was%3A%20%27%2C%20actual%20asString'),
+messageSends: ["assert:description:", unescape("%3D"), unescape("%2C"), "asString"],
+referencedClasses: []
 }),
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-unescape('_setUp'),
+unescape('_deny_'),
 smalltalk.method({
-selector: unescape('setUp'),
-category: 'running',
-fn: function (){
+selector: unescape('deny%3A'),
+category: 'testing',
+fn: function (aBoolean){
 var self=this;
-
+smalltalk.send(self, "_assert_", [smalltalk.send(aBoolean, "_not", [])]);
 return self;},
-args: [],
-source: unescape('setUp'),
-messageSends: [],
+args: ["aBoolean"],
+source: unescape('deny%3A%20aBoolean%0A%09self%20assert%3A%20aBoolean%20not'),
+messageSends: ["assert:", "not"],
 referencedClasses: []
 }),
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-unescape('_tearDown'),
+unescape('_performTestFor_'),
 smalltalk.method({
-selector: unescape('tearDown'),
+selector: unescape('performTestFor%3A'),
 category: 'running',
-fn: function (){
+fn: function (aResult){
 var self=this;
-
+smalltalk.send((function(){return smalltalk.send((function(){return smalltalk.send(self, "_perform_", [smalltalk.send(self, "_selector", [])]);}), "_on_do_", [(smalltalk.TestFailure || TestFailure), (function(ex){return smalltalk.send(aResult, "_addFailure_", [self]);})]);}), "_on_do_", [(smalltalk.Error || Error), (function(ex){return smalltalk.send(aResult, "_addError_", [self]);})]);
 return self;},
-args: [],
-source: unescape('tearDown'),
-messageSends: [],
-referencedClasses: []
+args: ["aResult"],
+source: unescape('performTestFor%3A%20aResult%0A%09%5B%5Bself%20perform%3A%20self%20selector%5D%0A%09%09on%3A%20TestFailure%20do%3A%20%5B%3Aex%20%7C%20aResult%20addFailure%3A%20self%5D%5D%0A%09%09on%3A%20Error%20do%3A%20%5B%3Aex%20%7C%20aResult%20addError%3A%20self%5D'),
+messageSends: ["on:do:", "perform:", "selector", "addFailure:", "addError:"],
+referencedClasses: ["TestFailure", "Error"]
 }),
 smalltalk.TestCase);
 
@@ -100,81 +100,49 @@ referencedClasses: []
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-unescape('_performTestFor_'),
-smalltalk.method({
-selector: unescape('performTestFor%3A'),
-category: 'running',
-fn: function (aResult){
-var self=this;
-smalltalk.send((function(){return smalltalk.send((function(){return smalltalk.send(self, "_perform_", [smalltalk.send(self, "_selector", [])]);}), "_on_do_", [(smalltalk.TestFailure || TestFailure), (function(ex){return smalltalk.send(aResult, "_addFailure_", [self]);})]);}), "_on_do_", [(smalltalk.Error || Error), (function(ex){return smalltalk.send(aResult, "_addError_", [self]);})]);
-return self;},
-args: ["aResult"],
-source: unescape('performTestFor%3A%20aResult%0A%09%5B%5Bself%20perform%3A%20self%20selector%5D%0A%09%09on%3A%20TestFailure%20do%3A%20%5B%3Aex%20%7C%20aResult%20addFailure%3A%20self%5D%5D%0A%09%09on%3A%20Error%20do%3A%20%5B%3Aex%20%7C%20aResult%20addError%3A%20self%5D'),
-messageSends: ["on:do:", "perform:", "selector", "addFailure:", "addError:"],
-referencedClasses: ["TestFailure", "Error"]
-}),
-smalltalk.TestCase);
-
-smalltalk.addMethod(
-unescape('_assert_'),
+unescape('_selector'),
 smalltalk.method({
-selector: unescape('assert%3A'),
-category: 'testing',
-fn: function (aBoolean){
+selector: unescape('selector'),
+category: 'accessing',
+fn: function (){
 var self=this;
-smalltalk.send(self, "_assert_description_", [aBoolean, "Assertion failed"]);
+return self['@testSelector'];
 return self;},
-args: ["aBoolean"],
-source: unescape('assert%3A%20aBoolean%0A%09self%20assert%3A%20aBoolean%20description%3A%20%27Assertion%20failed%27'),
-messageSends: ["assert:description:"],
+args: [],
+source: unescape('selector%0A%09%5EtestSelector'),
+messageSends: [],
 referencedClasses: []
 }),
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-unescape('_deny_'),
+unescape('_setTestSelector_'),
 smalltalk.method({
-selector: unescape('deny%3A'),
-category: 'testing',
-fn: function (aBoolean){
+selector: unescape('setTestSelector%3A'),
+category: 'accessing',
+fn: function (aSelector){
 var self=this;
-smalltalk.send(self, "_assert_", [smalltalk.send(aBoolean, "_not", [])]);
+(self['@testSelector']=aSelector);
 return self;},
-args: ["aBoolean"],
-source: unescape('deny%3A%20aBoolean%0A%09self%20assert%3A%20aBoolean%20not'),
-messageSends: ["assert:", "not"],
+args: ["aSelector"],
+source: unescape('setTestSelector%3A%20aSelector%0A%09testSelector%20%3A%3D%20aSelector'),
+messageSends: [],
 referencedClasses: []
 }),
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-unescape('_assert_equals_'),
+unescape('_setUp'),
 smalltalk.method({
-selector: unescape('assert%3Aequals%3A'),
-category: 'testing',
-fn: function (expected, actual){
+selector: unescape('setUp'),
+category: 'running',
+fn: function (){
 var self=this;
-return smalltalk.send(self, "_assert_description_", [smalltalk.send(expected, "__eq", [actual]), smalltalk.send(smalltalk.send(smalltalk.send("Expected: ", "__comma", [smalltalk.send(expected, "_asString", [])]), "__comma", [" but was: "]), "__comma", [smalltalk.send(actual, "_asString", [])])]);
-return self;},
-args: ["expected", "actual"],
-source: unescape('assert%3A%20expected%20equals%3A%20actual%0A%09%5E%20self%20assert%3A%20%28expected%20%3D%20actual%29%20description%3A%20%27Expected%3A%20%27%2C%20expected%20asString%2C%20%27%20but%20was%3A%20%27%2C%20actual%20asString'),
-messageSends: ["assert:description:", unescape("%3D"), unescape("%2C"), "asString"],
-referencedClasses: []
-}),
-smalltalk.TestCase);
 
-smalltalk.addMethod(
-unescape('_assert_description_'),
-smalltalk.method({
-selector: unescape('assert%3Adescription%3A'),
-category: 'testing',
-fn: function (aBoolean, aString){
-var self=this;
-((($receiver = aBoolean).klass === smalltalk.Boolean) ? (! $receiver ? (function(){return smalltalk.send(self, "_signalFailure_", [aString]);})() : nil) : smalltalk.send($receiver, "_ifFalse_", [(function(){return smalltalk.send(self, "_signalFailure_", [aString]);})]));
 return self;},
-args: ["aBoolean", "aString"],
-source: unescape('assert%3A%20aBoolean%20description%3A%20aString%0A%09aBoolean%20ifFalse%3A%20%5Bself%20signalFailure%3A%20aString%5D'),
-messageSends: ["ifFalse:", "signalFailure:"],
+args: [],
+source: unescape('setUp'),
+messageSends: [],
 referencedClasses: []
 }),
 smalltalk.TestCase);
@@ -211,54 +179,38 @@ referencedClasses: []
 }),
 smalltalk.TestCase);
 
-
-smalltalk.addMethod(
-unescape('_testSelectors'),
-smalltalk.method({
-selector: unescape('testSelectors'),
-category: 'accessing',
-fn: function (){
-var self=this;
-return smalltalk.send(smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_keys", []), "_select_", [(function(each){return smalltalk.send(each, "_match_", [unescape("%5Etest")]);})]);
-return self;},
-args: [],
-source: unescape('testSelectors%0A%09%5Eself%20methodDictionary%20keys%20select%3A%20%5B%3Aeach%20%7C%20each%20match%3A%20%27%5Etest%27%5D'),
-messageSends: ["select:", "keys", "methodDictionary", "match:"],
-referencedClasses: []
-}),
-smalltalk.TestCase.klass);
-
 smalltalk.addMethod(
-unescape('_selector_'),
+unescape('_signalFailure_'),
 smalltalk.method({
-selector: unescape('selector%3A'),
-category: 'accessing',
-fn: function (aSelector){
+selector: unescape('signalFailure%3A'),
+category: 'private',
+fn: function (aString){
 var self=this;
-return (function($rec){smalltalk.send($rec, "_setTestSelector_", [aSelector]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
+(function($rec){smalltalk.send($rec, "_messageText_", [aString]);return smalltalk.send($rec, "_signal", []);})(smalltalk.send((smalltalk.TestFailure || TestFailure), "_new", []));
 return self;},
-args: ["aSelector"],
-source: unescape('selector%3A%20aSelector%0A%09%5Eself%20new%0A%09%09setTestSelector%3A%20aSelector%3B%0A%09%09yourself'),
-messageSends: ["setTestSelector:", "yourself", "new"],
-referencedClasses: []
+args: ["aString"],
+source: unescape('signalFailure%3A%20aString%0A%09TestFailure%20new%0A%09%09messageText%3A%20aString%3B%0A%09%09signal'),
+messageSends: ["messageText:", "signal", "new"],
+referencedClasses: ["TestFailure"]
 }),
-smalltalk.TestCase.klass);
+smalltalk.TestCase);
 
 smalltalk.addMethod(
-unescape('_lookupHierarchyRoot'),
+unescape('_tearDown'),
 smalltalk.method({
-selector: unescape('lookupHierarchyRoot'),
-category: 'accessing',
+selector: unescape('tearDown'),
+category: 'running',
 fn: function (){
 var self=this;
-return (smalltalk.TestCase || TestCase);
+
 return self;},
 args: [],
-source: unescape('lookupHierarchyRoot%0A%09%5ETestCase'),
+source: unescape('tearDown'),
 messageSends: [],
-referencedClasses: ["TestCase"]
+referencedClasses: []
 }),
-smalltalk.TestCase.klass);
+smalltalk.TestCase);
+
 
 smalltalk.addMethod(
 unescape('_allTestSelectors'),
@@ -295,6 +247,38 @@ referencedClasses: []
 }),
 smalltalk.TestCase.klass);
 
+smalltalk.addMethod(
+unescape('_lookupHierarchyRoot'),
+smalltalk.method({
+selector: unescape('lookupHierarchyRoot'),
+category: 'accessing',
+fn: function (){
+var self=this;
+return (smalltalk.TestCase || TestCase);
+return self;},
+args: [],
+source: unescape('lookupHierarchyRoot%0A%09%5ETestCase'),
+messageSends: [],
+referencedClasses: ["TestCase"]
+}),
+smalltalk.TestCase.klass);
+
+smalltalk.addMethod(
+unescape('_selector_'),
+smalltalk.method({
+selector: unescape('selector%3A'),
+category: 'accessing',
+fn: function (aSelector){
+var self=this;
+return (function($rec){smalltalk.send($rec, "_setTestSelector_", [aSelector]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
+return self;},
+args: ["aSelector"],
+source: unescape('selector%3A%20aSelector%0A%09%5Eself%20new%0A%09%09setTestSelector%3A%20aSelector%3B%0A%09%09yourself'),
+messageSends: ["setTestSelector:", "yourself", "new"],
+referencedClasses: []
+}),
+smalltalk.TestCase.klass);
+
 smalltalk.addMethod(
 unescape('_shouldInheritSelectors'),
 smalltalk.method({
@@ -311,23 +295,55 @@ referencedClasses: []
 }),
 smalltalk.TestCase.klass);
 
+smalltalk.addMethod(
+unescape('_testSelectors'),
+smalltalk.method({
+selector: unescape('testSelectors'),
+category: 'accessing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_keys", []), "_select_", [(function(each){return smalltalk.send(each, "_match_", [unescape("%5Etest")]);})]);
+return self;},
+args: [],
+source: unescape('testSelectors%0A%09%5Eself%20methodDictionary%20keys%20select%3A%20%5B%3Aeach%20%7C%20each%20match%3A%20%27%5Etest%27%5D'),
+messageSends: ["select:", "keys", "methodDictionary", "match:"],
+referencedClasses: []
+}),
+smalltalk.TestCase.klass);
+
 
 smalltalk.addClass('TestFailure', smalltalk.Error, [], 'SUnit');
 
 
 smalltalk.addClass('TestResult', smalltalk.Object, ['timestamp', 'runs', 'errors', 'failures', 'total'], 'SUnit');
 smalltalk.addMethod(
-unescape('_timestamp'),
+unescape('_addError_'),
 smalltalk.method({
-selector: unescape('timestamp'),
+selector: unescape('addError%3A'),
 category: 'accessing',
-fn: function (){
+fn: function (anError){
 var self=this;
-return self['@timestamp'];
+smalltalk.send(smalltalk.send(self, "_errors", []), "_add_", [anError]);
 return self;},
-args: [],
-source: unescape('timestamp%0A%09%5Etimestamp'),
-messageSends: [],
+args: ["anError"],
+source: unescape('addError%3A%20anError%0A%09self%20errors%20add%3A%20anError'),
+messageSends: ["add:", "errors"],
+referencedClasses: []
+}),
+smalltalk.TestResult);
+
+smalltalk.addMethod(
+unescape('_addFailure_'),
+smalltalk.method({
+selector: unescape('addFailure%3A'),
+category: 'accessing',
+fn: function (aFailure){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_failures", []), "_add_", [aFailure]);
+return self;},
+args: ["aFailure"],
+source: unescape('addFailure%3A%20aFailure%0A%09self%20failures%20add%3A%20aFailure'),
+messageSends: ["add:", "failures"],
 referencedClasses: []
 }),
 smalltalk.TestResult);
@@ -365,137 +381,121 @@ referencedClasses: []
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-unescape('_total'),
+unescape('_increaseRuns'),
 smalltalk.method({
-selector: unescape('total'),
+selector: unescape('increaseRuns'),
 category: 'accessing',
 fn: function (){
 var self=this;
-return self['@total'];
+(self['@runs']=((($receiver = self['@runs']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));
 return self;},
 args: [],
-source: unescape('total%0A%09%5Etotal'),
-messageSends: [],
+source: unescape('increaseRuns%0A%09runs%20%3A%3D%20runs%20+%201'),
+messageSends: [unescape("+")],
 referencedClasses: []
 }),
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-unescape('_total_'),
+unescape('_initialize'),
 smalltalk.method({
-selector: unescape('total%3A'),
-category: 'accessing',
-fn: function (aNumber){
+selector: unescape('initialize'),
+category: 'initialization',
+fn: function (){
 var self=this;
-(self['@total']=aNumber);
+smalltalk.send(self, "_initialize", [], smalltalk.Object);
+(self['@timestamp']=smalltalk.send((smalltalk.Date || Date), "_now", []));
+(self['@runs']=(0));
+(self['@errors']=smalltalk.send((smalltalk.Array || Array), "_new", []));
+(self['@failures']=smalltalk.send((smalltalk.Array || Array), "_new", []));
+(self['@total']=(0));
 return self;},
-args: ["aNumber"],
-source: unescape('total%3A%20aNumber%0A%09total%20%3A%3D%20aNumber'),
-messageSends: [],
-referencedClasses: []
+args: [],
+source: unescape('initialize%0A%09super%20initialize.%0A%09timestamp%20%3A%3D%20Date%20now.%0A%09runs%20%3A%3D%200.%0A%09errors%20%3A%3D%20Array%20new.%0A%09failures%20%3A%3D%20Array%20new.%0A%09total%20%3A%3D%200'),
+messageSends: ["initialize", "now", "new"],
+referencedClasses: ["Date", "Array"]
 }),
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-unescape('_addError_'),
+unescape('_runs'),
 smalltalk.method({
-selector: unescape('addError%3A'),
+selector: unescape('runs'),
 category: 'accessing',
-fn: function (anError){
+fn: function (){
 var self=this;
-smalltalk.send(smalltalk.send(self, "_errors", []), "_add_", [anError]);
+return self['@runs'];
 return self;},
-args: ["anError"],
-source: unescape('addError%3A%20anError%0A%09self%20errors%20add%3A%20anError'),
-messageSends: ["add:", "errors"],
+args: [],
+source: unescape('runs%0A%09%5Eruns'),
+messageSends: [],
 referencedClasses: []
 }),
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-unescape('_addFailure_'),
+unescape('_status'),
 smalltalk.method({
-selector: unescape('addFailure%3A'),
+selector: unescape('status'),
 category: 'accessing',
-fn: function (aFailure){
+fn: function (){
 var self=this;
-smalltalk.send(smalltalk.send(self, "_failures", []), "_add_", [aFailure]);
+return ((($receiver = smalltalk.send(smalltalk.send(self, "_errors", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_failures", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "success";})() : (function(){return "failure";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "success";}), (function(){return "failure";})]));})() : (function(){return "error";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_failures", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "success";})() : (function(){return "failure";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "success";}), (function(){return "failure";})]));}), (function(){return "error";})]));
 return self;},
-args: ["aFailure"],
-source: unescape('addFailure%3A%20aFailure%0A%09self%20failures%20add%3A%20aFailure'),
-messageSends: ["add:", "failures"],
+args: [],
+source: unescape('status%0A%09%5Eself%20errors%20isEmpty%20%0A%09%09ifTrue%3A%20%5B%0A%09%09%09self%20failures%20isEmpty%20%0A%09%09%09%09ifTrue%3A%20%5B%27success%27%5D%0A%09%09%09%09ifFalse%3A%20%5B%27failure%27%5D%5D%0A%09%09ifFalse%3A%20%5B%27error%27%5D'),
+messageSends: ["ifTrue:ifFalse:", "isEmpty", "errors", "failures"],
 referencedClasses: []
 }),
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-unescape('_runs'),
+unescape('_timestamp'),
 smalltalk.method({
-selector: unescape('runs'),
+selector: unescape('timestamp'),
 category: 'accessing',
 fn: function (){
 var self=this;
-return self['@runs'];
+return self['@timestamp'];
 return self;},
 args: [],
-source: unescape('runs%0A%09%5Eruns'),
+source: unescape('timestamp%0A%09%5Etimestamp'),
 messageSends: [],
 referencedClasses: []
 }),
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-unescape('_increaseRuns'),
+unescape('_total'),
 smalltalk.method({
-selector: unescape('increaseRuns'),
+selector: unescape('total'),
 category: 'accessing',
 fn: function (){
 var self=this;
-(self['@runs']=((($receiver = self['@runs']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));
+return self['@total'];
 return self;},
 args: [],
-source: unescape('increaseRuns%0A%09runs%20%3A%3D%20runs%20+%201'),
-messageSends: [unescape("+")],
+source: unescape('total%0A%09%5Etotal'),
+messageSends: [],
 referencedClasses: []
 }),
 smalltalk.TestResult);
 
 smalltalk.addMethod(
-unescape('_status'),
+unescape('_total_'),
 smalltalk.method({
-selector: unescape('status'),
+selector: unescape('total%3A'),
 category: 'accessing',
-fn: function (){
+fn: function (aNumber){
 var self=this;
-return ((($receiver = smalltalk.send(smalltalk.send(self, "_errors", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_failures", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "success";})() : (function(){return "failure";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "success";}), (function(){return "failure";})]));})() : (function(){return "error";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return ((($receiver = smalltalk.send(smalltalk.send(self, "_failures", []), "_isEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return "success";})() : (function(){return "failure";})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return "success";}), (function(){return "failure";})]));}), (function(){return "error";})]));
+(self['@total']=aNumber);
 return self;},
-args: [],
-source: unescape('status%0A%09%5Eself%20errors%20isEmpty%20%0A%09%09ifTrue%3A%20%5B%0A%09%09%09self%20failures%20isEmpty%20%0A%09%09%09%09ifTrue%3A%20%5B%27success%27%5D%0A%09%09%09%09ifFalse%3A%20%5B%27failure%27%5D%5D%0A%09%09ifFalse%3A%20%5B%27error%27%5D'),
-messageSends: ["ifTrue:ifFalse:", "isEmpty", "errors", "failures"],
+args: ["aNumber"],
+source: unescape('total%3A%20aNumber%0A%09total%20%3A%3D%20aNumber'),
+messageSends: [],
 referencedClasses: []
 }),
 smalltalk.TestResult);
 
-smalltalk.addMethod(
-unescape('_initialize'),
-smalltalk.method({
-selector: unescape('initialize'),
-category: 'initialization',
-fn: function (){
-var self=this;
-smalltalk.send(self, "_initialize", [], smalltalk.Object);
-(self['@timestamp']=smalltalk.send((smalltalk.Date || Date), "_now", []));
-(self['@runs']=(0));
-(self['@errors']=smalltalk.send((smalltalk.Array || Array), "_new", []));
-(self['@failures']=smalltalk.send((smalltalk.Array || Array), "_new", []));
-(self['@total']=(0));
-return self;},
-args: [],
-source: unescape('initialize%0A%09super%20initialize.%0A%09timestamp%20%3A%3D%20Date%20now.%0A%09runs%20%3A%3D%200.%0A%09errors%20%3A%3D%20Array%20new.%0A%09failures%20%3A%3D%20Array%20new.%0A%09total%20%3A%3D%200'),
-messageSends: ["initialize", "now", "new"],
-referencedClasses: ["Date", "Array"]
-}),
-smalltalk.TestResult);
-
 
 

+ 21 - 21
st/Benchfib.st

@@ -49,27 +49,6 @@ benchmark
     ^ count
 !
 
-tinyBenchmarks 
-	"Report the results of running the two tiny Squeak benchmarks.
-	ar 9/10/1999: Adjusted to run at least 1 sec to get more stable results"
-	"0 tinyBenchmarks"
-	"On a 292 MHz G3 Mac: 22727272 bytecodes/sec; 984169 sends/sec"
-	"On a 400 MHz PII/Win98:  18028169 bytecodes/sec; 1081272 sends/sec"
-	| t1 t2 r n1 n2 |
-	n1 := 1.
-	[t1 := Date millisecondsToRun: [n1 benchmark].
-	t1 < 1000] whileTrue:[n1 := n1 * 2]. "Note: #benchmark's runtime is about O(n)"
-
-	n2 := 16.
-	[t2 := Date millisecondsToRun: [r := n2 benchFib].
-	t2 < 1000] whileTrue:[n2 := n2 + 1]. 
-	"Note: #benchFib's runtime is about O(k^n),
-		where k is the golden number = (1 + 5 sqrt) / 2 = 1.618...."
-
-	^ ((n1 * 500000 * 1000) / t1) printString, ' bytecodes/sec; ',
-	  ((r * 1000) / t2) printString, ' sends/sec'
-!
-
 jsbenchFib
  
 	<if (this < 2) {
@@ -118,6 +97,27 @@ jstinyBenchmarks
 	"Note: #jsbenchFib's runtime is about O(k^n),
 		where k is the golden number = (1 + 5 sqrt) / 2 = 1.618...."
 
+	^ ((n1 * 500000 * 1000) / t1) printString, ' bytecodes/sec; ',
+	  ((r * 1000) / t2) printString, ' sends/sec'
+!
+
+tinyBenchmarks 
+	"Report the results of running the two tiny Squeak benchmarks.
+	ar 9/10/1999: Adjusted to run at least 1 sec to get more stable results"
+	"0 tinyBenchmarks"
+	"On a 292 MHz G3 Mac: 22727272 bytecodes/sec; 984169 sends/sec"
+	"On a 400 MHz PII/Win98:  18028169 bytecodes/sec; 1081272 sends/sec"
+	| t1 t2 r n1 n2 |
+	n1 := 1.
+	[t1 := Date millisecondsToRun: [n1 benchmark].
+	t1 < 1000] whileTrue:[n1 := n1 * 2]. "Note: #benchmark's runtime is about O(n)"
+
+	n2 := 16.
+	[t2 := Date millisecondsToRun: [r := n2 benchFib].
+	t2 < 1000] whileTrue:[n2 := n2 + 1]. 
+	"Note: #benchFib's runtime is about O(k^n),
+		where k is the golden number = (1 + 5 sqrt) / 2 = 1.618...."
+
 	^ ((n1 * 500000 * 1000) / t1) printString, ' bytecodes/sec; ',
 	  ((r * 1000) / t2) printString, ' sends/sec'
 ! !

Plik diff jest za duży
+ 437 - 457
st/Canvas.st


+ 4 - 4
st/Examples.st

@@ -5,13 +5,13 @@ Widget subclass: #Counter
 
 !Counter methodsFor: 'actions'!
 
-increase
-    count := count + 1.
+decrease
+    count := count - 1.
     header contents: [:html | html with: count asString]
 !
 
-decrease
-    count := count - 1.
+increase
+    count := count + 1.
     header contents: [:html | html with: count asString]
 ! !
 

+ 205 - 205
st/Kernel-Classes.st

@@ -1,150 +1,4 @@
 Smalltalk current createPackage: 'Kernel-Classes' properties: #{}!
-Object subclass: #ClassCommentReader
-	instanceVariableNames: 'class chunkParser'
-	category: 'Kernel-Classes'!
-!ClassCommentReader commentStamp!
-ClassCommentReader represents a mechanism for retrieving class descriptions stored on a file.
-See `ClassCategoryReader` too.!
-
-!ClassCommentReader methodsFor: 'accessing'!
-
-class: aClass
-	class := aClass
-! !
-
-!ClassCommentReader methodsFor: 'fileIn'!
-
-scanFrom: aChunkParser
-	| chunk |
-	chunk := aChunkParser nextChunk.
-	chunk isEmpty ifFalse: [
-	    self setComment: chunk].
-! !
-
-!ClassCommentReader methodsFor: 'initialization'!
-
-initialize
-	super initialize.
-	chunkParser := ChunkParser new.
-! !
-
-!ClassCommentReader methodsFor: 'private'!
-
-setComment: aString
-    class comment: aString
-! !
-
-Object subclass: #ClassCategoryReader
-	instanceVariableNames: 'class category chunkParser'
-	category: 'Kernel-Classes'!
-!ClassCategoryReader commentStamp!
-ClassCategoryReader represents a mechanism for retrieving class descriptions stored on a file.!
-
-!ClassCategoryReader methodsFor: 'accessing'!
-
-class: aClass category: aString
-	class := aClass.
-	category := aString
-! !
-
-!ClassCategoryReader methodsFor: 'fileIn'!
-
-scanFrom: aChunkParser
-	| chunk |
-	[chunk := aChunkParser nextChunk.
-	chunk isEmpty] whileFalse: [
-	    self compileMethod: chunk]
-! !
-
-!ClassCategoryReader methodsFor: 'initialization'!
-
-initialize
-	super initialize.
-	chunkParser := ChunkParser new.
-! !
-
-!ClassCategoryReader methodsFor: 'private'!
-
-compileMethod: aString
-	| method compiler |
-	method := (compiler := Compiler new) load: aString forClass: class.
-	method category: category.
-	class addCompiledMethod: method.
-	compiler setupClass: class.
-! !
-
-Object subclass: #ClassBuilder
-	instanceVariableNames: ''
-	category: 'Kernel-Classes'!
-!ClassBuilder commentStamp!
-ClassBuilder is responsible for compiling new classes or modifying existing classes in the system.
-
-Rather than using ClassBuilder directly to compile a class, use `Class >> subclass:instanceVariableNames:package:`.!
-
-!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.
-	^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]>
-!
-
-copyClass: aClass named: aString
-	| newClass |
-
-	newClass := self 
-		addSubclassOf: aClass superclass
-		named: aString 
-		instanceVariableNames: aClass instanceVariableNames 
-		package: aClass package name.
-
-	self setupClass: newClass.
-
-	aClass methodDictionary values do: [:each |
-		newClass addCompiledMethod: (Compiler new load: each source forClass: newClass).
-		(newClass methodDictionary at: each selector) category: each category].
-
-	aClass class methodDictionary values do: [:each |
-		newClass class addCompiledMethod: (Compiler new load: each source forClass: newClass class).
-		(newClass class methodDictionary at: each selector) category: each category].
-
-	self setupClass: newClass.
-	^newClass
-! !
-
 Object subclass: #Behavior
 	instanceVariableNames: ''
 	category: 'Kernel-Classes'!
@@ -159,16 +13,12 @@ Behavior also  provides methods for compiling methods, examining the method dict
 
 !Behavior methodsFor: 'accessing'!
 
-name
-	<return self.className || nil>
-!
-
-superclass
-	<return self.superclass || nil>
-!
-
-subclasses
-	<return smalltalk.subclasses(self)>
+allInstanceVariableNames
+	| result |
+	result := self instanceVariableNames copy.
+	self superclass ifNotNil: [
+	    result addAll: self superclass allInstanceVariableNames].
+	^result
 !
 
 allSubclasses
@@ -179,12 +29,30 @@ allSubclasses
 	^result
 !
 
-withAllSubclasses
-	^(Array with: self) addAll: self allSubclasses; yourself
+comment
+    ^(self basicAt: 'comment') ifNil: ['']
 !
 
-prototype
-	<return self.fn.prototype>
+comment: aString
+    self basicAt: 'comment' put: aString
+!
+
+commentStamp
+    ^ClassCommentReader new
+	class: self;
+	yourself
+!
+
+commentStamp: aStamp prior: prior
+        ^self commentStamp
+!
+
+instanceVariableNames
+	<return self.iVarNames>
+!
+
+methodAt: aString
+	<return smalltalk.methods(self)[aString]>
 !
 
 methodDictionary
@@ -204,22 +72,13 @@ methodsFor: aString
 	    yourself
 !
 
-instanceVariableNames
-	<return self.iVarNames>
-!
-
-comment
-    ^(self basicAt: 'comment') ifNil: ['']
-!
-
-comment: aString
-    self basicAt: 'comment' put: aString
+methodsFor: aString stamp: aStamp
+	"Added for compatibility, right now ignores stamp."
+	^self methodsFor: aString
 !
 
-commentStamp
-    ^ClassCommentReader new
-	class: self;
-	yourself
+name
+	<return self.className || nil>
 !
 
 protocols
@@ -244,25 +103,20 @@ protocolsDo: aBlock
 		aBlock value: category value: (methodsByCategory at: category)]
 !
 
-allInstanceVariableNames
-	| result |
-	result := self instanceVariableNames copy.
-	self superclass ifNotNil: [
-	    result addAll: self superclass allInstanceVariableNames].
-	^result
+prototype
+	<return self.fn.prototype>
 !
 
-methodAt: aString
-	<return smalltalk.methods(self)[aString]>
+subclasses
+	<return smalltalk.subclasses(self)>
 !
 
-methodsFor: aString stamp: aStamp
-	"Added for compatibility, right now ignores stamp."
-	^self methodsFor: aString
+superclass
+	<return self.superclass || nil>
 !
 
-commentStamp: aStamp prior: prior
-        ^self commentStamp
+withAllSubclasses
+	^(Array with: self) addAll: self allSubclasses; yourself
 ! !
 
 !Behavior methodsFor: 'compiling'!
@@ -271,12 +125,6 @@ addCompiledMethod: aMethod
 	<smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self)>
 !
 
-removeCompiledMethod: aMethod
-	<delete self.fn.prototype[aMethod.selector._asSelector()];
-	delete self.fn.prototype.methods[aMethod.selector];
-	smalltalk.init(self);>
-!
-
 compile: aString
 	self compile: aString category: ''
 !
@@ -286,16 +134,22 @@ compile: aString category: anotherString
 	method := Compiler new load: aString forClass: self.
 	method category: anotherString.
 	self addCompiledMethod: method
+!
+
+removeCompiledMethod: aMethod
+	<delete self.fn.prototype[aMethod.selector._asSelector()];
+	delete self.fn.prototype.methods[aMethod.selector];
+	smalltalk.init(self);>
 ! !
 
 !Behavior methodsFor: 'instance creation'!
 
-new
-	^self basicNew initialize
-!
-
 basicNew
 	<return new self.fn()>
+!
+
+new
+	^self basicNew initialize
 ! !
 
 !Behavior methodsFor: 'testing'!
@@ -319,20 +173,20 @@ category
 	^self package ifNil: ['Unclassified'] ifNotNil: [self package name]
 !
 
-rename: aString
-	<
-		smalltalk[aString] = self;
-		delete smalltalk[self.className];
-		self.className = aString;
-	>
-!
-
 package
 	<return self.pkg>
 !
 
 package: aPackage
 	<self.pkg = aPackage>
+!
+
+rename: aString
+	<
+		smalltalk[aString] = self;
+		delete smalltalk[self.className];
+		self.className = aString;
+	>
 ! !
 
 !Class methodsFor: 'class creation'!
@@ -402,3 +256,149 @@ isMetaclass
 	^true
 ! !
 
+Object subclass: #ClassBuilder
+	instanceVariableNames: ''
+	category: 'Kernel-Classes'!
+!ClassBuilder commentStamp!
+ClassBuilder is responsible for compiling new classes or modifying existing classes in the system.
+
+Rather than using ClassBuilder directly to compile a class, use `Class >> subclass:instanceVariableNames:package:`.!
+
+!ClassBuilder methodsFor: 'class creation'!
+
+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
+	^self superclass: aClass subclass: aString instanceVariableNames: '' package: nil
+!
+
+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.
+	^newClass
+! !
+
+!ClassBuilder methodsFor: 'private'!
+
+addSubclassOf: aClass named: aString instanceVariableNames: aCollection
+	<smalltalk.addClass(aString, aClass, aCollection);
+	    return smalltalk[aString]>
+!
+
+addSubclassOf: aClass named: aString instanceVariableNames: aCollection package: packageName
+	<smalltalk.addClass(aString, aClass, aCollection, packageName);
+	    return smalltalk[aString]>
+!
+
+copyClass: aClass named: aString
+	| newClass |
+
+	newClass := self 
+		addSubclassOf: aClass superclass
+		named: aString 
+		instanceVariableNames: aClass instanceVariableNames 
+		package: aClass package name.
+
+	self setupClass: newClass.
+
+	aClass methodDictionary values do: [:each |
+		newClass addCompiledMethod: (Compiler new load: each source forClass: newClass).
+		(newClass methodDictionary at: each selector) category: each category].
+
+	aClass class methodDictionary values do: [:each |
+		newClass class addCompiledMethod: (Compiler new load: each source forClass: newClass class).
+		(newClass class methodDictionary at: each selector) category: each category].
+
+	self setupClass: newClass.
+	^newClass
+!
+
+instanceVariableNamesFor: aString
+	^(aString tokenize: ' ') reject: [:each | each isEmpty]
+!
+
+setupClass: aClass
+	<smalltalk.init(aClass);>
+! !
+
+Object subclass: #ClassCategoryReader
+	instanceVariableNames: 'class category chunkParser'
+	category: 'Kernel-Classes'!
+!ClassCategoryReader commentStamp!
+ClassCategoryReader represents a mechanism for retrieving class descriptions stored on a file.!
+
+!ClassCategoryReader methodsFor: 'accessing'!
+
+class: aClass category: aString
+	class := aClass.
+	category := aString
+! !
+
+!ClassCategoryReader methodsFor: 'fileIn'!
+
+scanFrom: aChunkParser
+	| chunk |
+	[chunk := aChunkParser nextChunk.
+	chunk isEmpty] whileFalse: [
+	    self compileMethod: chunk]
+! !
+
+!ClassCategoryReader methodsFor: 'initialization'!
+
+initialize
+	super initialize.
+	chunkParser := ChunkParser new.
+! !
+
+!ClassCategoryReader methodsFor: 'private'!
+
+compileMethod: aString
+	| method compiler |
+	method := (compiler := Compiler new) load: aString forClass: class.
+	method category: category.
+	class addCompiledMethod: method.
+	compiler setupClass: class.
+! !
+
+Object subclass: #ClassCommentReader
+	instanceVariableNames: 'class chunkParser'
+	category: 'Kernel-Classes'!
+!ClassCommentReader commentStamp!
+ClassCommentReader represents a mechanism for retrieving class descriptions stored on a file.
+See `ClassCategoryReader` too.!
+
+!ClassCommentReader methodsFor: 'accessing'!
+
+class: aClass
+	class := aClass
+! !
+
+!ClassCommentReader methodsFor: 'fileIn'!
+
+scanFrom: aChunkParser
+	| chunk |
+	chunk := aChunkParser nextChunk.
+	chunk isEmpty ifFalse: [
+	    self setComment: chunk].
+! !
+
+!ClassCommentReader methodsFor: 'initialization'!
+
+initialize
+	super initialize.
+	chunkParser := ChunkParser new.
+! !
+
+!ClassCommentReader methodsFor: 'private'!
+
+setComment: aString
+    class comment: aString
+! !
+

Plik diff jest za duży
+ 458 - 673
st/Kernel-Collections.st


+ 20 - 20
st/Kernel-Exceptions.st

@@ -5,20 +5,20 @@ Object subclass: #Error
 
 !Error methodsFor: 'accessing'!
 
-messageText
-	^messageText
-!
-
-messageText: aString
-	messageText := aString
-!
-
 context
 	<return self.context>
 !
 
 jsStack
 	<return self.stack>
+!
+
+messageText
+	^messageText
+!
+
+messageText: aString
+	messageText := aString
 ! !
 
 !Error methodsFor: 'signaling'!
@@ -55,16 +55,16 @@ message: aMessage
 	message := aMessage
 !
 
+messageText
+	^self receiver asString, ' does not understand #', self message selector
+!
+
 receiver
 	^receiver
 !
 
 receiver: anObject
 	receiver := anObject
-!
-
-messageText
-	^self receiver asString, ' does not understand #', self message selector
 ! !
 
 Object subclass: #ErrorHandler
@@ -80,24 +80,24 @@ handleError: anError
 
 !ErrorHandler methodsFor: 'private'!
 
+log: aString
+	console log: aString
+!
+
 logContext: aContext
 	aContext home ifNotNil: [
 		self logContext: aContext home].
 	self log: aContext receiver asString, '>>', aContext selector
 !
 
-logErrorContext: aContext
-	aContext ifNotNil: [
-		aContext home ifNotNil: [
-			self logContext: aContext home]]
-!
-
 logError: anError
 	self log: anError messageText
 !
 
-log: aString
-	console log: aString
+logErrorContext: aContext
+	aContext ifNotNil: [
+		aContext home ifNotNil: [
+			self logContext: aContext home]]
 ! !
 
 ErrorHandler class instanceVariableNames: 'current'!

+ 149 - 149
st/Kernel-Methods.st

@@ -1,92 +1,4 @@
 Smalltalk current createPackage: 'Kernel-Methods' properties: #{}!
-Object subclass: #Message
-	instanceVariableNames: 'selector arguments'
-	category: 'Kernel-Methods'!
-!Message commentStamp!
-Generally, the system does not use instances of Message for efficiency reasons.
-However, when a message is not understood by its receiver, the interpreter will make up an instance of it in order to capture the information involved in an actual message transmission. 
-This instance is sent it as an argument with the message `doesNotUnderstand:` to the receiver.
-
-See boot.js, `messageNotUnderstood`  and its counterpart `Object>>doesNotUnderstand:`!
-
-!Message methodsFor: 'accessing'!
-
-selector
-	^selector
-!
-
-selector: aString
-	selector := aString
-!
-
-arguments: anArray
-	arguments := anArray
-!
-
-arguments
-	^arguments
-! !
-
-!Message methodsFor: 'printing'!
-
-printString
-	^ String streamContents: [:aStream|  
-                                  				aStream 
-                                  					nextPutAll: super printString;
-                                  					nextPutAll: '(';
-                                  					nextPutAll: selector;
-                                  					nextPutAll: ')' 				]
-!
-
-sendTo: anObject
-	Smalltalk current send: self selector to: anObject arguments: self arguments
-! !
-
-!Message class methodsFor: 'instance creation'!
-
-selector: aString arguments: anArray
-	^self new
-		selector: aString;
-		arguments: anArray;
-		yourself
-! !
-
-Object subclass: #MethodContext
-	instanceVariableNames: ''
-	category: 'Kernel-Methods'!
-!MethodContext commentStamp!
-MethodContext holds all the dynamic state associated with the execution of either a method activation resulting from a message send. That is used to build the call stack while debugging.
-  
-MethodContext instances are JavaScript `SmalltalkMethodContext` objects defined in boot.js 
-
-Current limitation: MethodContext instances are not created on Block evaluation. That means it's actually impossible to debug inside a Block.!
-
-!MethodContext methodsFor: 'accessing'!
-
-receiver
-	<return self.receiver>
-!
-
-selector
-	<return smalltalk.convertSelector(self.selector)>
-!
-
-home
-	<return self.homeContext>
-!
-
-temps
-	<return self.temps>
-!
-
-printString
-	^super printString, '(', self asString, ')'
-!
-
-asString
-	^self receiver class printString, ' >> ', self selector
-! !
-
 Object subclass: #BlockClosure
 	instanceVariableNames: ''
 	category: 'Kernel-Methods'!
@@ -108,9 +20,9 @@ numArgs
 
 !BlockClosure methodsFor: 'controlling'!
 
-whileTrue: aBlock
+whileFalse
 	"inlined in the Compiler"
-	<while(self()) {aBlock()}>
+	self whileFalse: []
 !
 
 whileFalse: aBlock
@@ -118,14 +30,14 @@ whileFalse: aBlock
 	<while(!!self()) {aBlock()}>
 !
 
-whileFalse
+whileTrue
 	"inlined in the Compiler"
-	self whileFalse: []
+	self whileTrue: []
 !
 
-whileTrue
+whileTrue: aBlock
 	"inlined in the Compiler"
-	self whileTrue: []
+	<while(self()) {aBlock()}>
 ! !
 
 !BlockClosure methodsFor: 'error handling'!
@@ -139,46 +51,10 @@ on: anErrorClass do: aBlock
 
 !BlockClosure methodsFor: 'evaluating'!
 
-value
-	"inlined in the Compiler"
-	<return self();>
-!
-
-value: anArg
-	"inlined in the Compiler"
-	<return self(anArg);>
-!
-
-value: firstArg value: secondArg
-	"inlined in the Compiler"
-	<return self(firstArg, secondArg);>
-!
-
-value: firstArg value: secondArg value: thirdArg
-	"inlined in the Compiler"
-	<return self(firstArg, secondArg, thirdArg);>
-!
-
-valueWithPossibleArguments: aCollection
-	<return self.apply(null, aCollection);>
-!
-
-new
-	"Use the receiver as a JS constructor. 
-	*Do not* use this method to instanciate Smalltalk objects!!"
-	<return new self()>
-!
-
 applyTo: anObject arguments: aCollection
 	<return self.apply(anObject, aCollection)>
 !
 
-timeToRun
-	"Answer the number of milliseconds taken to execute this block."
-
-	^ Date millisecondsToRun: self
-!
-
 ensure: aBlock
 	| success |
 	success := false.
@@ -189,6 +65,12 @@ ensure: aBlock
 			ex signal]
 !
 
+new
+	"Use the receiver as a JS constructor. 
+	*Do not* use this method to instanciate Smalltalk objects!!"
+	<return new self()>
+!
+
 newValue: anObject
 	"Use the receiver as a JS constructor. 
 	*Do not* use this method to instanciate Smalltalk objects!!"
@@ -205,16 +87,46 @@ newValue:  anObject value: anObject2 value: anObject3
 	"Use the receiver as a JS constructor. 
 	*Do not* use this method to instanciate Smalltalk objects!!"
 	<return new self(anObject, anObject2)>
-! !
+!
 
-!BlockClosure methodsFor: 'timeout/interval'!
+timeToRun
+	"Answer the number of milliseconds taken to execute this block."
 
-valueWithTimeout: aNumber
-	<return setTimeout(self, aNumber)>
+	^ Date millisecondsToRun: self
+!
+
+value
+	"inlined in the Compiler"
+	<return self();>
+!
+
+value: anArg
+	"inlined in the Compiler"
+	<return self(anArg);>
+!
+
+value: firstArg value: secondArg
+	"inlined in the Compiler"
+	<return self(firstArg, secondArg);>
+!
+
+value: firstArg value: secondArg value: thirdArg
+	"inlined in the Compiler"
+	<return self(firstArg, secondArg, thirdArg);>
 !
 
+valueWithPossibleArguments: aCollection
+	<return self.apply(null, aCollection);>
+! !
+
+!BlockClosure methodsFor: 'timeout/interval'!
+
 valueWithInterval: aNumber
 	<return setInterval(self, aNumber)>
+!
+
+valueWithTimeout: aNumber
+	<return setTimeout(self, aNumber)>
 ! !
 
 Object subclass: #CompiledMethod
@@ -241,12 +153,8 @@ or messages sent from this method:
 
 !CompiledMethod methodsFor: 'accessing'!
 
-source
-	^(self basicAt: 'source') ifNil: ['']
-!
-
-source: aString
-	self basicAt: 'source' put: aString
+arguments
+	<return self.args || []>
 !
 
 category
@@ -257,14 +165,6 @@ category: aString
 	self basicAt: 'category' put: aString
 !
 
-selector
-	^self basicAt: 'selector'
-!
-
-selector: aString
-	self basicAt: 'selector' put: aString
-!
-
 fn
 	^self basicAt: 'fn'
 !
@@ -285,7 +185,107 @@ referencedClasses
 	^self basicAt: 'referencedClasses'
 !
 
+selector
+	^self basicAt: 'selector'
+!
+
+selector: aString
+	self basicAt: 'selector' put: aString
+!
+
+source
+	^(self basicAt: 'source') ifNil: ['']
+!
+
+source: aString
+	self basicAt: 'source' put: aString
+! !
+
+Object subclass: #Message
+	instanceVariableNames: 'selector arguments'
+	category: 'Kernel-Methods'!
+!Message commentStamp!
+Generally, the system does not use instances of Message for efficiency reasons.
+However, when a message is not understood by its receiver, the interpreter will make up an instance of it in order to capture the information involved in an actual message transmission. 
+This instance is sent it as an argument with the message `doesNotUnderstand:` to the receiver.
+
+See boot.js, `messageNotUnderstood`  and its counterpart `Object>>doesNotUnderstand:`!
+
+!Message methodsFor: 'accessing'!
+
 arguments
-	<return self.args || []>
+	^arguments
+!
+
+arguments: anArray
+	arguments := anArray
+!
+
+selector
+	^selector
+!
+
+selector: aString
+	selector := aString
+! !
+
+!Message methodsFor: 'printing'!
+
+printString
+	^ String streamContents: [:aStream|  
+                                  				aStream 
+                                  					nextPutAll: super printString;
+                                  					nextPutAll: '(';
+                                  					nextPutAll: selector;
+                                  					nextPutAll: ')' 				]
+!
+
+sendTo: anObject
+	Smalltalk current send: self selector to: anObject arguments: self arguments
+! !
+
+!Message class methodsFor: 'instance creation'!
+
+selector: aString arguments: anArray
+	^self new
+		selector: aString;
+		arguments: anArray;
+		yourself
+! !
+
+Object subclass: #MethodContext
+	instanceVariableNames: ''
+	category: 'Kernel-Methods'!
+!MethodContext commentStamp!
+MethodContext holds all the dynamic state associated with the execution of either a method activation resulting from a message send. That is used to build the call stack while debugging.
+  
+MethodContext instances are JavaScript `SmalltalkMethodContext` objects defined in boot.js 
+
+Current limitation: MethodContext instances are not created on Block evaluation. That means it's actually impossible to debug inside a Block.!
+
+!MethodContext methodsFor: 'accessing'!
+
+asString
+	^self receiver class printString, ' >> ', self selector
+!
+
+home
+	<return self.homeContext>
+!
+
+printString
+	^super printString, '(', self asString, ')'
+!
+
+receiver
+	<return self.receiver>
+!
+
+selector
+	<return smalltalk.convertSelector(self.selector)>
+!
+
+temps
+	<return self.temps>
 ! !
 

Plik diff jest za duży
+ 368 - 469
st/Kernel-Tests.st


+ 37 - 37
st/Kernel-Transcript.st

@@ -1,70 +1,70 @@
 Smalltalk current createPackage: 'Kernel-Transcript' properties: #{}!
-Object subclass: #Transcript
+Object subclass: #ConsoleTranscript
 	instanceVariableNames: 'textarea'
 	category: 'Kernel-Transcript'!
 
-Transcript class instanceVariableNames: 'current'!
-
-!Transcript class methodsFor: 'instance creation'!
+!ConsoleTranscript methodsFor: 'actions'!
 
 open
-    self current open
-!
-
-new
-    self shouldNotImplement
-!
-
-current
-    ^current
-!
-
-register: aTranscript
-	current := aTranscript
 ! !
 
-!Transcript class methodsFor: 'printing'!
+!ConsoleTranscript methodsFor: 'printing'!
 
-show: anObject
-    self current show: anObject
+clear
+	"no op"
 !
 
 cr
-    self current show: String cr
+	"no op"
 !
 
-clear
-    self current clear
+show: anObject
+	| string |
+	string := anObject asString.
+	<console.log(String(string))>
 ! !
 
-Object subclass: #ConsoleTranscript
+!ConsoleTranscript class methodsFor: 'initialization'!
+
+initialize
+	Transcript register: self new
+! !
+
+Object subclass: #Transcript
 	instanceVariableNames: 'textarea'
 	category: 'Kernel-Transcript'!
 
-!ConsoleTranscript methodsFor: 'actions'!
+Transcript class instanceVariableNames: 'current'!
+
+!Transcript class methodsFor: 'instance creation'!
+
+current
+    ^current
+!
+
+new
+    self shouldNotImplement
+!
 
 open
+    self current open
+!
+
+register: aTranscript
+	current := aTranscript
 ! !
 
-!ConsoleTranscript methodsFor: 'printing'!
+!Transcript class methodsFor: 'printing'!
 
 clear
-	"no op"
+    self current clear
 !
 
 cr
-	"no op"
+    self current show: String cr
 !
 
 show: anObject
-	| string |
-	string := anObject asString.
-	<console.log(String(string))>
-! !
-
-!ConsoleTranscript class methodsFor: 'initialization'!
-
-initialize
-	Transcript register: self new
+    self current show: anObject
 ! !
 

+ 50 - 50
st/SUnit.st

@@ -5,12 +5,12 @@ Object subclass: #TestCase
 
 !TestCase methodsFor: 'accessing'!
 
-setTestSelector: aSelector
-	testSelector := aSelector
-!
-
 selector
 	^testSelector
+!
+
+setTestSelector: aSelector
+	testSelector := aSelector
 ! !
 
 !TestCase methodsFor: 'private'!
@@ -23,10 +23,10 @@ signalFailure: aString
 
 !TestCase methodsFor: 'running'!
 
-setUp
-!
-
-tearDown
+performTestFor: aResult
+	[[self perform: self selector]
+		on: TestFailure do: [:ex | aResult addFailure: self]]
+		on: Error do: [:ex | aResult addError: self]
 !
 
 runCaseFor: aTestResult
@@ -36,10 +36,10 @@ runCaseFor: aTestResult
 	self tearDown
 !
 
-performTestFor: aResult
-	[[self perform: self selector]
-		on: TestFailure do: [:ex | aResult addFailure: self]]
-		on: Error do: [:ex | aResult addError: self]
+setUp
+!
+
+tearDown
 ! !
 
 !TestCase methodsFor: 'testing'!
@@ -48,16 +48,16 @@ assert: aBoolean
 	self assert: aBoolean description: 'Assertion failed'
 !
 
-deny: aBoolean
-	self assert: aBoolean not
+assert: aBoolean description: aString
+	aBoolean ifFalse: [self signalFailure: aString]
 !
 
 assert: expected equals: actual
 	^ self assert: (expected = actual) description: 'Expected: ', expected asString, ' but was: ', actual asString
 !
 
-assert: aBoolean description: aString
-	aBoolean ifFalse: [self signalFailure: aString]
+deny: aBoolean
+	self assert: aBoolean not
 !
 
 should: aBlock
@@ -72,20 +72,6 @@ should: aBlock raise: anExceptionClass
 
 !TestCase class methodsFor: 'accessing'!
 
-testSelectors
-	^self methodDictionary keys select: [:each | each match: '^test']
-!
-
-selector: aSelector
-	^self new
-		setTestSelector: aSelector;
-		yourself
-!
-
-lookupHierarchyRoot
-	^TestCase
-!
-
 allTestSelectors
 	| selectors |
 	selectors := self testSelectors.
@@ -96,6 +82,20 @@ allTestSelectors
 
 buildSuite
 	^self allTestSelectors collect: [:each | self selector: each]
+!
+
+lookupHierarchyRoot
+	^TestCase
+!
+
+selector: aSelector
+	^self new
+		setTestSelector: aSelector;
+		yourself
+!
+
+testSelectors
+	^self methodDictionary keys select: [:each | each match: '^test']
 ! !
 
 !TestCase class methodsFor: 'testing'!
@@ -114,8 +114,12 @@ Object subclass: #TestResult
 
 !TestResult methodsFor: 'accessing'!
 
-timestamp
-	^timestamp
+addError: anError
+	self errors add: anError
+!
+
+addFailure: aFailure
+	self failures add: aFailure
 !
 
 errors
@@ -126,30 +130,14 @@ failures
 	^failures
 !
 
-total
-	^total
-!
-
-total: aNumber
-	total := aNumber
-!
-
-addError: anError
-	self errors add: anError
-!
-
-addFailure: aFailure
-	self failures add: aFailure
+increaseRuns
+	runs := runs + 1
 !
 
 runs
 	^runs
 !
 
-increaseRuns
-	runs := runs + 1
-!
-
 status
 	^self errors isEmpty 
 		ifTrue: [
@@ -157,6 +145,18 @@ status
 				ifTrue: ['success']
 				ifFalse: ['failure']]
 		ifFalse: ['error']
+!
+
+timestamp
+	^timestamp
+!
+
+total
+	^total
+!
+
+total: aNumber
+	total := aNumber
 ! !
 
 !TestResult methodsFor: 'initialization'!

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików