Browse Source

Merge with dale

Nicolas Petton 13 years ago
parent
commit
0c436c5586

+ 20 - 20
js/Benchfib.deploy.js

@@ -44,26 +44,6 @@ return self;}
 }),
 }),
 smalltalk.Number);
 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(
 smalltalk.addMethod(
 unescape('_jsbenchFib'),
 unescape('_jsbenchFib'),
 smalltalk.method({
 smalltalk.method({
@@ -130,3 +110,23 @@ return self;}
 }),
 }),
 smalltalk.Number);
 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.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(
 smalltalk.addMethod(
 unescape('_jsbenchFib'),
 unescape('_jsbenchFib'),
 smalltalk.method({
 smalltalk.method({
@@ -165,3 +140,28 @@ referencedClasses: ["Date"]
 }),
 }),
 smalltalk.Number);
 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;
 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);
 (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_", [" "]);})]);
 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);})]));
 ((($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", []);
 smalltalk.send(aStream, "_lf", []);
 return self;}
 return self;}

+ 2 - 2
js/Compiler.js

@@ -274,12 +274,12 @@ fn: function (aClass, aStream){
 var self=this;
 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);
 (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_", [" "]);})]);
 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);})]));
 ((($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", []);
 smalltalk.send(aStream, "_lf", []);
 return self;},
 return self;},
 args: ["aClass", "aStream"],
 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:"],
 messageSends: ["nextPutAll:", "classNameFor:", "superclass", unescape("%2C"), "lf", "do:separatedBy:", "instanceVariableNames", "category", "ifTrue:", "notEmpty", "comment", "chunkEscape:"],
 referencedClasses: []
 referencedClasses: []
 }),
 }),

+ 6 - 6
js/Examples.deploy.js

@@ -1,24 +1,24 @@
 smalltalk.addPackage('Examples', {});
 smalltalk.addPackage('Examples', {});
 smalltalk.addClass('Counter', smalltalk.Widget, ['count', 'header'], 'Examples');
 smalltalk.addClass('Counter', smalltalk.Widget, ['count', 'header'], 'Examples');
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_increase'),
+unescape('_decrease'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('increase'),
+selector: unescape('decrease'),
 fn: function (){
 fn: function (){
 var self=this;
 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", [])]);})]);
 smalltalk.send(self['@header'], "_contents_", [(function(html){return smalltalk.send(html, "_with_", [smalltalk.send(self['@count'], "_asString", [])]);})]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.Counter);
 smalltalk.Counter);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_decrease'),
+unescape('_increase'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('decrease'),
+selector: unescape('increase'),
 fn: function (){
 fn: function (){
 var self=this;
 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", [])]);})]);
 smalltalk.send(self['@header'], "_contents_", [(function(html){return smalltalk.send(html, "_with_", [smalltalk.send(self['@count'], "_asString", [])]);})]);
 return self;}
 return self;}
 }),
 }),

+ 10 - 10
js/Examples.js

@@ -1,35 +1,35 @@
 smalltalk.addPackage('Examples', {});
 smalltalk.addPackage('Examples', {});
 smalltalk.addClass('Counter', smalltalk.Widget, ['count', 'header'], 'Examples');
 smalltalk.addClass('Counter', smalltalk.Widget, ['count', 'header'], 'Examples');
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_increase'),
+unescape('_decrease'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('increase'),
+selector: unescape('decrease'),
 category: 'actions',
 category: 'actions',
 fn: function (){
 fn: function (){
 var self=this;
 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", [])]);})]);
 smalltalk.send(self['@header'], "_contents_", [(function(html){return smalltalk.send(html, "_with_", [smalltalk.send(self['@count'], "_asString", [])]);})]);
 return self;},
 return self;},
 args: [],
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.Counter);
 smalltalk.Counter);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_decrease'),
+unescape('_increase'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('decrease'),
+selector: unescape('increase'),
 category: 'actions',
 category: 'actions',
 fn: function (){
 fn: function (){
 var self=this;
 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", [])]);})]);
 smalltalk.send(self['@header'], "_contents_", [(function(html){return smalltalk.send(html, "_with_", [smalltalk.send(self['@count'], "_asString", [])]);})]);
 return self;},
 return self;},
 args: [],
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.Counter);
 smalltalk.Counter);

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

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

+ 329 - 327
js/Kernel-Classes.js

@@ -2,187 +2,186 @@ smalltalk.addPackage('Kernel-Classes', {});
 smalltalk.addClass('Behavior', smalltalk.Object, [], '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.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(
 smalltalk.addMethod(
-unescape('_new'),
+unescape('_addCompiledMethod_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('new'),
-category: 'instance creation',
-fn: function (){
+selector: unescape('addCompiledMethod%3A'),
+category: 'compiling',
+fn: function (aMethod){
 var self=this;
 var self=this;
-return smalltalk.send(smalltalk.send(self, "_basicNew", []), "_initialize", []);
+smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self);
 return 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.Behavior);
 smalltalk.Behavior);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_basicNew'),
+unescape('_allInstanceVariableNames'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('basicNew'),
-category: 'instance creation',
+selector: unescape('allInstanceVariableNames'),
+category: 'accessing',
 fn: function (){
 fn: function (){
 var self=this;
 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;},
 return self;},
 args: [],
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.Behavior);
 smalltalk.Behavior);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_name'),
+unescape('_allSubclasses'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('name'),
+selector: unescape('allSubclasses'),
 category: 'accessing',
 category: 'accessing',
 fn: function (){
 fn: function (){
 var self=this;
 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;},
 return self;},
 args: [],
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.Behavior);
 smalltalk.Behavior);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_superclass'),
+unescape('_basicNew'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('superclass'),
-category: 'accessing',
+selector: unescape('basicNew'),
+category: 'instance creation',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-return self.superclass || nil;
+return new self.fn();
 return self;},
 return self;},
 args: [],
 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: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
 smalltalk.Behavior);
 smalltalk.Behavior);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_subclasses'),
+unescape('_comment'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('subclasses'),
+selector: unescape('comment'),
 category: 'accessing',
 category: 'accessing',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-return smalltalk.subclasses(self);
+return (($receiver = smalltalk.send(self, "_basicAt_", ["comment"])) == nil || $receiver == undefined) ? (function(){return "";})() : $receiver;
 return self;},
 return self;},
 args: [],
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.Behavior);
 smalltalk.Behavior);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_allSubclasses'),
+unescape('_comment_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('allSubclasses'),
+selector: unescape('comment%3A'),
 category: 'accessing',
 category: 'accessing',
-fn: function (){
+fn: function (aString){
 var self=this;
 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;},
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.Behavior);
 smalltalk.Behavior);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_withAllSubclasses'),
+unescape('_commentStamp'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('withAllSubclasses'),
+selector: unescape('commentStamp'),
 category: 'accessing',
 category: 'accessing',
 fn: function (){
 fn: function (){
 var self=this;
 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;},
 return self;},
 args: [],
 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.Behavior);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_prototype'),
+unescape('_commentStamp_prior_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('prototype'),
+selector: unescape('commentStamp%3Aprior%3A'),
 category: 'accessing',
 category: 'accessing',
-fn: function (){
+fn: function (aStamp, prior){
 var self=this;
 var self=this;
-return self.fn.prototype;
+return smalltalk.send(self, "_commentStamp", []);
 return self;},
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.Behavior);
 smalltalk.Behavior);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_methodDictionary'),
+unescape('_compile_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('methodDictionary'),
-category: 'accessing',
-fn: function (){
+selector: unescape('compile%3A'),
+category: 'compiling',
+fn: function (aString){
 var self=this;
 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;},
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.Behavior);
 smalltalk.Behavior);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_methodsFor_'),
+unescape('_compile_category_'),
 smalltalk.method({
 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;
 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;},
 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.Behavior);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_addCompiledMethod_'),
+unescape('_inheritsFrom_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('addCompiledMethod%3A'),
-category: 'compiling',
-fn: function (aMethod){
+selector: unescape('inheritsFrom%3A'),
+category: 'testing',
+fn: function (aClass){
 var self=this;
 var self=this;
-smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self);
+return smalltalk.send(smalltalk.send(aClass, "_allSubclasses", []), "_includes_", [self]);
 return 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.Behavior);
 smalltalk.Behavior);
@@ -204,83 +203,104 @@ referencedClasses: []
 smalltalk.Behavior);
 smalltalk.Behavior);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_comment'),
+unescape('_methodAt_'),
 smalltalk.method({
 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',
 category: 'accessing',
 fn: function (){
 fn: function (){
 var self=this;
 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;},
 return self;},
 args: [],
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.Behavior);
 smalltalk.Behavior);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_comment_'),
+unescape('_methodsFor_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('comment%3A'),
+selector: unescape('methodsFor%3A'),
 category: 'accessing',
 category: 'accessing',
 fn: function (aString){
 fn: function (aString){
 var self=this;
 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;},
 return self;},
 args: ["aString"],
 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.Behavior);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_commentStamp'),
+unescape('_methodsFor_stamp_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('commentStamp'),
+selector: unescape('methodsFor%3Astamp%3A'),
 category: 'accessing',
 category: 'accessing',
-fn: function (){
+fn: function (aString, aStamp){
 var self=this;
 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;},
 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.Behavior);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_removeCompiledMethod_'),
+unescape('_name'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('removeCompiledMethod%3A'),
-category: 'compiling',
-fn: function (aMethod){
+selector: unescape('name'),
+category: 'accessing',
+fn: function (){
 var self=this;
 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;},
 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: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
 smalltalk.Behavior);
 smalltalk.Behavior);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_inheritsFrom_'),
+unescape('_new'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('inheritsFrom%3A'),
-category: 'testing',
-fn: function (aClass){
+selector: unescape('new'),
+category: 'instance creation',
+fn: function (){
 var self=this;
 var self=this;
-return smalltalk.send(smalltalk.send(aClass, "_allSubclasses", []), "_includes_", [self]);
+return smalltalk.send(smalltalk.send(self, "_basicNew", []), "_initialize", []);
 return self;},
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.Behavior);
 smalltalk.Behavior);
@@ -324,104 +344,84 @@ referencedClasses: ["HashedCollection", "Array"]
 smalltalk.Behavior);
 smalltalk.Behavior);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_allInstanceVariableNames'),
+unescape('_prototype'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('allInstanceVariableNames'),
+selector: unescape('prototype'),
 category: 'accessing',
 category: 'accessing',
 fn: function (){
 fn: function (){
 var self=this;
 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;},
 return self;},
 args: [],
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.Behavior);
 smalltalk.Behavior);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_methodAt_'),
+unescape('_removeCompiledMethod_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('methodAt%3A'),
-category: 'accessing',
-fn: function (aString){
+selector: unescape('removeCompiledMethod%3A'),
+category: 'compiling',
+fn: function (aMethod){
 var self=this;
 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;},
 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: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
 smalltalk.Behavior);
 smalltalk.Behavior);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_methodsFor_stamp_'),
+unescape('_subclasses'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('methodsFor%3Astamp%3A'),
+selector: unescape('subclasses'),
 category: 'accessing',
 category: 'accessing',
-fn: function (aString, aStamp){
+fn: function (){
 var self=this;
 var self=this;
-return smalltalk.send(self, "_methodsFor_", [aString]);
+return smalltalk.subclasses(self);
 return 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.Behavior);
 smalltalk.Behavior);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_commentStamp_prior_'),
+unescape('_superclass'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('commentStamp%3Aprior%3A'),
+selector: unescape('superclass'),
 category: 'accessing',
 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;
 var self=this;
-smalltalk.send(self, "_compile_category_", [aString, ""]);
+return self.superclass || nil;
 return self;},
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.Behavior);
 smalltalk.Behavior);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_compile_category_'),
+unescape('_withAllSubclasses'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('compile%3Acategory%3A'),
-category: 'compiling',
-fn: function (aString, anotherString){
+selector: unescape('withAllSubclasses'),
+category: 'accessing',
+fn: function (){
 var self=this;
 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;},
 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);
 smalltalk.Behavior);
 
 
@@ -446,49 +446,48 @@ referencedClasses: []
 smalltalk.Class);
 smalltalk.Class);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_subclass_instanceVariableNames_'),
+unescape('_isClass'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('subclass%3AinstanceVariableNames%3A'),
-category: 'class creation',
-fn: function (aString, anotherString){
+selector: unescape('isClass'),
+category: 'testing',
+fn: function (){
 var self=this;
 var self=this;
-return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, anotherString, nil]);
+return true;
 return self;},
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.Class);
 smalltalk.Class);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_subclass_instanceVariableNames_category_'),
+unescape('_package'),
 smalltalk.method({
 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;
 var self=this;
-smalltalk.send(self, "_deprecatedAPI", []);
-return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]);
+return self.pkg;
 return self;},
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.Class);
 smalltalk.Class);
 
 
 smalltalk.addMethod(
 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;
 var self=this;
-return true;
+self.pkg = aPackage;
 return self;},
 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: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
@@ -531,49 +530,50 @@ referencedClasses: []
 smalltalk.Class);
 smalltalk.Class);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_subclass_instanceVariableNames_classVariableNames_poolDictionaries_category_'),
+unescape('_subclass_instanceVariableNames_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('subclass%3AinstanceVariableNames%3AclassVariableNames%3ApoolDictionaries%3Acategory%3A'),
+selector: unescape('subclass%3AinstanceVariableNames%3A'),
 category: 'class creation',
 category: 'class creation',
-fn: function (aString, aString2, classVars, pools, aString3){
+fn: function (aString, anotherString){
 var self=this;
 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;},
 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:"],
 messageSends: ["subclass:instanceVariableNames:package:"],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
 smalltalk.Class);
 smalltalk.Class);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_package'),
+unescape('_subclass_instanceVariableNames_category_'),
 smalltalk.method({
 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;
 var self=this;
-return self.pkg;
+smalltalk.send(self, "_deprecatedAPI", []);
+return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]);
 return self;},
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.Class);
 smalltalk.Class);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_package_'),
+unescape('_subclass_instanceVariableNames_classVariableNames_poolDictionaries_category_'),
 smalltalk.method({
 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;
 var self=this;
-self.pkg = aPackage;
+return smalltalk.send(self, "_subclass_instanceVariableNames_package_", [aString, aString2, aString3]);
 return self;},
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.Class);
 smalltalk.Class);
