1
0
Prechádzať zdrojové kódy

fileout all of the system packages using the new formatter

Dale Henrichs 13 rokov pred
rodič
commit
c6fb057f36

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 871 - 907
js/Canvas.deploy.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 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);
 
 
 

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 530 - 471
js/Kernel-Collections.deploy.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 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);
 
 
 

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 541 - 429
js/Kernel-Tests.deploy.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 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'
 ! !

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 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
+! !
+

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 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>
 ! !
 

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 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'!

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov