Browse Source

Merge with dale

Nicolas Petton 12 years ago
parent
commit
0c436c5586

+ 20 - 20
js/Benchfib.deploy.js

@@ -44,26 +44,6 @@ return self;}
 }),
 smalltalk.Number);
 
-smalltalk.addMethod(
-unescape('_tinyBenchmarks'),
-smalltalk.method({
-selector: unescape('tinyBenchmarks'),
-fn: function (){
-var self=this;
-var t1=nil;
-var t2=nil;
-var r=nil;
-var n1=nil;
-var n2=nil;
-(n1=(1));
-(function(){while((function(){(t1=smalltalk.send((smalltalk.Date || Date), "_millisecondsToRun_", [(function(){return smalltalk.send(n1, "_benchmark", []);})]));return ((($receiver = t1).klass === smalltalk.Number) ? $receiver <(1000) : smalltalk.send($receiver, "__lt", [(1000)]));})()) {(function(){return (n1=((($receiver = n1).klass === smalltalk.Number) ? $receiver *(2) : smalltalk.send($receiver, "__star", [(2)])));})()}})();
-(n2=(16));
-(function(){while((function(){(t2=smalltalk.send((smalltalk.Date || Date), "_millisecondsToRun_", [(function(){return (r=smalltalk.send(n2, "_benchFib", []));})]));return ((($receiver = t2).klass === smalltalk.Number) ? $receiver <(1000) : smalltalk.send($receiver, "__lt", [(1000)]));})()) {(function(){return (n2=((($receiver = n2).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));})()}})();
-return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(((($receiver = ((($receiver = ((($receiver = n1).klass === smalltalk.Number) ? $receiver *(500000) : smalltalk.send($receiver, "__star", [(500000)]))).klass === smalltalk.Number) ? $receiver *(1000) : smalltalk.send($receiver, "__star", [(1000)]))).klass === smalltalk.Number) ? $receiver /t1 : smalltalk.send($receiver, "__slash", [t1])), "_printString", []), "__comma", [unescape("%20bytecodes/sec%3B%20")]), "__comma", [smalltalk.send(((($receiver = ((($receiver = r).klass === smalltalk.Number) ? $receiver *(1000) : smalltalk.send($receiver, "__star", [(1000)]))).klass === smalltalk.Number) ? $receiver /t2 : smalltalk.send($receiver, "__slash", [t2])), "_printString", [])]), "__comma", [unescape("%20sends/sec")]);
-return self;}
-}),
-smalltalk.Number);
-
 smalltalk.addMethod(
 unescape('_jsbenchFib'),
 smalltalk.method({
@@ -130,3 +110,23 @@ return self;}
 }),
 smalltalk.Number);
 
+smalltalk.addMethod(
+unescape('_tinyBenchmarks'),
+smalltalk.method({
+selector: unescape('tinyBenchmarks'),
+fn: function (){
+var self=this;
+var t1=nil;
+var t2=nil;
+var r=nil;
+var n1=nil;
+var n2=nil;
+(n1=(1));
+(function(){while((function(){(t1=smalltalk.send((smalltalk.Date || Date), "_millisecondsToRun_", [(function(){return smalltalk.send(n1, "_benchmark", []);})]));return ((($receiver = t1).klass === smalltalk.Number) ? $receiver <(1000) : smalltalk.send($receiver, "__lt", [(1000)]));})()) {(function(){return (n1=((($receiver = n1).klass === smalltalk.Number) ? $receiver *(2) : smalltalk.send($receiver, "__star", [(2)])));})()}})();
+(n2=(16));
+(function(){while((function(){(t2=smalltalk.send((smalltalk.Date || Date), "_millisecondsToRun_", [(function(){return (r=smalltalk.send(n2, "_benchFib", []));})]));return ((($receiver = t2).klass === smalltalk.Number) ? $receiver <(1000) : smalltalk.send($receiver, "__lt", [(1000)]));})()) {(function(){return (n2=((($receiver = n2).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));})()}})();
+return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(((($receiver = ((($receiver = ((($receiver = n1).klass === smalltalk.Number) ? $receiver *(500000) : smalltalk.send($receiver, "__star", [(500000)]))).klass === smalltalk.Number) ? $receiver *(1000) : smalltalk.send($receiver, "__star", [(1000)]))).klass === smalltalk.Number) ? $receiver /t1 : smalltalk.send($receiver, "__slash", [t1])), "_printString", []), "__comma", [unescape("%20bytecodes/sec%3B%20")]), "__comma", [smalltalk.send(((($receiver = ((($receiver = r).klass === smalltalk.Number) ? $receiver *(1000) : smalltalk.send($receiver, "__star", [(1000)]))).klass === smalltalk.Number) ? $receiver /t2 : smalltalk.send($receiver, "__slash", [t2])), "_printString", [])]), "__comma", [unescape("%20sends/sec")]);
+return self;}
+}),
+smalltalk.Number);
+

+ 25 - 25
js/Benchfib.js

@@ -59,31 +59,6 @@ referencedClasses: ["Array"]
 }),
 smalltalk.Number);
 
-smalltalk.addMethod(
-unescape('_tinyBenchmarks'),
-smalltalk.method({
-selector: unescape('tinyBenchmarks'),
-category: '*Benchfib',
-fn: function (){
-var self=this;
-var t1=nil;
-var t2=nil;
-var r=nil;
-var n1=nil;
-var n2=nil;
-(n1=(1));
-(function(){while((function(){(t1=smalltalk.send((smalltalk.Date || Date), "_millisecondsToRun_", [(function(){return smalltalk.send(n1, "_benchmark", []);})]));return ((($receiver = t1).klass === smalltalk.Number) ? $receiver <(1000) : smalltalk.send($receiver, "__lt", [(1000)]));})()) {(function(){return (n1=((($receiver = n1).klass === smalltalk.Number) ? $receiver *(2) : smalltalk.send($receiver, "__star", [(2)])));})()}})();
-(n2=(16));
-(function(){while((function(){(t2=smalltalk.send((smalltalk.Date || Date), "_millisecondsToRun_", [(function(){return (r=smalltalk.send(n2, "_benchFib", []));})]));return ((($receiver = t2).klass === smalltalk.Number) ? $receiver <(1000) : smalltalk.send($receiver, "__lt", [(1000)]));})()) {(function(){return (n2=((($receiver = n2).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));})()}})();
-return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(((($receiver = ((($receiver = ((($receiver = n1).klass === smalltalk.Number) ? $receiver *(500000) : smalltalk.send($receiver, "__star", [(500000)]))).klass === smalltalk.Number) ? $receiver *(1000) : smalltalk.send($receiver, "__star", [(1000)]))).klass === smalltalk.Number) ? $receiver /t1 : smalltalk.send($receiver, "__slash", [t1])), "_printString", []), "__comma", [unescape("%20bytecodes/sec%3B%20")]), "__comma", [smalltalk.send(((($receiver = ((($receiver = r).klass === smalltalk.Number) ? $receiver *(1000) : smalltalk.send($receiver, "__star", [(1000)]))).klass === smalltalk.Number) ? $receiver /t2 : smalltalk.send($receiver, "__slash", [t2])), "_printString", [])]), "__comma", [unescape("%20sends/sec")]);
-return self;},
-args: [],
-source: unescape('tinyBenchmarks%20%0A%09%22Report%20the%20results%20of%20running%20the%20two%20tiny%20Squeak%20benchmarks.%0A%09ar%209/10/1999%3A%20Adjusted%20to%20run%20at%20least%201%20sec%20to%20get%20more%20stable%20results%22%0A%09%220%20tinyBenchmarks%22%0A%09%22On%20a%20292%20MHz%20G3%20Mac%3A%2022727272%20bytecodes/sec%3B%20984169%20sends/sec%22%0A%09%22On%20a%20400%20MHz%20PII/Win98%3A%20%2018028169%20bytecodes/sec%3B%201081272%20sends/sec%22%0A%09%7C%20t1%20t2%20r%20n1%20n2%20%7C%0A%09n1%20%3A%3D%201.%0A%09%5Bt1%20%3A%3D%20Date%20millisecondsToRun%3A%20%5Bn1%20benchmark%5D.%0A%09t1%20%3C%201000%5D%20whileTrue%3A%5Bn1%20%3A%3D%20n1%20*%202%5D.%20%22Note%3A%20%23benchmark%27s%20runtime%20is%20about%20O%28n%29%22%0A%0A%09n2%20%3A%3D%2016.%0A%09%5Bt2%20%3A%3D%20Date%20millisecondsToRun%3A%20%5Br%20%3A%3D%20n2%20benchFib%5D.%0A%09t2%20%3C%201000%5D%20whileTrue%3A%5Bn2%20%3A%3D%20n2%20+%201%5D.%20%0A%09%22Note%3A%20%23benchFib%27s%20runtime%20is%20about%20O%28k%5En%29%2C%0A%09%09where%20k%20is%20the%20golden%20number%20%3D%20%281%20+%205%20sqrt%29%20/%202%20%3D%201.618....%22%0A%0A%09%5E%20%28%28n1%20*%20500000%20*%201000%29%20/%20t1%29%20printString%2C%20%27%20bytecodes/sec%3B%20%27%2C%0A%09%20%20%28%28r%20*%201000%29%20/%20t2%29%20printString%2C%20%27%20sends/sec%27'),
-messageSends: ["whileTrue:", "millisecondsToRun:", "benchmark", unescape("%3C"), unescape("*"), "benchFib", unescape("+"), unescape("%2C"), "printString", unescape("/")],
-referencedClasses: ["Date"]
-}),
-smalltalk.Number);
-
 smalltalk.addMethod(
 unescape('_jsbenchFib'),
 smalltalk.method({
@@ -165,3 +140,28 @@ referencedClasses: ["Date"]
 }),
 smalltalk.Number);
 