@@ -667,17 +667,35 @@ smalltalk.Metaclass);
 smalltalk.addClass('ClassBuilder', smalltalk.Object, [], 'Kernel-Classes');
 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.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(
 smalltalk.addMethod(
-unescape('_superclass_subclass_'),
+unescape('_addSubclassOf_named_instanceVariableNames_'),
 smalltalk.method({
 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;
 var self=this;
-return smalltalk.send(self, "_superclass_subclass_instanceVariableNames_package_", [aClass, aString, "", nil]);
+smalltalk.addClass(aString, aClass, aCollection);
+	    return smalltalk[aString];
 return self;},
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.ClassBuilder);
 smalltalk.ClassBuilder);
@@ -700,6 +718,28 @@ referencedClasses: []
 }),
 }),
 smalltalk.ClassBuilder);
 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(
 smalltalk.addMethod(
 unescape('_instanceVariableNamesFor_'),
 unescape('_instanceVariableNamesFor_'),
 smalltalk.method({
 smalltalk.method({
@@ -717,34 +757,33 @@ referencedClasses: []
 smalltalk.ClassBuilder);
 smalltalk.ClassBuilder);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_addSubclassOf_named_instanceVariableNames_'),
+unescape('_setupClass_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('addSubclassOf%3Anamed%3AinstanceVariableNames%3A'),
+selector: unescape('setupClass%3A'),
 category: 'private',
 category: 'private',
-fn: function (aClass, aString, aCollection){
+fn: function (aClass){
 var self=this;
 var self=this;
-smalltalk.addClass(aString, aClass, aCollection);
-	    return smalltalk[aString];
+smalltalk.init(aClass);;
 return self;},
 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: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
 smalltalk.ClassBuilder);
 smalltalk.ClassBuilder);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_setupClass_'),
+unescape('_superclass_subclass_'),
 smalltalk.method({
 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;
 var self=this;
-smalltalk.init(aClass);;
+return smalltalk.send(self, "_superclass_subclass_instanceVariableNames_package_", [aClass, aString, "", nil]);
 return self;},
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.ClassBuilder);
 smalltalk.ClassBuilder);
@@ -768,49 +807,48 @@ referencedClasses: []
 }),
 }),
 smalltalk.ClassBuilder);
 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(
 smalltalk.addMethod(
-unescape('_addSubclassOf_named_instanceVariableNames_package_'),
+unescape('_class_category_'),
 smalltalk.method({
 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;
 var self=this;
-smalltalk.addClass(aString, aClass, aCollection, packageName);
-	    return smalltalk[aString];
+(self['@class']=aClass);
+(self['@category']=aString);
 return self;},
 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: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
-smalltalk.ClassBuilder);
+smalltalk.ClassCategoryReader);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_copyClass_named_'),
+unescape('_compileMethod_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('copyClass%3Anamed%3A'),
+selector: unescape('compileMethod%3A'),
 category: 'private',
 category: 'private',
-fn: function (aClass, aString){
+fn: function (aString){
 var self=this;
 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;},
 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"]
 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(
 smalltalk.addMethod(
 unescape('_initialize'),
 unescape('_initialize'),
 smalltalk.method({
 smalltalk.method({
@@ -828,23 +866,6 @@ referencedClasses: ["ChunkParser"]
 }),
 }),
 smalltalk.ClassCategoryReader);
 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(
 smalltalk.addMethod(
 unescape('_scanFrom_'),
 unescape('_scanFrom_'),
 smalltalk.method({
 smalltalk.method({
@@ -862,25 +883,6 @@ referencedClasses: []
 }),
 }),
 smalltalk.ClassCategoryReader);
 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');
 smalltalk.addClass('ClassCommentReader', smalltalk.Object, ['class', 'chunkParser'], 'Kernel-Classes');
@@ -901,6 +903,23 @@ referencedClasses: []
 }),
 }),
 smalltalk.ClassCommentReader);
 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(
 smalltalk.addMethod(
 unescape('_scanFrom_'),
 unescape('_scanFrom_'),
 smalltalk.method({
 smalltalk.method({
@@ -919,23 +938,6 @@ referencedClasses: []
 }),
 }),
 smalltalk.ClassCommentReader);
 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(
 smalltalk.addMethod(
 unescape('_setComment_'),
 unescape('_setComment_'),
 smalltalk.method({
 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.addPackage('Kernel-Exceptions', {});
 smalltalk.addClass('Error', smalltalk.Object, ['messageText'], 'Kernel-Exceptions');
 smalltalk.addClass('Error', smalltalk.Object, ['messageText'], 'Kernel-Exceptions');
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_messageText',
+unescape('_context'),
 smalltalk.method({
 smalltalk.method({
-selector: 'messageText',
+selector: unescape('context'),
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-return self['@messageText'];
+return self.context;
 return self;}
 return self;}
 }),
 }),
 smalltalk.Error);
 smalltalk.Error);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_messageText_',
+unescape('_isSmalltalkError'),
 smalltalk.method({
 smalltalk.method({
-selector: 'messageText:',
-fn: function (aString){
+selector: unescape('isSmalltalkError'),
+fn: function (){
 var self=this;
 var self=this;
-(self['@messageText']=aString);
+return self.smalltalkError === true;
 return self;}
 return self;}
 }),
 }),
 smalltalk.Error);
 smalltalk.Error);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_signal',
+unescape('_jsStack'),
 smalltalk.method({
 smalltalk.method({
-selector: 'signal',
+selector: unescape('jsStack'),
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-self.context = smalltalk.getThisContext(); self.smalltalkError = true; throw(self);
+return self.stack;
 return self;}
 return self;}
 }),
 }),
 smalltalk.Error);
 smalltalk.Error);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_context',
+unescape('_messageText'),
 smalltalk.method({
 smalltalk.method({
-selector: 'context',
+selector: unescape('messageText'),
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-return self.context;
+return self['@messageText'];
 return self;}
 return self;}
 }),
 }),
 smalltalk.Error);
 smalltalk.Error);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_jsStack',
+unescape('_messageText_'),
 smalltalk.method({
 smalltalk.method({
-selector: 'jsStack',
-fn: function (){
+selector: unescape('messageText%3A'),
+fn: function (aString){
 var self=this;
 var self=this;
-return self.stack;
+(self['@messageText']=aString);
 return self;}
 return self;}
 }),
 }),
 smalltalk.Error);
 smalltalk.Error);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_isSmalltalkError',
+unescape('_signal'),
 smalltalk.method({
 smalltalk.method({
-selector: 'isSmalltalkError',
+selector: unescape('signal'),
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-return self.smalltalkError === true;
+self.context = smalltalk.getThisContext(); self.smalltalkError = true; throw(self);
 return self;}
 return self;}
 }),
 }),
 smalltalk.Error);
 smalltalk.Error);
 
 
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_signal_',
+unescape('_signal_'),
 smalltalk.method({
 smalltalk.method({
-selector: 'signal:',
+selector: unescape('signal%3A'),
 fn: function (aString){
 fn: function (aString){
 var self=this;
 var self=this;
 return (function($rec){smalltalk.send($rec, "_messageText_", [aString]);return smalltalk.send($rec, "_signal", []);})(smalltalk.send(self, "_new", []));
 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.addClass('MessageNotUnderstood', smalltalk.Error, ['message', 'receiver'], 'Kernel-Exceptions');
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_message',
+unescape('_message'),
 smalltalk.method({
 smalltalk.method({
-selector: 'message',
+selector: unescape('message'),
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
 return self['@message'];
 return self['@message'];
@@ -92,9 +92,9 @@ return self;}
 smalltalk.MessageNotUnderstood);
 smalltalk.MessageNotUnderstood);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_message_',
+unescape('_message_'),
 smalltalk.method({
 smalltalk.method({
-selector: 'message:',
+selector: unescape('message%3A'),
 fn: function (aMessage){
 fn: function (aMessage){
 var self=this;
 var self=this;
 (self['@message']=aMessage);
 (self['@message']=aMessage);
@@ -103,34 +103,34 @@ return self;}
 smalltalk.MessageNotUnderstood);
 smalltalk.MessageNotUnderstood);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_receiver',
+unescape('_messageText'),
 smalltalk.method({
 smalltalk.method({
-selector: 'receiver',
+selector: unescape('messageText'),
 fn: function (){
 fn: function (){
 var self=this;
 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;}
 return self;}
 }),
 }),
 smalltalk.MessageNotUnderstood);
 smalltalk.MessageNotUnderstood);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_receiver_',
+unescape('_receiver'),
 smalltalk.method({
 smalltalk.method({
-selector: 'receiver:',
-fn: function (anObject){
+selector: unescape('receiver'),
+fn: function (){
 var self=this;
 var self=this;
-(self['@receiver']=anObject);
+return self['@receiver'];
 return self;}
 return self;}
 }),
 }),
 smalltalk.MessageNotUnderstood);
 smalltalk.MessageNotUnderstood);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_messageText',
+unescape('_receiver_'),
 smalltalk.method({
 smalltalk.method({
-selector: 'messageText',
-fn: function (){
+selector: unescape('receiver%3A'),
+fn: function (anObject){
 var self=this;
 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;}
 return self;}
 }),
 }),
 smalltalk.MessageNotUnderstood);
 smalltalk.MessageNotUnderstood);
@@ -139,9 +139,9 @@ smalltalk.MessageNotUnderstood);
 
 
 smalltalk.addClass('ErrorHandler', smalltalk.Object, [], 'Kernel-Exceptions');
 smalltalk.addClass('ErrorHandler', smalltalk.Object, [], 'Kernel-Exceptions');
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_handleError_',
+unescape('_handleError_'),
 smalltalk.method({
 smalltalk.method({
-selector: 'handleError:',
+selector: unescape('handleError%3A'),
 fn: function (anError){
 fn: function (anError){
 var self=this;
 var self=this;
 (($receiver = smalltalk.send(anError, "_context", [])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_logErrorContext_", [smalltalk.send(anError, "_context", [])]);})() : nil;
 (($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.ErrorHandler);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_logContext_',
+unescape('_log_'),
 smalltalk.method({
 smalltalk.method({
-selector: 'logContext:',
-fn: function (aContext){
+selector: unescape('log%3A'),
+fn: function (aString){
 var self=this;
 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;}
 return self;}
 }),
 }),
 smalltalk.ErrorHandler);
 smalltalk.ErrorHandler);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_logErrorContext_',
+unescape('_logContext_'),
 smalltalk.method({
 smalltalk.method({
-selector: 'logErrorContext:',
+selector: unescape('logContext%3A'),
 fn: function (aContext){
 fn: function (aContext){
 var self=this;
 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;}
 return self;}
 }),
 }),
 smalltalk.ErrorHandler);
 smalltalk.ErrorHandler);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_logError_',
+unescape('_logError_'),
 smalltalk.method({
 smalltalk.method({
-selector: 'logError:',
+selector: unescape('logError%3A'),
 fn: function (anError){
 fn: function (anError){
 var self=this;
 var self=this;
 smalltalk.send(self, "_log_", [smalltalk.send(anError, "_messageText", [])]);
 smalltalk.send(self, "_log_", [smalltalk.send(anError, "_messageText", [])]);
@@ -185,12 +185,12 @@ return self;}
 smalltalk.ErrorHandler);
 smalltalk.ErrorHandler);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_log_',
+unescape('_logErrorContext_'),
 smalltalk.method({
 smalltalk.method({
-selector: 'log:',
-fn: function (aString){
+selector: unescape('logErrorContext%3A'),
+fn: function (aContext){
 var self=this;
 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;}
 return self;}
 }),
 }),
 smalltalk.ErrorHandler);
 smalltalk.ErrorHandler);
@@ -198,9 +198,9 @@ smalltalk.ErrorHandler);
 
 
 smalltalk.ErrorHandler.klass.iVarNames = ['current'];
 smalltalk.ErrorHandler.klass.iVarNames = ['current'];
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_current',
+unescape('_current'),
 smalltalk.method({
 smalltalk.method({
-selector: 'current',
+selector: unescape('current'),
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
 return (($receiver = self['@current']) == nil || $receiver == undefined) ? (function(){return (self['@current']=smalltalk.send(self, "_new", []));})() : $receiver;
 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.ErrorHandler.klass);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_initialize',
+unescape('_initialize'),
 smalltalk.method({
 smalltalk.method({
-selector: 'initialize',
+selector: unescape('initialize'),
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
 smalltalk.send(self, "_register", []);
 smalltalk.send(self, "_register", []);
@@ -220,9 +220,9 @@ return self;}
 smalltalk.ErrorHandler.klass);
 smalltalk.ErrorHandler.klass);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_register',
+unescape('_register'),
 smalltalk.method({
 smalltalk.method({
-selector: 'register',
+selector: unescape('register'),
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
 smalltalk.send((smalltalk.ErrorHandler || ErrorHandler), "_setCurrent_", [smalltalk.send(self, "_new", [])]);
 smalltalk.send((smalltalk.ErrorHandler || ErrorHandler), "_setCurrent_", [smalltalk.send(self, "_new", [])]);
@@ -231,9 +231,9 @@ return self;}
 smalltalk.ErrorHandler.klass);
 smalltalk.ErrorHandler.klass);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_setCurrent_',
+unescape('_setCurrent_'),
 smalltalk.method({
 smalltalk.method({
-selector: 'setCurrent:',
+selector: unescape('setCurrent%3A'),
 fn: function (anHandler){
 fn: function (anHandler){
 var self=this;
 var self=this;
 (self['@current']=anHandler);
 (self['@current']=anHandler);

+ 67 - 67
js/Kernel-Exceptions.js

@@ -1,96 +1,96 @@
 smalltalk.addPackage('Kernel-Exceptions', {});
 smalltalk.addPackage('Kernel-Exceptions', {});
 smalltalk.addClass('Error', smalltalk.Object, ['messageText'], 'Kernel-Exceptions');
 smalltalk.addClass('Error', smalltalk.Object, ['messageText'], 'Kernel-Exceptions');
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_messageText'),
+unescape('_context'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('messageText'),
+selector: unescape('context'),
 category: 'accessing',
 category: 'accessing',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-return self['@messageText'];
+return self.context;
 return self;},
 return self;},
 args: [],
 args: [],
-source: unescape('messageText%0A%09%5EmessageText'),
+source: unescape('context%0A%09%3Creturn%20self.context%3E'),
 messageSends: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
 smalltalk.Error);
 smalltalk.Error);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_messageText_'),
+unescape('_isSmalltalkError'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('messageText%3A'),
-category: 'accessing',
-fn: function (aString){
+selector: unescape('isSmalltalkError'),
+category: 'testing',
+fn: function (){
 var self=this;
 var self=this;
-(self['@messageText']=aString);
+return self.smalltalkError === true;
 return self;},
 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: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
 smalltalk.Error);
 smalltalk.Error);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_signal'),
+unescape('_jsStack'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('signal'),
-category: 'signaling',
+selector: unescape('jsStack'),
+category: 'accessing',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-self.context = smalltalk.getThisContext(); self.smalltalkError = true; throw(self);
+return self.stack;
 return self;},
 return self;},
 args: [],
 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: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
 smalltalk.Error);
 smalltalk.Error);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_context'),
+unescape('_messageText'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('context'),
+selector: unescape('messageText'),
 category: 'accessing',
 category: 'accessing',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-return self.context;
+return self['@messageText'];
 return self;},
 return self;},
 args: [],
 args: [],
-source: unescape('context%0A%09%3Creturn%20self.context%3E'),
+source: unescape('messageText%0A%09%5EmessageText'),
 messageSends: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
 smalltalk.Error);
 smalltalk.Error);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_jsStack'),
+unescape('_messageText_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('jsStack'),
+selector: unescape('messageText%3A'),
 category: 'accessing',
 category: 'accessing',
-fn: function (){
+fn: function (aString){
 var self=this;
 var self=this;
-return self.stack;
+(self['@messageText']=aString);
 return self;},
 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: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
 smalltalk.Error);
 smalltalk.Error);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_isSmalltalkError'),
+unescape('_signal'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('isSmalltalkError'),
-category: 'testing',
+selector: unescape('signal'),
+category: 'signaling',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-return self.smalltalkError === true;
+self.context = smalltalk.getThisContext(); self.smalltalkError = true; throw(self);
 return self;},
 return self;},
 args: [],
 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: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
@@ -147,6 +147,22 @@ referencedClasses: []
 }),
 }),
 smalltalk.MessageNotUnderstood);
 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(
 smalltalk.addMethod(
 unescape('_receiver'),
 unescape('_receiver'),
 smalltalk.method({
 smalltalk.method({
@@ -179,22 +195,6 @@ referencedClasses: []
 }),
 }),
 smalltalk.MessageNotUnderstood);
 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');
 smalltalk.addClass('ErrorHandler', smalltalk.Object, [], 'Kernel-Exceptions');
@@ -216,34 +216,34 @@ referencedClasses: []
 smalltalk.ErrorHandler);
 smalltalk.ErrorHandler);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_logContext_'),
+unescape('_log_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('logContext%3A'),
+selector: unescape('log%3A'),
 category: 'private',
 category: 'private',
-fn: function (aContext){
+fn: function (aString){
 var self=this;
 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;},
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.ErrorHandler);
 smalltalk.ErrorHandler);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_logErrorContext_'),
+unescape('_logContext_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('logErrorContext%3A'),
+selector: unescape('logContext%3A'),
 category: 'private',
 category: 'private',
 fn: function (aContext){
 fn: function (aContext){
 var self=this;
 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;},
 return self;},
 args: ["aContext"],
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.ErrorHandler);
 smalltalk.ErrorHandler);
@@ -265,17 +265,17 @@ referencedClasses: []
 smalltalk.ErrorHandler);
 smalltalk.ErrorHandler);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_log_'),
+unescape('_logErrorContext_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('log%3A'),
+selector: unescape('logErrorContext%3A'),
 category: 'private',
 category: 'private',
-fn: function (aString){
+fn: function (aContext){
 var self=this;
 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;},
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.ErrorHandler);
 smalltalk.ErrorHandler);

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

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

+ 352 - 352
js/Kernel-Methods.js

@@ -1,287 +1,175 @@
 smalltalk.addPackage('Kernel-Methods', {});
 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(
 smalltalk.addMethod(
-unescape('_arguments_'),
+unescape('_applyTo_arguments_'),
 smalltalk.method({
 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;
     var self = this;
-    self['@arguments'] = anArray;
+    return self.apply(anObject, aCollection);
     return self;
     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: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
-smalltalk.Message);
+smalltalk.BlockClosure);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_arguments'),
+unescape('_compiledSource'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('arguments'),
+selector: unescape('compiledSource'),
 category: 'accessing',
 category: 'accessing',
 fn: function () {
 fn: function () {
     var self = this;
     var self = this;
-    return self['@arguments'];
+    return self.toString();
     return self;
     return self;
 },
 },
 args: [],
 args: [],
-source: unescape('arguments%0A%09%5Earguments'),
+source: unescape('compiledSource%0A%09%3Creturn%20self.toString%28%29%3E'),
 messageSends: [],
 messageSends: [],
 referencedClasses: []
 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(
 smalltalk.addMethod(
-unescape('_selector_arguments_'),
+unescape('_ensure_'),
 smalltalk.method({
 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;
     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;
     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(
 smalltalk.addMethod(
-unescape('_receiver'),
+unescape('_new'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('receiver'),
-category: 'accessing',
+selector: unescape('new'),
+category: 'evaluating',
 fn: function () {
 fn: function () {
     var self = this;
     var self = this;
-    return self.receiver;
+    return new self;
     return self;
     return self;
 },
 },
 args: [],
 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: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
-smalltalk.MethodContext);
+smalltalk.BlockClosure);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_selector'),
+unescape('_newValue_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('selector'),
-category: 'accessing',
-fn: function () {
+selector: unescape('newValue%3A'),
+category: 'evaluating',
+fn: function (anObject) {
     var self = this;
     var self = this;
-    return smalltalk.convertSelector(self.selector);
+    return new self(anObject);
     return self;
     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: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
-smalltalk.MethodContext);
+smalltalk.BlockClosure);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_home'),
+unescape('_newValue_value_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('home'),
-category: 'accessing',
-fn: function () {
+selector: unescape('newValue%3Avalue%3A'),
+category: 'evaluating',
+fn: function (anObject, anObject2) {
     var self = this;
     var self = this;
-    return self.homeContext;
+    return new self(anObject, anObject2);
     return self;
     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: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
-smalltalk.MethodContext);
+smalltalk.BlockClosure);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_temps'),
+unescape('_newValue_value_value_'),
 smalltalk.method({
 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;
     var self = this;
-    return self.temps;
+    return new self(anObject, anObject2);
     return self;
     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: [],
 messageSends: [],
 referencedClasses: []
 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(
 smalltalk.addMethod(
-unescape('_compiledSource'),
+unescape('_numArgs'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('compiledSource'),
+selector: unescape('numArgs'),
 category: 'accessing',
 category: 'accessing',
 fn: function () {
 fn: function () {
     var self = this;
     var self = this;
-    return self.toString();
+    return self.length;
     return self;
     return self;
 },
 },
 args: [],
 args: [],
-source: unescape('compiledSource%0A%09%3Creturn%20self.toString%28%29%3E'),
+source: unescape('numArgs%0A%09%3Creturn%20self.length%3E'),
 messageSends: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
 smalltalk.BlockClosure);
 smalltalk.BlockClosure);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_whileTrue_'),
+unescape('_on_do_'),
 smalltalk.method({
 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;
     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;
     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: []
 referencedClasses: []
 }),
 }),
 smalltalk.BlockClosure);
 smalltalk.BlockClosure);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_whileFalse_'),
+unescape('_timeToRun'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('whileFalse%3A'),
-category: 'controlling',
-fn: function (aBlock) {
+selector: unescape('timeToRun'),
+category: 'evaluating',
+fn: function () {
     var self = this;
     var self = this;
-    while (!self()) {
-        aBlock();
-    }
+    return smalltalk.send(smalltalk.Date || Date, "_millisecondsToRun_", [self]);
     return 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);
 smalltalk.BlockClosure);
 
 
@@ -354,35 +242,35 @@ referencedClasses: []
 smalltalk.BlockClosure);
 smalltalk.BlockClosure);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_valueWithPossibleArguments_'),
+unescape('_valueWithInterval_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('valueWithPossibleArguments%3A'),
-category: 'evaluating',
-fn: function (aCollection) {
+selector: unescape('valueWithInterval%3A'),
+category: 'timeout/interval',
+fn: function (aNumber) {
     var self = this;
     var self = this;
-    return self.apply(null, aCollection);
+    return setInterval(self, aNumber);
     return self;
     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: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
 smalltalk.BlockClosure);
 smalltalk.BlockClosure);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_on_do_'),
+unescape('_valueWithPossibleArguments_'),
 smalltalk.method({
 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;
     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;
     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: []
 referencedClasses: []
 }),
 }),
 smalltalk.BlockClosure);
 smalltalk.BlockClosure);
@@ -405,35 +293,37 @@ referencedClasses: []
 smalltalk.BlockClosure);
 smalltalk.BlockClosure);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_valueWithInterval_'),
+unescape('_whileFalse'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('valueWithInterval%3A'),
-category: 'timeout/interval',
-fn: function (aNumber) {
+selector: unescape('whileFalse'),
+category: 'controlling',
+fn: function () {
     var self = this;
     var self = this;
-    return setInterval(self, aNumber);
+    smalltalk.send(self, "_whileFalse_", [function () {return nil;}]);
     return self;
     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: []
 referencedClasses: []
 }),
 }),
 smalltalk.BlockClosure);
 smalltalk.BlockClosure);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_whileFalse'),
+unescape('_whileFalse_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('whileFalse'),
+selector: unescape('whileFalse%3A'),
 category: 'controlling',
 category: 'controlling',
-fn: function () {
+fn: function (aBlock) {
     var self = this;
     var self = this;
-    smalltalk.send(self, "_whileFalse_", [function () {return nil;}]);
+    while (!self()) {
+        aBlock();
+    }
     return self;
     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: []
 referencedClasses: []
 }),
 }),
 smalltalk.BlockClosure);
 smalltalk.BlockClosure);
@@ -456,147 +346,199 @@ referencedClasses: []
 smalltalk.BlockClosure);
 smalltalk.BlockClosure);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_new'),
+unescape('_whileTrue_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('new'),
-category: 'evaluating',
-fn: function () {
+selector: unescape('whileTrue%3A'),
+category: 'controlling',
+fn: function (aBlock) {
     var self = this;
     var self = this;
-    return new self;
+    while (self()) {
+        aBlock();
+    }
     return self;
     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: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
 smalltalk.BlockClosure);
 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(
 smalltalk.addMethod(
-unescape('_applyTo_arguments_'),
+unescape('_arguments'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('applyTo%3Aarguments%3A'),
-category: 'evaluating',
-fn: function (anObject, aCollection) {
+selector: unescape('arguments'),
+category: 'accessing',
+fn: function () {
     var self = this;
     var self = this;
-    return self.apply(anObject, aCollection);
+    return self.args || [];
     return self;
     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: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
-smalltalk.BlockClosure);
+smalltalk.CompiledMethod);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_timeToRun'),
+unescape('_category'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('timeToRun'),
-category: 'evaluating',
+selector: unescape('category'),
+category: 'accessing',
 fn: function () {
 fn: function () {
     var self = this;
     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;
     return self;
 },
 },
 args: [],
 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(
 smalltalk.addMethod(
-unescape('_numArgs'),
+unescape('_category_'),
 smalltalk.method({
 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',
 category: 'accessing',
 fn: function () {
 fn: function () {
     var self = this;
     var self = this;
-    return self.length;
+    return smalltalk.send(self, "_basicAt_", ["fn"]);
     return self;
     return self;
 },
 },
 args: [],
 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: []
 referencedClasses: []
 }),
 }),
-smalltalk.BlockClosure);
+smalltalk.CompiledMethod);
 
 
 smalltalk.addMethod(
 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({
 smalltalk.method({
-selector: unescape('ensure%3A'),
-category: 'evaluating',
-fn: function (aBlock) {
+selector: unescape('methodClass'),
+category: 'accessing',
+fn: function () {
     var self = this;
     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;
     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(
 smalltalk.addMethod(
-unescape('_newValue_'),
+unescape('_referencedClasses'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('newValue%3A'),
-category: 'evaluating',
-fn: function (anObject) {
+selector: unescape('referencedClasses'),
+category: 'accessing',
+fn: function () {
     var self = this;
     var self = this;
-    return new self(anObject);
+    return smalltalk.send(self, "_basicAt_", ["referencedClasses"]);
     return self;
     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: []
 referencedClasses: []
 }),
 }),
-smalltalk.BlockClosure);
+smalltalk.CompiledMethod);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_newValue_value_'),
+unescape('_selector'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('newValue%3Avalue%3A'),
-category: 'evaluating',
-fn: function (anObject, anObject2) {
+selector: unescape('selector'),
+category: 'accessing',
+fn: function () {
     var self = this;
     var self = this;
-    return new self(anObject, anObject2);
+    return smalltalk.send(self, "_basicAt_", ["selector"]);
     return self;
     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: []
 referencedClasses: []
 }),
 }),
-smalltalk.BlockClosure);
+smalltalk.CompiledMethod);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_newValue_value_value_'),
+unescape('_selector_'),
 smalltalk.method({
 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;
     var self = this;
-    return new self(anObject, anObject2);
+    smalltalk.send(self, "_basicAt_put_", ["selector", aString]);
     return self;
     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: []
 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(
 smalltalk.addMethod(
 unescape('_source'),
 unescape('_source'),
 smalltalk.method({
 smalltalk.method({
@@ -632,40 +574,60 @@ referencedClasses: []
 }),
 }),
 smalltalk.CompiledMethod);
 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(
 smalltalk.addMethod(
-unescape('_category'),
+unescape('_arguments'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('category'),
+selector: unescape('arguments'),
 category: 'accessing',
 category: 'accessing',
 fn: function () {
 fn: function () {
     var self = this;
     var self = this;
-    return ($receiver = smalltalk.send(self, "_basicAt_", ["category"])) == nil ||
-        $receiver == undefined ? function () {return "";}() : $receiver;
+    return self['@arguments'];
     return self;
     return self;
 },
 },
 args: [],
 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: []
 referencedClasses: []
 }),
 }),
-smalltalk.CompiledMethod);
+smalltalk.Message);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_category_'),
+unescape('_arguments_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('category%3A'),
+selector: unescape('arguments%3A'),
 category: 'accessing',
 category: 'accessing',
-fn: function (aString) {
+fn: function (anArray) {
     var self = this;
     var self = this;
-    smalltalk.send(self, "_basicAt_put_", ["category", aString]);
+    self['@arguments'] = anArray;
     return self;
     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: []
 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(
 smalltalk.addMethod(
 unescape('_selector'),
 unescape('_selector'),
@@ -674,15 +636,15 @@ selector: unescape('selector'),
 category: 'accessing',
 category: 'accessing',
 fn: function () {
 fn: function () {
     var self = this;
     var self = this;
-    return smalltalk.send(self, "_basicAt_", ["selector"]);
+    return self['@selector'];
     return self;
     return self;
 },
 },
 args: [],
 args: [],
-source: unescape('selector%0A%09%5Eself%20basicAt%3A%20%27selector%27'),
-messageSends: ["basicAt:"],
+source: unescape('selector%0A%09%5Eselector'),
+messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
-smalltalk.CompiledMethod);
+smalltalk.Message);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
 unescape('_selector_'),
 unescape('_selector_'),
@@ -691,117 +653,155 @@ selector: unescape('selector%3A'),
 category: 'accessing',
 category: 'accessing',
 fn: function (aString) {
 fn: function (aString) {
     var self = this;
     var self = this;
-    smalltalk.send(self, "_basicAt_put_", ["selector", aString]);
+    self['@selector'] = aString;
     return self;
     return self;
 },
 },
 args: ["aString"],
 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: []
 referencedClasses: []
 }),
 }),
-smalltalk.CompiledMethod);
+smalltalk.Message);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_fn'),
+unescape('_sendTo_'),
 smalltalk.method({
 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',
 category: 'accessing',
 fn: function () {
 fn: function () {
     var self = this;
     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;
     return self;
 },
 },
 args: [],
 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: []
 referencedClasses: []
 }),
 }),
-smalltalk.CompiledMethod);
+smalltalk.MethodContext);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_fn_'),
+unescape('_home'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('fn%3A'),
+selector: unescape('home'),
 category: 'accessing',
 category: 'accessing',
-fn: function (aBlock) {
+fn: function () {
     var self = this;
     var self = this;
-    smalltalk.send(self, "_basicAt_put_", ["fn", aBlock]);
+    return self.homeContext;
     return self;
     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: []
 referencedClasses: []
 }),
 }),