+smalltalk.addMethod(
+unescape('_tinyBenchmarks'),
+smalltalk.method({
+selector: unescape('tinyBenchmarks'),
+category: '*Benchfib',
+fn: function (){
+var self=this;
+var t1=nil;
+var t2=nil;
+var r=nil;
+var n1=nil;
+var n2=nil;
+(n1=(1));
+(function(){while((function(){(t1=smalltalk.send((smalltalk.Date || Date), "_millisecondsToRun_", [(function(){return smalltalk.send(n1, "_benchmark", []);})]));return ((($receiver = t1).klass === smalltalk.Number) ? $receiver <(1000) : smalltalk.send($receiver, "__lt", [(1000)]));})()) {(function(){return (n1=((($receiver = n1).klass === smalltalk.Number) ? $receiver *(2) : smalltalk.send($receiver, "__star", [(2)])));})()}})();
+(n2=(16));
+(function(){while((function(){(t2=smalltalk.send((smalltalk.Date || Date), "_millisecondsToRun_", [(function(){return (r=smalltalk.send(n2, "_benchFib", []));})]));return ((($receiver = t2).klass === smalltalk.Number) ? $receiver <(1000) : smalltalk.send($receiver, "__lt", [(1000)]));})()) {(function(){return (n2=((($receiver = n2).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));})()}})();
+return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(((($receiver = ((($receiver = ((($receiver = n1).klass === smalltalk.Number) ? $receiver *(500000) : smalltalk.send($receiver, "__star", [(500000)]))).klass === smalltalk.Number) ? $receiver *(1000) : smalltalk.send($receiver, "__star", [(1000)]))).klass === smalltalk.Number) ? $receiver /t1 : smalltalk.send($receiver, "__slash", [t1])), "_printString", []), "__comma", [unescape("%20bytecodes/sec%3B%20")]), "__comma", [smalltalk.send(((($receiver = ((($receiver = r).klass === smalltalk.Number) ? $receiver *(1000) : smalltalk.send($receiver, "__star", [(1000)]))).klass === smalltalk.Number) ? $receiver /t2 : smalltalk.send($receiver, "__slash", [t2])), "_printString", [])]), "__comma", [unescape("%20sends/sec")]);
+return self;},
+args: [],
+source: unescape('tinyBenchmarks%20%0A%09%22Report%20the%20results%20of%20running%20the%20two%20tiny%20Squeak%20benchmarks.%0A%09ar%209/10/1999%3A%20Adjusted%20to%20run%20at%20least%201%20sec%20to%20get%20more%20stable%20results%22%0A%09%220%20tinyBenchmarks%22%0A%09%22On%20a%20292%20MHz%20G3%20Mac%3A%2022727272%20bytecodes/sec%3B%20984169%20sends/sec%22%0A%09%22On%20a%20400%20MHz%20PII/Win98%3A%20%2018028169%20bytecodes/sec%3B%201081272%20sends/sec%22%0A%09%7C%20t1%20t2%20r%20n1%20n2%20%7C%0A%09n1%20%3A%3D%201.%0A%09%5Bt1%20%3A%3D%20Date%20millisecondsToRun%3A%20%5Bn1%20benchmark%5D.%0A%09t1%20%3C%201000%5D%20whileTrue%3A%5Bn1%20%3A%3D%20n1%20*%202%5D.%20%22Note%3A%20%23benchmark%27s%20runtime%20is%20about%20O%28n%29%22%0A%0A%09n2%20%3A%3D%2016.%0A%09%5Bt2%20%3A%3D%20Date%20millisecondsToRun%3A%20%5Br%20%3A%3D%20n2%20benchFib%5D.%0A%09t2%20%3C%201000%5D%20whileTrue%3A%5Bn2%20%3A%3D%20n2%20+%201%5D.%20%0A%09%22Note%3A%20%23benchFib%27s%20runtime%20is%20about%20O%28k%5En%29%2C%0A%09%09where%20k%20is%20the%20golden%20number%20%3D%20%281%20+%205%20sqrt%29%20/%202%20%3D%201.618....%22%0A%0A%09%5E%20%28%28n1%20*%20500000%20*%201000%29%20/%20t1%29%20printString%2C%20%27%20bytecodes/sec%3B%20%27%2C%0A%09%20%20%28%28r%20*%201000%29%20/%20t2%29%20printString%2C%20%27%20sends/sec%27'),
+messageSends: ["whileTrue:", "millisecondsToRun:", "benchmark", unescape("%3C"), unescape("*"), "benchFib", unescape("+"), unescape("%2C"), "printString", unescape("/")],
+referencedClasses: ["Date"]
+}),
+smalltalk.Number);
+

File diff suppressed because it is too large
+ 876 - 912
js/Canvas.deploy.js


File diff suppressed because it is too large
+ 1527 - 1578
js/Canvas.js


+ 1 - 1
js/Compiler.deploy.js