-smalltalk.CompiledMethod);
+smalltalk.MethodContext);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_messageSends'),
+unescape('_printString'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('messageSends'),
+selector: unescape('printString'),
 category: 'accessing',
 category: 'accessing',
 fn: function () {
 fn: function () {
     var self = this;
     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;
     return self;
 },
 },
 args: [],
 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: []
 referencedClasses: []
 }),
 }),
-smalltalk.CompiledMethod);
+smalltalk.MethodContext);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_methodClass'),
+unescape('_receiver'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('methodClass'),
+selector: unescape('receiver'),
 category: 'accessing',
 category: 'accessing',
 fn: function () {
 fn: function () {
     var self = this;
     var self = this;
-    return smalltalk.send(self, "_basicAt_", ["methodClass"]);
+    return self.receiver;
     return self;
     return self;
 },
 },
 args: [],
 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: []
 referencedClasses: []
 }),
 }),
-smalltalk.CompiledMethod);
+smalltalk.MethodContext);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_referencedClasses'),
+unescape('_selector'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('referencedClasses'),
+selector: unescape('selector'),
 category: 'accessing',
 category: 'accessing',
 fn: function () {
 fn: function () {
     var self = this;
     var self = this;
-    return smalltalk.send(self, "_basicAt_", ["referencedClasses"]);
+    return smalltalk.convertSelector(self.selector);
     return self;
     return self;
 },
 },
 args: [],
 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: []
 referencedClasses: []
 }),
 }),
-smalltalk.CompiledMethod);
+smalltalk.MethodContext);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_arguments'),
+unescape('_temps'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('arguments'),
+selector: unescape('temps'),
 category: 'accessing',
 category: 'accessing',
 fn: function () {
 fn: function () {
     var self = this;
     var self = this;
-    return self.args || [];
+    return self.temps;
     return self;
     return self;
 },
 },
 args: [],
 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: [],
 messageSends: [],
 referencedClasses: []
 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.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(
 smalltalk.addMethod(
-'_open',
+unescape('_clear'),
 smalltalk.method({
 smalltalk.method({
-selector: 'open',
+selector: unescape('clear'),
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-smalltalk.send(smalltalk.send(self, "_current", []), "_open", []);
+
 return self;}
 return self;}
 }),
 }),
-smalltalk.Transcript.klass);
+smalltalk.ConsoleTranscript);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_new',
+unescape('_cr'),
 smalltalk.method({
 smalltalk.method({
-selector: 'new',
+selector: unescape('cr'),
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-smalltalk.send(self, "_shouldNotImplement", []);
+
 return self;}
 return self;}
 }),
 }),
-smalltalk.Transcript.klass);
+smalltalk.ConsoleTranscript);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_current',
+unescape('_open'),
 smalltalk.method({
 smalltalk.method({
-selector: 'current',
+selector: unescape('open'),
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-return self['@current'];
+
 return self;}
 return self;}
 }),
 }),
-smalltalk.Transcript.klass);
+smalltalk.ConsoleTranscript);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_show_',
+unescape('_show_'),
 smalltalk.method({
 smalltalk.method({
-selector: 'show:',
+selector: unescape('show%3A'),
 fn: function (anObject){
 fn: function (anObject){
 var self=this;
 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;}
 return self;}
 }),
 }),
-smalltalk.Transcript.klass);
+smalltalk.ConsoleTranscript);
+
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_cr',
+unescape('_initialize'),
 smalltalk.method({
 smalltalk.method({
-selector: 'cr',
+selector: unescape('initialize'),
 fn: function (){
 fn: function (){
 var self=this;
 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;}
 return self;}
 }),
 }),
-smalltalk.Transcript.klass);
+smalltalk.ConsoleTranscript.klass);
+
+
+smalltalk.addClass('Transcript', smalltalk.Object, ['textarea'], 'Kernel-Transcript');
 
 
+smalltalk.Transcript.klass.iVarNames = ['current'];
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_clear',
+unescape('_clear'),
 smalltalk.method({
 smalltalk.method({
-selector: 'clear',
+selector: unescape('clear'),
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
 smalltalk.send(smalltalk.send(self, "_current", []), "_clear", []);
 smalltalk.send(smalltalk.send(self, "_current", []), "_clear", []);
@@ -69,74 +74,69 @@ return self;}
 smalltalk.Transcript.klass);
 smalltalk.Transcript.klass);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_register_',
+unescape('_cr'),
 smalltalk.method({
 smalltalk.method({
-selector: 'register:',
-fn: function (aTranscript){
+selector: unescape('cr'),
+fn: function (){
 var self=this;
 var self=this;
-(self['@current']=aTranscript);
+smalltalk.send(smalltalk.send(self, "_current", []), "_show_", [smalltalk.send((smalltalk.String || String), "_cr", [])]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.Transcript.klass);
 smalltalk.Transcript.klass);
 
 
-
-smalltalk.addClass('ConsoleTranscript', smalltalk.Object, ['textarea'], 'Kernel-Transcript');
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_clear',
+unescape('_current'),
 smalltalk.method({
 smalltalk.method({
-selector: 'clear',
+selector: unescape('current'),
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-
+return self['@current'];
 return self;}
 return self;}
 }),
 }),
-smalltalk.ConsoleTranscript);
+smalltalk.Transcript.klass);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_cr',
+unescape('_new'),
 smalltalk.method({
 smalltalk.method({
-selector: 'cr',
+selector: unescape('new'),
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-
+smalltalk.send(self, "_shouldNotImplement", []);
 return self;}
 return self;}
 }),
 }),
-smalltalk.ConsoleTranscript);
+smalltalk.Transcript.klass);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_show_',
+unescape('_open'),
 smalltalk.method({
 smalltalk.method({
-selector: 'show:',
-fn: function (anObject){
+selector: unescape('open'),
+fn: function (){
 var self=this;
 var self=this;
-var string=nil;
-(string=smalltalk.send(anObject, "_asString", []));
-console.log(String(string));
+smalltalk.send(smalltalk.send(self, "_current", []), "_open", []);
 return self;}
 return self;}
 }),
 }),
-smalltalk.ConsoleTranscript);
+smalltalk.Transcript.klass);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_open',
+unescape('_register_'),
 smalltalk.method({
 smalltalk.method({
-selector: 'open',
-fn: function (){
+selector: unescape('register%3A'),
+fn: function (aTranscript){
 var self=this;
 var self=this;
-
+(self['@current']=aTranscript);
 return self;}
 return self;}
 }),
 }),
-smalltalk.ConsoleTranscript);
-
+smalltalk.Transcript.klass);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-'_initialize',
+unescape('_show_'),
 smalltalk.method({
 smalltalk.method({
-selector: 'initialize',
-fn: function (){
+selector: unescape('show%3A'),
+fn: function (anObject){
 var self=this;
 var self=this;
-smalltalk.send((smalltalk.Transcript || Transcript), "_register_", [smalltalk.send(self, "_new", [])]);
+smalltalk.send(smalltalk.send(self, "_current", []), "_show_", [anObject]);
 return self;}
 return self;}
 }),
 }),
-smalltalk.ConsoleTranscript.klass);
+smalltalk.Transcript.klass);
 
 
 
 

+ 89 - 89
js/Kernel-Transcript.js

@@ -1,54 +1,52 @@
 smalltalk.addPackage('Kernel-Transcript', {});
 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(
 smalltalk.addMethod(
-unescape('_open'),
+unescape('_clear'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('open'),
-category: 'instance creation',
+selector: unescape('clear'),
+category: 'printing',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-smalltalk.send(smalltalk.send(self, "_current", []), "_open", []);
+
 return self;},
 return self;},
 args: [],
 args: [],
-source: unescape('open%0A%20%20%20%20self%20current%20open'),
-messageSends: ["open", "current"],
+source: unescape('clear%0A%09%22no%20op%22'),
+messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
-smalltalk.Transcript.klass);
+smalltalk.ConsoleTranscript);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_new'),
+unescape('_cr'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('new'),
-category: 'instance creation',
+selector: unescape('cr'),
+category: 'printing',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-smalltalk.send(self, "_shouldNotImplement", []);
+
 return self;},
 return self;},
 args: [],
 args: [],
-source: unescape('new%0A%20%20%20%20self%20shouldNotImplement'),
-messageSends: ["shouldNotImplement"],
+source: unescape('cr%0A%09%22no%20op%22'),
+messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
-smalltalk.Transcript.klass);
+smalltalk.ConsoleTranscript);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_current'),
+unescape('_open'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('current'),
-category: 'instance creation',
+selector: unescape('open'),
+category: 'actions',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-return self['@current'];
+
 return self;},
 return self;},
 args: [],
 args: [],
-source: unescape('current%0A%20%20%20%20%5Ecurrent'),
+source: unescape('open'),
 messageSends: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
-smalltalk.Transcript.klass);
+smalltalk.ConsoleTranscript);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
 unescape('_show_'),
 unescape('_show_'),
@@ -57,31 +55,38 @@ selector: unescape('show%3A'),
 category: 'printing',
 category: 'printing',
 fn: function (anObject){
 fn: function (anObject){
 var self=this;
 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;},
 return self;},
 args: ["anObject"],
 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: []
 referencedClasses: []
 }),
 }),
-smalltalk.Transcript.klass);
+smalltalk.ConsoleTranscript);
+
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_cr'),
+unescape('_initialize'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('cr'),
-category: 'printing',
+selector: unescape('initialize'),
+category: 'initialization',
 fn: function (){
 fn: function (){
 var self=this;
 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;},
 return self;},
 args: [],
 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(
 smalltalk.addMethod(
 unescape('_clear'),
 unescape('_clear'),
 smalltalk.method({
 smalltalk.method({
@@ -99,104 +104,99 @@ referencedClasses: []
 smalltalk.Transcript.klass);
 smalltalk.Transcript.klass);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_register_'),
+unescape('_cr'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('register%3A'),
-category: 'instance creation',
-fn: function (aTranscript){
+selector: unescape('cr'),
+category: 'printing',
+fn: function (){
 var self=this;
 var self=this;
-(self['@current']=aTranscript);
+smalltalk.send(smalltalk.send(self, "_current", []), "_show_", [smalltalk.send((smalltalk.String || String), "_cr", [])]);
 return self;},
 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.Transcript.klass);
 
 
-
-smalltalk.addClass('ConsoleTranscript', smalltalk.Object, ['textarea'], 'Kernel-Transcript');
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_clear'),
+unescape('_current'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('clear'),
-category: 'printing',
+selector: unescape('current'),
+category: 'instance creation',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-
+return self['@current'];
 return self;},
 return self;},
 args: [],
 args: [],
-source: unescape('clear%0A%09%22no%20op%22'),
+source: unescape('current%0A%20%20%20%20%5Ecurrent'),
 messageSends: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
-smalltalk.ConsoleTranscript);
+smalltalk.Transcript.klass);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_cr'),
+unescape('_new'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('cr'),
-category: 'printing',
+selector: unescape('new'),
+category: 'instance creation',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-
+smalltalk.send(self, "_shouldNotImplement", []);
 return self;},
 return self;},
 args: [],
 args: [],
-source: unescape('cr%0A%09%22no%20op%22'),
-messageSends: [],
+source: unescape('new%0A%20%20%20%20self%20shouldNotImplement'),
+messageSends: ["shouldNotImplement"],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
-smalltalk.ConsoleTranscript);
+smalltalk.Transcript.klass);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_show_'),
+unescape('_open'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('show%3A'),
-category: 'printing',
-fn: function (anObject){
+selector: unescape('open'),
+category: 'instance creation',
+fn: function (){
 var self=this;
 var self=this;
-var string=nil;
-(string=smalltalk.send(anObject, "_asString", []));
-console.log(String(string));
+smalltalk.send(smalltalk.send(self, "_current", []), "_open", []);
 return self;},
 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: []
 referencedClasses: []
 }),
 }),
-smalltalk.ConsoleTranscript);
+smalltalk.Transcript.klass);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_open'),
+unescape('_register_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('open'),
-category: 'actions',
-fn: function (){
+selector: unescape('register%3A'),
+category: 'instance creation',
+fn: function (aTranscript){
 var self=this;
 var self=this;
-
+(self['@current']=aTranscript);
 return self;},
 return self;},
-args: [],
-source: unescape('open'),
+args: ["aTranscript"],
+source: unescape('register%3A%20aTranscript%0A%09current%20%3A%3D%20aTranscript'),
 messageSends: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
-smalltalk.ConsoleTranscript);
-
+smalltalk.Transcript.klass);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_initialize'),
+unescape('_show_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('initialize'),
-category: 'initialization',
-fn: function (){
+selector: unescape('show%3A'),
+category: 'printing',
+fn: function (anObject){
 var self=this;
 var self=this;
-smalltalk.send((smalltalk.Transcript || Transcript), "_register_", [smalltalk.send(self, "_new", [])]);
+smalltalk.send(smalltalk.send(self, "_current", []), "_show_", [anObject]);
 return self;},
 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.addPackage('SUnit', {});
 smalltalk.addClass('TestCase', smalltalk.Object, ['testSelector'], 'SUnit');
 smalltalk.addClass('TestCase', smalltalk.Object, ['testSelector'], 'SUnit');
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_setTestSelector_'),
+unescape('_assert_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('setTestSelector%3A'),
-fn: function (aSelector){
+selector: unescape('assert%3A'),
+fn: function (aBoolean){
 var self=this;
 var self=this;
-(self['@testSelector']=aSelector);
+smalltalk.send(self, "_assert_description_", [aBoolean, "Assertion failed"]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.TestCase);
 smalltalk.TestCase);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_selector'),
+unescape('_assert_description_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('selector'),
-fn: function (){
+selector: unescape('assert%3Adescription%3A'),
+fn: function (aBoolean, aString){
 var self=this;
 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;}
 return self;}
 }),
 }),
 smalltalk.TestCase);
 smalltalk.TestCase);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_signalFailure_'),
+unescape('_assert_equals_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('signalFailure%3A'),
-fn: function (aString){
+selector: unescape('assert%3Aequals%3A'),
+fn: function (expected, actual){
 var self=this;
 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;}
 return self;}
 }),
 }),
 smalltalk.TestCase);
 smalltalk.TestCase);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_setUp'),
+unescape('_deny_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('setUp'),
-fn: function (){
+selector: unescape('deny%3A'),
+fn: function (aBoolean){
 var self=this;
 var self=this;
-
+smalltalk.send(self, "_assert_", [smalltalk.send(aBoolean, "_not", [])]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.TestCase);
 smalltalk.TestCase);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_tearDown'),
+unescape('_performTestFor_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('tearDown'),
-fn: function (){
+selector: unescape('performTestFor%3A'),
+fn: function (aResult){
 var self=this;
 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;}
 return self;}
 }),
 }),
 smalltalk.TestCase);
 smalltalk.TestCase);
@@ -70,101 +70,104 @@ return self;}
 smalltalk.TestCase);
 smalltalk.TestCase);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_performTestFor_'),
+unescape('_selector'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('performTestFor%3A'),
-fn: function (aResult){
+selector: unescape('selector'),
+fn: function (){
 var self=this;
 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;}
 return self;}
 }),
 }),
 smalltalk.TestCase);
 smalltalk.TestCase);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_assert_'),
+unescape('_setTestSelector_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('assert%3A'),
-fn: function (aBoolean){
+selector: unescape('setTestSelector%3A'),
+fn: function (aSelector){
 var self=this;
 var self=this;
-smalltalk.send(self, "_assert_description_", [aBoolean, "Assertion failed"]);
+(self['@testSelector']=aSelector);
 return self;}
 return self;}
 }),
 }),
 smalltalk.TestCase);
 smalltalk.TestCase);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_deny_'),
+unescape('_setUp'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('deny%3A'),
-fn: function (aBoolean){
+selector: unescape('setUp'),
+fn: function (){
 var self=this;
 var self=this;
-smalltalk.send(self, "_assert_", [smalltalk.send(aBoolean, "_not", [])]);
+
 return self;}
 return self;}
 }),
 }),
 smalltalk.TestCase);
 smalltalk.TestCase);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_assert_equals_'),
+unescape('_should_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('assert%3Aequals%3A'),
-fn: function (expected, actual){
+selector: unescape('should%3A'),
+fn: function (aBlock){
 var self=this;
 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;}
 return self;}
 }),
 }),
 smalltalk.TestCase);
 smalltalk.TestCase);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_assert_description_'),
+unescape('_should_raise_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('assert%3Adescription%3A'),
-fn: function (aBoolean, aString){
+selector: unescape('should%3Araise%3A'),
+fn: function (aBlock, anExceptionClass){
 var self=this;
 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;}
 return self;}
 }),
 }),
 smalltalk.TestCase);
 smalltalk.TestCase);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_should_'),
+unescape('_signalFailure_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('should%3A'),
-fn: function (aBlock){
+selector: unescape('signalFailure%3A'),
+fn: function (aString){
 var self=this;
 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;}
 return self;}
 }),
 }),
 smalltalk.TestCase);
 smalltalk.TestCase);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_should_raise_'),
+unescape('_tearDown'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('should%3Araise%3A'),
-fn: function (aBlock, anExceptionClass){
+selector: unescape('tearDown'),
+fn: function (){
 var self=this;
 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;}
 return self;}
 }),
 }),
 smalltalk.TestCase);
 smalltalk.TestCase);
 
 
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_testSelectors'),
+unescape('_allTestSelectors'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('testSelectors'),
+selector: unescape('allTestSelectors'),
 fn: function (){
 fn: function (){
 var self=this;
 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;}
 return self;}
 }),
 }),
 smalltalk.TestCase.klass);
 smalltalk.TestCase.klass);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_selector_'),
+unescape('_buildSuite'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('selector%3A'),
-fn: function (aSelector){
+selector: unescape('buildSuite'),
+fn: function (){
 var self=this;
 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;}
 return self;}
 }),
 }),
 smalltalk.TestCase.klass);
 smalltalk.TestCase.klass);
@@ -181,37 +184,34 @@ return self;}
 smalltalk.TestCase.klass);
 smalltalk.TestCase.klass);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_allTestSelectors'),
+unescape('_selector_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('allTestSelectors'),
-fn: function (){
+selector: unescape('selector%3A'),
+fn: function (aSelector){
 var self=this;
 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;}
 return self;}
 }),
 }),
 smalltalk.TestCase.klass);
 smalltalk.TestCase.klass);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_buildSuite'),
+unescape('_shouldInheritSelectors'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('buildSuite'),
+selector: unescape('shouldInheritSelectors'),
 fn: function (){
 fn: function (){
 var self=this;
 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;}
 return self;}
 }),
 }),
 smalltalk.TestCase.klass);
 smalltalk.TestCase.klass);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_shouldInheritSelectors'),
+unescape('_testSelectors'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('shouldInheritSelectors'),
+selector: unescape('testSelectors'),
 fn: function (){
 fn: function (){
 var self=this;
 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;}
 return self;}
 }),
 }),
 smalltalk.TestCase.klass);
 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.addClass('TestResult', smalltalk.Object, ['timestamp', 'runs', 'errors', 'failures', 'total'], 'SUnit');
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_timestamp'),
+unescape('_addError_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('timestamp'),
-fn: function (){
+selector: unescape('addError%3A'),
+fn: function (anError){
 var self=this;
 var self=this;
-return self['@timestamp'];
+smalltalk.send(smalltalk.send(self, "_errors", []), "_add_", [anError]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.TestResult);
 smalltalk.TestResult);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_errors'),
+unescape('_addFailure_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('errors'),
-fn: function (){
+selector: unescape('addFailure%3A'),
+fn: function (aFailure){
 var self=this;
 var self=this;
-return self['@errors'];
+smalltalk.send(smalltalk.send(self, "_failures", []), "_add_", [aFailure]);
 return self;}
 return self;}
 }),
 }),
 smalltalk.TestResult);
 smalltalk.TestResult);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_failures'),
+unescape('_errors'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('failures'),
+selector: unescape('errors'),
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-return self['@failures'];
+return self['@errors'];
 return self;}
 return self;}
 }),
 }),
 smalltalk.TestResult);
 smalltalk.TestResult);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_total'),
+unescape('_failures'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('total'),
+selector: unescape('failures'),
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-return self['@total'];
+return self['@failures'];
 return self;}
 return self;}
 }),
 }),
 smalltalk.TestResult);
 smalltalk.TestResult);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_total_'),
+unescape('_increaseRuns'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('total%3A'),
-fn: function (aNumber){
+selector: unescape('increaseRuns'),
+fn: function (){
 var self=this;
 var self=this;
-(self['@total']=aNumber);
+(self['@runs']=((($receiver = self['@runs']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));
 return self;}
 return self;}
 }),
 }),
 smalltalk.TestResult);
 smalltalk.TestResult);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_addError_'),
+unescape('_initialize'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('addError%3A'),
-fn: function (anError){
+selector: unescape('initialize'),
+fn: function (){
 var self=this;
 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;}
 return self;}
 }),
 }),
 smalltalk.TestResult);
 smalltalk.TestResult);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_addFailure_'),
+unescape('_runs'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('addFailure%3A'),
-fn: function (aFailure){
+selector: unescape('runs'),
+fn: function (){
 var self=this;
 var self=this;
-smalltalk.send(smalltalk.send(self, "_failures", []), "_add_", [aFailure]);
+return self['@runs'];
 return self;}
 return self;}
 }),
 }),
 smalltalk.TestResult);
 smalltalk.TestResult);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_runs'),
+unescape('_status'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('runs'),
+selector: unescape('status'),
 fn: function (){
 fn: function (){
 var self=this;
 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;}
 return self;}
 }),
 }),
 smalltalk.TestResult);
 smalltalk.TestResult);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_increaseRuns'),
+unescape('_timestamp'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('increaseRuns'),
+selector: unescape('timestamp'),
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-(self['@runs']=((($receiver = self['@runs']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));
+return self['@timestamp'];
 return self;}
 return self;}
 }),
 }),
 smalltalk.TestResult);
 smalltalk.TestResult);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_status'),
+unescape('_total'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('status'),
+selector: unescape('total'),
 fn: function (){
 fn: function (){
 var self=this;
 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;}
 return self;}
 }),
 }),
 smalltalk.TestResult);
 smalltalk.TestResult);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_initialize'),
+unescape('_total_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('initialize'),
-fn: function (){
+selector: unescape('total%3A'),
+fn: function (aNumber){
 var self=this;
 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;}
 return self;}
 }),
 }),
 smalltalk.TestResult);
 smalltalk.TestResult);

+ 202 - 202
js/SUnit.js

@@ -1,82 +1,82 @@
 smalltalk.addPackage('SUnit', {});
 smalltalk.addPackage('SUnit', {});
 smalltalk.addClass('TestCase', smalltalk.Object, ['testSelector'], 'SUnit');
 smalltalk.addClass('TestCase', smalltalk.Object, ['testSelector'], 'SUnit');
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_setTestSelector_'),
+unescape('_assert_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('setTestSelector%3A'),
-category: 'accessing',
-fn: function (aSelector){
+selector: unescape('assert%3A'),
+category: 'testing',
+fn: function (aBoolean){
 var self=this;
 var self=this;
-(self['@testSelector']=aSelector);
+smalltalk.send(self, "_assert_description_", [aBoolean, "Assertion failed"]);
 return self;},
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.TestCase);
 smalltalk.TestCase);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_selector'),
+unescape('_assert_description_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('selector'),
-category: 'accessing',
-fn: function (){
+selector: unescape('assert%3Adescription%3A'),
+category: 'testing',
+fn: function (aBoolean, aString){
 var self=this;
 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;},
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.TestCase);
 smalltalk.TestCase);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_signalFailure_'),
+unescape('_assert_equals_'),
 smalltalk.method({
 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;
 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;},
 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.TestCase);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_setUp'),
+unescape('_deny_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('setUp'),
-category: 'running',
-fn: function (){
+selector: unescape('deny%3A'),
+category: 'testing',
+fn: function (aBoolean){
 var self=this;
 var self=this;
-
+smalltalk.send(self, "_assert_", [smalltalk.send(aBoolean, "_not", [])]);
 return self;},
 return self;},
-args: [],
-source: unescape('setUp'),
-messageSends: [],
+args: ["aBoolean"],
+source: unescape('deny%3A%20aBoolean%0A%09self%20assert%3A%20aBoolean%20not'),
+messageSends: ["assert:", "not"],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
 smalltalk.TestCase);
 smalltalk.TestCase);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_tearDown'),
+unescape('_performTestFor_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('tearDown'),
+selector: unescape('performTestFor%3A'),
 category: 'running',
 category: 'running',
-fn: function (){
+fn: function (aResult){
 var self=this;
 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;},
 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);
 smalltalk.TestCase);
 
 
@@ -100,81 +100,49 @@ referencedClasses: []
 smalltalk.TestCase);
 smalltalk.TestCase);
 
 
 smalltalk.addMethod(
 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({
 smalltalk.method({
-selector: unescape('assert%3A'),
-category: 'testing',
-fn: function (aBoolean){
+selector: unescape('selector'),
+category: 'accessing',
+fn: function (){
 var self=this;
 var self=this;
-smalltalk.send(self, "_assert_description_", [aBoolean, "Assertion failed"]);
+return self['@testSelector'];
 return self;},
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.TestCase);
 smalltalk.TestCase);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_deny_'),
+unescape('_setTestSelector_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('deny%3A'),
-category: 'testing',
-fn: function (aBoolean){
+selector: unescape('setTestSelector%3A'),
+category: 'accessing',
+fn: function (aSelector){
 var self=this;
 var self=this;
-smalltalk.send(self, "_assert_", [smalltalk.send(aBoolean, "_not", [])]);
+(self['@testSelector']=aSelector);
 return self;},
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.TestCase);
 smalltalk.TestCase);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_assert_equals_'),
+unescape('_setUp'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('assert%3Aequals%3A'),
-category: 'testing',
-fn: function (expected, actual){
+selector: unescape('setUp'),
+category: 'running',
+fn: function (){
 var self=this;
 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;},
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.TestCase);
 smalltalk.TestCase);
@@ -211,54 +179,38 @@ referencedClasses: []
 }),
 }),
 smalltalk.TestCase);
 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(
 smalltalk.addMethod(
-unescape('_selector_'),
+unescape('_signalFailure_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('selector%3A'),
-category: 'accessing',
-fn: function (aSelector){
+selector: unescape('signalFailure%3A'),
+category: 'private',
+fn: function (aString){
 var self=this;
 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;},
 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(
 smalltalk.addMethod(
-unescape('_lookupHierarchyRoot'),
+unescape('_tearDown'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('lookupHierarchyRoot'),
-category: 'accessing',
+selector: unescape('tearDown'),
+category: 'running',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-return (smalltalk.TestCase || TestCase);
+
 return self;},
 return self;},
 args: [],
 args: [],
-source: unescape('lookupHierarchyRoot%0A%09%5ETestCase'),
+source: unescape('tearDown'),
 messageSends: [],
 messageSends: [],
-referencedClasses: ["TestCase"]
+referencedClasses: []
 }),
 }),
-smalltalk.TestCase.klass);
+smalltalk.TestCase);
+
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
 unescape('_allTestSelectors'),
 unescape('_allTestSelectors'),