@@ -198,7 +198,7 @@ fn: function (aClass, aStream){
 var self=this;
 (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_superclass", [])])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(unescape("%20subclass%3A%20%23"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [unescape("%09instanceVariableNames%3A%20%27")]);})(aStream);
 smalltalk.send(smalltalk.send(aClass, "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [each]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [" "]);})]);
-(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%27")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%09category%3A%20%27"), "__comma", [smalltalk.send(aClass, "_category", [])]), "__comma", [unescape("%27%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream);
+(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%27")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%09package%3A%20%27"), "__comma", [smalltalk.send(aClass, "_category", [])]), "__comma", [unescape("%27%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream);
 ((($receiver = smalltalk.send(smalltalk.send(aClass, "_comment", []), "_notEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%21"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])]), "__comma", [unescape("%20commentStamp%21")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(self, "_chunkEscape_", [smalltalk.send(aClass, "_comment", [])]), "__comma", [unescape("%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%21"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])]), "__comma", [unescape("%20commentStamp%21")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(self, "_chunkEscape_", [smalltalk.send(aClass, "_comment", [])]), "__comma", [unescape("%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream);})]));
 smalltalk.send(aStream, "_lf", []);
 return self;}

+ 2 - 2
js/Compiler.js

@@ -274,12 +274,12 @@ fn: function (aClass, aStream){
 var self=this;
 (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_superclass", [])])]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(unescape("%20subclass%3A%20%23"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [unescape("%09instanceVariableNames%3A%20%27")]);})(aStream);
 smalltalk.send(smalltalk.send(aClass, "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [each]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [" "]);})]);
-(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%27")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%09category%3A%20%27"), "__comma", [smalltalk.send(aClass, "_category", [])]), "__comma", [unescape("%27%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream);
+(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%27")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%09package%3A%20%27"), "__comma", [smalltalk.send(aClass, "_category", [])]), "__comma", [unescape("%27%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream);
 ((($receiver = smalltalk.send(smalltalk.send(aClass, "_comment", []), "_notEmpty", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%21"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])]), "__comma", [unescape("%20commentStamp%21")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(self, "_chunkEscape_", [smalltalk.send(aClass, "_comment", [])]), "__comma", [unescape("%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%21"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])]), "__comma", [unescape("%20commentStamp%21")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(self, "_chunkEscape_", [smalltalk.send(aClass, "_comment", [])]), "__comma", [unescape("%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream);})]));
 smalltalk.send(aStream, "_lf", []);
 return self;},
 args: ["aClass", "aStream"],
-source: unescape('exportDefinitionOf%3A%20aClass%20on%3A%20aStream%0A%09%22Chunk%20format.%22%0A%0A%09aStream%20%0A%09%20%20%20%20nextPutAll%3A%20%28self%20classNameFor%3A%20aClass%20superclass%29%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%20subclass%3A%20%23%27%2C%20%28self%20classNameFor%3A%20aClass%29%3B%20lf%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%09instanceVariableNames%3A%20%27%27%27.%0A%09aClass%20instanceVariableNames%20%0A%09%20%20%20%20do%3A%20%5B%3Aeach%20%7C%20aStream%20nextPutAll%3A%20each%5D%0A%09%20%20%20%20separatedBy%3A%20%5BaStream%20nextPutAll%3A%20%27%20%27%5D.%0A%09aStream%09%0A%09%20%20%20%20nextPutAll%3A%20%27%27%27%27%3B%20lf%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%09category%3A%20%27%27%27%2C%20aClass%20category%2C%20%27%27%27%21%27%3B%20lf.%0A%20%09aClass%20comment%20notEmpty%20ifTrue%3A%20%5B%0A%09%20%20%20%20aStream%20%0A%09%09nextPutAll%3A%20%27%21%27%2C%20%28self%20classNameFor%3A%20aClass%29%2C%20%27%20commentStamp%21%27%3Blf%3B%0A%09%09nextPutAll%3A%20%28self%20chunkEscape%3A%20aClass%20comment%29%2C%20%27%21%27%3Blf%5D.%0A%09aStream%20lf'),
+source: unescape('exportDefinitionOf%3A%20aClass%20on%3A%20aStream%0A%20%20%20%20%22Chunk%20format.%22%0A%0A%20%20%20%20aStream%20%0A%20%20%20%20%20%20%20%20nextPutAll%3A%20%28self%20classNameFor%3A%20aClass%20superclass%29%3B%0A%20%20%20%20%20%20%20%20nextPutAll%3A%20%27%20subclass%3A%20%23%27%2C%20%28self%20classNameFor%3A%20aClass%29%3B%20lf%3B%0A%20%20%20%20%20%20%20%20nextPutAll%3A%20%27%09instanceVariableNames%3A%20%27%27%27.%0A%20%20%20%20aClass%20instanceVariableNames%20%0A%20%20%20%20%20%20%20%20do%3A%20%5B%3Aeach%20%7C%20aStream%20nextPutAll%3A%20each%5D%0A%20%20%20%20%20%20%20%20separatedBy%3A%20%5BaStream%20nextPutAll%3A%20%27%20%27%5D.%0A%20%20%20%20aStream%20%0A%20%20%20%20%20%20%20%20nextPutAll%3A%20%27%27%27%27%3B%20lf%3B%0A%20%20%20%20%20%20%20%20nextPutAll%3A%20%27%09package%3A%20%27%27%27%2C%20aClass%20category%2C%20%27%27%27%21%27%3B%20lf.%0A%20%20%20%20aClass%20comment%20notEmpty%20ifTrue%3A%20%5B%0A%20%20%20%20%20%20%20%20aStream%20%0A%20%20%20%20%20%20%20%20nextPutAll%3A%20%27%21%27%2C%20%28self%20classNameFor%3A%20aClass%29%2C%20%27%20commentStamp%21%27%3Blf%3B%0A%20%20%20%20%20%20%20%20nextPutAll%3A%20%28self%20chunkEscape%3A%20aClass%20comment%29%2C%20%27%21%27%3Blf%5D.%0A%20%20%20%20aStream%20lf'),
 messageSends: ["nextPutAll:", "classNameFor:", "superclass", unescape("%2C"), "lf", "do:separatedBy:", "instanceVariableNames", "category", "ifTrue:", "notEmpty", "comment", "chunkEscape:"],
 referencedClasses: []
 }),

+ 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);

+ 202 - 200
js/Kernel-Classes.deploy.js

@@ -1,132 +1,131 @@
 smalltalk.addPackage('Kernel-Classes', {});
 smalltalk.addClass('Behavior', smalltalk.Object, [], 'Kernel-Classes');
 smalltalk.addMethod(
-unescape('_new'),
+unescape('_addCompiledMethod_'),
 smalltalk.method({
-selector: unescape('new'),
-fn: function (){
+selector: unescape('addCompiledMethod%3A'),
+fn: function (aMethod){
 var self=this;
-return smalltalk.send(smalltalk.send(self, "_basicNew", []), "_initialize", []);
+smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self);
 return self;}
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_basicNew'),
+unescape('_allInstanceVariableNames'),
 smalltalk.method({
-selector: unescape('basicNew'),
+selector: unescape('allInstanceVariableNames'),
 fn: function (){
 var self=this;
-return new self.fn();
+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.Behavior);
 
 smalltalk.addMethod(
-unescape('_name'),
+unescape('_allSubclasses'),
 smalltalk.method({
-selector: unescape('name'),
+selector: unescape('allSubclasses'),
 fn: function (){
 var self=this;
-return self.className || nil;
+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.Behavior);
 
 smalltalk.addMethod(
-unescape('_superclass'),
+unescape('_basicNew'),
 smalltalk.method({
-selector: unescape('superclass'),
+selector: unescape('basicNew'),
 fn: function (){
 var self=this;
-return self.superclass || nil;
+return new self.fn();
 return self;}
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_subclasses'),
+unescape('_comment'),
 smalltalk.method({
-selector: unescape('subclasses'),
+selector: unescape('comment'),
 fn: function (){
 var self=this;
-return smalltalk.subclasses(self);
+return (($receiver = smalltalk.send(self, "_basicAt_", ["comment"])) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver;
 return self;}
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_allSubclasses'),
+unescape('_comment_'),
 smalltalk.method({
-selector: unescape('allSubclasses'),
-fn: function (){
+selector: unescape('comment%3A'),
+fn: function (aString){
 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;
+smalltalk.send(self, "_basicAt_put_", ["comment", aString]);
 return self;}
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_withAllSubclasses'),
+unescape('_commentStamp'),
 smalltalk.method({
-selector: unescape('withAllSubclasses'),
+selector: unescape('commentStamp'),
 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 (function($rec){smalltalk.send($rec, "_class_", [self]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCommentReader || ClassCommentReader), "_new", []));
 return self;}
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_prototype'),
+unescape('_commentStamp_prior_'),
 smalltalk.method({
-selector: unescape('prototype'),
-fn: function (){
+selector: unescape('commentStamp%3Aprior%3A'),
+fn: function (aStamp, prior){
 var self=this;
-return self.fn.prototype;
+return smalltalk.send(self, "_commentStamp", []);
 return self;}
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_methodDictionary'),
+unescape('_compile_'),
 smalltalk.method({
-selector: unescape('methodDictionary'),
-fn: function (){
+selector: unescape('compile%3A'),
+fn: function (aString){
 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;
+smalltalk.send(self, "_compile_category_", [aString, ""]);
 return self;}
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_methodsFor_'),
+unescape('_compile_category_'),
 smalltalk.method({
-selector: unescape('methodsFor%3A'),
-fn: function (aString){
+selector: unescape('compile%3Acategory%3A'),
+fn: function (aString, anotherString){
 var self=this;
-return (function($rec){smalltalk.send($rec, "_class_category_", [self, aString]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCategoryReader || ClassCategoryReader), "_new", []));
+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.Behavior);
 
 smalltalk.addMethod(
-unescape('_addCompiledMethod_'),
+unescape('_inheritsFrom_'),
 smalltalk.method({
-selector: unescape('addCompiledMethod%3A'),
-fn: function (aMethod){
+selector: unescape('inheritsFrom%3A'),
+fn: function (aClass){
 var self=this;
-smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self);
+return smalltalk.send(smalltalk.send(aClass, "_allSubclasses", []), "_includes_", [self]);
 return self;}
 }),
 smalltalk.Behavior);
@@ -143,58 +142,74 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_comment'),
+unescape('_methodAt_'),
 smalltalk.method({
-selector: unescape('comment'),
+selector: unescape('methodAt%3A'),
+fn: function (aString){
+var self=this;
+return smalltalk.methods(self)[aString];
+return self;}
+}),
+smalltalk.Behavior);
+
+smalltalk.addMethod(
+unescape('_methodDictionary'),
+smalltalk.method({
+selector: unescape('methodDictionary'),
 fn: function (){
 var self=this;
-return (($receiver = smalltalk.send(self, "_basicAt_", ["comment"])) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver;
+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.Behavior);
 
 smalltalk.addMethod(
-unescape('_comment_'),
+unescape('_methodsFor_'),
 smalltalk.method({
-selector: unescape('comment%3A'),
+selector: unescape('methodsFor%3A'),
 fn: function (aString){
 var self=this;
-smalltalk.send(self, "_basicAt_put_", ["comment", aString]);
+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('_commentStamp'),
+unescape('_methodsFor_stamp_'),
 smalltalk.method({
-selector: unescape('commentStamp'),
-fn: function (){
+selector: unescape('methodsFor%3Astamp%3A'),
+fn: function (aString, aStamp){
 var self=this;
-return (function($rec){smalltalk.send($rec, "_class_", [self]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCommentReader || ClassCommentReader), "_new", []));
+return smalltalk.send(self, "_methodsFor_", [aString]);
 return self;}
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_removeCompiledMethod_'),
+unescape('_name'),
 smalltalk.method({
-selector: unescape('removeCompiledMethod%3A'),
-fn: function (aMethod){
+selector: unescape('name'),
+fn: function (){
 var self=this;
-delete self.fn.prototype[aMethod.selector._asSelector()];
-	delete self.fn.prototype.methods[aMethod.selector];
-	smalltalk.init(self);;
+return self.className || nil;
 return self;}
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_inheritsFrom_'),
+unescape('_new'),
 smalltalk.method({
-selector: unescape('inheritsFrom%3A'),
-fn: function (aClass){
+selector: unescape('new'),
+fn: function (){
 var self=this;
-return smalltalk.send(smalltalk.send(aClass, "_allSubclasses", []), "_includes_", [self]);
+return smalltalk.send(smalltalk.send(self, "_basicNew", []), "_initialize", []);
 return self;}
 }),
 smalltalk.Behavior);
@@ -228,73 +243,58 @@ return self;}
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_allInstanceVariableNames'),
+unescape('_prototype'),
 smalltalk.method({
-selector: unescape('allInstanceVariableNames'),
+selector: unescape('prototype'),
 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 self;}
-}),
-smalltalk.Behavior);
-
-smalltalk.addMethod(
-unescape('_methodAt_'),
-smalltalk.method({
-selector: unescape('methodAt%3A'),
-fn: function (aString){
-var self=this;
-return smalltalk.methods(self)[aString];
+return self.fn.prototype;
 return self;}
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_methodsFor_stamp_'),
+unescape('_removeCompiledMethod_'),
 smalltalk.method({
-selector: unescape('methodsFor%3Astamp%3A'),
-fn: function (aString, aStamp){
+selector: unescape('removeCompiledMethod%3A'),
+fn: function (aMethod){
 var self=this;
-return smalltalk.send(self, "_methodsFor_", [aString]);
+delete self.fn.prototype[aMethod.selector._asSelector()];
+	delete self.fn.prototype.methods[aMethod.selector];
+	smalltalk.init(self);;
 return self;}
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_commentStamp_prior_'),
+unescape('_subclasses'),
 smalltalk.method({
-selector: unescape('commentStamp%3Aprior%3A'),
-fn: function (aStamp, prior){
+selector: unescape('subclasses'),
+fn: function (){
 var self=this;
-return smalltalk.send(self, "_commentStamp", []);
+return smalltalk.subclasses(self);
 return self;}
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_compile_'),
+unescape('_superclass'),
 smalltalk.method({
-selector: unescape('compile%3A'),
-fn: function (aString){
+selector: unescape('superclass'),
+fn: function (){
 var self=this;
-smalltalk.send(self, "_compile_category_", [aString, ""]);
+return self.superclass || nil;
 return self;}
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_compile_category_'),
+unescape('_withAllSubclasses'),
 smalltalk.method({
-selector: unescape('compile%3Acategory%3A'),
-fn: function (aString, anotherString){
+selector: unescape('withAllSubclasses'),
+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 (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);
@@ -314,35 +314,34 @@ return self;}
 smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_subclass_instanceVariableNames_'),
+unescape('_isClass'),
 smalltalk.method({
-selector: unescape('subclass%3AinstanceVariableNames%3A'),
-fn: function (aString, anotherString){
+selector: unescape('isClass'),
+fn: function (){
 var self=this;
-return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, anotherString, nil]);
+return true;
 return self;}
 }),
 smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_subclass_instanceVariableNames_category_'),
+unescape('_package'),
 smalltalk.method({
-selector: unescape('subclass%3AinstanceVariableNames%3Acategory%3A'),
-fn: function (aString, aString2, aString3){
+selector: unescape('package'),
+fn: function (){
 var self=this;
-smalltalk.send(self, "_deprecatedAPI", []);
-return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]);
+return self.pkg;
 return self;}
 }),
 smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_isClass'),
+unescape('_package_'),
 smalltalk.method({
-selector: unescape('isClass'),
-fn: function (){
+selector: unescape('package%3A'),
+fn: function (aPackage){
 var self=this;
-return true;
+self.pkg = aPackage;
 return self;}
 }),
 smalltalk.Class);
@@ -374,34 +373,35 @@ return self;}
 smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_subclass_instanceVariableNames_classVariableNames_poolDictionaries_category_'),
+unescape('_subclass_instanceVariableNames_'),
 smalltalk.method({
-selector: unescape('subclass%3AinstanceVariableNames%3AclassVariableNames%3ApoolDictionaries%3Acategory%3A'),
-fn: function (aString, aString2, classVars, pools, aString3){
+selector: unescape('subclass%3AinstanceVariableNames%3A'),
+fn: function (aString, anotherString){
 var self=this;
-return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]);
+return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, anotherString, nil]);
 return self;}
 }),
 smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_package'),
+unescape('_subclass_instanceVariableNames_category_'),
 smalltalk.method({
-selector: unescape('package'),
-fn: function (){
+selector: unescape('subclass%3AinstanceVariableNames%3Acategory%3A'),
+fn: function (aString, aString2, aString3){
 var self=this;
-return self.pkg;
+smalltalk.send(self, "_deprecatedAPI", []);
+return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]);
 return self;}
 }),
 smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_package_'),
+unescape('_subclass_instanceVariableNames_classVariableNames_poolDictionaries_category_'),
 smalltalk.method({
-selector: unescape('package%3A'),
-fn: function (aPackage){
+selector: unescape('subclass%3AinstanceVariableNames%3AclassVariableNames%3ApoolDictionaries%3Acategory%3A'),
+fn: function (aString, aString2, classVars, pools, aString3){
 var self=this;
-self.pkg = aPackage;
+return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]);
 return self;}
 }),
 smalltalk.Class);
@@ -468,12 +468,25 @@ smalltalk.Metaclass);
 
 smalltalk.addClass('ClassBuilder', smalltalk.Object, [], 'Kernel-Classes');
 smalltalk.addMethod(
-unescape('_superclass_subclass_'),
+unescape('_addSubclassOf_named_instanceVariableNames_'),
 smalltalk.method({
-selector: unescape('superclass%3Asubclass%3A'),
-fn: function (aClass, aString){
+selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3A'),
+fn: function (aClass, aString, aCollection){
 var self=this;
-return smalltalk.send(self, "_superclass_subclass_instanceVariableNames_package_", [aClass, aString, "", nil]);
+smalltalk.addClass(aString, aClass, aCollection);
+	    return smalltalk[aString];
+return self;}
+}),
+smalltalk.ClassBuilder);
+
+smalltalk.addMethod(
+unescape('_addSubclassOf_named_instanceVariableNames_package_'),
+smalltalk.method({
+selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3Apackage%3A'),
+fn: function (aClass, aString, aCollection, packageName){
+var self=this;
+smalltalk.addClass(aString, aClass, aCollection, packageName);
+	    return smalltalk[aString];
 return self;}
 }),
 smalltalk.ClassBuilder);
@@ -492,24 +505,29 @@ return self;}
 smalltalk.ClassBuilder);
 
 smalltalk.addMethod(
-unescape('_instanceVariableNamesFor_'),
+unescape('_copyClass_named_'),
 smalltalk.method({
-selector: unescape('instanceVariableNamesFor%3A'),
-fn: function (aString){
+selector: unescape('copyClass%3Anamed%3A'),
+fn: function (aClass, aString){
 var self=this;
-return smalltalk.send(smalltalk.send(aString, "_tokenize_", [" "]), "_reject_", [(function(each){return smalltalk.send(each, "_isEmpty", []);})]);
+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.ClassBuilder);
 
 smalltalk.addMethod(
-unescape('_addSubclassOf_named_instanceVariableNames_'),
+unescape('_instanceVariableNamesFor_'),
 smalltalk.method({
-selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3A'),
-fn: function (aClass, aString, aCollection){
+selector: unescape('instanceVariableNamesFor%3A'),
+fn: function (aString){
 var self=this;
-smalltalk.addClass(aString, aClass, aCollection);
-	    return smalltalk[aString];
+return smalltalk.send(smalltalk.send(aString, "_tokenize_", [" "]), "_reject_", [(function(each){return smalltalk.send(each, "_isEmpty", []);})]);
 return self;}
 }),
 smalltalk.ClassBuilder);
@@ -525,6 +543,17 @@ return self;}
 }),
 smalltalk.ClassBuilder);
 
+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.ClassBuilder);
+
 smalltalk.addMethod(
 unescape('_superclass_subclass_instanceVariableNames_package_'),
 smalltalk.method({
@@ -539,38 +568,37 @@ return self;}
 }),
 smalltalk.ClassBuilder);
 
+
+
+smalltalk.addClass('ClassCategoryReader', smalltalk.Object, ['class', 'category', 'chunkParser'], 'Kernel-Classes');
 smalltalk.addMethod(
-unescape('_addSubclassOf_named_instanceVariableNames_package_'),
+unescape('_class_category_'),
 smalltalk.method({
-selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3Apackage%3A'),
-fn: function (aClass, aString, aCollection, packageName){
+selector: unescape('class%3Acategory%3A'),
+fn: function (aClass, aString){
 var self=this;
-smalltalk.addClass(aString, aClass, aCollection, packageName);
-	    return smalltalk[aString];
+(self['@class']=aClass);
+(self['@category']=aString);
 return self;}
 }),
-smalltalk.ClassBuilder);
+smalltalk.ClassCategoryReader);
 
 smalltalk.addMethod(
-unescape('_copyClass_named_'),
+unescape('_compileMethod_'),
 smalltalk.method({
-selector: unescape('copyClass%3Anamed%3A'),
-fn: function (aClass, aString){
+selector: unescape('compileMethod%3A'),
+fn: function (aString){
 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 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.ClassBuilder);
-
-
+smalltalk.ClassCategoryReader);
 
-smalltalk.addClass('ClassCategoryReader', smalltalk.Object, ['class', 'category', 'chunkParser'], 'Kernel-Classes');
 smalltalk.addMethod(
 unescape('_initialize'),
 smalltalk.method({
@@ -583,18 +611,6 @@ return self;}
 }),
 smalltalk.ClassCategoryReader);
 
-smalltalk.addMethod(
-unescape('_class_category_'),
-smalltalk.method({
-selector: unescape('class%3Acategory%3A'),
-fn: function (aClass, aString){
-var self=this;
-(self['@class']=aClass);
-(self['@category']=aString);
-return self;}
-}),
-smalltalk.ClassCategoryReader);
-
 smalltalk.addMethod(
 unescape('_scanFrom_'),
 smalltalk.method({
@@ -607,20 +623,6 @@ return self;}
 }),
 smalltalk.ClassCategoryReader);
 
-smalltalk.addMethod(
-unescape('_compileMethod_'),
-smalltalk.method({
-selector: unescape('compileMethod%3A'),
-fn: function (aString){
-var self=this;
-var method=nil;
-(method=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [aString, self['@class']]));
-smalltalk.send(method, "_category_", [self['@category']]);
-smalltalk.send(self['@class'], "_addCompiledMethod_", [method]);
-return self;}
-}),
-smalltalk.ClassCategoryReader);
-
 
 
 smalltalk.addClass('ClassCommentReader', smalltalk.Object, ['class', 'chunkParser'], 'Kernel-Classes');
@@ -636,26 +638,26 @@ return self;}
 smalltalk.ClassCommentReader);
 
 smalltalk.addMethod(
-unescape('_scanFrom_'),
+unescape('_initialize'),
 smalltalk.method({
-selector: unescape('scanFrom%3A'),
-fn: function (aChunkParser){
+selector: unescape('initialize'),
+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]);})]));
+smalltalk.send(self, "_initialize", [], smalltalk.Object);
+(self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", []));
 return self;}
 }),
 smalltalk.ClassCommentReader);
 
 smalltalk.addMethod(
-unescape('_initialize'),
+unescape('_scanFrom_'),
 smalltalk.method({
-selector: unescape('initialize'),
-fn: function (){
+selector: unescape('scanFrom%3A'),
+fn: function (aChunkParser){
 var self=this;
-smalltalk.send(self, "_initialize", [], smalltalk.Object);
-(self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", []));
+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.ClassCommentReader);

+ 329 - 327
js/Kernel-Classes.js

@@ -2,187 +2,186 @@ smalltalk.addPackage('Kernel-Classes', {});
 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'),
+unescape('_addCompiledMethod_'),
 smalltalk.method({
-selector: unescape('new'),
-category: 'instance creation',
-fn: function (){
+selector: unescape('addCompiledMethod%3A'),
+category: 'compiling',
+fn: function (aMethod){
 var self=this;
-return smalltalk.send(smalltalk.send(self, "_basicNew", []), "_initialize", []);
+smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self);
 return self;},
-args: [],
-source: unescape('new%0A%09%5Eself%20basicNew%20initialize'),
-messageSends: ["initialize", "basicNew"],
+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.Behavior);
 
 smalltalk.addMethod(
-unescape('_basicNew'),
+unescape('_allInstanceVariableNames'),
 smalltalk.method({
-selector: unescape('basicNew'),
-category: 'instance creation',
+selector: unescape('allInstanceVariableNames'),
+category: 'accessing',
 fn: function (){
 var self=this;
-return new self.fn();
+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: [],
-source: unescape('basicNew%0A%09%3Creturn%20new%20self.fn%28%29%3E'),
-messageSends: [],
+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('_name'),
+unescape('_allSubclasses'),
 smalltalk.method({
-selector: unescape('name'),
+selector: unescape('allSubclasses'),
 category: 'accessing',
 fn: function (){
 var self=this;
-return self.className || nil;
+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('name%0A%09%3Creturn%20self.className%20%7C%7C%20nil%3E'),
-messageSends: [],
+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.Behavior);
 
 smalltalk.addMethod(
-unescape('_superclass'),
+unescape('_basicNew'),
 smalltalk.method({
-selector: unescape('superclass'),
-category: 'accessing',
+selector: unescape('basicNew'),
+category: 'instance creation',
 fn: function (){
 var self=this;
-return self.superclass || nil;
+return new self.fn();
 return self;},
 args: [],
-source: unescape('superclass%0A%09%3Creturn%20self.superclass%20%7C%7C%20nil%3E'),
+source: unescape('basicNew%0A%09%3Creturn%20new%20self.fn%28%29%3E'),
 messageSends: [],
 referencedClasses: []
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_subclasses'),
+unescape('_comment'),
 smalltalk.method({
-selector: unescape('subclasses'),
+selector: unescape('comment'),
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.subclasses(self);
+return (($receiver = smalltalk.send(self, "_basicAt_", ["comment"])) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver;
 return self;},
 args: [],
-source: unescape('subclasses%0A%09%3Creturn%20smalltalk.subclasses%28self%29%3E'),
-messageSends: [],
+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.Behavior);
 
 smalltalk.addMethod(
-unescape('_allSubclasses'),
+unescape('_comment_'),
 smalltalk.method({
-selector: unescape('allSubclasses'),
+selector: unescape('comment%3A'),
 category: 'accessing',
-fn: function (){
+fn: function (aString){
 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;
+smalltalk.send(self, "_basicAt_put_", ["comment", aString]);
 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"],
+args: ["aString"],
+source: unescape('comment%3A%20aString%0A%20%20%20%20self%20basicAt%3A%20%27comment%27%20put%3A%20aString'),
+messageSends: ["basicAt:put:"],
 referencedClasses: []
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_withAllSubclasses'),
+unescape('_commentStamp'),
 smalltalk.method({
-selector: unescape('withAllSubclasses'),
+selector: unescape('commentStamp'),
 category: 'accessing',
 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 (function($rec){smalltalk.send($rec, "_class_", [self]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCommentReader || ClassCommentReader), "_new", []));
 return self;},
 args: [],
-source: unescape('withAllSubclasses%0A%09%5E%28Array%20with%3A%20self%29%20addAll%3A%20self%20allSubclasses%3B%20yourself'),
-messageSends: ["addAll:", "allSubclasses", "yourself", "with:"],
-referencedClasses: ["Array"]
+source: unescape('commentStamp%0A%20%20%20%20%5EClassCommentReader%20new%0A%09class%3A%20self%3B%0A%09yourself'),
+messageSends: ["class:", "yourself", "new"],
+referencedClasses: ["ClassCommentReader"]
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_prototype'),
+unescape('_commentStamp_prior_'),
 smalltalk.method({
-selector: unescape('prototype'),
+selector: unescape('commentStamp%3Aprior%3A'),
 category: 'accessing',
-fn: function (){
+fn: function (aStamp, prior){
 var self=this;
-return self.fn.prototype;
+return smalltalk.send(self, "_commentStamp", []);
 return self;},
-args: [],
-source: unescape('prototype%0A%09%3Creturn%20self.fn.prototype%3E'),
-messageSends: [],
+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.Behavior);
 
 smalltalk.addMethod(
-unescape('_methodDictionary'),
+unescape('_compile_'),
 smalltalk.method({
-selector: unescape('methodDictionary'),
-category: 'accessing',
-fn: function (){
+selector: unescape('compile%3A'),
+category: 'compiling',
+fn: function (aString){
 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;
+smalltalk.send(self, "_compile_category_", [aString, ""]);
 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'),
-messageSends: [],
+args: ["aString"],
+source: unescape('compile%3A%20aString%0A%09self%20compile%3A%20aString%20category%3A%20%27%27'),
+messageSends: ["compile:category:"],
 referencedClasses: []
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_methodsFor_'),
+unescape('_compile_category_'),
 smalltalk.method({
-selector: unescape('methodsFor%3A'),
-category: 'accessing',
-fn: function (aString){
+selector: unescape('compile%3Acategory%3A'),
+category: 'compiling',
+fn: function (aString, anotherString){
 var self=this;
-return (function($rec){smalltalk.send($rec, "_class_category_", [self, aString]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCategoryReader || ClassCategoryReader), "_new", []));
+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: ["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: ["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.Behavior);
 
 smalltalk.addMethod(
-unescape('_addCompiledMethod_'),
+unescape('_inheritsFrom_'),
 smalltalk.method({
-selector: unescape('addCompiledMethod%3A'),
-category: 'compiling',
-fn: function (aMethod){
+selector: unescape('inheritsFrom%3A'),
+category: 'testing',
+fn: function (aClass){
 var self=this;
-smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self);
+return smalltalk.send(smalltalk.send(aClass, "_allSubclasses", []), "_includes_", [self]);
 return self;},
-args: ["aMethod"],
-source: unescape('addCompiledMethod%3A%20aMethod%0A%09%3Csmalltalk.addMethod%28aMethod.selector._asSelector%28%29%2C%20aMethod%2C%20self%29%3E'),
-messageSends: [],
+args: ["aClass"],
+source: unescape('inheritsFrom%3A%20aClass%0A%09%5EaClass%20allSubclasses%20includes%3A%20self'),
+messageSends: ["includes:", "allSubclasses"],
 referencedClasses: []
 }),
 smalltalk.Behavior);
@@ -204,83 +203,104 @@ referencedClasses: []
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_comment'),
+unescape('_methodAt_'),
 smalltalk.method({
-selector: unescape('comment'),
+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'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Behavior);
+
+smalltalk.addMethod(
+unescape('_methodDictionary'),
+smalltalk.method({
+selector: unescape('methodDictionary'),
 category: 'accessing',
 fn: function (){
 var self=this;
-return (($receiver = smalltalk.send(self, "_basicAt_", ["comment"])) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver;
+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: [],
-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:"],
+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.Behavior);
 
 smalltalk.addMethod(
-unescape('_comment_'),
+unescape('_methodsFor_'),
 smalltalk.method({
-selector: unescape('comment%3A'),
+selector: unescape('methodsFor%3A'),
 category: 'accessing',
 fn: function (aString){
 var self=this;
-smalltalk.send(self, "_basicAt_put_", ["comment", aString]);
+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('comment%3A%20aString%0A%20%20%20%20self%20basicAt%3A%20%27comment%27%20put%3A%20aString'),
-messageSends: ["basicAt:put:"],
-referencedClasses: []
+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('_commentStamp'),
+unescape('_methodsFor_stamp_'),
 smalltalk.method({
-selector: unescape('commentStamp'),
+selector: unescape('methodsFor%3Astamp%3A'),
 category: 'accessing',
-fn: function (){
+fn: function (aString, aStamp){
 var self=this;
-return (function($rec){smalltalk.send($rec, "_class_", [self]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.ClassCommentReader || ClassCommentReader), "_new", []));
+return smalltalk.send(self, "_methodsFor_", [aString]);
 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", "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('_removeCompiledMethod_'),
+unescape('_name'),
 smalltalk.method({
-selector: unescape('removeCompiledMethod%3A'),
-category: 'compiling',
-fn: function (aMethod){
+selector: unescape('name'),
+category: 'accessing',
+fn: function (){
 var self=this;
-delete self.fn.prototype[aMethod.selector._asSelector()];
-	delete self.fn.prototype.methods[aMethod.selector];
-	smalltalk.init(self);;
+return self.className || nil;
 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'),
+args: [],
+source: unescape('name%0A%09%3Creturn%20self.className%20%7C%7C%20nil%3E'),
 messageSends: [],
 referencedClasses: []
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_inheritsFrom_'),
+unescape('_new'),
 smalltalk.method({
-selector: unescape('inheritsFrom%3A'),
-category: 'testing',
-fn: function (aClass){
+selector: unescape('new'),
+category: 'instance creation',
+fn: function (){
 var self=this;
-return smalltalk.send(smalltalk.send(aClass, "_allSubclasses", []), "_includes_", [self]);
+return smalltalk.send(smalltalk.send(self, "_basicNew", []), "_initialize", []);
 return self;},
-args: ["aClass"],
-source: unescape('inheritsFrom%3A%20aClass%0A%09%5EaClass%20allSubclasses%20includes%3A%20self'),
-messageSends: ["includes:", "allSubclasses"],
+args: [],
+source: unescape('new%0A%09%5Eself%20basicNew%20initialize'),
+messageSends: ["initialize", "basicNew"],
 referencedClasses: []
 }),
 smalltalk.Behavior);
@@ -324,104 +344,84 @@ referencedClasses: ["HashedCollection", "Array"]
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_allInstanceVariableNames'),
+unescape('_prototype'),
 smalltalk.method({
-selector: unescape('allInstanceVariableNames'),
+selector: unescape('prototype'),
 category: 'accessing',
 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 self.fn.prototype;
 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"],
+source: unescape('prototype%0A%09%3Creturn%20self.fn.prototype%3E'),
+messageSends: [],
 referencedClasses: []
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_methodAt_'),
+unescape('_removeCompiledMethod_'),
 smalltalk.method({
-selector: unescape('methodAt%3A'),
-category: 'accessing',
-fn: function (aString){
+selector: unescape('removeCompiledMethod%3A'),
+category: 'compiling',
+fn: function (aMethod){
 var self=this;
-return smalltalk.methods(self)[aString];
+delete self.fn.prototype[aMethod.selector._asSelector()];
+	delete self.fn.prototype.methods[aMethod.selector];
+	smalltalk.init(self);;
 return self;},
-args: ["aString"],
-source: unescape('methodAt%3A%20aString%0A%09%3Creturn%20smalltalk.methods%28self%29%5BaString%5D%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: []
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_methodsFor_stamp_'),
+unescape('_subclasses'),
 smalltalk.method({
-selector: unescape('methodsFor%3Astamp%3A'),
+selector: unescape('subclasses'),
 category: 'accessing',
-fn: function (aString, aStamp){
+fn: function (){
 var self=this;
-return smalltalk.send(self, "_methodsFor_", [aString]);
+return smalltalk.subclasses(self);
 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('subclasses%0A%09%3Creturn%20smalltalk.subclasses%28self%29%3E'),
+messageSends: [],
 referencedClasses: []
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_commentStamp_prior_'),
+unescape('_superclass'),
 smalltalk.method({
-selector: unescape('commentStamp%3Aprior%3A'),
+selector: unescape('superclass'),
 category: 'accessing',
-fn: function (aStamp, prior){
-var self=this;
-return smalltalk.send(self, "_commentStamp", []);
-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"],
-referencedClasses: []
-}),
-smalltalk.Behavior);
-
-smalltalk.addMethod(
-unescape('_compile_'),
-smalltalk.method({
-selector: unescape('compile%3A'),
-category: 'compiling',
-fn: function (aString){
+fn: function (){
 var self=this;
-smalltalk.send(self, "_compile_category_", [aString, ""]);
+return self.superclass || nil;
 return self;},
-args: ["aString"],
-source: unescape('compile%3A%20aString%0A%09self%20compile%3A%20aString%20category%3A%20%27%27'),
-messageSends: ["compile:category:"],
+args: [],
+source: unescape('superclass%0A%09%3Creturn%20self.superclass%20%7C%7C%20nil%3E'),
+messageSends: [],
 referencedClasses: []
 }),
 smalltalk.Behavior);
 
 smalltalk.addMethod(
-unescape('_compile_category_'),
+unescape('_withAllSubclasses'),
 smalltalk.method({
-selector: unescape('compile%3Acategory%3A'),
-category: 'compiling',
-fn: function (aString, anotherString){
+selector: unescape('withAllSubclasses'),
+category: 'accessing',
+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 (function($rec){smalltalk.send($rec, "_addAll_", [smalltalk.send(self, "_allSubclasses", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.Array || Array), "_with_", [self]));
 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: [],
+source: unescape('withAllSubclasses%0A%09%5E%28Array%20with%3A%20self%29%20addAll%3A%20self%20allSubclasses%3B%20yourself'),
+messageSends: ["addAll:", "allSubclasses", "yourself", "with:"],
+referencedClasses: ["Array"]
 }),
 smalltalk.Behavior);
 
@@ -446,49 +446,48 @@ referencedClasses: []
 smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_subclass_instanceVariableNames_'),
+unescape('_isClass'),
 smalltalk.method({
-selector: unescape('subclass%3AinstanceVariableNames%3A'),
-category: 'class creation',
-fn: function (aString, anotherString){
+selector: unescape('isClass'),
+category: 'testing',
+fn: function (){
 var self=this;
-return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, anotherString, nil]);
+return true;
 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: [],
+source: unescape('isClass%0A%09%5Etrue'),
+messageSends: [],
 referencedClasses: []
 }),
 smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_subclass_instanceVariableNames_category_'),
+unescape('_package'),
 smalltalk.method({
-selector: unescape('subclass%3AinstanceVariableNames%3Acategory%3A'),
-category: 'class creation',
-fn: function (aString, aString2, aString3){
+selector: unescape('package'),
+category: 'accessing',
+fn: function (){
 var self=this;
-smalltalk.send(self, "_deprecatedAPI", []);
-return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]);
+return self.pkg;
 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: [],
+source: unescape('package%0A%09%3Creturn%20self.pkg%3E'),
+messageSends: [],
 referencedClasses: []
 }),
 smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_isClass'),
-smalltalk.method({
-selector: unescape('isClass'),
-category: 'testing',
-fn: function (){
+unescape('_package_'),
+smalltalk.method({
+selector: unescape('package%3A'),
+category: 'accessing',
+fn: function (aPackage){
 var self=this;
-return true;
+self.pkg = aPackage;
 return self;},
-args: [],
-source: unescape('isClass%0A%09%5Etrue'),
+args: ["aPackage"],
+source: unescape('package%3A%20aPackage%0A%09%3Cself.pkg%20%3D%20aPackage%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -531,49 +530,50 @@ referencedClasses: []
 smalltalk.Class);
 
 smalltalk.addMethod(
-unescape('_subclass_instanceVariableNames_classVariableNames_poolDictionaries_category_'),
+unescape('_subclass_instanceVariableNames_'),
 smalltalk.method({
-selector: unescape('subclass%3AinstanceVariableNames%3AclassVariableNames%3ApoolDictionaries%3Acategory%3A'),
+selector: unescape('subclass%3AinstanceVariableNames%3A'),
 category: 'class creation',
-fn: function (aString, aString2, classVars, pools, aString3){
+fn: function (aString, anotherString){
 var self=this;
-return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]);
+return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, anotherString, nil]);
 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'),
+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.Class);
 
 smalltalk.addMethod(
-unescape('_package'),
+unescape('_subclass_instanceVariableNames_category_'),
 smalltalk.method({
-selector: unescape('package'),
-category: 'accessing',
-fn: function (){
+selector: unescape('subclass%3AinstanceVariableNames%3Acategory%3A'),
+category: 'class creation',
+fn: function (aString, aString2, aString3){
 var self=this;
-return self.pkg;
+smalltalk.send(self, "_deprecatedAPI", []);
+return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]);
 return self;},
-args: [],
-source: unescape('package%0A%09%3Creturn%20self.pkg%3E'),
-messageSends: [],
+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.Class);
 
 smalltalk.addMethod(
-unescape('_package_'),
+unescape('_subclass_instanceVariableNames_classVariableNames_poolDictionaries_category_'),
 smalltalk.method({
-selector: unescape('package%3A'),
-category: 'accessing',
-fn: function (aPackage){
+selector: unescape('subclass%3AinstanceVariableNames%3AclassVariableNames%3ApoolDictionaries%3Acategory%3A'),
+category: 'class creation',
+fn: function (aString, aString2, classVars, pools, aString3){
 var self=this;
-self.pkg = aPackage;
+return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]);
 return self;},
-args: ["aPackage"],
-source: unescape('package%3A%20aPackage%0A%09%3Cself.pkg%20%3D%20aPackage%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.Class);
@@ -667,17 +667,35 @@ 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('_superclass_subclass_'),
+unescape('_addSubclassOf_named_instanceVariableNames_'),
 smalltalk.method({
-selector: unescape('superclass%3Asubclass%3A'),
-category: 'class creation',
-fn: function (aClass, aString){
+selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3A'),
+category: 'private',
+fn: function (aClass, aString, aCollection){
 var self=this;
-return smalltalk.send(self, "_superclass_subclass_instanceVariableNames_package_", [aClass, aString, "", nil]);
+smalltalk.addClass(aString, aClass, aCollection);
+	    return smalltalk[aString];
 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:"],
+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.ClassBuilder);
+
+smalltalk.addMethod(
+unescape('_addSubclassOf_named_instanceVariableNames_package_'),
+smalltalk.method({
+selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3Apackage%3A'),
+category: 'private',
+fn: function (aClass, aString, aCollection, packageName){
+var self=this;
+smalltalk.addClass(aString, aClass, aCollection, packageName);
+	    return smalltalk[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'),
+messageSends: [],
 referencedClasses: []
 }),
 smalltalk.ClassBuilder);
@@ -700,6 +718,28 @@ referencedClasses: []
 }),
 smalltalk.ClassBuilder);
 
+smalltalk.addMethod(
+unescape('_copyClass_named_'),
+smalltalk.method({
+selector: unescape('copyClass%3Anamed%3A'),
+category: 'private',
+fn: function (aClass, aString){
+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;
+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"]
+}),
+smalltalk.ClassBuilder);
+
 smalltalk.addMethod(
 unescape('_instanceVariableNamesFor_'),
 smalltalk.method({
@@ -717,34 +757,33 @@ referencedClasses: []
 smalltalk.ClassBuilder);
 
 smalltalk.addMethod(
-unescape('_addSubclassOf_named_instanceVariableNames_'),
+unescape('_setupClass_'),
 smalltalk.method({
-selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3A'),
+selector: unescape('setupClass%3A'),
 category: 'private',
-fn: function (aClass, aString, aCollection){
+fn: function (aClass){
 var self=this;
-smalltalk.addClass(aString, aClass, aCollection);
-	    return smalltalk[aString];
+smalltalk.init(aClass);;
 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'),
+args: ["aClass"],
+source: unescape('setupClass%3A%20aClass%0A%09%3Csmalltalk.init%28aClass%29%3B%3E'),
 messageSends: [],
 referencedClasses: []
 }),
 smalltalk.ClassBuilder);
 
 smalltalk.addMethod(
-unescape('_setupClass_'),
+unescape('_superclass_subclass_'),
 smalltalk.method({
-selector: unescape('setupClass%3A'),
-category: 'private',
-fn: function (aClass){
+selector: unescape('superclass%3Asubclass%3A'),
+category: 'class creation',
+fn: function (aClass, aString){
 var self=this;
-smalltalk.init(aClass);;
+return smalltalk.send(self, "_superclass_subclass_instanceVariableNames_package_", [aClass, aString, "", nil]);
 return self;},
-args: ["aClass"],
-source: unescape('setupClass%3A%20aClass%0A%09%3Csmalltalk.init%28aClass%29%3B%3E'),
-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.ClassBuilder);
@@ -768,49 +807,48 @@ referencedClasses: []
 }),
 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('_addSubclassOf_named_instanceVariableNames_package_'),
+unescape('_class_category_'),
 smalltalk.method({
-selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3Apackage%3A'),
-category: 'private',
-fn: function (aClass, aString, aCollection, packageName){
+selector: unescape('class%3Acategory%3A'),
+category: 'accessing',
+fn: function (aClass, aString){
 var self=this;
-smalltalk.addClass(aString, aClass, aCollection, packageName);
-	    return smalltalk[aString];
+(self['@class']=aClass);
+(self['@category']=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: ["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.ClassBuilder);
+smalltalk.ClassCategoryReader);
 
 smalltalk.addMethod(
-unescape('_copyClass_named_'),
+unescape('_compileMethod_'),
 smalltalk.method({
-selector: unescape('copyClass%3Anamed%3A'),
+selector: unescape('compileMethod%3A'),
 category: 'private',
-fn: function (aClass, aString){
+fn: function (aString){
 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 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: ["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"],
+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.ClassBuilder);
-
-
+smalltalk.ClassCategoryReader);
 
-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'),
 smalltalk.method({
@@ -828,23 +866,6 @@ 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'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.ClassCategoryReader);
-
 smalltalk.addMethod(
 unescape('_scanFrom_'),
 smalltalk.method({
@@ -862,25 +883,6 @@ referencedClasses: []
 }),
 smalltalk.ClassCategoryReader);
 
-smalltalk.addMethod(
-unescape('_compileMethod_'),
-smalltalk.method({
-selector: unescape('compileMethod%3A'),
-category: 'private',
-fn: function (aString){
-var self=this;
-var method=nil;
-(method=smalltalk.send(smalltalk.send((smalltalk.Compiler || Compiler), "_new", []), "_load_forClass_", [aString, self['@class']]));
-smalltalk.send(method, "_category_", [self['@category']]);
-smalltalk.send(self['@class'], "_addCompiledMethod_", [method]);
-return self;},
-args: ["aString"],
-source: unescape('compileMethod%3A%20aString%0A%09%7C%20method%20%7C%0A%09method%20%3A%3D%20Compiler%20new%20load%3A%20aString%20forClass%3A%20class.%0A%09method%20category%3A%20category.%0A%09class%20addCompiledMethod%3A%20method'),
-messageSends: ["load:forClass:", "new", "category:", "addCompiledMethod:"],
-referencedClasses: ["Compiler"]
-}),
-smalltalk.ClassCategoryReader);
-
 
 
 smalltalk.addClass('ClassCommentReader', smalltalk.Object, ['class', 'chunkParser'], 'Kernel-Classes');
@@ -901,6 +903,23 @@ referencedClasses: []
 }),
 smalltalk.ClassCommentReader);
 
+smalltalk.addMethod(
+unescape('_initialize'),
+smalltalk.method({
+selector: unescape('initialize'),
+category: 'initialization',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_initialize", [], smalltalk.Object);
+(self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", []));
+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('_scanFrom_'),
 smalltalk.method({
@@ -919,23 +938,6 @@ referencedClasses: []
 }),
 smalltalk.ClassCommentReader);
 
-smalltalk.addMethod(
-unescape('_initialize'),
-smalltalk.method({
-selector: unescape('initialize'),
-category: 'initialization',
-fn: function (){
-var self=this;
-smalltalk.send(self, "_initialize", [], smalltalk.Object);
-(self['@chunkParser']=smalltalk.send((smalltalk.ChunkParser || ChunkParser), "_new", []));
-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({

File diff suppressed because it is too large
+ 541 - 492
js/Kernel-Collections.deploy.js


File diff suppressed because it is too large
+ 775 - 478
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);
 
 
 

File diff suppressed because it is too large
+ 659 - 665
js/Kernel-Tests.deploy.js


File diff suppressed because it is too large
+ 953 - 937
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);
-
 
 

+ 10 - 7
js/amber.js

@@ -95,7 +95,7 @@ amber = (function() {
 
 		var additionalFiles = spec.packages || spec.files;
 		if (additionalFiles) {
-			loadPackages(additionalFiles, spec.prefix);
+			loadPackages(additionalFiles, spec.prefix, spec.packageHome);
 		}
 
 		// Be sure to setup & initialize smalltalk classes
@@ -103,29 +103,32 @@ amber = (function() {
 		initializeSmalltalk();
 	};
 
-	function loadPackages(names, prefix){
+	function loadPackages(names, prefix, urlHome){
 		var name, url;
 		var prefix = prefix || 'js';
+    var urlHome = urlHome || home;
 
 		for (var i=0; i < names.length; i++) {
 			name = names[i].split(/\.js$/)[0];
-			addJSToLoad(name + '.js', prefix);
+			addJSToLoad(name + '.js', prefix, urlHome);
 		}
 	};
 
-	function addJSToLoad(name, prefix) {
-		jsToLoad.push(buildJSURL(name, prefix));
+	function addJSToLoad(name, prefix, urlHome) {
+    var urlHome = urlHome || home;
+		jsToLoad.push(buildJSURL(name, prefix, urlHome));
 	};
 
-	function buildJSURL(name, prefix) {
+	function buildJSURL(name, prefix, urlHome) {
 		var prefix = prefix || 'js';
 		var name = name;
+    var urlHome = urlHome || home;
 
 		if (!deploy) {
 			name = name + nocache;
 		}
 
-		return home + prefix + '/' + name;
+		return urlHome + prefix + '/' + name;
 	};
 
 	function loadCSS(name, prefix) {

+ 1 - 1
js/init.js

@@ -6,4 +6,4 @@ smalltalk.classes()._do_(function(each) {
 
 if(this.smalltalkReady) {
     this.smalltalkReady();
-}
+}

+ 22 - 22
st/Benchfib.st

@@ -1,7 +1,7 @@
 Smalltalk current createPackage: 'Benchfib' properties: #{}!
 Object subclass: #Benchfib
 	instanceVariableNames: ''
-	category: 'Benchfib'!
+	package: 'Benchfib'!
 
 !Benchfib class methodsFor: 'not yet classified'!
 
@@ -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'
 ! !

File diff suppressed because it is too large
+ 440 - 460
st/Canvas.st


+ 40 - 40
st/Compiler.st

@@ -1,7 +1,7 @@
 Smalltalk current createPackage: 'Compiler' properties: #{}!
 Object subclass: #ChunkParser
 	instanceVariableNames: 'stream'
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 !ChunkParser methodsFor: 'accessing'!
 
@@ -42,11 +42,11 @@ on: aStream
 
 Object subclass: #DoIt
 	instanceVariableNames: ''
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 Object subclass: #Exporter
 	instanceVariableNames: ''
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 !Exporter methodsFor: 'fileOut'!
 
@@ -175,7 +175,7 @@ exportPackageExtensionsOf: package on: aStream
 
 Exporter subclass: #ChunkExporter
 	instanceVariableNames: ''
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 !ChunkExporter methodsFor: 'not yet classified'!
 
@@ -195,23 +195,23 @@ classNameFor: aClass
 !
 
 exportDefinitionOf: aClass on: aStream
-	"Chunk format."
-
-	aStream 
-	    nextPutAll: (self classNameFor: aClass superclass);
-	    nextPutAll: ' subclass: #', (self classNameFor: aClass); lf;
-	    nextPutAll: '	instanceVariableNames: '''.
-	aClass instanceVariableNames 
-	    do: [:each | aStream nextPutAll: each]
-	    separatedBy: [aStream nextPutAll: ' '].
-	aStream	
-	    nextPutAll: ''''; lf;
-	    nextPutAll: '	category: ''', aClass category, '''!!'; lf.
- 	aClass comment notEmpty ifTrue: [
-	    aStream 
-		nextPutAll: '!!', (self classNameFor: aClass), ' commentStamp!!';lf;
-		nextPutAll: (self chunkEscape: aClass comment), '!!';lf].
-	aStream lf
+    "Chunk format."
+
+    aStream 
+        nextPutAll: (self classNameFor: aClass superclass);
+        nextPutAll: ' subclass: #', (self classNameFor: aClass); lf;
+        nextPutAll: '	instanceVariableNames: '''.
+    aClass instanceVariableNames 
+        do: [:each | aStream nextPutAll: each]
+        separatedBy: [aStream nextPutAll: ' '].
+    aStream 
+        nextPutAll: ''''; lf;
+        nextPutAll: '	package: ''', aClass category, '''!!'; lf.
+    aClass comment notEmpty ifTrue: [
+        aStream 
+        nextPutAll: '!!', (self classNameFor: aClass), ' commentStamp!!';lf;
+        nextPutAll: (self chunkEscape: aClass comment), '!!';lf].
+    aStream lf
 !
 
 exportMetaDefinitionOf: aClass on: aStream
@@ -289,7 +289,7 @@ exportPackageExtensionsOf: package on: aStream
 
 Exporter subclass: #StrippedExporter
 	instanceVariableNames: ''
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 !StrippedExporter methodsFor: 'private'!
 
@@ -323,7 +323,7 @@ exportMethod: aMethod of: aClass on: aStream
 
 Object subclass: #Importer
 	instanceVariableNames: ''
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 !Importer methodsFor: 'fileIn'!
 
@@ -345,7 +345,7 @@ import: aStream
 
 Object subclass: #Node
 	instanceVariableNames: 'nodes'
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 !Node methodsFor: 'accessing'!
 
@@ -385,7 +385,7 @@ accept: aVisitor
 
 Node subclass: #AssignmentNode
 	instanceVariableNames: 'left right'
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 !AssignmentNode methodsFor: 'accessing'!
 
@@ -414,7 +414,7 @@ accept: aVisitor
 
 Node subclass: #BlockNode
 	instanceVariableNames: 'parameters inlined'
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 !BlockNode methodsFor: 'accessing'!
 
@@ -448,7 +448,7 @@ accept: aVisitor
 
 Node subclass: #CascadeNode
 	instanceVariableNames: 'receiver'
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 !CascadeNode methodsFor: 'accessing'!
 
@@ -468,7 +468,7 @@ accept: aVisitor
 
 Node subclass: #DynamicArrayNode
 	instanceVariableNames: ''
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 !DynamicArrayNode methodsFor: 'visiting'!
 
@@ -478,7 +478,7 @@ accept: aVisitor
 
 Node subclass: #DynamicDictionaryNode
 	instanceVariableNames: ''
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 !DynamicDictionaryNode methodsFor: 'visiting'!
 
@@ -488,7 +488,7 @@ accept: aVisitor
 
 Node subclass: #JSStatementNode
 	instanceVariableNames: 'source'
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 !JSStatementNode methodsFor: 'accessing'!
 
@@ -508,7 +508,7 @@ accept: aVisitor
 
 Node subclass: #MethodNode
 	instanceVariableNames: 'selector arguments source'
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 !MethodNode methodsFor: 'accessing'!
 
@@ -544,7 +544,7 @@ accept: aVisitor
 
 Node subclass: #ReturnNode
 	instanceVariableNames: ''
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 !ReturnNode methodsFor: 'visiting'!
 
@@ -554,7 +554,7 @@ accept: aVisitor
 
 Node subclass: #SendNode
 	instanceVariableNames: 'selector arguments receiver'
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 !SendNode methodsFor: 'accessing'!
 
@@ -612,7 +612,7 @@ accept: aVisitor
 
 Node subclass: #SequenceNode
 	instanceVariableNames: 'temps'
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 !SequenceNode methodsFor: 'accessing'!
 
@@ -641,7 +641,7 @@ accept: aVisitor
 
 SequenceNode subclass: #BlockSequenceNode
 	instanceVariableNames: ''
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 !BlockSequenceNode methodsFor: 'testing'!
 
@@ -657,7 +657,7 @@ accept: aVisitor
 
 Node subclass: #ValueNode
 	instanceVariableNames: 'value'
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 !ValueNode methodsFor: 'accessing'!
 
@@ -683,7 +683,7 @@ accept: aVisitor
 
 ValueNode subclass: #VariableNode
 	instanceVariableNames: 'assigned'
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 !VariableNode methodsFor: 'accessing'!
 
@@ -703,7 +703,7 @@ accept: aVisitor
 
 VariableNode subclass: #ClassReferenceNode
 	instanceVariableNames: ''
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 !ClassReferenceNode methodsFor: 'visiting'!
 
@@ -713,7 +713,7 @@ accept: aVisitor
 
 Object subclass: #NodeVisitor
 	instanceVariableNames: ''
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 !NodeVisitor methodsFor: 'visiting'!
 
@@ -786,7 +786,7 @@ visitVariableNode: aNode
 
 NodeVisitor subclass: #Compiler
 	instanceVariableNames: 'stream nestedBlocks earlyReturn currentClass currentSelector unknownVariables tempVariables messageSends referencedClasses classReferenced source argVariables'
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 !Compiler methodsFor: 'accessing'!
 

+ 5 - 5
st/Examples.st

@@ -1,17 +1,17 @@
 Smalltalk current createPackage: 'Examples' properties: #{}!
 Widget subclass: #Counter
 	instanceVariableNames: 'count header'
-	category: 'Examples'!
+	package: 'Examples'!
 
 !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]
 ! !
 

+ 14 - 14
st/IDE.st

@@ -1,7 +1,7 @@
 Smalltalk current createPackage: 'IDE' properties: #{}!
 Widget subclass: #ClassesList
 	instanceVariableNames: 'browser ul nodes'
-	category: 'IDE'!
+	package: 'IDE'!
 
 !ClassesList methodsFor: 'accessing'!
 
@@ -64,7 +64,7 @@ on: aBrowser
 
 Widget subclass: #ClassesListNode
 	instanceVariableNames: 'browser theClass level nodes'
-	category: 'IDE'!
+	package: 'IDE'!
 
 !ClassesListNode methodsFor: ''!
 
@@ -161,7 +161,7 @@ on: aClass browser: aBrowser classes: aCollection level: anInteger
 
 ErrorHandler subclass: #DebugErrorHandler
 	instanceVariableNames: ''
-	category: 'IDE'!
+	package: 'IDE'!
 
 !DebugErrorHandler methodsFor: 'error handling'!
 
@@ -180,7 +180,7 @@ initialize
 
 Widget subclass: #SourceArea
 	instanceVariableNames: 'editor div receiver onDoIt'
-	category: 'IDE'!
+	package: 'IDE'!
 
 !SourceArea methodsFor: 'accessing'!
 
@@ -340,7 +340,7 @@ renderOn: html
 
 Widget subclass: #TabManager
 	instanceVariableNames: 'selectedTab tabs opened ul input'
-	category: 'IDE'!
+	package: 'IDE'!
 
 !TabManager methodsFor: 'accessing'!
 
@@ -545,7 +545,7 @@ new
 
 Widget subclass: #TabWidget
 	instanceVariableNames: 'div'
-	category: 'IDE'!
+	package: 'IDE'!
 
 !TabWidget methodsFor: 'accessing'!
 
@@ -619,7 +619,7 @@ open
 
 TabWidget subclass: #Browser
 	instanceVariableNames: 'selectedPackage selectedClass selectedProtocol selectedMethod packagesList classesList protocolsList methodsList sourceArea tabsList selectedTab saveButton classButtons methodButtons unsavedChanges'
-	category: 'IDE'!
+	package: 'IDE'!
 
 !Browser methodsFor: 'accessing'!
 
@@ -1306,7 +1306,7 @@ openOn: aClass
 
 TabWidget subclass: #Debugger
 	instanceVariableNames: 'error selectedContext sourceArea ul ul2 inspector saveButton unsavedChanges selectedVariable selectedVariableName inspectButton'
-	category: 'IDE'!
+	package: 'IDE'!
 
 !Debugger methodsFor: 'accessing'!
 
@@ -1519,7 +1519,7 @@ updateVariablesList
 
 TabWidget subclass: #IDETranscript
 	instanceVariableNames: 'textarea'
-	category: 'IDE'!
+	package: 'IDE'!
 
 !IDETranscript methodsFor: 'accessing'!
 
@@ -1589,7 +1589,7 @@ open
 
 TabWidget subclass: #Inspector
 	instanceVariableNames: 'label variables object selectedVariable variablesList valueTextarea diveButton sourceArea'
-	category: 'IDE'!
+	package: 'IDE'!
 
 !Inspector methodsFor: 'accessing'!
 
@@ -1742,7 +1742,7 @@ on: anObject
 
 TabWidget subclass: #ProgressBar
 	instanceVariableNames: 'percent progressDiv div'
-	category: 'IDE'!
+	package: 'IDE'!
 
 !ProgressBar methodsFor: 'accessing'!
 
@@ -1779,7 +1779,7 @@ updatePercent: aNumber
 
 TabWidget subclass: #ReferencesBrowser
 	instanceVariableNames: 'implementors senders implementorsList input timer selector sendersList referencedClasses referencedClassesList'
-	category: 'IDE'!
+	package: 'IDE'!
 
 !ReferencesBrowser methodsFor: 'accessing'!
 
@@ -1955,7 +1955,7 @@ search: aString
 
 TabWidget subclass: #TestRunner
 	instanceVariableNames: 'selectedCategories packagesList selectedClasses classesList selectedMethods progressBar methodsList result statusDiv'
-	category: 'IDE'!
+	package: 'IDE'!
 
 !TestRunner methodsFor: 'accessing'!
 
@@ -2195,7 +2195,7 @@ updateStatusDiv
 
 TabWidget subclass: #Workspace
 	instanceVariableNames: 'sourceArea'
-	category: 'IDE'!
+	package: 'IDE'!
 
 !Workspace methodsFor: 'accessing'!
 

+ 2 - 2
st/Kernel-Announcements.st

@@ -1,7 +1,7 @@
 Smalltalk current createPackage: 'Kernel-Announcements' properties: #{}!
 Object subclass: #AnnouncementSubscription
 	instanceVariableNames: 'block announcementClass'
-	category: 'Kernel-Announcements'!
+	package: 'Kernel-Announcements'!
 
 !AnnouncementSubscription methodsFor: 'accessing'!
 
@@ -34,7 +34,7 @@ handlesAnnouncement: anAnnouncement
 
 Object subclass: #Announcer
 	instanceVariableNames: 'registry subscriptions'
-	category: 'Kernel-Announcements'!
+	package: 'Kernel-Announcements'!
 
 !Announcer methodsFor: 'announcing'!
 

+ 81 - 80
st/Kernel-Classes.st

@@ -1,7 +1,7 @@
 Smalltalk current createPackage: 'Kernel-Classes' properties: #{}!
 Object subclass: #Behavior
 	instanceVariableNames: ''
-	category: 'Kernel-Classes'!
+	package: 'Kernel-Classes'!
 !Behavior commentStamp!
 Behavior is the superclass of all class objects. 
 
@@ -13,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
@@ -33,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
@@ -58,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
@@ -98,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'!
@@ -125,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: ''
 !
@@ -140,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'!
@@ -160,7 +160,7 @@ inheritsFrom: aClass
 
 Behavior subclass: #Class
 	instanceVariableNames: ''
-	category: 'Kernel-Classes'!
+	package: 'Kernel-Classes'!
 !Class commentStamp!
 Class is __the__ class object. 
 
@@ -173,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'!
@@ -226,7 +226,7 @@ isClass
 
 Behavior subclass: #Metaclass
 	instanceVariableNames: ''
-	category: 'Kernel-Classes'!
+	package: 'Kernel-Classes'!
 !Metaclass commentStamp!
 Metaclass is the root of the class hierarchy.
 
@@ -258,7 +258,7 @@ isMetaclass
 
 Object subclass: #ClassBuilder
 	instanceVariableNames: ''
-	category: 'Kernel-Classes'!
+	package: 'Kernel-Classes'!
 !ClassBuilder commentStamp!
 ClassBuilder is responsible for compiling new classes or modifying existing classes in the system.
 
@@ -266,16 +266,16 @@ Rather than using ClassBuilder directly to compile a class, use `Class >> subcla
 
 !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
+	^self superclass: aClass subclass: aString instanceVariableNames: '' package: nil
+!
+
 superclass: aClass subclass: aString instanceVariableNames: aString2 package: aString3
 	| newClass |
 	newClass := self addSubclassOf: aClass
@@ -287,19 +287,11 @@ superclass: aClass subclass: aString instanceVariableNames: aString2 package: aS
 
 !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]>
@@ -326,11 +318,19 @@ copyClass: aClass named: aString
 
 	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'!
+	package: 'Kernel-Classes'!
 !ClassCategoryReader commentStamp!
 ClassCategoryReader represents a mechanism for retrieving class descriptions stored on a file.!
 
@@ -360,15 +360,16 @@ initialize
 !ClassCategoryReader methodsFor: 'private'!
 
 compileMethod: aString
-	| method |
-	method := Compiler new load: aString forClass: class.
+	| method compiler |
+	method := (compiler := Compiler new) load: aString forClass: class.
 	method category: category.
-	class addCompiledMethod: method
+	class addCompiledMethod: method.
+	compiler setupClass: class.
 ! !
 
 Object subclass: #ClassCommentReader
 	instanceVariableNames: 'class chunkParser'
-	category: 'Kernel-Classes'!
+	package: 'Kernel-Classes'!
 !ClassCommentReader commentStamp!
 ClassCommentReader represents a mechanism for retrieving class descriptions stored on a file.
 See `ClassCategoryReader` too.!

File diff suppressed because it is too large
+ 475 - 689
st/Kernel-Collections.st


+ 23 - 23
st/Kernel-Exceptions.st

@@ -1,24 +1,24 @@
 Smalltalk current createPackage: 'Kernel-Exceptions' properties: #{}!
 Object subclass: #Error
 	instanceVariableNames: 'messageText'
-	category: 'Kernel-Exceptions'!
+	package: 'Kernel-Exceptions'!
 
 !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'!
@@ -43,7 +43,7 @@ signal: aString
 
 Error subclass: #MessageNotUnderstood
 	instanceVariableNames: 'message receiver'
-	category: 'Kernel-Exceptions'!
+	package: 'Kernel-Exceptions'!
 
 !MessageNotUnderstood methodsFor: 'accessing'!
 
@@ -55,21 +55,21 @@ 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
 	instanceVariableNames: ''
-	category: 'Kernel-Exceptions'!
+	package: 'Kernel-Exceptions'!
 
 !ErrorHandler methodsFor: 'error handling'!
 
@@ -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'!

+ 151 - 151
st/Kernel-Methods.st

@@ -1,95 +1,7 @@
 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'!
+	package: 'Kernel-Methods'!
 !BlockClosure commentStamp!
 A BlockClosure is a lexical closure.
 The JavaScript representation is a function.
@@ -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,21 +87,51 @@ 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
 	instanceVariableNames: ''
-	category: 'Kernel-Methods'!
+	package: 'Kernel-Methods'!
 !CompiledMethod commentStamp!
 CompiledMethod hold the source and compiled code of a class method.
 
@@ -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'
+	package: '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: ''
+	package: '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>
 ! !
 

+ 11 - 11
st/Kernel-Objects.st

@@ -1,7 +1,7 @@
 Smalltalk current createPackage: 'Kernel-Objects' properties: #{}!
 nil subclass: #Object
 	instanceVariableNames: ''
-	category: 'Kernel-Objects'!
+	package: 'Kernel-Objects'!
 !Object commentStamp!
 *Object is the root of the Smalltalk class system*. All classes in the system are subclasses of Object.
 
@@ -318,7 +318,7 @@ initialize
 
 Object subclass: #Boolean
 	instanceVariableNames: ''
-	category: 'Kernel-Objects'!
+	package: 'Kernel-Objects'!
 !Boolean commentStamp!
 Boolean wraps the JavaScript `Boolean()` constructor. The `true` and `false` objects are the JavaScript boolean objects.
 
@@ -420,7 +420,7 @@ printString
 
 Object subclass: #Date
 	instanceVariableNames: ''
-	category: 'Kernel-Objects'!
+	package: 'Kernel-Objects'!
 !Date commentStamp!
 The Date class is used to work with dates and times. Therefore `Date today` and `Date now` are both valid in
 Amber and answer the same date object.
@@ -605,7 +605,7 @@ today
 
 Object subclass: #Date
 	instanceVariableNames: ''
-	category: 'Kernel-Objects'!
+	package: 'Kernel-Objects'!
 !Date commentStamp!
 The Date class is used to work with dates and times. Therefore `Date today` and `Date now` are both valid in
 Amber and answer the same date object.
@@ -790,7 +790,7 @@ today
 
 Object subclass: #JSObjectProxy
 	instanceVariableNames: 'jsObject'
-	category: 'Kernel-Objects'!
+	package: 'Kernel-Objects'!
 !JSObjectProxy commentStamp!
 JSObjectProxy handles sending messages to JavaScript object, therefore accessing JavaScript objects from Amber is transparent.
 JSOjbectProxy makes intensive use of `#doesNotUnderstand:`.
@@ -873,7 +873,7 @@ on: aJSObject
 
 Object subclass: #Number
 	instanceVariableNames: ''
-	category: 'Kernel-Objects'!
+	package: 'Kernel-Objects'!
 !Number commentStamp!
 Number holds the most general methods for dealing with numbers.  
 Number is directly mapped to JavaScript Number.
@@ -1141,7 +1141,7 @@ pi
 
 Object subclass: #Package
 	instanceVariableNames: 'commitPathJs commitPathSt'
-	category: 'Kernel-Objects'!
+	package: 'Kernel-Objects'!
 !Package commentStamp!
 A Package is similar to a "class category" typically found in other Smalltalks like Pharo or Squeak. Amber does not have class categories anymore, it had in the beginning but now each class in the system knows which package it belongs to.
 
@@ -1344,7 +1344,7 @@ sortedClasses: classes
 
 Object subclass: #Point
 	instanceVariableNames: 'x y'
-	category: 'Kernel-Objects'!
+	package: 'Kernel-Objects'!
 !Point commentStamp!
 A `Point` represents an x-y pair of numbers usually designating a geometric coordinate.
 Points are traditionally created using the binary `#@` message to a number:
@@ -1444,7 +1444,7 @@ x: aNumber y: anotherNumber
 
 Object subclass: #Random
 	instanceVariableNames: ''
-	category: 'Kernel-Objects'!
+	package: 'Kernel-Objects'!
 !Random commentStamp!
 `Random` is a random number generator and is implemented as a trivial wrapper around javascript `Math.random()` and is used like this:
 
@@ -1484,7 +1484,7 @@ next: anInteger
 
 Object subclass: #Smalltalk
 	instanceVariableNames: ''
-	category: 'Kernel-Objects'!
+	package: 'Kernel-Objects'!
 !Smalltalk commentStamp!
 Smalltalk has only one instance, accessed with `Smalltalk current`. 
 It represents the global JavaScript variable `smalltalk` declared in `js/boot.js`.
@@ -1646,7 +1646,7 @@ current
 
 Object subclass: #UndefinedObject
 	instanceVariableNames: ''
-	category: 'Kernel-Objects'!
+	package: 'Kernel-Objects'!
 !UndefinedObject commentStamp!
 UndefinedObject describes the behavior of its sole instance, `nil`. `nil` represents a prior value for variables that have not been initialized, or for results which are meaningless.
 

File diff suppressed because it is too large
+ 565 - 605
st/Kernel-Tests.st


+ 38 - 38
st/Kernel-Transcript.st

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

+ 53 - 53
st/SUnit.st

@@ -1,16 +1,16 @@
 Smalltalk current createPackage: 'SUnit' properties: #{}!
 Object subclass: #TestCase
 	instanceVariableNames: 'testSelector'
-	category: 'SUnit'!
+	package: 'SUnit'!
 
 !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'!
@@ -106,16 +106,20 @@ shouldInheritSelectors
 
 Error subclass: #TestFailure
 	instanceVariableNames: ''
-	category: 'SUnit'!
+	package: 'SUnit'!
 
 Object subclass: #TestResult
 	instanceVariableNames: 'timestamp runs errors failures total'
-	category: 'SUnit'!
+	package: 'SUnit'!
 
 !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'!

Some files were not shown because too many files changed in this diff