@@ -295,6 +247,38 @@ referencedClasses: []
 }),
 }),
 smalltalk.TestCase.klass);
 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(
 smalltalk.addMethod(
 unescape('_shouldInheritSelectors'),
 unescape('_shouldInheritSelectors'),
 smalltalk.method({
 smalltalk.method({
@@ -311,23 +295,55 @@ referencedClasses: []
 }),
 }),
 smalltalk.TestCase.klass);
 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('TestFailure', smalltalk.Error, [], 'SUnit');
 
 
 
 
 smalltalk.addClass('TestResult', smalltalk.Object, ['timestamp', 'runs', 'errors', 'failures', 'total'], 'SUnit');
 smalltalk.addClass('TestResult', smalltalk.Object, ['timestamp', 'runs', 'errors', 'failures', 'total'], 'SUnit');
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_timestamp'),
+unescape('_addError_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('timestamp'),
+selector: unescape('addError%3A'),
 category: 'accessing',
 category: 'accessing',
-fn: function (){
+fn: function (anError){
 var self=this;
 var self=this;
-return self['@timestamp'];
+smalltalk.send(smalltalk.send(self, "_errors", []), "_add_", [anError]);
 return self;},
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.TestResult);
 smalltalk.TestResult);
@@ -365,137 +381,121 @@ referencedClasses: []
 smalltalk.TestResult);
 smalltalk.TestResult);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_total'),
+unescape('_increaseRuns'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('total'),
+selector: unescape('increaseRuns'),
 category: 'accessing',
 category: 'accessing',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-return self['@total'];
+(self['@runs']=((($receiver = self['@runs']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));
 return self;},
 return self;},
 args: [],
 args: [],
-source: unescape('total%0A%09%5Etotal'),
-messageSends: [],
+source: unescape('increaseRuns%0A%09runs%20%3A%3D%20runs%20+%201'),
+messageSends: [unescape("+")],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
 smalltalk.TestResult);
 smalltalk.TestResult);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_total_'),
+unescape('_initialize'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('total%3A'),
-category: 'accessing',
-fn: function (aNumber){
+selector: unescape('initialize'),
+category: 'initialization',
+fn: function (){
 var self=this;
 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;},
 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.TestResult);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_addError_'),
+unescape('_runs'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('addError%3A'),
+selector: unescape('runs'),
 category: 'accessing',
 category: 'accessing',
-fn: function (anError){
+fn: function (){
 var self=this;
 var self=this;
-smalltalk.send(smalltalk.send(self, "_errors", []), "_add_", [anError]);
+return self['@runs'];
 return self;},
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.TestResult);
 smalltalk.TestResult);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_addFailure_'),
+unescape('_status'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('addFailure%3A'),
+selector: unescape('status'),
 category: 'accessing',
 category: 'accessing',
-fn: function (aFailure){
+fn: function (){
 var self=this;
 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;},
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.TestResult);
 smalltalk.TestResult);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_runs'),
+unescape('_timestamp'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('runs'),
+selector: unescape('timestamp'),
 category: 'accessing',
 category: 'accessing',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-return self['@runs'];
+return self['@timestamp'];
 return self;},
 return self;},
 args: [],
 args: [],
-source: unescape('runs%0A%09%5Eruns'),
+source: unescape('timestamp%0A%09%5Etimestamp'),
 messageSends: [],
 messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
 smalltalk.TestResult);
 smalltalk.TestResult);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_increaseRuns'),
+unescape('_total'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('increaseRuns'),
+selector: unescape('total'),
 category: 'accessing',
 category: 'accessing',
 fn: function (){
 fn: function (){
 var self=this;
 var self=this;
-(self['@runs']=((($receiver = self['@runs']).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)])));
+return self['@total'];
 return self;},
 return self;},
 args: [],
 args: [],
-source: unescape('increaseRuns%0A%09runs%20%3A%3D%20runs%20+%201'),
-messageSends: [unescape("+")],
+source: unescape('total%0A%09%5Etotal'),
+messageSends: [],
 referencedClasses: []
 referencedClasses: []
 }),
 }),
 smalltalk.TestResult);
 smalltalk.TestResult);
 
 
 smalltalk.addMethod(
 smalltalk.addMethod(
-unescape('_status'),
+unescape('_total_'),
 smalltalk.method({
 smalltalk.method({
-selector: unescape('status'),
+selector: unescape('total%3A'),
 category: 'accessing',
 category: 'accessing',
-fn: function (){
+fn: function (aNumber){
 var self=this;
 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;},
 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: []
 referencedClasses: []
 }),
 }),
 smalltalk.TestResult);
 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;
 		var additionalFiles = spec.packages || spec.files;
 		if (additionalFiles) {
 		if (additionalFiles) {
-			loadPackages(additionalFiles, spec.prefix);
+			loadPackages(additionalFiles, spec.prefix, spec.packageHome);
 		}
 		}
 
 
 		// Be sure to setup & initialize smalltalk classes
 		// Be sure to setup & initialize smalltalk classes
@@ -103,29 +103,32 @@ amber = (function() {
 		initializeSmalltalk();
 		initializeSmalltalk();
 	};
 	};
 
 
-	function loadPackages(names, prefix){
+	function loadPackages(names, prefix, urlHome){
 		var name, url;
 		var name, url;
 		var prefix = prefix || 'js';
 		var prefix = prefix || 'js';
+    var urlHome = urlHome || home;
 
 
 		for (var i=0; i < names.length; i++) {
 		for (var i=0; i < names.length; i++) {
 			name = names[i].split(/\.js$/)[0];
 			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 prefix = prefix || 'js';
 		var name = name;
 		var name = name;
+    var urlHome = urlHome || home;
 
 
 		if (!deploy) {
 		if (!deploy) {
 			name = name + nocache;
 			name = name + nocache;
 		}
 		}
 
 
-		return home + prefix + '/' + name;
+		return urlHome + prefix + '/' + name;
 	};
 	};
 
 
 	function loadCSS(name, prefix) {
 	function loadCSS(name, prefix) {

+ 1 - 1
js/init.js

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

+ 22 - 22
st/Benchfib.st

@@ -1,7 +1,7 @@
 Smalltalk current createPackage: 'Benchfib' properties: #{}!
 Smalltalk current createPackage: 'Benchfib' properties: #{}!
 Object subclass: #Benchfib
 Object subclass: #Benchfib
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Benchfib'!
+	package: 'Benchfib'!
 
 
 !Benchfib class methodsFor: 'not yet classified'!
 !Benchfib class methodsFor: 'not yet classified'!
 
 
@@ -49,27 +49,6 @@ benchmark
     ^ count
     ^ 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
 jsbenchFib
  
  
 	<if (this < 2) {
 	<if (this < 2) {
@@ -118,6 +97,27 @@ jstinyBenchmarks
 	"Note: #jsbenchFib's runtime is about O(k^n),
 	"Note: #jsbenchFib's runtime is about O(k^n),
 		where k is the golden number = (1 + 5 sqrt) / 2 = 1.618...."
 		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; ',
 	^ ((n1 * 500000 * 1000) / t1) printString, ' bytecodes/sec; ',
 	  ((r * 1000) / t2) printString, ' sends/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: #{}!
 Smalltalk current createPackage: 'Compiler' properties: #{}!
 Object subclass: #ChunkParser
 Object subclass: #ChunkParser
 	instanceVariableNames: 'stream'
 	instanceVariableNames: 'stream'
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 
 !ChunkParser methodsFor: 'accessing'!
 !ChunkParser methodsFor: 'accessing'!
 
 
@@ -42,11 +42,11 @@ on: aStream
 
 
 Object subclass: #DoIt
 Object subclass: #DoIt
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 
 Object subclass: #Exporter
 Object subclass: #Exporter
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 
 !Exporter methodsFor: 'fileOut'!
 !Exporter methodsFor: 'fileOut'!
 
 
@@ -175,7 +175,7 @@ exportPackageExtensionsOf: package on: aStream
 
 
 Exporter subclass: #ChunkExporter
 Exporter subclass: #ChunkExporter
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 
 !ChunkExporter methodsFor: 'not yet classified'!
 !ChunkExporter methodsFor: 'not yet classified'!
 
 
@@ -195,23 +195,23 @@ classNameFor: aClass
 !
 !
 
 
 exportDefinitionOf: aClass on: aStream
 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
 exportMetaDefinitionOf: aClass on: aStream
@@ -289,7 +289,7 @@ exportPackageExtensionsOf: package on: aStream
 
 
 Exporter subclass: #StrippedExporter
 Exporter subclass: #StrippedExporter
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 
 !StrippedExporter methodsFor: 'private'!
 !StrippedExporter methodsFor: 'private'!
 
 
@@ -323,7 +323,7 @@ exportMethod: aMethod of: aClass on: aStream
 
 
 Object subclass: #Importer
 Object subclass: #Importer
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 
 !Importer methodsFor: 'fileIn'!
 !Importer methodsFor: 'fileIn'!
 
 
@@ -345,7 +345,7 @@ import: aStream
 
 
 Object subclass: #Node
 Object subclass: #Node
 	instanceVariableNames: 'nodes'
 	instanceVariableNames: 'nodes'
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 
 !Node methodsFor: 'accessing'!
 !Node methodsFor: 'accessing'!
 
 
@@ -385,7 +385,7 @@ accept: aVisitor
 
 
 Node subclass: #AssignmentNode
 Node subclass: #AssignmentNode
 	instanceVariableNames: 'left right'
 	instanceVariableNames: 'left right'
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 
 !AssignmentNode methodsFor: 'accessing'!
 !AssignmentNode methodsFor: 'accessing'!
 
 
@@ -414,7 +414,7 @@ accept: aVisitor
 
 
 Node subclass: #BlockNode
 Node subclass: #BlockNode
 	instanceVariableNames: 'parameters inlined'
 	instanceVariableNames: 'parameters inlined'
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 
 !BlockNode methodsFor: 'accessing'!
 !BlockNode methodsFor: 'accessing'!
 
 
@@ -448,7 +448,7 @@ accept: aVisitor
 
 
 Node subclass: #CascadeNode
 Node subclass: #CascadeNode
 	instanceVariableNames: 'receiver'
 	instanceVariableNames: 'receiver'
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 
 !CascadeNode methodsFor: 'accessing'!
 !CascadeNode methodsFor: 'accessing'!
 
 
@@ -468,7 +468,7 @@ accept: aVisitor
 
 
 Node subclass: #DynamicArrayNode
 Node subclass: #DynamicArrayNode
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 
 !DynamicArrayNode methodsFor: 'visiting'!
 !DynamicArrayNode methodsFor: 'visiting'!
 
 
@@ -478,7 +478,7 @@ accept: aVisitor
 
 
 Node subclass: #DynamicDictionaryNode
 Node subclass: #DynamicDictionaryNode
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 
 !DynamicDictionaryNode methodsFor: 'visiting'!
 !DynamicDictionaryNode methodsFor: 'visiting'!
 
 
@@ -488,7 +488,7 @@ accept: aVisitor
 
 
 Node subclass: #JSStatementNode
 Node subclass: #JSStatementNode
 	instanceVariableNames: 'source'
 	instanceVariableNames: 'source'
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 
 !JSStatementNode methodsFor: 'accessing'!
 !JSStatementNode methodsFor: 'accessing'!
 
 
@@ -508,7 +508,7 @@ accept: aVisitor
 
 
 Node subclass: #MethodNode
 Node subclass: #MethodNode
 	instanceVariableNames: 'selector arguments source'
 	instanceVariableNames: 'selector arguments source'
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 
 !MethodNode methodsFor: 'accessing'!
 !MethodNode methodsFor: 'accessing'!
 
 
@@ -544,7 +544,7 @@ accept: aVisitor
 
 
 Node subclass: #ReturnNode
 Node subclass: #ReturnNode
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 
 !ReturnNode methodsFor: 'visiting'!
 !ReturnNode methodsFor: 'visiting'!
 
 
@@ -554,7 +554,7 @@ accept: aVisitor
 
 
 Node subclass: #SendNode
 Node subclass: #SendNode
 	instanceVariableNames: 'selector arguments receiver'
 	instanceVariableNames: 'selector arguments receiver'
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 
 !SendNode methodsFor: 'accessing'!
 !SendNode methodsFor: 'accessing'!
 
 
@@ -612,7 +612,7 @@ accept: aVisitor
 
 
 Node subclass: #SequenceNode
 Node subclass: #SequenceNode
 	instanceVariableNames: 'temps'
 	instanceVariableNames: 'temps'
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 
 !SequenceNode methodsFor: 'accessing'!
 !SequenceNode methodsFor: 'accessing'!
 
 
@@ -641,7 +641,7 @@ accept: aVisitor
 
 
 SequenceNode subclass: #BlockSequenceNode
 SequenceNode subclass: #BlockSequenceNode
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 
 !BlockSequenceNode methodsFor: 'testing'!
 !BlockSequenceNode methodsFor: 'testing'!
 
 
@@ -657,7 +657,7 @@ accept: aVisitor
 
 
 Node subclass: #ValueNode
 Node subclass: #ValueNode
 	instanceVariableNames: 'value'
 	instanceVariableNames: 'value'
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 
 !ValueNode methodsFor: 'accessing'!
 !ValueNode methodsFor: 'accessing'!
 
 
@@ -683,7 +683,7 @@ accept: aVisitor
 
 
 ValueNode subclass: #VariableNode
 ValueNode subclass: #VariableNode
 	instanceVariableNames: 'assigned'
 	instanceVariableNames: 'assigned'
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 
 !VariableNode methodsFor: 'accessing'!
 !VariableNode methodsFor: 'accessing'!
 
 
@@ -703,7 +703,7 @@ accept: aVisitor
 
 
 VariableNode subclass: #ClassReferenceNode
 VariableNode subclass: #ClassReferenceNode
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 
 !ClassReferenceNode methodsFor: 'visiting'!
 !ClassReferenceNode methodsFor: 'visiting'!
 
 
@@ -713,7 +713,7 @@ accept: aVisitor
 
 
 Object subclass: #NodeVisitor
 Object subclass: #NodeVisitor
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 
 !NodeVisitor methodsFor: 'visiting'!
 !NodeVisitor methodsFor: 'visiting'!
 
 
@@ -786,7 +786,7 @@ visitVariableNode: aNode
 
 
 NodeVisitor subclass: #Compiler
 NodeVisitor subclass: #Compiler
 	instanceVariableNames: 'stream nestedBlocks earlyReturn currentClass currentSelector unknownVariables tempVariables messageSends referencedClasses classReferenced source argVariables'
 	instanceVariableNames: 'stream nestedBlocks earlyReturn currentClass currentSelector unknownVariables tempVariables messageSends referencedClasses classReferenced source argVariables'
-	category: 'Compiler'!
+	package: 'Compiler'!
 
 
 !Compiler methodsFor: 'accessing'!
 !Compiler methodsFor: 'accessing'!
 
 

+ 5 - 5
st/Examples.st

@@ -1,17 +1,17 @@
 Smalltalk current createPackage: 'Examples' properties: #{}!
 Smalltalk current createPackage: 'Examples' properties: #{}!
 Widget subclass: #Counter
 Widget subclass: #Counter
 	instanceVariableNames: 'count header'
 	instanceVariableNames: 'count header'
-	category: 'Examples'!
+	package: 'Examples'!
 
 
 !Counter methodsFor: 'actions'!
 !Counter methodsFor: 'actions'!
 
 
-increase
-    count := count + 1.
+decrease
+    count := count - 1.
     header contents: [:html | html with: count asString]
     header contents: [:html | html with: count asString]
 !
 !
 
 
-decrease
-    count := count - 1.
+increase
+    count := count + 1.
     header contents: [:html | html with: count asString]
     header contents: [:html | html with: count asString]
 ! !
 ! !
 
 

+ 14 - 14
st/IDE.st

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

+ 2 - 2
st/Kernel-Announcements.st

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

+ 81 - 80
st/Kernel-Classes.st

@@ -1,7 +1,7 @@
 Smalltalk current createPackage: 'Kernel-Classes' properties: #{}!
 Smalltalk current createPackage: 'Kernel-Classes' properties: #{}!
 Object subclass: #Behavior
 Object subclass: #Behavior
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Kernel-Classes'!
+	package: 'Kernel-Classes'!
 !Behavior commentStamp!
 !Behavior commentStamp!
 Behavior is the superclass of all class objects. 
 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'!
 !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
 allSubclasses
@@ -33,12 +29,30 @@ allSubclasses
 	^result
 	^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
 methodDictionary
@@ -58,22 +72,13 @@ methodsFor: aString
 	    yourself
 	    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
 protocols
@@ -98,25 +103,20 @@ protocolsDo: aBlock
 		aBlock value: category value: (methodsByCategory at: category)]
 		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'!
 !Behavior methodsFor: 'compiling'!
@@ -125,12 +125,6 @@ addCompiledMethod: aMethod
 	<smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self)>
 	<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
 compile: aString
 	self compile: aString category: ''
 	self compile: aString category: ''
 !
 !
@@ -140,16 +134,22 @@ compile: aString category: anotherString
 	method := Compiler new load: aString forClass: self.
 	method := Compiler new load: aString forClass: self.
 	method category: anotherString.
 	method category: anotherString.
 	self addCompiledMethod: method
 	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'!
 !Behavior methodsFor: 'instance creation'!
 
 
-new
-	^self basicNew initialize
-!
-
 basicNew
 basicNew
 	<return new self.fn()>
 	<return new self.fn()>
+!
+
+new
+	^self basicNew initialize
 ! !
 ! !
 
 
 !Behavior methodsFor: 'testing'!
 !Behavior methodsFor: 'testing'!
@@ -160,7 +160,7 @@ inheritsFrom: aClass
 
 
 Behavior subclass: #Class
 Behavior subclass: #Class
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Kernel-Classes'!
+	package: 'Kernel-Classes'!
 !Class commentStamp!
 !Class commentStamp!
 Class is __the__ class object. 
 Class is __the__ class object. 
 
 
@@ -173,20 +173,20 @@ category
 	^self package ifNil: ['Unclassified'] ifNotNil: [self package name]
 	^self package ifNil: ['Unclassified'] ifNotNil: [self package name]
 !
 !
 
 
-rename: aString
-	<
-		smalltalk[aString] = self;
-		delete smalltalk[self.className];
-		self.className = aString;
-	>
-!
-
 package
 package
 	<return self.pkg>
 	<return self.pkg>
 !
 !
 
 
 package: aPackage
 package: aPackage
 	<self.pkg = aPackage>
 	<self.pkg = aPackage>
+!
+
+rename: aString
+	<
+		smalltalk[aString] = self;
+		delete smalltalk[self.className];
+		self.className = aString;
+	>
 ! !
 ! !
 
 
 !Class methodsFor: 'class creation'!
 !Class methodsFor: 'class creation'!
@@ -226,7 +226,7 @@ isClass
 
 
 Behavior subclass: #Metaclass
 Behavior subclass: #Metaclass
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Kernel-Classes'!
+	package: 'Kernel-Classes'!
 !Metaclass commentStamp!
 !Metaclass commentStamp!
 Metaclass is the root of the class hierarchy.
 Metaclass is the root of the class hierarchy.
 
 
@@ -258,7 +258,7 @@ isMetaclass
 
 
 Object subclass: #ClassBuilder
 Object subclass: #ClassBuilder
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Kernel-Classes'!
+	package: 'Kernel-Classes'!
 !ClassBuilder commentStamp!
 !ClassBuilder commentStamp!
 ClassBuilder is responsible for compiling new classes or modifying existing classes in the system.
 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'!
 !ClassBuilder methodsFor: 'class creation'!
 
 
-superclass: aClass subclass: aString
-	^self superclass: aClass subclass: aString instanceVariableNames: '' package: nil
-!
-
 class: aClass instanceVariableNames: aString
 class: aClass instanceVariableNames: aString
 	aClass isMetaclass ifFalse: [self error: aClass name, ' is not a metaclass'].
 	aClass isMetaclass ifFalse: [self error: aClass name, ' is not a metaclass'].
 	aClass basicAt: 'iVarNames' put: (self instanceVariableNamesFor: aString).
 	aClass basicAt: 'iVarNames' put: (self instanceVariableNamesFor: aString).
 	self setupClass: aClass
 	self setupClass: aClass
 !
 !
 
 
+superclass: aClass subclass: aString
+	^self superclass: aClass subclass: aString instanceVariableNames: '' package: nil
+!
+
 superclass: aClass subclass: aString instanceVariableNames: aString2 package: aString3
 superclass: aClass subclass: aString instanceVariableNames: aString2 package: aString3
 	| newClass |
 	| newClass |
 	newClass := self addSubclassOf: aClass
 	newClass := self addSubclassOf: aClass
@@ -287,19 +287,11 @@ superclass: aClass subclass: aString instanceVariableNames: aString2 package: aS
 
 
 !ClassBuilder methodsFor: 'private'!
 !ClassBuilder methodsFor: 'private'!
 
 
-instanceVariableNamesFor: aString
-	^(aString tokenize: ' ') reject: [:each | each isEmpty]
-!
-
 addSubclassOf: aClass named: aString instanceVariableNames: aCollection
 addSubclassOf: aClass named: aString instanceVariableNames: aCollection
 	<smalltalk.addClass(aString, aClass, aCollection);
 	<smalltalk.addClass(aString, aClass, aCollection);
 	    return smalltalk[aString]>
 	    return smalltalk[aString]>
 !
 !
 
 
-setupClass: aClass
-	<smalltalk.init(aClass);>
-!
-
 addSubclassOf: aClass named: aString instanceVariableNames: aCollection package: packageName
 addSubclassOf: aClass named: aString instanceVariableNames: aCollection package: packageName
 	<smalltalk.addClass(aString, aClass, aCollection, packageName);
 	<smalltalk.addClass(aString, aClass, aCollection, packageName);
 	    return smalltalk[aString]>
 	    return smalltalk[aString]>
@@ -326,11 +318,19 @@ copyClass: aClass named: aString
 
 
 	self setupClass: newClass.
 	self setupClass: newClass.
 	^newClass
 	^newClass
+!
+
+instanceVariableNamesFor: aString
+	^(aString tokenize: ' ') reject: [:each | each isEmpty]
+!
+
+setupClass: aClass
+	<smalltalk.init(aClass);>
 ! !
 ! !
 
 
 Object subclass: #ClassCategoryReader
 Object subclass: #ClassCategoryReader
 	instanceVariableNames: 'class category chunkParser'
 	instanceVariableNames: 'class category chunkParser'
-	category: 'Kernel-Classes'!
+	package: 'Kernel-Classes'!
 !ClassCategoryReader commentStamp!
 !ClassCategoryReader commentStamp!
 ClassCategoryReader represents a mechanism for retrieving class descriptions stored on a file.!
 ClassCategoryReader represents a mechanism for retrieving class descriptions stored on a file.!
 
 
@@ -360,15 +360,16 @@ initialize
 !ClassCategoryReader methodsFor: 'private'!
 !ClassCategoryReader methodsFor: 'private'!
 
 
 compileMethod: aString
 compileMethod: aString
-	| method |
-	method := Compiler new load: aString forClass: class.
+	| method compiler |
+	method := (compiler := Compiler new) load: aString forClass: class.
 	method category: category.
 	method category: category.
-	class addCompiledMethod: method
+	class addCompiledMethod: method.
+	compiler setupClass: class.
 ! !
 ! !
 
 
 Object subclass: #ClassCommentReader
 Object subclass: #ClassCommentReader
 	instanceVariableNames: 'class chunkParser'
 	instanceVariableNames: 'class chunkParser'
-	category: 'Kernel-Classes'!
+	package: 'Kernel-Classes'!
 !ClassCommentReader commentStamp!
 !ClassCommentReader commentStamp!
 ClassCommentReader represents a mechanism for retrieving class descriptions stored on a file.
 ClassCommentReader represents a mechanism for retrieving class descriptions stored on a file.
 See `ClassCategoryReader` too.!
 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: #{}!
 Smalltalk current createPackage: 'Kernel-Exceptions' properties: #{}!
 Object subclass: #Error
 Object subclass: #Error
 	instanceVariableNames: 'messageText'
 	instanceVariableNames: 'messageText'
-	category: 'Kernel-Exceptions'!
+	package: 'Kernel-Exceptions'!
 
 
 !Error methodsFor: 'accessing'!
 !Error methodsFor: 'accessing'!
 
 
-messageText
-	^messageText
-!
-
-messageText: aString
-	messageText := aString
-!
-
 context
 context
 	<return self.context>
 	<return self.context>
 !
 !
 
 
 jsStack
 jsStack
 	<return self.stack>
 	<return self.stack>
+!
+
+messageText
+	^messageText
+!
+
+messageText: aString
+	messageText := aString
 ! !
 ! !
 
 
 !Error methodsFor: 'signaling'!
 !Error methodsFor: 'signaling'!
@@ -43,7 +43,7 @@ signal: aString
 
 
 Error subclass: #MessageNotUnderstood
 Error subclass: #MessageNotUnderstood
 	instanceVariableNames: 'message receiver'
 	instanceVariableNames: 'message receiver'
-	category: 'Kernel-Exceptions'!
+	package: 'Kernel-Exceptions'!
 
 
 !MessageNotUnderstood methodsFor: 'accessing'!
 !MessageNotUnderstood methodsFor: 'accessing'!
 
 
@@ -55,21 +55,21 @@ message: aMessage
 	message := aMessage
 	message := aMessage
 !
 !
 
 
+messageText
+	^self receiver asString, ' does not understand #', self message selector
+!
+
 receiver
 receiver
 	^receiver
 	^receiver
 !
 !
 
 
 receiver: anObject
 receiver: anObject
 	receiver := anObject
 	receiver := anObject
-!
-
-messageText
-	^self receiver asString, ' does not understand #', self message selector
 ! !
 ! !
 
 
 Object subclass: #ErrorHandler
 Object subclass: #ErrorHandler
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Kernel-Exceptions'!
+	package: 'Kernel-Exceptions'!
 
 
 !ErrorHandler methodsFor: 'error handling'!
 !ErrorHandler methodsFor: 'error handling'!
 
 
@@ -80,24 +80,24 @@ handleError: anError
 
 
 !ErrorHandler methodsFor: 'private'!
 !ErrorHandler methodsFor: 'private'!
 
 
+log: aString
+	console log: aString
+!
+
 logContext: aContext
 logContext: aContext
 	aContext home ifNotNil: [
 	aContext home ifNotNil: [
 		self logContext: aContext home].
 		self logContext: aContext home].
 	self log: aContext receiver asString, '>>', aContext selector
 	self log: aContext receiver asString, '>>', aContext selector
 !
 !
 
 
-logErrorContext: aContext
-	aContext ifNotNil: [
-		aContext home ifNotNil: [
-			self logContext: aContext home]]
-!
-
 logError: anError
 logError: anError
 	self log: anError messageText
 	self log: anError messageText
 !
 !
 
 
-log: aString
-	console log: aString
+logErrorContext: aContext
+	aContext ifNotNil: [
+		aContext home ifNotNil: [
+			self logContext: aContext home]]
 ! !
 ! !
 
 
 ErrorHandler class instanceVariableNames: 'current'!
 ErrorHandler class instanceVariableNames: 'current'!

+ 151 - 151
st/Kernel-Methods.st

@@ -1,95 +1,7 @@
 Smalltalk current createPackage: 'Kernel-Methods' properties: #{}!
 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
 Object subclass: #BlockClosure
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Kernel-Methods'!
+	package: 'Kernel-Methods'!
 !BlockClosure commentStamp!
 !BlockClosure commentStamp!
 A BlockClosure is a lexical closure.
 A BlockClosure is a lexical closure.
 The JavaScript representation is a function.
 The JavaScript representation is a function.
@@ -108,9 +20,9 @@ numArgs
 
 
 !BlockClosure methodsFor: 'controlling'!
 !BlockClosure methodsFor: 'controlling'!
 
 
-whileTrue: aBlock
+whileFalse
 	"inlined in the Compiler"
 	"inlined in the Compiler"
-	<while(self()) {aBlock()}>
+	self whileFalse: []
 !
 !
 
 
 whileFalse: aBlock
 whileFalse: aBlock
@@ -118,14 +30,14 @@ whileFalse: aBlock
 	<while(!!self()) {aBlock()}>
 	<while(!!self()) {aBlock()}>
 !
 !
 
 
-whileFalse
+whileTrue
 	"inlined in the Compiler"
 	"inlined in the Compiler"
-	self whileFalse: []
+	self whileTrue: []
 !
 !
 
 
-whileTrue
+whileTrue: aBlock
 	"inlined in the Compiler"
 	"inlined in the Compiler"
-	self whileTrue: []
+	<while(self()) {aBlock()}>
 ! !
 ! !
 
 
 !BlockClosure methodsFor: 'error handling'!
 !BlockClosure methodsFor: 'error handling'!
@@ -139,46 +51,10 @@ on: anErrorClass do: aBlock
 
 
 !BlockClosure methodsFor: 'evaluating'!
 !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
 applyTo: anObject arguments: aCollection
 	<return self.apply(anObject, aCollection)>
 	<return self.apply(anObject, aCollection)>
 !
 !
 
 
-timeToRun
-	"Answer the number of milliseconds taken to execute this block."
-
-	^ Date millisecondsToRun: self
-!
-
 ensure: aBlock
 ensure: aBlock
 	| success |
 	| success |
 	success := false.
 	success := false.
@@ -189,6 +65,12 @@ ensure: aBlock
 			ex signal]
 			ex signal]
 !
 !
 
 
+new
+	"Use the receiver as a JS constructor. 
+	*Do not* use this method to instanciate Smalltalk objects!!"
+	<return new self()>
+!
+
 newValue: anObject
 newValue: anObject
 	"Use the receiver as a JS constructor. 
 	"Use the receiver as a JS constructor. 
 	*Do not* use this method to instanciate Smalltalk objects!!"
 	*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. 
 	"Use the receiver as a JS constructor. 
 	*Do not* use this method to instanciate Smalltalk objects!!"
 	*Do not* use this method to instanciate Smalltalk objects!!"
 	<return new self(anObject, anObject2)>
 	<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
 valueWithInterval: aNumber
 	<return setInterval(self, aNumber)>
 	<return setInterval(self, aNumber)>
+!
+
+valueWithTimeout: aNumber
+	<return setTimeout(self, aNumber)>
 ! !
 ! !
 
 
 Object subclass: #CompiledMethod
 Object subclass: #CompiledMethod
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Kernel-Methods'!
+	package: 'Kernel-Methods'!
 !CompiledMethod commentStamp!
 !CompiledMethod commentStamp!
 CompiledMethod hold the source and compiled code of a class method.
 CompiledMethod hold the source and compiled code of a class method.
 
 
@@ -241,12 +153,8 @@ or messages sent from this method:
 
 
 !CompiledMethod methodsFor: 'accessing'!
 !CompiledMethod methodsFor: 'accessing'!
 
 
-source
-	^(self basicAt: 'source') ifNil: ['']
-!
-
-source: aString
-	self basicAt: 'source' put: aString
+arguments
+	<return self.args || []>
 !
 !
 
 
 category
 category
@@ -257,14 +165,6 @@ category: aString
 	self basicAt: 'category' put: aString
 	self basicAt: 'category' put: aString
 !
 !
 
 
-selector
-	^self basicAt: 'selector'
-!
-
-selector: aString
-	self basicAt: 'selector' put: aString
-!
-
 fn
 fn
 	^self basicAt: 'fn'
 	^self basicAt: 'fn'
 !
 !
@@ -285,7 +185,107 @@ referencedClasses
 	^self basicAt: '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
 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: #{}!
 Smalltalk current createPackage: 'Kernel-Objects' properties: #{}!
 nil subclass: #Object
 nil subclass: #Object
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Kernel-Objects'!
+	package: 'Kernel-Objects'!
 !Object commentStamp!
 !Object commentStamp!
 *Object is the root of the Smalltalk class system*. All classes in the system are subclasses of Object.
 *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
 Object subclass: #Boolean
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Kernel-Objects'!
+	package: 'Kernel-Objects'!
 !Boolean commentStamp!
 !Boolean commentStamp!
 Boolean wraps the JavaScript `Boolean()` constructor. The `true` and `false` objects are the JavaScript boolean objects.
 Boolean wraps the JavaScript `Boolean()` constructor. The `true` and `false` objects are the JavaScript boolean objects.
 
 
@@ -420,7 +420,7 @@ printString
 
 
 Object subclass: #Date
 Object subclass: #Date
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Kernel-Objects'!
+	package: 'Kernel-Objects'!
 !Date commentStamp!
 !Date commentStamp!
 The Date class is used to work with dates and times. Therefore `Date today` and `Date now` are both valid in
 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.
 Amber and answer the same date object.
@@ -605,7 +605,7 @@ today
 
 
 Object subclass: #Date
 Object subclass: #Date
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Kernel-Objects'!
+	package: 'Kernel-Objects'!
 !Date commentStamp!
 !Date commentStamp!
 The Date class is used to work with dates and times. Therefore `Date today` and `Date now` are both valid in
 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.
 Amber and answer the same date object.
@@ -790,7 +790,7 @@ today
 
 
 Object subclass: #JSObjectProxy
 Object subclass: #JSObjectProxy
 	instanceVariableNames: 'jsObject'
 	instanceVariableNames: 'jsObject'
-	category: 'Kernel-Objects'!
+	package: 'Kernel-Objects'!
 !JSObjectProxy commentStamp!
 !JSObjectProxy commentStamp!
 JSObjectProxy handles sending messages to JavaScript object, therefore accessing JavaScript objects from Amber is transparent.
 JSObjectProxy handles sending messages to JavaScript object, therefore accessing JavaScript objects from Amber is transparent.
 JSOjbectProxy makes intensive use of `#doesNotUnderstand:`.
 JSOjbectProxy makes intensive use of `#doesNotUnderstand:`.
@@ -873,7 +873,7 @@ on: aJSObject
 
 
 Object subclass: #Number
 Object subclass: #Number
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Kernel-Objects'!
+	package: 'Kernel-Objects'!
 !Number commentStamp!
 !Number commentStamp!
 Number holds the most general methods for dealing with numbers.  
 Number holds the most general methods for dealing with numbers.  
 Number is directly mapped to JavaScript Number.
 Number is directly mapped to JavaScript Number.
@@ -1141,7 +1141,7 @@ pi
 
 
 Object subclass: #Package
 Object subclass: #Package
 	instanceVariableNames: 'commitPathJs commitPathSt'
 	instanceVariableNames: 'commitPathJs commitPathSt'
-	category: 'Kernel-Objects'!
+	package: 'Kernel-Objects'!
 !Package commentStamp!
 !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.
 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
 Object subclass: #Point
 	instanceVariableNames: 'x y'
 	instanceVariableNames: 'x y'
-	category: 'Kernel-Objects'!
+	package: 'Kernel-Objects'!
 !Point commentStamp!
 !Point commentStamp!
 A `Point` represents an x-y pair of numbers usually designating a geometric coordinate.
 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:
 Points are traditionally created using the binary `#@` message to a number:
@@ -1444,7 +1444,7 @@ x: aNumber y: anotherNumber
 
 
 Object subclass: #Random
 Object subclass: #Random
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Kernel-Objects'!
+	package: 'Kernel-Objects'!
 !Random commentStamp!
 !Random commentStamp!
 `Random` is a random number generator and is implemented as a trivial wrapper around javascript `Math.random()` and is used like this:
 `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
 Object subclass: #Smalltalk
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Kernel-Objects'!
+	package: 'Kernel-Objects'!
 !Smalltalk commentStamp!
 !Smalltalk commentStamp!
 Smalltalk has only one instance, accessed with `Smalltalk current`. 
 Smalltalk has only one instance, accessed with `Smalltalk current`. 
 It represents the global JavaScript variable `smalltalk` declared in `js/boot.js`.
 It represents the global JavaScript variable `smalltalk` declared in `js/boot.js`.
@@ -1646,7 +1646,7 @@ current
 
 
 Object subclass: #UndefinedObject
 Object subclass: #UndefinedObject
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'Kernel-Objects'!
+	package: 'Kernel-Objects'!
 !UndefinedObject commentStamp!
 !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.
 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: #{}!
 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
 Object subclass: #Transcript
 	instanceVariableNames: 'textarea'
 	instanceVariableNames: 'textarea'
-	category: 'Kernel-Transcript'!
+	package: 'Kernel-Transcript'!
 
 
 Transcript class instanceVariableNames: 'current'!
 Transcript class instanceVariableNames: 'current'!
 
 
 !Transcript class methodsFor: 'instance creation'!
 !Transcript class methodsFor: 'instance creation'!
 
 
-open
-    self current open
+current
+    ^current
 !
 !
 
 
 new
 new
     self shouldNotImplement
     self shouldNotImplement
 !
 !
 
 
-current
-    ^current
+open
+    self current open
 !
 !
 
 
 register: aTranscript
 register: aTranscript
@@ -25,46 +56,15 @@ register: aTranscript
 
 
 !Transcript class methodsFor: 'printing'!
 !Transcript class methodsFor: 'printing'!
 
 
-show: anObject
-    self current show: anObject
-!
-
-cr
-    self current show: String cr
-!
-
 clear
 clear
     self current clear
     self current clear
-! !
-
-Object subclass: #ConsoleTranscript
-	instanceVariableNames: 'textarea'
-	category: 'Kernel-Transcript'!
-
-!ConsoleTranscript methodsFor: 'actions'!
-
-open
-! !
-
-!ConsoleTranscript methodsFor: 'printing'!
-
-clear
-	"no op"
 !
 !
 
 
 cr
 cr
-	"no op"
+    self current show: String cr
 !
 !
 
 
 show: anObject
 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: #{}!
 Smalltalk current createPackage: 'SUnit' properties: #{}!
 Object subclass: #TestCase
 Object subclass: #TestCase
 	instanceVariableNames: 'testSelector'
 	instanceVariableNames: 'testSelector'
-	category: 'SUnit'!
+	package: 'SUnit'!
 
 
 !TestCase methodsFor: 'accessing'!
 !TestCase methodsFor: 'accessing'!
 
 
-setTestSelector: aSelector
-	testSelector := aSelector
-!
-
 selector
 selector
 	^testSelector
 	^testSelector
+!
+
+setTestSelector: aSelector
+	testSelector := aSelector
 ! !
 ! !
 
 
 !TestCase methodsFor: 'private'!
 !TestCase methodsFor: 'private'!
@@ -23,10 +23,10 @@ signalFailure: aString
 
 
 !TestCase methodsFor: 'running'!
 !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
 runCaseFor: aTestResult
@@ -36,10 +36,10 @@ runCaseFor: aTestResult
 	self tearDown
 	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'!
 !TestCase methodsFor: 'testing'!
@@ -48,16 +48,16 @@ assert: aBoolean
 	self assert: aBoolean description: 'Assertion failed'
 	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
 assert: expected equals: actual
 	^ self assert: (expected = actual) description: 'Expected: ', expected asString, ' but was: ', actual asString
 	^ 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
 should: aBlock
@@ -72,20 +72,6 @@ should: aBlock raise: anExceptionClass
 
 
 !TestCase class methodsFor: 'accessing'!
 !TestCase class methodsFor: 'accessing'!
 
 
-testSelectors
-	^self methodDictionary keys select: [:each | each match: '^test']
-!
-
-selector: aSelector
-	^self new
-		setTestSelector: aSelector;
-		yourself
-!
-
-lookupHierarchyRoot
-	^TestCase
-!
-
 allTestSelectors
 allTestSelectors
 	| selectors |
 	| selectors |
 	selectors := self testSelectors.
 	selectors := self testSelectors.
@@ -96,6 +82,20 @@ allTestSelectors
 
 
 buildSuite
 buildSuite
 	^self allTestSelectors collect: [:each | self selector: each]
 	^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'!
 !TestCase class methodsFor: 'testing'!
@@ -106,16 +106,20 @@ shouldInheritSelectors
 
 
 Error subclass: #TestFailure
 Error subclass: #TestFailure
 	instanceVariableNames: ''
 	instanceVariableNames: ''
-	category: 'SUnit'!
+	package: 'SUnit'!
 
 
 Object subclass: #TestResult
 Object subclass: #TestResult
 	instanceVariableNames: 'timestamp runs errors failures total'
 	instanceVariableNames: 'timestamp runs errors failures total'
-	category: 'SUnit'!
+	package: 'SUnit'!
 
 
 !TestResult methodsFor: 'accessing'!
 !TestResult methodsFor: 'accessing'!
 
 
-timestamp
-	^timestamp
+addError: anError
+	self errors add: anError
+!
+
+addFailure: aFailure
+	self failures add: aFailure
 !
 !
 
 
 errors
 errors
@@ -126,30 +130,14 @@ failures
 	^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
 	^runs
 	^runs
 !
 !
 
 
-increaseRuns
-	runs := runs + 1
-!
-
 status
 status
 	^self errors isEmpty 
 	^self errors isEmpty 
 		ifTrue: [
 		ifTrue: [
@@ -157,6 +145,18 @@ status
 				ifTrue: ['success']
 				ifTrue: ['success']
 				ifFalse: ['failure']]
 				ifFalse: ['failure']]
 		ifFalse: ['error']
 		ifFalse: ['error']
+!
+
+timestamp
+	^timestamp
+!
+
+total
+	^total
+!
+
+total: aNumber
+	total := aNumber
 ! !
 ! !
 
 
 !TestResult methodsFor: 'initialization'!
 !TestResult methodsFor: 'initialization'!

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