Jelajahi Sumber

merge master branch

Laurent Laffont 13 tahun lalu
induk
melakukan
4b25b990df
21 mengubah file dengan 1001 tambahan dan 1322 penghapusan
  1. 7 14
      js/Benchfib.deploy.js
  2. 12 12
      js/Benchfib.js
  3. 55 96
      js/Canvas.deploy.js
  4. 92 86
      js/Compiler.deploy.js
  5. 125 11
      js/Compiler.js
  6. 0 50
      js/Examples.deploy.js
  7. 0 75
      js/IDE.deploy.js
  8. 3 4
      js/IDE.js
  9. 62 311
      js/JQuery.deploy.js
  10. 101 202
      js/Kernel.deploy.js
  11. 72 27
      js/Kernel.js
  12. 1 95
      js/Parser.deploy.js
  13. 2 2
      js/Parser.js
  14. 61 305
      js/SUnit.deploy.js
  15. 1 1
      js/SUnit.js
  16. 1 1
      js/jtalk.js
  17. 7 6
      st/Benchfib.st
  18. 355 21
      st/Compiler.st
  19. 1 2
      st/IDE.st
  20. 43 0
      st/Kernel.st
  21. 0 1
      st/Parser.st

+ 7 - 14
js/Benchfib.deploy.js

@@ -8,9 +8,8 @@ fn: function (){
 var self=this;
 var result=nil;
 result=smalltalk.send((0), "_tinyBenchmarks", []);
-smalltalk.send(console, "_log_", [smalltalk.send(unescape("0%20tinyBenchmarks%20%3D%3E%20"), "__plus", [result])]);
+smalltalk.send(console, "_log_", [(typeof ($receiver = unescape("0%20tinyBenchmarks%20%3D%3E%20")) === 'string') ? [$receiver, result].join("") : smalltalk.send($receiver, "__comma", [result])]);
 return self;}
-]
 }),
 smalltalk.Benchfib.klass);
 
@@ -21,9 +20,8 @@ smalltalk.method({
 selector: 'benchFib',
 fn: function (){
 var self=this;
-return smalltalk.send(smalltalk.send(self, "__lt", [(2)]), "_ifTrue_ifFalse_", [(function(){return (1);}), (function(){return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "__minus", [(1)]), "_benchFib", []), "__plus", [smalltalk.send(smalltalk.send(self, "__minus", [(2)]), "_benchFib", [])]), "__plus", [(1)]);})]);
+return (($receiver = self < (2)).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (1);})() : (function(){return (($receiver = (($receiver = smalltalk.send(self - (1), "_benchFib", [])).klass === smalltalk.Number) ? $receiver +smalltalk.send(self - (2), "_benchFib", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(self - (2), "_benchFib", [])])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return (1);}), (function(){return (($receiver = (($receiver = smalltalk.send(self - (1), "_benchFib", [])).klass === smalltalk.Number) ? $receiver +smalltalk.send(self - (2), "_benchFib", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(self - (2), "_benchFib", [])])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]);})]);
 return self;}
-]
 }),
 smalltalk.Number);
 
@@ -39,10 +37,9 @@ var prime=nil;
 var k=nil;
 var count=nil;
 size=(8190);
-smalltalk.send((1), "_to_do_", [self, (function(iter){count=(0);flags=smalltalk.send(smalltalk.Array, "_new", []);smalltalk.send(size, "_timesRepeat_", [(function(){return smalltalk.send(flags, "_add_", [true]);})]);return smalltalk.send((1), "_to_do_", [size, (function(i){return smalltalk.send(smalltalk.send(flags, "_at_", [i]), "_ifTrue_", [(function(){prime=smalltalk.send(i, "__plus", [(1)]);k=smalltalk.send(i, "__plus", [prime]);smalltalk.send((function(){return smalltalk.send(k, "__lt_eq", [size]);}), "_whileTrue_", [(function(){smalltalk.send(flags, "_at_put_", [k, false]);return k=smalltalk.send(k, "__plus", [prime]);})]);return count=smalltalk.send(count, "__plus", [(1)]);})]);})]);})]);
+smalltalk.send((1), "_to_do_", [self, (function(iter){count=(0);flags=smalltalk.send(smalltalk.Array, "_new", []);smalltalk.send(size, "_timesRepeat_", [(function(){return smalltalk.send(flags, "_add_", [true]);})]);return smalltalk.send((1), "_to_do_", [size, (function(i){return (($receiver = smalltalk.send(flags, "_at_", [i])).klass === smalltalk.Boolean) ? ($receiver ? (function(){prime=(($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]);k=(($receiver = i).klass === smalltalk.Number) ? $receiver +prime : smalltalk.send($receiver, "__plus", [prime]);(function(){while((function(){return (($receiver = k).klass === smalltalk.Number) ? $receiver <=size : smalltalk.send($receiver, "__lt_eq", [size]);})()) {(function(){smalltalk.send(flags, "_at_put_", [k, false]);return k=(($receiver = k).klass === smalltalk.Number) ? $receiver +prime : smalltalk.send($receiver, "__plus", [prime]);})()}})();return count=(($receiver = count).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){prime=(($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]);k=(($receiver = i).klass === smalltalk.Number) ? $receiver +prime : smalltalk.send($receiver, "__plus", [prime]);(function(){while((function(){return (($receiver = k).klass === smalltalk.Number) ? $receiver <=size : smalltalk.send($receiver, "__lt_eq", [size]);})()) {(function(){smalltalk.send(flags, "_at_put_", [k, false]);return k=(($receiver = k).klass === smalltalk.Number) ? $receiver +prime : smalltalk.send($receiver, "__plus", [prime]);})()}})();return count=(($receiver = count).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]);})]);})]);})]);
 return count;
 return self;}
-]
 }),
 smalltalk.Number);
 
@@ -58,12 +55,11 @@ var r=nil;
 var n1=nil;
 var n2=nil;
 n1=(1);
-smalltalk.send((function(){t1=smalltalk.send(smalltalk.Date, "_millisecondsToRun_", [(function(){return smalltalk.send(n1, "_benchmark", []);})]);return smalltalk.send(t1, "__lt", [(1000)]);}), "_whileTrue_", [(function(){return n1=smalltalk.send(n1, "__star", [(2)]);})]);
-n2=(28);
-smalltalk.send((function(){t2=smalltalk.send(smalltalk.Date, "_millisecondsToRun_", [(function(){return r=smalltalk.send(n2, "_benchFib", []);})]);return smalltalk.send(t2, "__lt", [(1000)]);}), "_whileTrue_", [(function(){return n2=smalltalk.send(n2, "__plus", [(1)]);})]);
-return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(n1, "__star", [(500000)]), "__star", [(1000)]), "__slash", [t1]), "_printString", []), "__comma", [unescape("%20bytecodes/sec%3B%20")]), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(r, "__star", [(1000)]), "__slash", [t2]), "_printString", [])]), "__comma", [unescape("%20sends/sec")]);
+(function(){while((function(){t1=smalltalk.send(smalltalk.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, "_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);
 
@@ -78,7 +74,6 @@ return 1;
 } else {
 return (this-1)._jsbenchFib() + (this-2)._jsbenchFib() + 1;};
 return self;}
-]
 }),
 smalltalk.Number);
 
@@ -111,7 +106,6 @@ for (var z=0;z<this;z++) {
 }
 return count;
 return self;}
-]
 }),
 smalltalk.Number);
 
@@ -132,7 +126,6 @@ n2=(28);
 smalltalk.send((function(){t2=smalltalk.send(smalltalk.Date, "_millisecondsToRun_", [(function(){return r=smalltalk.send(n2, "_jsbenchFib", []);})]);return smalltalk.send(t2, "__lt", [(1000)]);}), "_whileTrue_", [(function(){return n2=smalltalk.send(n2, "__plus", [(1)]);})]);
 return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(n1, "__star", [(500000)]), "__star", [(1000)]), "__slash", [t1]), "_printString", []), "__comma", [unescape("%20bytecodes/sec%3B%20")]), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(r, "__star", [(1000)]), "__slash", [t2]), "_printString", [])]), "__comma", [unescape("%20sends/sec")]);
 return self;}
-]
 }),
 smalltalk.Number);
 

+ 12 - 12
js/Benchfib.js

@@ -9,10 +9,10 @@ fn: function (){
 var self=this;
 var result=nil;
 result=smalltalk.send((0), "_tinyBenchmarks", []);
-smalltalk.send(console, "_log_", [smalltalk.send(unescape("0%20tinyBenchmarks%20%3D%3E%20"), "__plus", [result])]);
+smalltalk.send(console, "_log_", [(typeof ($receiver = unescape("0%20tinyBenchmarks%20%3D%3E%20")) === 'string') ? [$receiver, result].join("") : smalltalk.send($receiver, "__comma", [result])]);
 return self;},
-source: unescape('main%0A%0A%09%7C%20result%20%7C%0A%09result%20%3A%3D%200%20tinyBenchmarks.%0A%09console%20log%3A%20%270%20tinyBenchmarks%20%3D%3E%20%27%20+%20result'),
-messageSends: ["tinyBenchmarks", "log:", unescape("+")],
+source: unescape('main%0A%0A%09%7C%20result%20%7C%0A%09result%20%3A%3D%200%20tinyBenchmarks.%0A%09console%20log%3A%20%270%20tinyBenchmarks%20%3D%3E%20%27%20%2C%20result'),
+messageSends: ["tinyBenchmarks", "log:", unescape("%2C")],
 referencedClasses: []
 }),
 smalltalk.Benchfib.klass);
@@ -25,9 +25,9 @@ selector: 'benchFib',
 category: '*Benchfib',
 fn: function (){
 var self=this;
-return smalltalk.send(smalltalk.send(self, "__lt", [(2)]), "_ifTrue_ifFalse_", [(function(){return (1);}), (function(){return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "__minus", [(1)]), "_benchFib", []), "__plus", [smalltalk.send(smalltalk.send(self, "__minus", [(2)]), "_benchFib", [])]), "__plus", [(1)]);})]);
+return (($receiver = self < (2)).klass === smalltalk.Boolean) ? ($receiver ? (function(){return (1);})() : (function(){return (($receiver = (($receiver = smalltalk.send(self - (1), "_benchFib", [])).klass === smalltalk.Number) ? $receiver +smalltalk.send(self - (2), "_benchFib", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(self - (2), "_benchFib", [])])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]);})()) : smalltalk.send($receiver, "_ifTrue_ifFalse_", [(function(){return (1);}), (function(){return (($receiver = (($receiver = smalltalk.send(self - (1), "_benchFib", [])).klass === smalltalk.Number) ? $receiver +smalltalk.send(self - (2), "_benchFib", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(self - (2), "_benchFib", [])])).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]);})]);
 return self;},
-source: unescape('benchFib%0A%09%22Handy%20send-heavy%20benchmark%22%0A%09%22%28result%20//%20seconds%20to%20run%29%20%3D%20approx%20calls%20per%20second%22%0A%09%22%20%7C%20r%20t%20%7C%0A%09%20%20t%20%3A%3D%20Time%20millisecondsToRun%3A%20%5Br%20%3A%3D%2026%20benchFib%5D.%0A%09%20%20%28r%20*%201000%29%20//%20t%22%0A%09%22138000%20on%20a%20Mac%208100/100%22%0A%09%5E%20self%20%3C%202%0A%09%09ifTrue%3A%20%5B1%5D%20%0A%09%09ifFalse%3A%20%5B%28self-1%29%20benchFib%20+%20%28self-2%29%20benchFib%20+%201%5D'),
+source: unescape('benchFib%20%0A%09%22Handy%20send-heavy%20benchmark%22%0A%09%22%28result%20//%20seconds%20to%20run%29%20%3D%20approx%20calls%20per%20second%22%0A%09%22%20%7C%20r%20t%20%7C%0A%09%20%20t%20%3A%3D%20Time%20millisecondsToRun%3A%20%5Br%20%3A%3D%2026%20benchFib%5D.%0A%09%20%20%28r%20*%201000%29%20//%20t%22%0A%09%22138000%20on%20a%20Mac%208100/100%22%0A%09%5E%20self%20%3C%202%20%0A%09%09ifTrue%3A%20%5B1%5D%20%0A%09%09ifFalse%3A%20%5B%28self-1%29%20benchFib%20+%20%28self-2%29%20benchFib%20+%201%5D'),
 messageSends: ["ifTrue:ifFalse:", unescape("%3C"), unescape("+"), "benchFib", unescape("-")],
 referencedClasses: []
 }),
@@ -46,10 +46,10 @@ var prime=nil;
 var k=nil;
 var count=nil;
 size=(8190);
-smalltalk.send((1), "_to_do_", [self, (function(iter){count=(0);flags=smalltalk.send(smalltalk.Array, "_new", []);smalltalk.send(size, "_timesRepeat_", [(function(){return smalltalk.send(flags, "_add_", [true]);})]);return smalltalk.send((1), "_to_do_", [size, (function(i){return smalltalk.send(smalltalk.send(flags, "_at_", [i]), "_ifTrue_", [(function(){prime=smalltalk.send(i, "__plus", [(1)]);k=smalltalk.send(i, "__plus", [prime]);smalltalk.send((function(){return smalltalk.send(k, "__lt_eq", [size]);}), "_whileTrue_", [(function(){smalltalk.send(flags, "_at_put_", [k, false]);return k=smalltalk.send(k, "__plus", [prime]);})]);return count=smalltalk.send(count, "__plus", [(1)]);})]);})]);})]);
+smalltalk.send((1), "_to_do_", [self, (function(iter){count=(0);flags=smalltalk.send(smalltalk.Array, "_new", []);smalltalk.send(size, "_timesRepeat_", [(function(){return smalltalk.send(flags, "_add_", [true]);})]);return smalltalk.send((1), "_to_do_", [size, (function(i){return (($receiver = smalltalk.send(flags, "_at_", [i])).klass === smalltalk.Boolean) ? ($receiver ? (function(){prime=(($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]);k=(($receiver = i).klass === smalltalk.Number) ? $receiver +prime : smalltalk.send($receiver, "__plus", [prime]);(function(){while((function(){return (($receiver = k).klass === smalltalk.Number) ? $receiver <=size : smalltalk.send($receiver, "__lt_eq", [size]);})()) {(function(){smalltalk.send(flags, "_at_put_", [k, false]);return k=(($receiver = k).klass === smalltalk.Number) ? $receiver +prime : smalltalk.send($receiver, "__plus", [prime]);})()}})();return count=(($receiver = count).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){prime=(($receiver = i).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]);k=(($receiver = i).klass === smalltalk.Number) ? $receiver +prime : smalltalk.send($receiver, "__plus", [prime]);(function(){while((function(){return (($receiver = k).klass === smalltalk.Number) ? $receiver <=size : smalltalk.send($receiver, "__lt_eq", [size]);})()) {(function(){smalltalk.send(flags, "_at_put_", [k, false]);return k=(($receiver = k).klass === smalltalk.Number) ? $receiver +prime : smalltalk.send($receiver, "__plus", [prime]);})()}})();return count=(($receiver = count).klass === smalltalk.Number) ? $receiver +(1) : smalltalk.send($receiver, "__plus", [(1)]);})]);})]);})]);
 return count;
 return self;},
-source: unescape('benchmark%20%20%22Handy%20bytecode-heavy%20benchmark%22%0A%09%22%28500000%20//%20time%20to%20run%29%20%3D%20approx%20bytecodes%20per%20second%22%0A%09%225000000%20//%20%28Time%20millisecondsToRun%3A%20%5B10%20benchmark%5D%29%20*%201000%22%0A%09%223059000%20on%20a%20Mac%208100/100%22%0A%20%20%20%20%7C%20size%20flags%20prime%20k%20count%20%7C%0A%20%20%20%20size%20%3A%3D%208190.%0A%20%20%20%201%20to%3A%20self%20do%3A%0A%20%20%20%20%20%20%20%20%5B%3Aiter%20%7C%0A%20%20%20%20%20%20%20%20count%20%3A%3D%200.%0A%20%20%20%20%20%20%20%20flags%20%3A%3D%20Array%20new.%0A%20%20%20%20%20%20%20%20size%20timesRepeat%3A%20%5B%20flags%20add%3A%20true%5D.%0A%20%20%20%20%20%20%20%201%20to%3A%20size%20do%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%3Ai%20%7C%20%28flags%20at%3A%20i%29%20ifTrue%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Bprime%20%3A%3D%20i+1.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20k%20%3A%3D%20i%20+%20prime.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Bk%20%3C%3D%20size%5D%20whileTrue%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Bflags%20at%3A%20k%20put%3A%20false.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20k%20%3A%3D%20k%20+%20prime%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20count%20%3A%3D%20count%20+%201%5D%5D%5D.%0A%20%20%20%20%5E%20count'),
+source: unescape('benchmark%20%0A%09%22Handy%20bytecode-heavy%20benchmark%22%0A%09%22%28500000%20//%20time%20to%20run%29%20%3D%20approx%20bytecodes%20per%20second%22%0A%09%225000000%20//%20%28Time%20millisecondsToRun%3A%20%5B10%20benchmark%5D%29%20*%201000%22%0A%09%223059000%20on%20a%20Mac%208100/100%22%0A%20%20%20%20%7C%20size%20flags%20prime%20k%20count%20%7C%0A%20%20%20%20size%20%3A%3D%208190.%0A%20%20%20%201%20to%3A%20self%20do%3A%0A%20%20%20%20%20%20%20%20%5B%3Aiter%20%7C%0A%20%20%20%20%20%20%20%20count%20%3A%3D%200.%0A%20%20%20%20%20%20%20%20flags%20%3A%3D%20Array%20new.%0A%20%20%20%20%20%20%20%20size%20timesRepeat%3A%20%5B%20flags%20add%3A%20true%5D.%0A%20%20%20%20%20%20%20%201%20to%3A%20size%20do%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%3Ai%20%7C%20%28flags%20at%3A%20i%29%20ifTrue%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Bprime%20%3A%3D%20i+1.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20k%20%3A%3D%20i%20+%20prime.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Bk%20%3C%3D%20size%5D%20whileTrue%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Bflags%20at%3A%20k%20put%3A%20false.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20k%20%3A%3D%20k%20+%20prime%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20count%20%3A%3D%20count%20+%201%5D%5D%5D.%0A%20%20%20%20%5E%20count%0A'),
 messageSends: ["to:do:", "new", "timesRepeat:", "add:", "ifTrue:", "at:", unescape("+"), "whileTrue:", unescape("%3C%3D"), "at:put:"],
 referencedClasses: [smalltalk.Array]
 }),
@@ -68,12 +68,12 @@ var r=nil;
 var n1=nil;
 var n2=nil;
 n1=(1);
-smalltalk.send((function(){t1=smalltalk.send(smalltalk.Date, "_millisecondsToRun_", [(function(){return smalltalk.send(n1, "_benchmark", []);})]);return smalltalk.send(t1, "__lt", [(1000)]);}), "_whileTrue_", [(function(){return n1=smalltalk.send(n1, "__star", [(2)]);})]);
-n2=(28);
-smalltalk.send((function(){t2=smalltalk.send(smalltalk.Date, "_millisecondsToRun_", [(function(){return r=smalltalk.send(n2, "_benchFib", []);})]);return smalltalk.send(t2, "__lt", [(1000)]);}), "_whileTrue_", [(function(){return n2=smalltalk.send(n2, "__plus", [(1)]);})]);
-return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(n1, "__star", [(500000)]), "__star", [(1000)]), "__slash", [t1]), "_printString", []), "__comma", [unescape("%20bytecodes/sec%3B%20")]), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(r, "__star", [(1000)]), "__slash", [t2]), "_printString", [])]), "__comma", [unescape("%20sends/sec")]);
+(function(){while((function(){t1=smalltalk.send(smalltalk.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, "_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;},
-source: unescape('tinyBenchmarks%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%2028.%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'),
+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%0A'),
 messageSends: ["whileTrue:", "millisecondsToRun:", "benchmark", unescape("%3C"), unescape("*"), "benchFib", unescape("+"), unescape("%2C"), "printString", unescape("/")],
 referencedClasses: [smalltalk.Date]
 }),

+ 55 - 96
js/Canvas.deploy.js

@@ -7,7 +7,6 @@ fn: function (aString){
 var self=this;
 self.fillStyle = String(aString);
 return self;}
-]
 }),
 smalltalk.CanvasRenderingContext);
 
@@ -19,7 +18,6 @@ fn: function (){
 var self=this;
 self.beginPath();
 return self;}
-]
 }),
 smalltalk.CanvasRenderingContext);
 
@@ -31,7 +29,6 @@ fn: function (){
 var self=this;
 self.closePath();
 return self;}
-]
 }),
 smalltalk.CanvasRenderingContext);
 
@@ -43,7 +40,6 @@ fn: function (){
 var self=this;
 self.fill();
 return self;}
-]
 }),
 smalltalk.CanvasRenderingContext);
 
@@ -55,7 +51,6 @@ fn: function (){
 var self=this;
 self.stroke();
 return self;}
-]
 }),
 smalltalk.CanvasRenderingContext);
 
@@ -67,7 +62,6 @@ fn: function (aPoint){
 var self=this;
 self.moveTo(aPoint._x(), aPoint._y());
 return self;}
-]
 }),
 smalltalk.CanvasRenderingContext);
 
@@ -79,7 +73,6 @@ fn: function (aPoint){
 var self=this;
 self.lineTo(aPoint._x(), aPoint._y());
 return self;}
-]
 }),
 smalltalk.CanvasRenderingContext);
 
@@ -91,7 +84,6 @@ fn: function (aPoint, aNumber, aNumber2, aNumber3, aBoolean){
 var self=this;
 self.arc(aPoint._x(), aPoint._y(), aNumber, aNumber2, aNumber3, aBoolean);
 return self;}
-]
 }),
 smalltalk.CanvasRenderingContext);
 
@@ -103,7 +95,6 @@ fn: function (aPoint, aNumber){
 var self=this;
 smalltalk.send(self, "_arcTo_radius_startAngle_endAngle_anticlockwise_", [aPoint, aNumber, (0), smalltalk.send(smalltalk.send(smalltalk.Number, "_pi", []), "__star", [(2)]), false]);
 return self;}
-]
 }),
 smalltalk.CanvasRenderingContext);
 
@@ -115,7 +106,6 @@ fn: function (aPoint, anotherPoint){
 var self=this;
 self.fillRect(aPoint._x(), aPoint._y(), anotherPoint._x(), anotherPoint._y());
 return self;}
-]
 }),
 smalltalk.CanvasRenderingContext);
 
@@ -127,7 +117,6 @@ fn: function (aPoint, anotherPoint){
 var self=this;
 self.strokeRect(aPoint._x(), aPoint._y(), anotherPoint._x(), anotherPoint._y());
 return self;}
-]
 }),
 smalltalk.CanvasRenderingContext);
 
@@ -139,7 +128,6 @@ fn: function (aPoint, anotherPoint){
 var self=this;
 self.fillRect(aPoint._x(), aPoint._y(), anotherPoint._x(), anotherPoint._y());
 return self;}
-]
 }),
 smalltalk.CanvasRenderingContext);
 
@@ -151,7 +139,6 @@ fn: function (aString){
 var self=this;
 self.strokeStyle = String(aString);
 return self;}
-]
 }),
 smalltalk.CanvasRenderingContext);
 
@@ -163,7 +150,6 @@ fn: function (aNumber){
 var self=this;
 self.lineWidth = aNumber;
 return self;}
-]
 }),
 smalltalk.CanvasRenderingContext);
 
@@ -176,7 +162,6 @@ fn: function (aTagBrush){
 var self=this;
 return aTagBrush._element().getContext('2d');
 return self;}
-]
 }),
 smalltalk.CanvasRenderingContext.klass);
 
@@ -190,7 +175,6 @@ fn: function (aTagBrush){
 var self=this;
 self['@root']=aTagBrush;
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -202,7 +186,6 @@ fn: function (){
 var self=this;
 return self['@root'];
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -215,7 +198,6 @@ var self=this;
 smalltalk.send(self, "_initialize", [], smalltalk.Object);
 smalltalk.send(self['@root'], "_ifNil_", [(function(){return self['@root']=smalltalk.send(smalltalk.TagBrush, "_fromString_canvas_", ["div", self]);})]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -227,7 +209,6 @@ fn: function (anObject){
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_root", []), "_with_", [anObject]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -239,7 +220,6 @@ fn: function (aString){
 var self=this;
 return smalltalk.send(smalltalk.TagBrush, "_fromString_canvas_", [aString, self]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -251,7 +231,6 @@ fn: function (aString){
 var self=this;
 return smalltalk.send(self['@root'], "_addBrush_", [smalltalk.send(self, "_newTag_", [aString])]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -263,7 +242,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["h1"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -275,7 +253,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["h2"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -287,7 +264,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["h3"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -299,7 +275,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["h4"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -311,7 +286,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["h5"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -323,7 +297,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["h6"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -335,7 +308,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["p"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -347,7 +319,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["div"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -359,7 +330,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["span"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -371,7 +341,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["img"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -383,7 +352,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["ul"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -395,7 +363,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["ol"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -407,7 +374,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["li"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -419,7 +385,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["table"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -431,7 +396,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["tr"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -443,7 +407,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["td"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -455,7 +418,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["th"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -467,7 +429,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["form"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -479,7 +440,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["input"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -491,7 +451,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["button"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -503,7 +462,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["select"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -515,7 +473,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["option"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -527,7 +484,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["textarea"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -539,7 +495,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["a"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -551,7 +506,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["canvas"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -563,7 +517,6 @@ fn: function (aJQuery){
 var self=this;
 self['@root']=smalltalk.send(smalltalk.TagBrush, "_fromJQuery_canvas_", [aJQuery, self]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -575,7 +528,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["pre"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -587,7 +539,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["code"]);
 return self;}
-]
 }),
 smalltalk.HTMLCanvas);
 
@@ -599,7 +550,28 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["br"]);
 return self;}
-]
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_script',
+smalltalk.method({
+selector: 'script',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["script"]);
+return self;}
+}),
+smalltalk.HTMLCanvas);
+
+smalltalk.addMethod(
+'_link',
+smalltalk.method({
+selector: 'link',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_tag_", ["link"]);
+return self;}
 }),
 smalltalk.HTMLCanvas);
 
@@ -627,7 +599,6 @@ fn: function (aJQuery){
 var self=this;
 return (function($rec){smalltalk.send($rec, "_initializeFromJQuery_", [aJQuery]);smalltalk.send($rec, "_initialize", []);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_basicNew", []));
 return self;}
-]
 }),
 smalltalk.HTMLCanvas.klass);
 
@@ -642,7 +613,6 @@ var self=this;
 smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_empty", []);
 smalltalk.send(self, "_append_", [anObject]);
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -655,7 +625,6 @@ var self=this;
 smalltalk.send(self, "_appendChild_", [smalltalk.send(aTagBrush, "_element", [])]);
 return aTagBrush;
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -667,7 +636,6 @@ fn: function (anObject){
 var self=this;
 smalltalk.send(self, "_append_", [anObject]);
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -679,7 +647,6 @@ fn: function (anObject){
 var self=this;
 smalltalk.send(anObject, "_appendToBrush_", [self]);
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -691,7 +658,6 @@ fn: function (aTagBrush){
 var self=this;
 smalltalk.send(aTagBrush, "_addBrush_", [self]);
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -707,7 +673,6 @@ smalltalk.send(self['@canvas'], "_root_", [self]);
 smalltalk.send(aBlock, "_value_", [self['@canvas']]);
 smalltalk.send(self['@canvas'], "_root_", [root]);
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -719,7 +684,6 @@ fn: function (anElement){
 var self=this;
 self['@element'].appendChild(anElement);
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -731,7 +695,6 @@ fn: function (aString){
 var self=this;
 smalltalk.send(self, "_appendChild_", [smalltalk.send(self, "_createTextNodeFor_", [aString])]);
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -743,7 +706,6 @@ fn: function (aString, aValue){
 var self=this;
 self['@element'].setAttribute(aString, aValue);
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -755,7 +717,6 @@ fn: function (aString){
 var self=this;
 self['@element'].removeAttribute(aString);
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -767,7 +728,6 @@ fn: function (aString){
 var self=this;
 smalltalk.send(self, "_at_put_", ["class", aString]);
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -779,7 +739,6 @@ fn: function (aString){
 var self=this;
 smalltalk.send(self, "_at_put_", ["id", aString]);
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -791,7 +750,6 @@ fn: function (aString){
 var self=this;
 smalltalk.send(self, "_at_put_", ["src", aString]);
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -803,7 +761,6 @@ fn: function (aString){
 var self=this;
 smalltalk.send(self, "_at_put_", ["href", aString]);
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -815,7 +772,6 @@ fn: function (aString){
 var self=this;
 smalltalk.send(self, "_at_put_", ["title", aString]);
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -827,7 +783,6 @@ fn: function (aString){
 var self=this;
 smalltalk.send(self, "_at_put_", ["style", aString]);
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -840,7 +795,6 @@ var self=this;
 self['@element']=smalltalk.send(self, "_createElementFor_", [aString]);
 self['@canvas']=aCanvas;
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -852,7 +806,6 @@ fn: function (){
 var self=this;
 return self['@element'];
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -864,7 +817,6 @@ fn: function (){
 var self=this;
 return smalltalk.JQuery._from_(jQuery(self['@element']));
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -876,7 +828,6 @@ fn: function (aBlock){
 var self=this;
 smalltalk.send(aBlock, "_value_", [smalltalk.send(self, "_asJQuery", [])]);
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -888,7 +839,6 @@ fn: function (aBlock){
 var self=this;
 smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_on_do_", ["keydown", aBlock]);
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -900,7 +850,6 @@ fn: function (aBlock){
 var self=this;
 smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_on_do_", ["keypress", aBlock]);
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -912,7 +861,6 @@ fn: function (aBlock){
 var self=this;
 smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_on_do_", ["keyup", aBlock]);
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -924,7 +872,6 @@ fn: function (aBlock){
 var self=this;
 smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_on_do_", ["focus", aBlock]);
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -936,7 +883,6 @@ fn: function (aBlock){
 var self=this;
 smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_on_do_", ["blur", aBlock]);
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -948,7 +894,6 @@ fn: function (aBlock){
 var self=this;
 smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_on_do_", ["change", aBlock]);
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -960,7 +905,6 @@ fn: function (aBlock){
 var self=this;
 smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_on_do_", ["click", aBlock]);
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -972,7 +916,6 @@ fn: function (aString){
 var self=this;
 return document.createElement(String(aString));
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -984,7 +927,6 @@ fn: function (aString){
 var self=this;
 return document.createTextNode(String(aString));
 return self;}
-]
 }),
 smalltalk.TagBrush);
 
@@ -997,7 +939,39 @@ var self=this;
 self['@element']=smalltalk.send(smalltalk.send(aJQuery, "_jquery", []), "_get_", [(0)]);
 self['@canvas']=aCanvas;
 return self;}
-]
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_type_',
+smalltalk.method({
+selector: 'type:',
+fn: function (aString){
+var self=this;
+smalltalk.send(self, "_at_put_", ["type", aString]);
+return self;}
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_media_',
+smalltalk.method({
+selector: 'media:',
+fn: function (aString){
+var self=this;
+smalltalk.send(self, "_at_put_", ["media", aString]);
+return self;}
+}),
+smalltalk.TagBrush);
+
+smalltalk.addMethod(
+'_rel_',
+smalltalk.method({
+selector: 'rel:',
+fn: function (aString){
+var self=this;
+smalltalk.send(self, "_at_put_", ["rel", aString]);
+return self;}
 }),
 smalltalk.TagBrush);
 
@@ -1010,7 +984,6 @@ fn: function (aString, aCanvas){
 var self=this;
 return (function($rec){smalltalk.send($rec, "_initializeFromString_canvas_", [aString, aCanvas]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
 return self;}
-]
 }),
 smalltalk.TagBrush.klass);
 
@@ -1022,7 +995,6 @@ fn: function (aJQuery, aCanvas){
 var self=this;
 return (function($rec){smalltalk.send($rec, "_initializeFromJQuery_canvas_", [aJQuery, aCanvas]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
 return self;}
-]
 }),
 smalltalk.TagBrush.klass);
 
@@ -1036,7 +1008,6 @@ fn: function (aTagBrush){
 var self=this;
 smalltalk.send(self, "_appendToJQuery_", [smalltalk.send(aTagBrush, "_asJQuery", [])]);
 return self;}
-]
 }),
 smalltalk.Widget);
 
@@ -1048,7 +1019,6 @@ fn: function (aJQuery){
 var self=this;
 smalltalk.send(self, "_renderOn_", [smalltalk.send(smalltalk.HTMLCanvas, "_onJQuery_", [aJQuery])]);
 return self;}
-]
 }),
 smalltalk.Widget);
 
@@ -1060,7 +1030,6 @@ fn: function (aString){
 var self=this;
 alert(aString);
 return self;}
-]
 }),
 smalltalk.Widget);
 
@@ -1072,7 +1041,6 @@ fn: function (aString){
 var self=this;
 return window.confirm(aString);
 return self;}
-]
 }),
 smalltalk.Widget);
 
@@ -1084,7 +1052,6 @@ fn: function (aString){
 var self=this;
 return smalltalk.send(self, "_prompt_default_", [aString, ""]);
 return self;}
-]
 }),
 smalltalk.Widget);
 
@@ -1096,7 +1063,6 @@ fn: function (aString, anotherString){
 var self=this;
 return window.prompt(aString, anotherString);
 return self;}
-]
 }),
 smalltalk.Widget);
 
@@ -1108,7 +1074,6 @@ fn: function (html){
 var self=this;
 self;
 return self;}
-]
 }),
 smalltalk.Widget);
 
@@ -1123,7 +1088,6 @@ fn: function (){
 var self=this;
 return document.createElement('canvas');
 return self;}
-]
 }),
 smalltalk.CanvasBrush);
 
@@ -1135,7 +1099,6 @@ fn: function (aCanvas){
 var self=this;
 canvas=aCanvas;
 return self;}
-]
 }),
 smalltalk.CanvasBrush);
 
@@ -1148,7 +1111,6 @@ fn: function (aCanvas){
 var self=this;
 return (function($rec){smalltalk.send($rec, "_initializeWithCanvas_", [aCanvas]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
 return self;}
-]
 }),
 smalltalk.CanvasBrush.klass);
 
@@ -1161,7 +1123,6 @@ fn: function (aTagBrush){
 var self=this;
 smalltalk.send(aTagBrush, "_append_", [smalltalk.send(self, "_asString", [])]);
 return self;}
-]
 }),
 smalltalk.Object);
 
@@ -1173,7 +1134,6 @@ fn: function (aTagBrush){
 var self=this;
 smalltalk.send(aTagBrush, "_appendBlock_", [self]);
 return self;}
-]
 }),
 smalltalk.BlockClosure);
 
@@ -1185,7 +1145,6 @@ fn: function (aTagBrush){
 var self=this;
 smalltalk.send(aTagBrush, "_appendString_", [self]);
 return self;}
-]
 }),
 smalltalk.String);
 

File diff ditekan karena terlalu besar
+ 92 - 86
js/Compiler.deploy.js


File diff ditekan karena terlalu besar
+ 125 - 11
js/Compiler.js


+ 0 - 50
js/Examples.deploy.js

@@ -8,7 +8,6 @@ var self=this;
 self['@count']=smalltalk.send(self['@count'], "__plus", [(1)]);
 smalltalk.send(self['@header'], "_contents_", [(function(html){return smalltalk.send(html, "_with_", [smalltalk.send(self['@count'], "_asString", [])]);})]);
 return self;}
-]
 }),
 smalltalk.Counter);
 
@@ -21,7 +20,6 @@ var self=this;
 self['@count']=smalltalk.send(self['@count'], "__minus", [(1)]);
 smalltalk.send(self['@header'], "_contents_", [(function(html){return smalltalk.send(html, "_with_", [smalltalk.send(self['@count'], "_asString", [])]);})]);
 return self;}
-]
 }),
 smalltalk.Counter);
 
@@ -34,7 +32,6 @@ var self=this;
 smalltalk.send(self, "_initialize", [], smalltalk.Widget);
 self['@count']=(0);
 return self;}
-]
 }),
 smalltalk.Counter);
 
@@ -48,7 +45,6 @@ self['@header']=(function($rec){smalltalk.send($rec, "_with_", [smalltalk.send(s
 (function($rec){smalltalk.send($rec, "_with_", [unescape("++")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_increase", []);})]);})(smalltalk.send(html, "_button", []));
 (function($rec){smalltalk.send($rec, "_with_", [unescape("--")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_decrease", []);})]);})(smalltalk.send(html, "_button", []));
 return self;}
-]
 }),
 smalltalk.Counter);
 
@@ -63,7 +59,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_class", []), "_width", []);
 return self;}
-]
 }),
 smalltalk.Tetris);
 
@@ -75,7 +70,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_class", []), "_height", []);
 return self;}
-]
 }),
 smalltalk.Tetris);
 
@@ -87,7 +81,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_class", []), "_squares", []);
 return self;}
-]
 }),
 smalltalk.Tetris);
 
@@ -99,7 +92,6 @@ fn: function (aPiece){
 var self=this;
 smalltalk.send(aPiece, "_glueOn_", [self]);
 return self;}
-]
 }),
 smalltalk.Tetris);
 
@@ -111,7 +103,6 @@ fn: function (){
 var self=this;
 return self['@rows'];
 return self;}
-]
 }),
 smalltalk.Tetris);
 
@@ -123,7 +114,6 @@ fn: function (aCollection){
 var self=this;
 smalltalk.send(smalltalk.send(self, "_rows", []), "_add_", [aCollection]);
 return self;}
-]
 }),
 smalltalk.Tetris);
 
@@ -137,7 +127,6 @@ smalltalk.send(self, "_newGame", []);
 smalltalk.send(self['@timer'], "_ifNotNil_", [(function(){return smalltalk.send(self['@timer'], "_clearInterval", []);})]);
 self['@timer']=smalltalk.send((function(){return smalltalk.send(self, "_nextStep", []);}), "_valueWithInterval_", [self['@speed']]);
 return self;}
-]
 }),
 smalltalk.Tetris);
 
@@ -151,7 +140,6 @@ smalltalk.send(self['@movingPiece'], "_ifNil_", [(function(){return smalltalk.se
 smalltalk.send(smalltalk.send(self['@movingPiece'], "_canMoveIn_", [self]), "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@movingPiece'], "_position_", [smalltalk.send(smalltalk.send(self['@movingPiece'], "_position", []), "__plus", [smalltalk.send((0), "__at", [(1)])])]);}), (function(){return smalltalk.send(self, "_newPiece", []);})]);
 smalltalk.send(self, "_redraw", []);
 return self;}
-]
 }),
 smalltalk.Tetris);
 
@@ -164,7 +152,6 @@ var self=this;
 smalltalk.send(self['@renderingContext'], "_clearRectFrom_to_", [smalltalk.send((0), "__at", [smalltalk.send(self, "_width", [])]), smalltalk.send((0), "__at", [smalltalk.send(self, "_height", [])])]);
 (function($rec){smalltalk.send($rec, "_drawMap", []);return smalltalk.send($rec, "_drawPiece", []);})(self);
 return self;}
-]
 }),
 smalltalk.Tetris);
 
@@ -181,7 +168,6 @@ x=smalltalk.send(each, "__star", [smalltalk.send(smalltalk.send(self, "_class",
 smalltalk.send((0), "_to_do_", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "_squares", []), "_y", []), (function(each){var y=nil;
 y=smalltalk.send(each, "__star", [smalltalk.send(smalltalk.send(self, "_class", []), "_squareSize", [])]);return smalltalk.send(self, "_drawLineFrom_to_", [smalltalk.send((0), "__at", [y]), smalltalk.send(smalltalk.send(self, "_width", []), "__at", [y])]);})]);
 return self;}
-]
 }),
 smalltalk.Tetris);
 
@@ -193,7 +179,6 @@ fn: function (aPoint, anotherPoint){
 var self=this;
 (function($rec){smalltalk.send($rec, "_beginPath", []);smalltalk.send($rec, "_moveTo_", [aPoint]);smalltalk.send($rec, "_lineTo_", [anotherPoint]);return smalltalk.send($rec, "_stroke", []);})(self['@renderingContext']);
 return self;}
-]
 }),
 smalltalk.Tetris);
 
@@ -208,7 +193,6 @@ self['@movingPiece']=nil;
 self['@speed']=(200);
 self['@score']=(0);
 return self;}
-]
 }),
 smalltalk.Tetris);
 
@@ -220,7 +204,6 @@ fn: function (){
 var self=this;
 self['@movingPiece']=smalltalk.send(smalltalk.TetrisPiece, "_atRandom", []);
 return self;}
-]
 }),
 smalltalk.Tetris);
 
@@ -233,7 +216,6 @@ var self=this;
 smalltalk.send(smalltalk.send(self, "_rows", []), "_do_", [(function(each){return nil;})]);
 smalltalk.send(self['@movingPiece'], "_ifNotNil_", [(function(){return smalltalk.send(self['@movingPiece'], "_drawOn_", [self['@renderingContext']]);})]);
 return self;}
-]
 }),
 smalltalk.Tetris);
 
@@ -245,7 +227,6 @@ fn: function (){
 var self=this;
 smalltalk.send(self['@movingPiece'], "_ifNotNil_", [(function(){return smalltalk.send(self['@movingPiece'], "_drawOn_", [self['@renderingContext']]);})]);
 return self;}
-]
 }),
 smalltalk.Tetris);
 
@@ -258,7 +239,6 @@ var self=this;
 smalltalk.send(self, "_initialize", [], smalltalk.Widget);
 smalltalk.send(self, "_newGame", []);
 return self;}
-]
 }),
 smalltalk.Tetris);
 
@@ -270,7 +250,6 @@ fn: function (html){
 var self=this;
 (function($rec){smalltalk.send($rec, "_class_", ["tetris"]);return smalltalk.send($rec, "_with_", [(function(){smalltalk.send(smalltalk.send(html, "_h3", []), "_with_", ["Tetris"]);smalltalk.send(self, "_renderCanvasOn_", [html]);return smalltalk.send(self, "_renderButtonsOn_", [html]);})]);})(smalltalk.send(html, "_div", []));
 return self;}
-]
 }),
 smalltalk.Tetris);
 
@@ -287,7 +266,6 @@ smalltalk.send(canvas, "_at_put_", ["height", smalltalk.send(smalltalk.send(self
 self['@renderingContext']=smalltalk.send(smalltalk.CanvasRenderingContext, "_tagBrush_", [canvas]);
 smalltalk.send(self, "_redraw", []);
 return self;}
-]
 }),
 smalltalk.Tetris);
 
@@ -299,7 +277,6 @@ fn: function (html){
 var self=this;
 (function($rec){smalltalk.send($rec, "_class_", ["tetris_buttons"]);return smalltalk.send($rec, "_with_", [(function(){(function($rec){smalltalk.send($rec, "_with_", ["New game"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_startNewGame", []);})]);})(smalltalk.send(html, "_button", []));return (function($rec){smalltalk.send($rec, "_with_", [unescape("play/pause")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_update", []);})]);})(smalltalk.send(html, "_button", []));})]);})(smalltalk.send(html, "_div", []));
 return self;}
-]
 }),
 smalltalk.Tetris);
 
@@ -312,7 +289,6 @@ fn: function (){
 var self=this;
 return (22);
 return self;}
-]
 }),
 smalltalk.Tetris.klass);
 
@@ -324,7 +300,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_squareSize", []), "__star", [smalltalk.send(smalltalk.send(self, "_squares", []), "_x", [])]);
 return self;}
-]
 }),
 smalltalk.Tetris.klass);
 
@@ -336,7 +311,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_squareSize", []), "__star", [smalltalk.send(smalltalk.send(self, "_squares", []), "_y", [])]);
 return self;}
-]
 }),
 smalltalk.Tetris.klass);
 
@@ -348,7 +322,6 @@ fn: function (){
 var self=this;
 return smalltalk.send((10), "__at", [(15)]);
 return self;}
-]
 }),
 smalltalk.Tetris.klass);
 
@@ -362,7 +335,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self['@rotation'], "_ifNil_", [(function(){return self['@rotation']=(1);})]);
 return self;}
-]
 }),
 smalltalk.TetrisPiece);
 
@@ -374,7 +346,6 @@ fn: function (aNumber){
 var self=this;
 self['@rotation']=aNumber;
 return self;}
-]
 }),
 smalltalk.TetrisPiece);
 
@@ -386,7 +357,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self['@position'], "_ifNil_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.Tetris, "_squares", []), "_x", []), "__slash", [(2)]), "__minus", [(1)]), "__at", [(0)]);})]);
 return self;}
-]
 }),
 smalltalk.TetrisPiece);
 
@@ -398,7 +368,6 @@ fn: function (aPoint){
 var self=this;
 return self['@position']=aPoint;
 return self;}
-]
 }),
 smalltalk.TetrisPiece);
 
@@ -410,7 +379,6 @@ fn: function (){
 var self=this;
 smalltalk.send(self, "_subclassResponsibility", []);
 return self;}
-]
 }),
 smalltalk.TetrisPiece);
 
@@ -422,7 +390,6 @@ fn: function (){
 var self=this;
 return unescape("%23afa");
 return self;}
-]
 }),
 smalltalk.TetrisPiece);
 
@@ -434,7 +401,6 @@ fn: function (){
 var self=this;
 return (2);
 return self;}
-]
 }),
 smalltalk.TetrisPiece);
 
@@ -447,7 +413,6 @@ var self=this;
 smalltalk.send(aRenderingContext, "_fillStyle_", [smalltalk.send(self, "_color", [])]);
 smalltalk.send(smalltalk.send(self, "_bounds", []), "_do_", [(function(each){return (function($rec){smalltalk.send($rec, "_fillRectFrom_to_", [smalltalk.send(smalltalk.send(each, "__plus", [smalltalk.send(self, "_position", [])]), "__star", [smalltalk.send(smalltalk.Tetris, "_squareSize", [])]), smalltalk.send(smalltalk.send((1), "__at", [(1)]), "__star", [smalltalk.send(smalltalk.Tetris, "_squareSize", [])])]);smalltalk.send($rec, "_strokeStyle_", [unescape("%23999")]);smalltalk.send($rec, "_lineWidth_", [(2)]);return smalltalk.send($rec, "_strokeRectFrom_to_", [smalltalk.send(smalltalk.send(each, "__plus", [smalltalk.send(self, "_position", [])]), "__star", [smalltalk.send(smalltalk.Tetris, "_squareSize", [])]), smalltalk.send(smalltalk.send((1), "__at", [(1)]), "__star", [smalltalk.send(smalltalk.Tetris, "_squareSize", [])])]);})(aRenderingContext);})]);
 return self;}
-]
 }),
 smalltalk.TetrisPiece);
 
@@ -459,7 +424,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.send(smalltalk.send(self, "_position", []), "_y", []), "__lt", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.Tetris, "_squares", []), "_y", []), "__minus", [smalltalk.send(self, "_height", [])])]);
 return self;}
-]
 }),
 smalltalk.TetrisPiece);
 
@@ -471,7 +435,6 @@ fn: function (aTetris){
 var self=this;
 return smalltalk.send(smalltalk.send(smalltalk.send(self, "_position", []), "_y", []), "__lt", [smalltalk.send(smalltalk.send(smalltalk.send(aTetris, "_squares", []), "_y", []), "__minus", [smalltalk.send(self, "_height", [])])]);
 return self;}
-]
 }),
 smalltalk.TetrisPiece);
 
@@ -484,7 +447,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.send(smalltalk.send(self, "_subclasses", []), "_at_", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_subclasses", []), "_size", []), "_atRandom", [])]), "_new", []);
 return self;}
-]
 }),
 smalltalk.TetrisPiece.klass);
 
@@ -498,7 +460,6 @@ fn: function (){
 var self=this;
 return (function($rec){smalltalk.send($rec, "_add_", [smalltalk.send((0), "__at", [(0)])]);smalltalk.send($rec, "_add_", [smalltalk.send((0), "__at", [(1)])]);smalltalk.send($rec, "_add_", [smalltalk.send((1), "__at", [(0)])]);smalltalk.send($rec, "_add_", [smalltalk.send((1), "__at", [(1)])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(smalltalk.Array, "_new", []));
 return self;}
-]
 }),
 smalltalk.TetrisPieceO);
 
@@ -513,7 +474,6 @@ fn: function (){
 var self=this;
 return (function($rec){smalltalk.send($rec, "_add_", [smalltalk.send((0), "__at", [(0)])]);smalltalk.send($rec, "_add_", [smalltalk.send((0), "__at", [(1)])]);smalltalk.send($rec, "_add_", [smalltalk.send((0), "__at", [(2)])]);smalltalk.send($rec, "_add_", [smalltalk.send((1), "__at", [(2)])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(smalltalk.Array, "_new", []));
 return self;}
-]
 }),
 smalltalk.TetrisPieceL);
 
@@ -525,7 +485,6 @@ fn: function (){
 var self=this;
 return unescape("%23ffa");
 return self;}
-]
 }),
 smalltalk.TetrisPieceL);
 
@@ -537,7 +496,6 @@ fn: function (){
 var self=this;
 return (3);
 return self;}
-]
 }),
 smalltalk.TetrisPieceL);
 
@@ -552,7 +510,6 @@ fn: function (){
 var self=this;
 return unescape("%23aaf");
 return self;}
-]
 }),
 smalltalk.TetrisPieceJ);
 
@@ -564,7 +521,6 @@ fn: function (){
 var self=this;
 return (function($rec){smalltalk.send($rec, "_add_", [smalltalk.send((1), "__at", [(0)])]);smalltalk.send($rec, "_add_", [smalltalk.send((1), "__at", [(1)])]);smalltalk.send($rec, "_add_", [smalltalk.send((1), "__at", [(2)])]);smalltalk.send($rec, "_add_", [smalltalk.send((0), "__at", [(2)])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(smalltalk.Array, "_new", []));
 return self;}
-]
 }),
 smalltalk.TetrisPieceJ);
 
@@ -576,7 +532,6 @@ fn: function (){
 var self=this;
 return (3);
 return self;}
-]
 }),
 smalltalk.TetrisPieceJ);
 
@@ -591,7 +546,6 @@ fn: function (){
 var self=this;
 return unescape("%23faa");
 return self;}
-]
 }),
 smalltalk.TetrisPieceI);
 
@@ -603,7 +557,6 @@ fn: function (){
 var self=this;
 return (function($rec){smalltalk.send($rec, "_add_", [smalltalk.send((0), "__at", [(0)])]);smalltalk.send($rec, "_add_", [smalltalk.send((0), "__at", [(1)])]);smalltalk.send($rec, "_add_", [smalltalk.send((0), "__at", [(2)])]);smalltalk.send($rec, "_add_", [smalltalk.send((0), "__at", [(3)])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(smalltalk.Array, "_new", []));
 return self;}
-]
 }),
 smalltalk.TetrisPieceI);
 
@@ -615,7 +568,6 @@ fn: function (){
 var self=this;
 return (4);
 return self;}
-]
 }),
 smalltalk.TetrisPieceI);
 
@@ -630,7 +582,6 @@ fn: function (){
 var self=this;
 return (function($rec){smalltalk.send($rec, "_add_", [smalltalk.send((0), "__at", [(0)])]);smalltalk.send($rec, "_add_", [smalltalk.send((1), "__at", [(0)])]);smalltalk.send($rec, "_add_", [smalltalk.send((2), "__at", [(0)])]);smalltalk.send($rec, "_add_", [smalltalk.send((1), "__at", [(1)])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(smalltalk.Array, "_new", []));
 return self;}
-]
 }),
 smalltalk.TetrisPieceT);
 
@@ -642,7 +593,6 @@ fn: function (){
 var self=this;
 return unescape("%23aaf");
 return self;}
-]
 }),
 smalltalk.TetrisPieceT);
 

File diff ditekan karena terlalu besar
+ 0 - 75
js/IDE.deploy.js


+ 3 - 4
js/IDE.js

@@ -2686,14 +2686,13 @@ stop=smalltalk.send(smalltalk.Dictionary, "_new", []);
 smalltalk.send(start, "_at_put_", ["line", smalltalk.send(smalltalk.send(self['@editor'], "_getCursor_", [false]), "_line", [])]);
 smalltalk.send(start, "_at_put_", ["ch", smalltalk.send(smalltalk.send(self['@editor'], "_getCursor_", [false]), "_ch", [])]);
 smalltalk.send(stop, "_at_put_", ["line", smalltalk.send(start, "_at_", ["line"])]);
-smalltalk.send(stop, "_at_put_", ["ch", smalltalk.send(smalltalk.send(smalltalk.send(start, "_at_", ["ch"]), "__plus", [smalltalk.send(aString, "_size", [])]), "__plus", [(2)])]);
+smalltalk.send(stop, "_at_put_", ["ch", (typeof ($receiver = (typeof ($receiver = smalltalk.send(start, "_at_", ["ch"])) === 'number') ? $receiver +smalltalk.send(aString, "_size", []) : smalltalk.send($receiver, "__plus", [smalltalk.send(aString, "_size", [])])) === 'number') ? $receiver +(2) : smalltalk.send($receiver, "__plus", [(2)])]);
 smalltalk.send(self['@editor'], "_replaceSelection_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self['@editor'], "_getSelection", []), "__comma", [" "]), "__comma", [aString]), "__comma", [" "])]);
 smalltalk.send(self['@editor'], "_setCursor_", [smalltalk.send(self['@editor'], "_getCursor_", [true])]);
 smalltalk.send(self['@editor'], "_setSelection_end_", [stop, start]);
-(function($rec){smalltalk.send($rec, "_log_", [start]);return smalltalk.send($rec, "_log_", [stop]);})(console);
 return self;},
-source: unescape('print%3A%20aString%0A%09%7C%20start%20stop%20%7C%0A%09start%20%3A%3D%20Dictionary%20new.%0A%09stop%20%3A%3D%20Dictionary%20new.%0A%09start%20at%3A%20%27line%27%20put%3A%20%28editor%20getCursor%3A%20false%29%20line.%0A%09start%20at%3A%20%27ch%27%20put%3A%20%28editor%20getCursor%3A%20false%29%20ch.%0A%09stop%20at%3A%20%27line%27%20put%3A%20%28start%20at%3A%20%27line%27%29.%0A%09stop%20at%3A%20%27ch%27%20put%3A%20%28%28start%20at%3A%20%27ch%27%29%20+%20aString%20size%20+%202%29.%0A%09editor%20replaceSelection%3A%20%28editor%20getSelection%2C%20%27%20%27%2C%20aString%2C%20%27%20%27%29.%0A%09editor%20setCursor%3A%20%28editor%20getCursor%3A%20true%29.%0A%09editor%20setSelection%3A%20stop%20end%3A%20start.%0A%09console%20log%3A%20start%3B%20log%3A%20stop'),
-messageSends: ["new", "at:put:", "line", "getCursor:", "ch", "at:", unescape("+"), "size", "replaceSelection:", unescape("%2C"), "getSelection", "setCursor:", "setSelection:end:", "log:"],
+source: unescape('print%3A%20aString%0A%09%7C%20start%20stop%20%7C%0A%09start%20%3A%3D%20Dictionary%20new.%0A%09stop%20%3A%3D%20Dictionary%20new.%0A%09start%20at%3A%20%27line%27%20put%3A%20%28editor%20getCursor%3A%20false%29%20line.%0A%09start%20at%3A%20%27ch%27%20put%3A%20%28editor%20getCursor%3A%20false%29%20ch.%0A%09stop%20at%3A%20%27line%27%20put%3A%20%28start%20at%3A%20%27line%27%29.%0A%09stop%20at%3A%20%27ch%27%20put%3A%20%28%28start%20at%3A%20%27ch%27%29%20+%20aString%20size%20+%202%29.%0A%09editor%20replaceSelection%3A%20%28editor%20getSelection%2C%20%27%20%27%2C%20aString%2C%20%27%20%27%29.%0A%09editor%20setCursor%3A%20%28editor%20getCursor%3A%20true%29.%0A%09editor%20setSelection%3A%20stop%20end%3A%20start'),
+messageSends: ["new", "at:put:", "line", "getCursor:", "ch", "at:", unescape("+"), "size", "replaceSelection:", unescape("%2C"), "getSelection", "setCursor:", "setSelection:end:"],
 referencedClasses: [smalltalk.Dictionary]
 }),
 smalltalk.SourceArea);

File diff ditekan karena terlalu besar
+ 62 - 311
js/JQuery.deploy.js


File diff ditekan karena terlalu besar
+ 101 - 202
js/Kernel.deploy.js


+ 72 - 27
js/Kernel.js

@@ -429,7 +429,7 @@ fn: function (aBlock){
 var self=this;
 return self;
 return self;},
-source: unescape('ifNil%3A%20aBlock%0A%09%5Eself'),
+source: unescape('ifNil%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5Eself'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -444,7 +444,7 @@ fn: function (aBlock, anotherBlock){
 var self=this;
 return smalltalk.send(anotherBlock, "_value", []);
 return self;},
-source: unescape('ifNil%3A%20aBlock%20ifNotNil%3A%20anotherBlock%0A%09%5EanotherBlock%20value'),
+source: unescape('ifNil%3A%20aBlock%20ifNotNil%3A%20anotherBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5EanotherBlock%20value'),
 messageSends: ["value"],
 referencedClasses: []
 }),
@@ -459,7 +459,7 @@ fn: function (aBlock){
 var self=this;
 return smalltalk.send(aBlock, "_value", []);
 return self;},
-source: unescape('ifNotNil%3A%20aBlock%0A%09%5EaBlock%20value'),
+source: unescape('ifNotNil%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5EaBlock%20value'),
 messageSends: ["value"],
 referencedClasses: []
 }),
@@ -474,7 +474,7 @@ fn: function (aBlock, anotherBlock){
 var self=this;
 return smalltalk.send(aBlock, "_value", []);
 return self;},
-source: unescape('ifNotNil%3A%20aBlock%20ifNil%3A%20anotherBlock%0A%09%5EaBlock%20value'),
+source: unescape('ifNotNil%3A%20aBlock%20ifNil%3A%20anotherBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5EaBlock%20value'),
 messageSends: ["value"],
 referencedClasses: []
 }),
@@ -1529,7 +1529,7 @@ fn: function (aNumber){
 var self=this;
 return Number(self) == aNumber;
 return self;},
-source: unescape('%3D%20aNumber%0A%09%3Creturn%20Number%28self%29%20%3D%3D%20aNumber%3E'),
+source: unescape('%3D%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20Number%28self%29%20%3D%3D%20aNumber%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -1544,7 +1544,7 @@ fn: function (aNumber){
 var self=this;
 return self > aNumber;
 return self;},
-source: unescape('%3E%20aNumber%0A%09%3Creturn%20self%20%3E%3E%20aNumber%3E'),
+source: unescape('%3E%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%20%3E%3E%20aNumber%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -1559,7 +1559,7 @@ fn: function (aNumber){
 var self=this;
 return self < aNumber;
 return self;},
-source: unescape('%3C%20aNumber%0A%09%3Creturn%20self%20%3C%20aNumber%3E'),
+source: unescape('%3C%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%20%3C%20aNumber%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -1574,7 +1574,7 @@ fn: function (aNumber){
 var self=this;
 return self >= aNumber;
 return self;},
-source: unescape('%3E%3D%20aNumber%0A%09%3Creturn%20self%20%3E%3E%3D%20aNumber%3E'),
+source: unescape('%3E%3D%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%20%3E%3E%3D%20aNumber%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -1589,7 +1589,7 @@ fn: function (aNumber){
 var self=this;
 return self <= aNumber;
 return self;},
-source: unescape('%3C%3D%20aNumber%0A%09%3Creturn%20self%20%3C%3D%20aNumber%3E'),
+source: unescape('%3C%3D%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%20%3C%3D%20aNumber%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -1604,7 +1604,7 @@ fn: function (aNumber){
 var self=this;
 return self + aNumber;
 return self;},
-source: unescape('+%20aNumber%0A%09%3Creturn%20self%20+%20aNumber%3E'),
+source: unescape('+%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%20+%20aNumber%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -1619,7 +1619,7 @@ fn: function (aNumber){
 var self=this;
 return self - aNumber;
 return self;},
-source: unescape('-%20aNumber%0A%09%3Creturn%20self%20-%20aNumber%3E'),
+source: unescape('-%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%20-%20aNumber%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -1634,7 +1634,7 @@ fn: function (aNumber){
 var self=this;
 return self * aNumber;
 return self;},
-source: unescape('*%20aNumber%0A%09%3Creturn%20self%20*%20aNumber%3E'),
+source: unescape('*%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%20*%20aNumber%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -1649,7 +1649,7 @@ fn: function (aNumber){
 var self=this;
 return self / aNumber;
 return self;},
-source: unescape('/%20aNumber%0A%09%3Creturn%20self%20/%20aNumber%3E'),
+source: unescape('/%20aNumber%0A%09%22Inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%20/%20aNumber%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -2011,7 +2011,7 @@ fn: function (aBlock){
 var self=this;
 while(self()) {aBlock()};
 return self;},
-source: unescape('whileTrue%3A%20aBlock%0A%09%3Cwhile%28self%28%29%29%20%7BaBlock%28%29%7D%3E'),
+source: unescape('whileTrue%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%3Cwhile%28self%28%29%29%20%7BaBlock%28%29%7D%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -2026,7 +2026,7 @@ fn: function (aBlock){
 var self=this;
 while(!self()) {aBlock()};
 return self;},
-source: unescape('whileFalse%3A%20aBlock%0A%09%3Cwhile%28%21self%28%29%29%20%7BaBlock%28%29%7D%3E'),
+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: []
 }),
@@ -2041,7 +2041,7 @@ fn: function (){
 var self=this;
 return self();;
 return self;},
-source: unescape('value%0A%09%3Creturn%20self%28%29%3B%3E'),
+source: unescape('value%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%28%29%3B%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -2056,7 +2056,7 @@ fn: function (anArg){
 var self=this;
 return self(anArg);;
 return self;},
-source: unescape('value%3A%20anArg%0A%09%3Creturn%20self%28anArg%29%3B%3E'),
+source: unescape('value%3A%20anArg%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%28anArg%29%3B%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -2071,7 +2071,7 @@ fn: function (firstArg, secondArg){
 var self=this;
 return self(firstArg, secondArg);;
 return self;},
-source: unescape('value%3A%20firstArg%20value%3A%20secondArg%0A%09%3Creturn%20self%28firstArg%2C%20secondArg%29%3B%3E'),
+source: unescape('value%3A%20firstArg%20value%3A%20secondArg%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%28firstArg%2C%20secondArg%29%3B%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -2086,7 +2086,7 @@ fn: function (firstArg, secondArg, thirdArg){
 var self=this;
 return self(firstArg, secondArg, thirdArg);;
 return self;},
-source: unescape('value%3A%20firstArg%20value%3A%20secondArg%20value%3A%20thirdArg%0A%09%3Creturn%20self%28firstArg%2C%20secondArg%2C%20thirdArg%29%3B%3E'),
+source: unescape('value%3A%20firstArg%20value%3A%20secondArg%20value%3A%20thirdArg%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%28firstArg%2C%20secondArg%2C%20thirdArg%29%3B%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -2167,6 +2167,51 @@ referencedClasses: [smalltalk.String]
 }),
 smalltalk.BlockClosure);
 
+smalltalk.addMethod(
+'_whileFalse',
+smalltalk.method({
+selector: 'whileFalse',
+category: 'controlling',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_whileFalse_", [(function(){return nil;})]);
+return self;},
+source: unescape('whileFalse%0A%09%22inlined%20in%20the%20Compiler%22%0A%09self%20whileFalse%3A%20%5B%5D'),
+messageSends: ["whileFalse:"],
+referencedClasses: []
+}),
+smalltalk.BlockClosure);
+
+smalltalk.addMethod(
+'_whileTrue',
+smalltalk.method({
+selector: 'whileTrue',
+category: 'controlling',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_whileTrue_", [(function(){return nil;})]);
+return self;},
+source: unescape('whileTrue%0A%09%22inlined%20in%20the%20Compiler%22%0A%09self%20whileTrue%3A%20%5B%5D'),
+messageSends: ["whileTrue:"],
+referencedClasses: []
+}),
+smalltalk.BlockClosure);
+
+smalltalk.addMethod(
+'_new',
+smalltalk.method({
+selector: 'new',
+category: 'evaluating',
+fn: function (){
+var self=this;
+return new self();
+return self;},
+source: unescape('new%0A%09%22Use%20the%20receiver%20as%20a%20JS%20constructor.%20%0A%09*Do%20not*%20use%20this%20method%20to%20instanciate%20Smalltalk%20objects%21%22%0A%09%3Creturn%20new%20self%28%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.BlockClosure);
+
 
 
 smalltalk.addClass('Boolean', smalltalk.Object, [], 'Kernel');
@@ -2224,7 +2269,7 @@ fn: function (aBlock){
 var self=this;
 return smalltalk.send(self, "_ifTrue_ifFalse_", [aBlock, (function(){return nil;})]);
 return self;},
-source: unescape('ifTrue%3A%20aBlock%0A%09%5Eself%20ifTrue%3A%20aBlock%20ifFalse%3A%20%5B%5D'),
+source: unescape('ifTrue%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5Eself%20ifTrue%3A%20aBlock%20ifFalse%3A%20%5B%5D'),
 messageSends: ["ifTrue:ifFalse:"],
 referencedClasses: []
 }),
@@ -2239,7 +2284,7 @@ fn: function (aBlock){
 var self=this;
 return smalltalk.send(self, "_ifTrue_ifFalse_", [(function(){return nil;}), aBlock]);
 return self;},
-source: unescape('ifFalse%3A%20aBlock%0A%09%5Eself%20ifTrue%3A%20%5B%5D%20ifFalse%3A%20aBlock'),
+source: unescape('ifFalse%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5Eself%20ifTrue%3A%20%5B%5D%20ifFalse%3A%20aBlock'),
 messageSends: ["ifTrue:ifFalse:"],
 referencedClasses: []
 }),
@@ -2254,7 +2299,7 @@ fn: function (aBlock, anotherBlock){
 var self=this;
 return smalltalk.send(self, "_ifTrue_ifFalse_", [anotherBlock, aBlock]);
 return self;},
-source: unescape('ifFalse%3A%20aBlock%20ifTrue%3A%20anotherBlock%0A%09%5Eself%20ifTrue%3A%20anotherBlock%20ifFalse%3A%20aBlock'),
+source: unescape('ifFalse%3A%20aBlock%20ifTrue%3A%20anotherBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5Eself%20ifTrue%3A%20anotherBlock%20ifFalse%3A%20aBlock'),
 messageSends: ["ifTrue:ifFalse:"],
 referencedClasses: []
 }),
@@ -2275,7 +2320,7 @@ var self=this;
 	    }
 	;
 return self;},
-source: unescape('ifTrue%3A%20aBlock%20ifFalse%3A%20anotherBlock%0A%09%3C%0A%09%20%20%20%20if%28self%20%3D%3D%20true%29%20%7B%0A%09%09return%20aBlock%28%29%3B%0A%09%20%20%20%20%7D%20else%20%7B%0A%09%09return%20anotherBlock%28%29%3B%0A%09%20%20%20%20%7D%0A%09%3E'),
+source: unescape('ifTrue%3A%20aBlock%20ifFalse%3A%20anotherBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%3C%0A%09%20%20%20%20if%28self%20%3D%3D%20true%29%20%7B%0A%09%09return%20aBlock%28%29%3B%0A%09%20%20%20%20%7D%20else%20%7B%0A%09%09return%20anotherBlock%28%29%3B%0A%09%20%20%20%20%7D%0A%09%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -3050,7 +3095,7 @@ fn: function (aBlock){
 var self=this;
 return smalltalk.send(self, "_ifNil_ifNotNil_", [aBlock, (function(){return nil;})]);
 return self;},
-source: unescape('ifNil%3A%20aBlock%0A%09%5Eself%20ifNil%3A%20aBlock%20ifNotNil%3A%20%5B%5D'),
+source: unescape('ifNil%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5Eself%20ifNil%3A%20aBlock%20ifNotNil%3A%20%5B%5D'),
 messageSends: ["ifNil:ifNotNil:"],
 referencedClasses: []
 }),
@@ -3065,7 +3110,7 @@ fn: function (aBlock){
 var self=this;
 return self;
 return self;},
-source: unescape('ifNotNil%3A%20aBlock%0A%09%5Eself'),
+source: unescape('ifNotNil%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5Eself'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -3080,7 +3125,7 @@ fn: function (aBlock, anotherBlock){
 var self=this;
 return smalltalk.send(aBlock, "_value", []);
 return self;},
-source: unescape('ifNil%3A%20aBlock%20ifNotNil%3A%20anotherBlock%0A%09%5EaBlock%20value'),
+source: unescape('ifNil%3A%20aBlock%20ifNotNil%3A%20anotherBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5EaBlock%20value'),
 messageSends: ["value"],
 referencedClasses: []
 }),
@@ -3095,7 +3140,7 @@ fn: function (aBlock, anotherBlock){
 var self=this;
 return smalltalk.send(anotherBlock, "_value", []);
 return self;},
-source: unescape('ifNotNil%3A%20aBlock%20ifNil%3A%20anotherBlock%0A%09%5EanotherBlock%20value'),
+source: unescape('ifNotNil%3A%20aBlock%20ifNil%3A%20anotherBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%5EanotherBlock%20value'),
 messageSends: ["value"],
 referencedClasses: []
 }),

+ 1 - 95
js/Parser.deploy.js

@@ -7,7 +7,6 @@ fn: function (){
 var self=this;
 self['@memo']=smalltalk.send(smalltalk.Dictionary, "_new", []);
 return self;}
-]
 }),
 smalltalk.PPParser);
 
@@ -19,7 +18,6 @@ fn: function (){
 var self=this;
 return self['@memo'];
 return self;}
-]
 }),
 smalltalk.PPParser);
 
@@ -31,7 +29,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.PPFlattenParser, "_on_", [self]);
 return self;}
-]
 }),
 smalltalk.PPParser);
 
@@ -43,7 +40,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.PPSourceParser, "_on_", [self]);
 return self;}
-]
 }),
 smalltalk.PPParser);
 
@@ -55,7 +51,6 @@ fn: function (aBlock){
 var self=this;
 return smalltalk.send(smalltalk.PPActionParser, "_on_block_", [self, aBlock]);
 return self;}
-]
 }),
 smalltalk.PPParser);
 
@@ -67,7 +62,6 @@ fn: function (aParser){
 var self=this;
 return smalltalk.send(smalltalk.PPSequenceParser, "_with_with_", [self, aParser]);
 return self;}
-]
 }),
 smalltalk.PPParser);
 
@@ -79,7 +73,6 @@ fn: function (aParser){
 var self=this;
 return smalltalk.send(smalltalk.PPChoiceParser, "_with_with_", [self, aParser]);
 return self;}
-]
 }),
 smalltalk.PPParser);
 
@@ -91,7 +84,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.PPRepeatingParser, "_on_min_", [self, (1)]);
 return self;}
-]
 }),
 smalltalk.PPParser);
 
@@ -103,7 +95,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.PPRepeatingParser, "_on_min_", [self, (0)]);
 return self;}
-]
 }),
 smalltalk.PPParser);
 
@@ -115,7 +106,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.PPNotParser, "_on_", [self]);
 return self;}
-]
 }),
 smalltalk.PPParser);
 
@@ -127,7 +117,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "__slash", [smalltalk.send(smalltalk.PPEpsilonParser, "_new", [])]);
 return self;}
-]
 }),
 smalltalk.PPParser);
 
@@ -143,7 +132,6 @@ var node=nil;
 start=smalltalk.send(aStream, "_position", []);
 return smalltalk.send(smalltalk.send(self, "_memo", []), "_at_ifPresent_ifAbsent_", [start, (function(value){smalltalk.send(aStream, "_position_", [smalltalk.send(smalltalk.send(smalltalk.send(self, "_memo", []), "_at_", [start]), "_second", [])]);return smalltalk.send(value, "_first", []);}), (function(){node=smalltalk.send(self, "_parse_", [aStream]);end=smalltalk.send(aStream, "_position", []);smalltalk.send(smalltalk.send(self, "_memo", []), "_at_put_", [start, smalltalk.send(smalltalk.Array, "_with_with_", [node, end])]);return node;})]);
 return self;}
-]
 }),
 smalltalk.PPParser);
 
@@ -155,7 +143,6 @@ fn: function (aStream){
 var self=this;
 smalltalk.send(self, "_subclassResponsibility", []);
 return self;}
-]
 }),
 smalltalk.PPParser);
 
@@ -169,7 +156,6 @@ var result=nil;
 result=smalltalk.send(smalltalk.send(smalltalk.PPSequenceParser, "_with_with_", [self, smalltalk.send(smalltalk.PPEOFParser, "_new", [])]), "_memoizedParse_", [aStream]);
 return smalltalk.send(smalltalk.send(result, "_isParseFailure", []), "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self, "_error_", [smalltalk.send(result, "_messageFor_", [smalltalk.send(aStream, "_contents", [])])]);}), (function(){return smalltalk.send(result, "_first", []);})]);
 return self;}
-]
 }),
 smalltalk.PPParser);
 
@@ -184,7 +170,6 @@ fn: function (aStream){
 var self=this;
 return smalltalk.send(smalltalk.send(aStream, "_atEnd", []), "_ifFalse_ifTrue_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.PPFailure, "_new", []), "_reason_at_", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aStream, "_contents", []), "__comma", [smalltalk.send(smalltalk.String, "_lf", [])]), "__comma", [unescape("---------------")]), "__comma", [smalltalk.send(smalltalk.String, "_lf", [])]), "__comma", ["EOF expected"]), smalltalk.send(aStream, "_position", [])]);}), (function(){return nil;})]);
 return self;}
-]
 }),
 smalltalk.PPEOFParser);
 
@@ -199,7 +184,6 @@ fn: function (aStream){
 var self=this;
 return smalltalk.send(smalltalk.send(aStream, "_atEnd", []), "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.PPFailure, "_new", []), "_reason_at_", ["did not expect EOF", smalltalk.send(aStream, "_position", [])]);}), (function(){return smalltalk.send(aStream, "_next", []);})]);
 return self;}
-]
 }),
 smalltalk.PPAnyParser);
 
@@ -214,7 +198,6 @@ fn: function (aStream){
 var self=this;
 return nil;
 return self;}
-]
 }),
 smalltalk.PPEpsilonParser);
 
@@ -229,7 +212,6 @@ fn: function (){
 var self=this;
 return self['@string'];
 return self;}
-]
 }),
 smalltalk.PPStringParser);
 
@@ -241,7 +223,6 @@ fn: function (aString){
 var self=this;
 self['@string']=aString;
 return self;}
-]
 }),
 smalltalk.PPStringParser);
 
@@ -257,7 +238,6 @@ position=smalltalk.send(aStream, "_position", []);
 result=smalltalk.send(aStream, "_next_", [smalltalk.send(smalltalk.send(self, "_string", []), "_size", [])]);
 return smalltalk.send(smalltalk.send(result, "__eq", [smalltalk.send(self, "_string", [])]), "_ifTrue_ifFalse_", [(function(){return result;}), (function(){smalltalk.send(aStream, "_position_", [position]);return (function($rec){smalltalk.send($rec, "_reason_", [smalltalk.send(smalltalk.send(smalltalk.send("Expected ", "__comma", [smalltalk.send(self, "_string", [])]), "__comma", [" but got "]), "__comma", [smalltalk.send(smalltalk.send(result, "_at_", [position]), "_printString", [])])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(smalltalk.PPFailure, "_new", []));})]);
 return self;}
-]
 }),
 smalltalk.PPStringParser);
 
@@ -272,7 +252,6 @@ fn: function (aString){
 var self=this;
 self['@regexp']=smalltalk.send(smalltalk.RegularExpression, "_fromString_", [smalltalk.send(smalltalk.send(unescape("%5B"), "__comma", [aString]), "__comma", [unescape("%5D")])]);
 return self;}
-]
 }),
 smalltalk.PPCharacterParser);
 
@@ -284,7 +263,6 @@ fn: function (aStream){
 var self=this;
 return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aStream, "_peek", []), "_notNil", []), "_and_", [(function(){return smalltalk.send(self, "_match_", [smalltalk.send(aStream, "_peek", [])]);})]), "_ifTrue_ifFalse_", [(function(){return smalltalk.send(aStream, "_next", []);}), (function(){return smalltalk.send(smalltalk.send(smalltalk.PPFailure, "_new", []), "_reason_at_", ["Could not match", smalltalk.send(aStream, "_position", [])]);})]);
 return self;}
-]
 }),
 smalltalk.PPCharacterParser);
 
@@ -296,7 +274,6 @@ fn: function (aString){
 var self=this;
 return smalltalk.send(aString, "_match_", [self['@regexp']]);
 return self;}
-]
 }),
 smalltalk.PPCharacterParser);
 
@@ -311,7 +288,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self['@parsers'], "_ifNil_", [(function(){return [];})]);
 return self;}
-]
 }),
 smalltalk.PPListParser);
 
@@ -323,7 +299,6 @@ fn: function (aCollection){
 var self=this;
 self['@parsers']=aCollection;
 return self;}
-]
 }),
 smalltalk.PPListParser);
 
@@ -335,7 +310,6 @@ fn: function (aParser){
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_class", []), "_withAll_", [smalltalk.send(smalltalk.send(self, "_parsers", []), "_copyWith_", [aParser])]);
 return self;}
-]
 }),
 smalltalk.PPListParser);
 
@@ -348,7 +322,6 @@ fn: function (aCollection){
 var self=this;
 return (function($rec){smalltalk.send($rec, "_parsers_", [aCollection]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
 return self;}
-]
 }),
 smalltalk.PPListParser.klass);
 
@@ -360,7 +333,6 @@ fn: function (aParser, anotherParser){
 var self=this;
 return smalltalk.send(self, "_withAll_", [smalltalk.send(smalltalk.Array, "_with_with_", [aParser, anotherParser])]);
 return self;}
-]
 }),
 smalltalk.PPListParser.klass);
 
@@ -374,7 +346,6 @@ fn: function (aRule){
 var self=this;
 return smalltalk.send(self, "_copyWith_", [aRule]);
 return self;}
-]
 }),
 smalltalk.PPSequenceParser);
 
@@ -392,7 +363,6 @@ elements=[];
 smalltalk.send(smalltalk.send(self, "_parsers", []), "_detect_ifNone_", [(function(each){element=smalltalk.send(each, "_memoizedParse_", [aStream]);smalltalk.send(elements, "_add_", [element]);return smalltalk.send(element, "_isParseFailure", []);}), (function(){return nil;})]);
 return smalltalk.send(smalltalk.send(element, "_isParseFailure", []), "_ifFalse_ifTrue_", [(function(){return elements;}), (function(){smalltalk.send(aStream, "_position_", [start]);return element;})]);
 return self;}
-]
 }),
 smalltalk.PPSequenceParser);
 
@@ -407,7 +377,6 @@ fn: function (aRule){
 var self=this;
 return smalltalk.send(self, "_copyWith_", [aRule]);
 return self;}
-]
 }),
 smalltalk.PPChoiceParser);
 
@@ -421,7 +390,6 @@ var result=nil;
 smalltalk.send(smalltalk.send(self, "_parsers", []), "_detect_ifNone_", [(function(each){result=smalltalk.send(each, "_memoizedParse_", [aStream]);return smalltalk.send(smalltalk.send(result, "_isParseFailure", []), "_not", []);}), (function(){return nil;})]);
 return result;
 return self;}
-]
 }),
 smalltalk.PPChoiceParser);
 
@@ -436,7 +404,6 @@ fn: function (){
 var self=this;
 return self['@parser'];
 return self;}
-]
 }),
 smalltalk.PPDelegateParser);
 
@@ -448,7 +415,6 @@ fn: function (aParser){
 var self=this;
 self['@parser']=aParser;
 return self;}
-]
 }),
 smalltalk.PPDelegateParser);
 
@@ -460,7 +426,6 @@ fn: function (aStream){
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_parser", []), "_memoizedParse_", [aStream]);
 return self;}
-]
 }),
 smalltalk.PPDelegateParser);
 
@@ -473,7 +438,6 @@ fn: function (aParser){
 var self=this;
 return (function($rec){smalltalk.send($rec, "_parser_", [aParser]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
 return self;}
-]
 }),
 smalltalk.PPDelegateParser.klass);
 
@@ -487,7 +451,6 @@ fn: function (aStream){
 var self=this;
 return smalltalk.send(self, "_basicParse_", [aStream]);
 return self;}
-]
 }),
 smalltalk.PPAndParser);
 
@@ -504,7 +467,6 @@ element=smalltalk.send(smalltalk.send(self, "_parser", []), "_memoizedParse_", [
 smalltalk.send(aStream, "_position_", [position]);
 return element;
 return self;}
-]
 }),
 smalltalk.PPAndParser);
 
@@ -521,7 +483,6 @@ var element=nil;
 element=smalltalk.send(self, "_basicParse_", [aStream]);
 return smalltalk.send(smalltalk.send(element, "_isParseFailure", []), "_ifTrue_ifFalse_", [(function(){return nil;}), (function(){return smalltalk.send(smalltalk.PPFailure, "_reason_at_", [element, smalltalk.send(aStream, "_position", [])]);})]);
 return self;}
-]
 }),
 smalltalk.PPNotParser);
 
@@ -536,7 +497,6 @@ fn: function (){
 var self=this;
 return self['@block'];
 return self;}
-]
 }),
 smalltalk.PPActionParser);
 
@@ -548,7 +508,6 @@ fn: function (aBlock){
 var self=this;
 self['@block']=aBlock;
 return self;}
-]
 }),
 smalltalk.PPActionParser);
 
@@ -562,7 +521,6 @@ var element=nil;
 element=smalltalk.send(smalltalk.send(self, "_parser", []), "_memoizedParse_", [aStream]);
 return smalltalk.send(smalltalk.send(element, "_isParseFailure", []), "_ifFalse_ifTrue_", [(function(){return smalltalk.send(smalltalk.send(self, "_block", []), "_value_", [element]);}), (function(){return element;})]);
 return self;}
-]
 }),
 smalltalk.PPActionParser);
 
@@ -575,7 +533,6 @@ fn: function (aParser, aBlock){
 var self=this;
 return (function($rec){smalltalk.send($rec, "_parser_", [aParser]);smalltalk.send($rec, "_block_", [aBlock]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
 return self;}
-]
 }),
 smalltalk.PPActionParser.klass);
 
@@ -594,7 +551,6 @@ start=smalltalk.send(aStream, "_position", []);
 element=smalltalk.send(smalltalk.send(self, "_parser", []), "_memoizedParse_", [aStream]);
 return smalltalk.send(smalltalk.send(element, "_isParseFailure", []), "_ifTrue_ifFalse_", [(function(){return element;}), (function(){return smalltalk.send(smalltalk.send(aStream, "_collection", []), "_copyFrom_to_", [smalltalk.send(start, "__plus", [(1)]), smalltalk.send(aStream, "_position", [])]);})]);
 return self;}
-]
 }),
 smalltalk.PPFlattenParser);
 
@@ -615,7 +571,6 @@ start=smalltalk.send(aStream, "_position", []);
 element=smalltalk.send(smalltalk.send(self, "_parser", []), "_memoizedParse_", [aStream]);
 return smalltalk.send(smalltalk.send(element, "_isParseFailure", []), "_ifTrue_ifFalse_", [(function(){return element;}), (function(){result=smalltalk.send(smalltalk.send(aStream, "_collection", []), "_copyFrom_to_", [smalltalk.send(start, "__plus", [(1)]), smalltalk.send(aStream, "_position", [])]);return smalltalk.send(smalltalk.Array, "_with_with_", [element, result]);})]);
 return self;}
-]
 }),
 smalltalk.PPSourceParser);
 
@@ -630,7 +585,6 @@ fn: function (){
 var self=this;
 return self['@min'];
 return self;}
-]
 }),
 smalltalk.PPRepeatingParser);
 
@@ -642,7 +596,6 @@ fn: function (aNumber){
 var self=this;
 self['@min']=aNumber;
 return self;}
-]
 }),
 smalltalk.PPRepeatingParser);
 
@@ -661,7 +614,6 @@ elements=smalltalk.send(smalltalk.Array, "_new", []);
 smalltalk.send((function(){return smalltalk.send(smalltalk.send(smalltalk.send(elements, "_size", []), "__lt", [smalltalk.send(self, "_min", [])]), "_and_", [(function(){return smalltalk.send(failure, "_isNil", []);})]);}), "_whileTrue_", [(function(){element=smalltalk.send(smalltalk.send(self, "_parser", []), "_memoizedParse_", [aStream]);return smalltalk.send(smalltalk.send(element, "_isParseFailure", []), "_ifFalse_ifTrue_", [(function(){return smalltalk.send(elements, "_addLast_", [element]);}), (function(){smalltalk.send(aStream, "_position_", [start]);return failure=element;})]);})]);
 return smalltalk.send(failure, "_ifNil_ifNotNil_", [(function(){smalltalk.send((function(){return smalltalk.send(failure, "_isNil", []);}), "_whileTrue_", [(function(){element=smalltalk.send(smalltalk.send(self, "_parser", []), "_memoizedParse_", [aStream]);return smalltalk.send(smalltalk.send(element, "_isParseFailure", []), "_ifTrue_ifFalse_", [(function(){return failure=element;}), (function(){return smalltalk.send(elements, "_addLast_", [element]);})]);})]);return elements;}), (function(){return failure;})]);
 return self;}
-]
 }),
 smalltalk.PPRepeatingParser);
 
@@ -674,7 +626,6 @@ fn: function (aParser, aNumber){
 var self=this;
 return (function($rec){smalltalk.send($rec, "_parser_", [aParser]);smalltalk.send($rec, "_min_", [aNumber]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
 return self;}
-]
 }),
 smalltalk.PPRepeatingParser.klass);
 
@@ -688,7 +639,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self['@position'], "_ifNil_", [(function(){return (0);})]);
 return self;}
-]
 }),
 smalltalk.PPFailure);
 
@@ -700,7 +650,6 @@ fn: function (aNumber){
 var self=this;
 self['@position']=aNumber;
 return self;}
-]
 }),
 smalltalk.PPFailure);
 
@@ -712,7 +661,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self['@reason'], "_ifNil_", [(function(){return "";})]);
 return self;}
-]
 }),
 smalltalk.PPFailure);
 
@@ -724,7 +672,6 @@ fn: function (aString){
 var self=this;
 self['@reason']=aString;
 return self;}
-]
 }),
 smalltalk.PPFailure);
 
@@ -736,7 +683,6 @@ fn: function (aString, anInteger){
 var self=this;
 (function($rec){smalltalk.send($rec, "_reason_", [aString]);return smalltalk.send($rec, "_position_", [anInteger]);})(self);
 return self;}
-]
 }),
 smalltalk.PPFailure);
 
@@ -748,7 +694,6 @@ fn: function (){
 var self=this;
 return true;
 return self;}
-]
 }),
 smalltalk.PPFailure);
 
@@ -760,7 +705,6 @@ fn: function (aVisitor){
 var self=this;
 smalltalk.send(aVisitor, "_visitFailure_", [self]);
 return self;}
-]
 }),
 smalltalk.PPFailure);
 
@@ -772,7 +716,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.send(self['@reason'], "__comma", [" at "]), "__comma", [smalltalk.send(self['@position'], "_asString", [])]);
 return self;}
-]
 }),
 smalltalk.PPFailure);
 
@@ -785,7 +728,6 @@ fn: function (aString, anInteger){
 var self=this;
 return (function($rec){smalltalk.send($rec, "_reason_at_", [aString, anInteger]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
 return self;}
-]
 }),
 smalltalk.PPFailure.klass);
 
@@ -799,7 +741,6 @@ fn: function (aStream){
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_parser", []), "_parse_", [aStream]);
 return self;}
-]
 }),
 smalltalk.SmalltalkParser);
 
@@ -906,7 +847,6 @@ smalltalk.send(expression, "_parser_", [smalltalk.send(smalltalk.send(smalltalk.
 method=smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(ws, "__comma", [smalltalk.send(smalltalk.send(keywordPattern, "__slash", [binaryPattern]), "__slash", [unaryPattern])]), "__comma", [ws]), "__comma", [smalltalk.send(sequence, "_optional", [])]), "__comma", [ws]), "_withSource", []), "__eq_eq_gt", [(function(node){return (function($rec){smalltalk.send($rec, "_selector_", [smalltalk.send(smalltalk.send(smalltalk.send(node, "_first", []), "_second", []), "_first", [])]);smalltalk.send($rec, "_arguments_", [smalltalk.send(smalltalk.send(smalltalk.send(node, "_first", []), "_second", []), "_second", [])]);smalltalk.send($rec, "_addNode_", [smalltalk.send(smalltalk.send(node, "_first", []), "_fourth", [])]);smalltalk.send($rec, "_source_", [smalltalk.send(node, "_second", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(smalltalk.MethodNode, "_new", []));})]);
 return smalltalk.send(smalltalk.send(method, "__comma", [smalltalk.send(smalltalk.PPEOFParser, "_new", [])]), "__eq_eq_gt", [(function(node){return smalltalk.send(node, "_first", []);})]);
 return self;}
-]
 }),
 smalltalk.SmalltalkParser);
 
@@ -919,7 +859,6 @@ fn: function (aStream){
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_new", []), "_parse_", [aStream]);
 return self;}
-]
 }),
 smalltalk.SmalltalkParser.klass);
 
@@ -933,7 +872,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self['@contents'], "_ifNil_", [(function(){return "";})]);
 return self;}
-]
 }),
 smalltalk.Chunk);
 
@@ -945,7 +883,6 @@ fn: function (aString){
 var self=this;
 self['@contents']=aString;
 return self;}
-]
 }),
 smalltalk.Chunk);
 
@@ -957,7 +894,6 @@ fn: function (){
 var self=this;
 return false;
 return self;}
-]
 }),
 smalltalk.Chunk);
 
@@ -969,7 +905,6 @@ fn: function (){
 var self=this;
 return false;
 return self;}
-]
 }),
 smalltalk.Chunk);
 
@@ -984,7 +919,6 @@ fn: function (){
 var self=this;
 return true;
 return self;}
-]
 }),
 smalltalk.InstructionChunk);
 
@@ -999,7 +933,6 @@ fn: function (){
 var self=this;
 return true;
 return self;}
-]
 }),
 smalltalk.EmptyChunk);
 
@@ -1014,7 +947,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self['@parser'], "_ifNil_", [(function(){return self['@parser']=smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_instructionChunk", []), "__slash", [smalltalk.send(self, "_emptyChunk", [])]), "__slash", [smalltalk.send(self, "_chunk", [])]), "__slash", [smalltalk.send(self, "_eof", [])]);})]);
 return self;}
-]
 }),
 smalltalk.ChunkParser);
 
@@ -1026,7 +958,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self['@eof'], "_ifNil_", [(function(){return self['@eof']=smalltalk.send(smalltalk.send(smalltalk.send(self, "_ws", []), "__comma", [smalltalk.send(smalltalk.PPEOFParser, "_new", [])]), "__eq_eq_gt", [(function(node){return nil;})]);})]);
 return self;}
-]
 }),
 smalltalk.ChunkParser);
 
@@ -1038,7 +969,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self['@separator'], "_ifNil_", [(function(){return self['@separator']=smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.String, "_cr", []), "__comma", [smalltalk.send(smalltalk.String, "_space", [])]), "__comma", [smalltalk.send(smalltalk.String, "_lf", [])]), "__comma", [smalltalk.send(smalltalk.String, "_tab", [])]), "_asChoiceParser", []);})]);
 return self;}
-]
 }),
 smalltalk.ChunkParser);
 
@@ -1050,7 +980,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self['@ws'], "_ifNil_", [(function(){return self['@ws']=smalltalk.send(smalltalk.send(self, "_separator", []), "_star", []);})]);
 return self;}
-]
 }),
 smalltalk.ChunkParser);
 
@@ -1062,7 +991,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self['@chunk'], "_ifNil_", [(function(){return self['@chunk']=smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_ws", []), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(unescape("%21%21"), "_asParser", []), "__slash", [smalltalk.send(smalltalk.send(smalltalk.send(unescape("%21"), "_asParser", []), "_not", []), "__comma", [smalltalk.send(smalltalk.PPAnyParser, "_new", [])])]), "_plus", []), "_flatten", [])]), "__comma", [smalltalk.send(unescape("%21"), "_asParser", [])]), "__eq_eq_gt", [(function(node){return smalltalk.send(smalltalk.send(smalltalk.Chunk, "_new", []), "_contents_", [smalltalk.send(smalltalk.send(smalltalk.send(node, "_second", []), "_replace_with_", [unescape("%21%21"), unescape("%21")]), "_trimBoth", [])]);})]);})]);
 return self;}
-]
 }),
 smalltalk.ChunkParser);
 
@@ -1074,7 +1002,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self['@emptyChunk'], "_ifNil_", [(function(){return self['@emptyChunk']=smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_separator", []), "_plus", []), "__comma", [smalltalk.send(unescape("%21"), "_asParser", [])]), "__comma", [smalltalk.send(self, "_ws", [])]), "__eq_eq_gt", [(function(node){return smalltalk.send(smalltalk.EmptyChunk, "_new", []);})]);})]);
 return self;}
-]
 }),
 smalltalk.ChunkParser);
 
@@ -1086,7 +1013,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self['@instructionChunk'], "_ifNil_", [(function(){return self['@instructionChunk']=smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_ws", []), "__comma", [smalltalk.send(unescape("%21"), "_asParser", [])]), "__comma", [smalltalk.send(self, "_chunk", [])]), "__eq_eq_gt", [(function(node){return smalltalk.send(smalltalk.send(smalltalk.InstructionChunk, "_new", []), "_contents_", [smalltalk.send(smalltalk.send(node, "_last", []), "_contents", [])]);})]);})]);
 return self;}
-]
 }),
 smalltalk.ChunkParser);
 
@@ -1101,7 +1027,6 @@ fn: function (){
 var self=this;
 return smalltalk.send(self['@chunkParser'], "_ifNil_", [(function(){return self['@chunkParser']=smalltalk.send(smalltalk.send(smalltalk.ChunkParser, "_new", []), "_parser", []);})]);
 return self;}
-]
 }),
 smalltalk.Importer);
 
@@ -1114,7 +1039,6 @@ var self=this;
 smalltalk.send(smalltalk.send(aStream, "_atEnd", []), "_ifFalse_", [(function(){var nextChunk=nil;
 nextChunk=smalltalk.send(smalltalk.send(self, "_chunkParser", []), "_parse_", [aStream]);return smalltalk.send(nextChunk, "_ifNotNil_", [(function(){smalltalk.send(smalltalk.send(nextChunk, "_isInstructionChunk", []), "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.Compiler, "_new", []), "_loadExpression_", [smalltalk.send(nextChunk, "_contents", [])]), "_scanFrom_", [aStream]);}), (function(){return smalltalk.send(smalltalk.send(smalltalk.Compiler, "_new", []), "_loadExpression_", [smalltalk.send(nextChunk, "_contents", [])]);})]);return smalltalk.send(self, "_import_", [aStream]);})]);})]);
 return self;}
-]
 }),
 smalltalk.Importer);
 
@@ -1133,7 +1057,6 @@ smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.Smalltalk,
 smalltalk.send(self, "_exportCategoryExtensions_on_", [aString, stream]);
 return smalltalk.send(stream, "_contents", []);
 return self;}
-]
 }),
 smalltalk.Exporter);
 
@@ -1151,7 +1074,6 @@ smalltalk.send(self, "_exportMetaDefinitionOf_on_", [aClass, stream]);
 smalltalk.send(self, "_exportMethodsOf_on_", [smalltalk.send(aClass, "_class", []), stream]);
 return smalltalk.send(stream, "_contents", []);
 return self;}
-]
 }),
 smalltalk.Exporter);
 
@@ -1167,7 +1089,6 @@ smalltalk.send(smalltalk.send(aClass, "_instanceVariableNames", []), "_do_separa
 smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_comment", []), "_notEmpty", []), "_ifTrue_", [(function(){return (function($rec){smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", ["smalltalk."]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_classNameFor_", [aClass])]);smalltalk.send($rec, "_nextPutAll_", [unescape(".comment%3D")]);return smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("unescape%28%27"), "__comma", [smalltalk.send(smalltalk.send(aClass, "_comment", []), "_escaped", [])]), "__comma", [unescape("%27%29")])]);})(aStream);})]);
 smalltalk.send(aStream, "_lf", []);
 return self;}
-]
 }),
 smalltalk.Exporter);
 
@@ -1179,7 +1100,6 @@ fn: function (aClass, aStream){
 var self=this;
 smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_isEmpty", []), "_ifFalse_", [(function(){(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_class", [])])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape(".iVarNames%20%3D%20%5B")]);})(aStream);smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [each]), "__comma", [unescape("%27")])]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [unescape("%2C")]);})]);return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send(unescape("%5D%3B"), "__comma", [smalltalk.send(smalltalk.String, "_lf", [])])]);})]);
 return self;}
-]
 }),
 smalltalk.Exporter);
 
@@ -1192,7 +1112,6 @@ var self=this;
 smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_methodDictionary", []), "_values", []), "_do_", [(function(each){return smalltalk.send(smalltalk.send(smalltalk.send(each, "_category", []), "_match_", [unescape("%5E%5C*")]), "_ifFalse_", [(function(){return smalltalk.send(self, "_exportMethod_of_on_", [each, aClass, aStream]);})]);})]);
 smalltalk.send(aStream, "_lf", []);
 return self;}
-]
 }),
 smalltalk.Exporter);
 
@@ -1204,7 +1123,6 @@ fn: function (aClass){
 var self=this;
 return smalltalk.send(smalltalk.send(aClass, "_isMetaclass", []), "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [".klass"]);}), (function(){return smalltalk.send(smalltalk.send(aClass, "_isNil", []), "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]);})]);
 return self;}
-]
 }),
 smalltalk.Exporter);
 
@@ -1218,7 +1136,6 @@ var self=this;
 smalltalk.send(smalltalk.send(aMethod, "_referencedClasses", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [each])])]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [unescape("%2C")]);})]);
 (function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%5D")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("%7D%29%2C")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);smalltalk.send($rec, "_nextPutAll_", [unescape("%29%3B")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream);
 return self;}
-]
 }),
 smalltalk.Exporter);
 
@@ -1230,7 +1147,6 @@ fn: function (aString, aStream){
 var self=this;
 smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.Smalltalk, "_current", []), "_classes", []), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.Smalltalk, "_current", []), "_classes", []), "_collect_", [(function(each){return smalltalk.send(each, "_class", []);})])]), "_do_", [(function(each){return smalltalk.send(smalltalk.send(smalltalk.send(each, "_methodDictionary", []), "_values", []), "_do_", [(function(method){return smalltalk.send(smalltalk.send(smalltalk.send(method, "_category", []), "__eq", [smalltalk.send(unescape("*"), "__comma", [aString])]), "_ifTrue_", [(function(){return smalltalk.send(self, "_exportMethod_of_on_", [method, each, aStream]);})]);})]);})]);
 return self;}
-]
 }),
 smalltalk.Exporter);
 
@@ -1249,7 +1165,6 @@ smalltalk.send(smalltalk.send(aClass, "_instanceVariableNames", []), "_do_separa
 smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_comment", []), "_notEmpty", []), "_ifTrue_", [(function(){return (function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%21"), "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])]), "__comma", [unescape("%20commentStamp%21")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(self, "_chunkEscape_", [smalltalk.send(aClass, "_comment", [])]), "__comma", [unescape("%21")])]);return smalltalk.send($rec, "_lf", []);})(aStream);})]);
 smalltalk.send(aStream, "_lf", []);
 return self;}
-]
 }),
 smalltalk.ChunkExporter);
 
@@ -1261,7 +1176,6 @@ fn: function (aMethod, aClass, aStream){
 var self=this;
 (function($rec){smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_chunkEscape_", [smalltalk.send(aMethod, "_source", [])])]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_nextPutAll_", [unescape("%21")]);})(aStream);
 return self;}
-]
 }),
 smalltalk.ChunkExporter);
 
@@ -1273,7 +1187,6 @@ fn: function (aClass, aStream){
 var self=this;
 smalltalk.send(aClass, "_protocolsDo_", [(function(category, methods){return smalltalk.send(smalltalk.send(category, "_match_", [unescape("%5E%5C*")]), "_ifFalse_", [(function(){return smalltalk.send(self, "_exportMethods_category_of_on_", [methods, category, aClass, aStream]);})]);})]);
 return self;}
-]
 }),
 smalltalk.ChunkExporter);
 
@@ -1285,7 +1198,6 @@ fn: function (aClass, aStream){
 var self=this;
 smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_isEmpty", []), "_ifFalse_", [(function(){(function($rec){smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(aClass, "_class", [])])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%20instanceVariableNames%3A%20%27")]);})(aStream);smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_class", []), "_instanceVariableNames", []), "_do_separatedBy_", [(function(each){return smalltalk.send(aStream, "_nextPutAll_", [each]);}), (function(){return smalltalk.send(aStream, "_nextPutAll_", [" "]);})]);return (function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%27%21")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream);})]);
 return self;}
-]
 }),
 smalltalk.ChunkExporter);
 
@@ -1297,7 +1209,6 @@ fn: function (aClass){
 var self=this;
 return smalltalk.send(smalltalk.send(aClass, "_isMetaclass", []), "_ifTrue_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(aClass, "_instanceClass", []), "_name", []), "__comma", [" class"]);}), (function(){return smalltalk.send(smalltalk.send(aClass, "_isNil", []), "_ifTrue_ifFalse_", [(function(){return "nil";}), (function(){return smalltalk.send(aClass, "_name", []);})]);})]);
 return self;}
-]
 }),
 smalltalk.ChunkExporter);
 
@@ -1309,7 +1220,6 @@ fn: function (aString){
 var self=this;
 return smalltalk.send(smalltalk.send(aString, "_replace_with_", [unescape("%21"), unescape("%21%21")]), "_trimBoth", []);
 return self;}
-]
 }),
 smalltalk.ChunkExporter);
 
@@ -1321,7 +1231,6 @@ fn: function (aString, aStream){
 var self=this;
 smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.Smalltalk, "_current", []), "_classes", []), "__comma", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.Smalltalk, "_current", []), "_classes", []), "_collect_", [(function(each){return smalltalk.send(each, "_class", []);})])]), "_do_", [(function(each){return smalltalk.send(each, "_protocolsDo_", [(function(category, methods){return smalltalk.send(smalltalk.send(category, "__eq", [smalltalk.send(unescape("*"), "__comma", [aString])]), "_ifTrue_", [(function(){return smalltalk.send(self, "_exportMethods_category_of_on_", [methods, category, each, aStream]);})]);})]);})]);
 return self;}
-]
 }),
 smalltalk.ChunkExporter);
 
@@ -1335,7 +1244,6 @@ var self=this;
 smalltalk.send(methods, "_do_", [(function(each){return smalltalk.send(self, "_exportMethod_of_on_", [each, aClass, aStream]);})]);
 (function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%20%21")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream);
 return self;}
-]
 }),
 smalltalk.ChunkExporter);
 
@@ -1353,7 +1261,6 @@ smalltalk.send(smalltalk.send(aClass, "_instanceVariableNames", []), "_do_separa
 (function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("%5D%2C%20%27")]);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(aClass, "_category", []), "__comma", [unescape("%27")])]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%29%3B")]);})(aStream);
 smalltalk.send(aStream, "_lf", []);
 return self;}
-]
 }),
 smalltalk.StrippedExporter);
 
@@ -1363,9 +1270,8 @@ smalltalk.method({
 selector: 'exportMethod:of:on:',
 fn: function (aMethod, aClass, aStream){
 var self=this;
-(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addMethod%28")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [smalltalk.send(smalltalk.send(aMethod, "_selector", []), "_asSelector", [])]), "__comma", [unescape("%27%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.method%28%7B")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("selector%3A%20%27"), "__comma", [smalltalk.send(aMethod, "_selector", [])]), "__comma", [unescape("%27%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("fn: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_fn", []), "_compiledSource", [])])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("%5D")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("%7D%29%2C")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);smalltalk.send($rec, "_nextPutAll_", [unescape("%29%3B")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream);
+(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addMethod%28")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [smalltalk.send(smalltalk.send(aMethod, "_selector", []), "_asSelector", [])]), "__comma", [unescape("%27%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.method%28%7B")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("selector%3A%20%27"), "__comma", [smalltalk.send(aMethod, "_selector", [])]), "__comma", [unescape("%27%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("fn: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_fn", []), "_compiledSource", [])])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("%7D%29%2C")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);smalltalk.send($rec, "_nextPutAll_", [unescape("%29%3B")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream);
 return self;}
-]
 }),
 smalltalk.StrippedExporter);
 

+ 2 - 2
js/Parser.js

@@ -1643,9 +1643,9 @@ selector: 'exportMethod:of:on:',
 category: 'private',
 fn: function (aMethod, aClass, aStream){
 var self=this;
-(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addMethod%28")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [smalltalk.send(smalltalk.send(aMethod, "_selector", []), "_asSelector", [])]), "__comma", [unescape("%27%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.method%28%7B")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("selector%3A%20%27"), "__comma", [smalltalk.send(aMethod, "_selector", [])]), "__comma", [unescape("%27%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("fn: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_fn", []), "_compiledSource", [])])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("%5D")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("%7D%29%2C")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);smalltalk.send($rec, "_nextPutAll_", [unescape("%29%3B")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream);
+(function($rec){smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.addMethod%28")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("%27"), "__comma", [smalltalk.send(smalltalk.send(aMethod, "_selector", []), "_asSelector", [])]), "__comma", [unescape("%27%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("smalltalk.method%28%7B")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(smalltalk.send(unescape("selector%3A%20%27"), "__comma", [smalltalk.send(aMethod, "_selector", [])]), "__comma", [unescape("%27%2C")])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("fn: ", "__comma", [smalltalk.send(smalltalk.send(aMethod, "_fn", []), "_compiledSource", [])])]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [unescape("%7D%29%2C")]);smalltalk.send($rec, "_lf", []);smalltalk.send($rec, "_nextPutAll_", [smalltalk.send("smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [aClass])])]);smalltalk.send($rec, "_nextPutAll_", [unescape("%29%3B")]);smalltalk.send($rec, "_lf", []);return smalltalk.send($rec, "_lf", []);})(aStream);
 return self;},
-source: unescape('exportMethod%3A%20aMethod%20of%3A%20aClass%20on%3A%20aStream%0A%09aStream%20%0A%09%09nextPutAll%3A%20%27smalltalk.addMethod%28%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27%27%27%27%2C%20aMethod%20selector%20asSelector%2C%20%27%27%27%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27smalltalk.method%28%7B%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27selector%3A%20%27%27%27%2C%20aMethod%20selector%2C%20%27%27%27%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27fn%3A%20%27%2C%20aMethod%20fn%20compiledSource%3Blf%3B%0A%09%09nextPutAll%3A%20%27%5D%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27%7D%29%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27smalltalk.%27%2C%20%28self%20classNameFor%3A%20aClass%29%3B%0A%09%09nextPutAll%3A%20%27%29%3B%27%3Blf%3Blf'),
+source: unescape('exportMethod%3A%20aMethod%20of%3A%20aClass%20on%3A%20aStream%0A%09aStream%20%0A%09%09nextPutAll%3A%20%27smalltalk.addMethod%28%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27%27%27%27%2C%20aMethod%20selector%20asSelector%2C%20%27%27%27%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27smalltalk.method%28%7B%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27selector%3A%20%27%27%27%2C%20aMethod%20selector%2C%20%27%27%27%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27fn%3A%20%27%2C%20aMethod%20fn%20compiledSource%3Blf%3B%0A%09%09nextPutAll%3A%20%27%7D%29%2C%27%3Blf%3B%0A%09%09nextPutAll%3A%20%27smalltalk.%27%2C%20%28self%20classNameFor%3A%20aClass%29%3B%0A%09%09nextPutAll%3A%20%27%29%3B%27%3Blf%3Blf'),
 messageSends: ["nextPutAll:", "lf", unescape("%2C"), "asSelector", "selector", "compiledSource", "fn", "classNameFor:"],
 referencedClasses: []
 }),

File diff ditekan karena terlalu besar
+ 61 - 305
js/SUnit.deploy.js


+ 1 - 1
js/SUnit.js

@@ -132,7 +132,7 @@ smalltalk.send(smalltalk.send(self, "_methods", []), "_do_", [(function(each){sm
 return self;},
 source: unescape('performTestFor%3A%20aResult%0A%09self%20methods%20do%3A%20%5B%3Aeach%20%7C%20%0A%09%09%5B%5Bself%20perform%3A%20each%5D%0A%09%09%09on%3A%20TestFailure%20do%3A%20%5B%3Aex%20%7C%20aResult%20addFailure%3A%20self%20class%20name%2C%20%27%3E%3E%27%2C%20each%2C%20%27%3A%20%27%2C%20ex%20messageText%5D%5D%0A%09%09%09on%3A%20Error%20do%3A%20%5B%3Aex%20%7C%20aResult%20addError%3A%20self%20class%20name%2C%20%27%3E%3E%27%2C%20each%2C%20%27%3A%20%27%2C%20ex%20messageText%5D.%0A%09%09aResult%20increaseRuns%5D'),
 messageSends: ["do:", "methods", "on:do:", "perform:", "addFailure:", unescape("%2C"), "name", "class", "messageText", "addError:", "increaseRuns"],
-referencedClasses: [smalltalk.TestFailure,smalltalk.Error]
+referencedClasses: [smalltalk.nil,smalltalk.Error]
 }),
 smalltalk.TestCase);
 

+ 1 - 1
js/jtalk.js

@@ -73,6 +73,6 @@
 	}
 
 	loadJS("init.js");
-	smalltalk.setDeploymentMode();
+	loadJS("deploy.js");
     }
 })();

+ 7 - 6
st/Benchfib.st

@@ -8,24 +8,25 @@ main
 
 	| result |
 	result := 0 tinyBenchmarks.
-	console log: '0 tinyBenchmarks => ' + result
+	console log: '0 tinyBenchmarks => ' , result
 ! !
 
 !Number methodsFor: '*Benchfib'!
 
-benchFib
+benchFib 
 	"Handy send-heavy benchmark"
 	"(result // seconds to run) = approx calls per second"
 	" | r t |
 	  t := Time millisecondsToRun: [r := 26 benchFib].
 	  (r * 1000) // t"
 	"138000 on a Mac 8100/100"
-	^ self < 2
+	^ self < 2 
 		ifTrue: [1] 
 		ifFalse: [(self-1) benchFib + (self-2) benchFib + 1]
 !
 
-benchmark  "Handy bytecode-heavy benchmark"
+benchmark 
+	"Handy bytecode-heavy benchmark"
 	"(500000 // time to run) = approx bytecodes per second"
 	"5000000 // (Time millisecondsToRun: [10 benchmark]) * 1000"
 	"3059000 on a Mac 8100/100"
@@ -47,7 +48,7 @@ benchmark  "Handy bytecode-heavy benchmark"
     ^ count
 !
 
-tinyBenchmarks
+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"
@@ -58,7 +59,7 @@ tinyBenchmarks
 	[t1 := Date millisecondsToRun: [n1 benchmark].
 	t1 < 1000] whileTrue:[n1 := n1 * 2]. "Note: #benchmark's runtime is about O(n)"
 
-	n2 := 28.
+	n2 := 16.
 	[t2 := Date millisecondsToRun: [r := n2 benchFib].
 	t2 < 1000] whileTrue:[n2 := n2 + 1]. 
 	"Note: #benchFib's runtime is about O(k^n),

+ 355 - 21
st/Compiler.st

@@ -18,6 +18,20 @@ nodes: aCollection
 	nodes := aCollection
 ! !
 
+!Node methodsFor: 'testing'!
+
+isValueNode
+	^false
+!
+
+isBlockNode
+	^false
+!
+
+isBlockSequenceNode
+	^false
+! !
+
 !Node methodsFor: 'visiting'!
 
 accept: aVisitor
@@ -167,7 +181,7 @@ accept: aVisitor
 ! !
 
 Node subclass: #BlockNode
-	instanceVariableNames: 'parameters'
+	instanceVariableNames: 'parameters inlined'
 	category: 'Compiler'!
 
 !BlockNode methodsFor: 'accessing'!
@@ -178,6 +192,20 @@ parameters
 
 parameters: aCollection
 	parameters := aCollection
+!
+
+inlined
+	^inlined ifNil: [false]
+!
+
+inlined: aBoolean
+	inlined := aBoolean
+! !
+
+!BlockNode methodsFor: 'testing'!
+
+isBlockNode
+	^true
 ! !
 
 !BlockNode methodsFor: 'visiting'!
@@ -219,6 +247,12 @@ SequenceNode subclass: #BlockSequenceNode
 	instanceVariableNames: ''
 	category: 'Compiler'!
 
+!BlockSequenceNode methodsFor: 'testing'!
+
+isBlockSequenceNode
+	^true
+! !
+
 !BlockSequenceNode methodsFor: 'visiting'!
 
 accept: aVisitor
@@ -249,6 +283,12 @@ value: anObject
 	value := anObject
 ! !
 
+!ValueNode methodsFor: 'testing'!
+
+isValueNode
+	^true
+! !
+
 !ValueNode methodsFor: 'visiting'!
 
 accept: aVisitor
@@ -480,6 +520,273 @@ initialize
 	classReferenced := #()
 ! !
 
+!Compiler methodsFor: 'optimizations'!
+
+checkClass: aClassName for: receiver
+        stream nextPutAll: '(($receiver = ', receiver, ').klass === smalltalk.', aClassName, ') ? '
+!
+
+inlineLiteral: aSelector receiverNode: anObject argumentNodes: aCollection
+        | inlined |
+        inlined := false.
+
+	"-- BlockClosures --"
+
+	(aSelector = 'whileTrue:') ifTrue: [
+          	(anObject isBlockNode and: [aCollection first isBlockNode]) ifTrue: [
+                	stream nextPutAll: '(function(){while('.
+                  	self visit: anObject.
+                  	stream nextPutAll: '()) {'.
+                	self visit: aCollection first.
+          		stream nextPutAll: '()}})()'.
+                	inlined := true]].
+
+	(aSelector = 'whileFalse:') ifTrue: [
+          	(anObject isBlockNode and: [aCollection first isBlockNode]) ifTrue: [
+                	stream nextPutAll: '(function(){while(!!'.
+                  	self visit: anObject.
+                  	stream nextPutAll: '()) {'.
+                	self visit: aCollection first.
+          		stream nextPutAll: '()}})()'.
+                	inlined := true]].
+
+	(aSelector = 'whileTrue') ifTrue: [
+          	anObject isBlockNode ifTrue: [
+                	stream nextPutAll: '(function(){while('.
+                  	self visit: anObject.
+                  	stream nextPutAll: '()) {}})()'.
+                	inlined := true]].
+
+	(aSelector = 'whileFalse') ifTrue: [
+          	anObject isBlockNode ifTrue: [
+                	stream nextPutAll: '(function(){while(!!'.
+                  	self visit: anObject.
+                  	stream nextPutAll: '()) {}})()'.
+                	inlined := true]].
+
+	"-- Numbers --"
+
+	(aSelector = '+') ifTrue: [
+          	(self isNode: anObject ofClass: Number) ifTrue: [
+                  	self visit: anObject.
+                  	stream nextPutAll: ' + '.
+                	self visit: aCollection first.
+                	inlined := true]].
+
+	(aSelector = '-') ifTrue: [
+          	(self isNode: anObject ofClass: Number) ifTrue: [
+                  	self visit: anObject.
+                  	stream nextPutAll: ' - '.
+                	self visit: aCollection first.
+                	inlined := true]].
+
+	(aSelector = '*') ifTrue: [
+          	(self isNode: anObject ofClass: Number) ifTrue: [
+                  	self visit: anObject.
+                  	stream nextPutAll: ' * '.
+                	self visit: aCollection first.
+                	inlined := true]].
+
+	(aSelector = '/') ifTrue: [
+          	(self isNode: anObject ofClass: Number) ifTrue: [
+                  	self visit: anObject.
+                  	stream nextPutAll: ' / '.
+                	self visit: aCollection first.
+                	inlined := true]].
+
+	(aSelector = '<') ifTrue: [
+          	(self isNode: anObject ofClass: Number) ifTrue: [
+                  	self visit: anObject.
+                  	stream nextPutAll: ' < '.
+                	self visit: aCollection first.
+                	inlined := true]].
+
+	(aSelector = '<=') ifTrue: [
+          	(self isNode: anObject ofClass: Number) ifTrue: [
+                  	self visit: anObject.
+                  	stream nextPutAll: ' <= '.
+                	self visit: aCollection first.
+                	inlined := true]].
+
+	(aSelector = '=') ifTrue: [
+          	(self isNode: anObject ofClass: Number) ifTrue: [
+                  	self visit: anObject.
+                  	stream nextPutAll: ' = '.
+                	self visit: aCollection first.
+                	inlined := true]].
+
+	(aSelector = '>') ifTrue: [
+          	(self isNode: anObject ofClass: Number) ifTrue: [
+                  	self visit: anObject.
+                  	stream nextPutAll: ' > '.
+                	self visit: aCollection first.
+                	inlined := true]].
+
+	(aSelector = '>=') ifTrue: [
+          	(self isNode: anObject ofClass: Number) ifTrue: [
+                  	self visit: anObject.
+                  	stream nextPutAll: ' >= '.
+                	self visit: aCollection first.
+                	inlined := true]].
+                	   
+	"-- UndefinedObject --"
+
+	(aSelector = 'ifNil:') ifTrue: [
+		aCollection first isBlockNode ifTrue: [
+          		stream nextPutAll: '(($receiver = '.
+          		self visit: anObject.
+          		stream nextPutAll: ') == nil || $receiver == undefined) ? '.
+                  	self visit: aCollection first.
+                  	stream nextPutAll: '() : $receiver'.
+                  	inlined := true]].
+
+	(aSelector = 'ifNotNil:') ifTrue: [
+		aCollection first isBlockNode ifTrue: [
+          		stream nextPutAll: '(($receiver = '.
+          		self visit: anObject.
+          		stream nextPutAll: ') !!= nil && $receiver !!= undefined) ? '.
+                  	self visit: aCollection first.
+                  	stream nextPutAll: '() : nil'.
+                  	inlined := true]].
+
+	(aSelector = 'ifNil:ifNotNil:') ifTrue: [
+		(aCollection first isBlockNode and: [aCollection second isBlockNode]) ifTrue: [
+          		stream nextPutAll: '(($receiver = '.
+          		self visit: anObject.
+          		stream nextPutAll: ') == nil || $receiver == undefined) ? '.
+                  	self visit: aCollection first.
+                  	stream nextPutAll: '() : '.
+                  	self visit: aCollection second.
+                  	stream nextPutAll: '()'.
+                  	inlined := true]].
+
+	(aSelector = 'ifNotNil:ifNil:') ifTrue: [
+		(aCollection first isBlockNode and: [aCollection second isBlockNode]) ifTrue: [
+          		stream nextPutAll: '(($receiver = '.
+          		self visit: anObject.
+          		stream nextPutAll: ') == nil || $receiver == undefined) ? '.
+                  	self visit: aCollection second.
+                  	stream nextPutAll: '() : '.
+                  	self visit: aCollection first.
+                  	stream nextPutAll: '()'.
+                  	inlined := true]].
+                 
+        ^inlined
+!
+
+isNode: aNode ofClass: aClass
+	^aNode isValueNode and: [
+          	aNode value class = aClass or: [
+          		aNode value = 'self' and: [self currentClass = aClass]]]
+!
+
+inline: aSelector receiver: receiver argumentNodes: aCollection
+        | inlined |
+        inlined := false.
+
+	"-- Booleans --"
+
+	(aSelector = 'ifFalse:') ifTrue: [
+		aCollection first isBlockNode ifTrue: [
+                	self checkClass: 'Boolean' for: receiver.
+                	stream nextPutAll: '(!! $receiver ? '.
+                	self visit: aCollection first.
+          		stream nextPutAll: '() : nil)'.
+                	inlined := true]].
+
+	(aSelector = 'ifTrue:') ifTrue: [
+		aCollection first isBlockNode ifTrue: [
+                	self checkClass: 'Boolean' for: receiver.
+                	stream nextPutAll: '($receiver ? '.
+                	self visit: aCollection first.
+          		stream nextPutAll: '() : nil)'.
+                	inlined := true]].
+
+	(aSelector = 'ifTrue:ifFalse:') ifTrue: [
+		(aCollection first isBlockNode and: [aCollection second isBlockNode]) ifTrue: [
+                	self checkClass: 'Boolean' for: receiver.
+                	stream nextPutAll: '($receiver ? '.
+                	self visit: aCollection first.
+          		stream nextPutAll: '() : '.
+          		self visit: aCollection second.
+          		stream nextPutAll: '())'.
+                	inlined := true]].
+
+	(aSelector = 'ifFalse:ifTrue:') ifTrue: [
+		(aCollection first isBlockNode and: [aCollection second isBlockNode]) ifTrue: [
+                	self checkClass: 'Boolean' for: receiver.
+                	stream nextPutAll: '(!! $receiver ? '.
+                	self visit: aCollection first.
+          		stream nextPutAll: '() : '.
+          		self visit: aCollection second.
+          		stream nextPutAll: '())'.
+                	inlined := true]].
+
+	"-- Numbers --"
+
+	(aSelector = '<') ifTrue: [
+                self checkClass: 'Number' for: receiver.
+                stream nextPutAll: '$receiver <'.
+                self visit: aCollection first.
+                inlined := true].
+
+	(aSelector = '<=') ifTrue: [
+                self checkClass: 'Number' for: receiver.
+                stream nextPutAll: '$receiver <='.
+                self visit: aCollection first.
+                inlined := true].
+
+	(aSelector = '=') ifTrue: [
+                self checkClass: 'Number' for: receiver.
+                stream nextPutAll: '$receiver =='.
+                self visit: aCollection first.
+                inlined := true].
+
+	(aSelector = '>') ifTrue: [
+                self checkClass: 'Number' for: receiver.
+                stream nextPutAll: '$receiver >'.
+                self visit: aCollection first.
+                inlined := true].
+
+	(aSelector = '>=') ifTrue: [
+                self checkClass: 'Number' for: receiver.
+                stream nextPutAll: '$receiver >='.
+                self visit: aCollection first.
+                inlined := true].
+
+        (aSelector = '+') ifTrue: [
+                self checkClass: 'Number' for: receiver.
+                stream nextPutAll: '$receiver +'.
+                self visit: aCollection first.
+                inlined := true].
+
+        (aSelector = '-') ifTrue: [
+                self checkClass: 'Number' for: receiver.
+                stream nextPutAll: '$receiver -'.
+                self visit: aCollection first.
+                inlined := true].
+
+        (aSelector = '*') ifTrue: [
+                self checkClass: 'Number' for: receiver.
+                stream nextPutAll: '$receiver *'.
+                self visit: aCollection first.
+                inlined := true].
+
+        (aSelector = '/') ifTrue: [
+                self checkClass: 'Number' for: receiver.
+                stream nextPutAll: '$receiver /'.
+                self visit: aCollection first.
+                inlined := true].
+
+        ^inlined
+! !
+
+!Compiler methodsFor: 'testing'!
+
+performOptimizations
+	^self class performOptimizations
+! !
+
 !Compiler methodsFor: 'visiting'!
 
 visit: aNode
@@ -593,25 +900,23 @@ visitReturnNode: aNode
 !
 
 visitSendNode: aNode
-	| str receiver superSend |
-	str := stream.
-	(messageSends includes: aNode selector) ifFalse: [
-		messageSends add: aNode selector].
-	stream := '' writeStream.
-	self visit: aNode receiver.
-	superSend := stream contents = 'super'.
-	receiver := superSend ifTrue: ['self'] ifFalse: [stream contents].
-	str nextPutAll: 'smalltalk.send('.
-	str nextPutAll: receiver.
-	stream := str.
-	stream nextPutAll: ', "', aNode selector asSelector, '", ['.
-	aNode arguments 
-	    do: [:each | self visit: each]
-	    separatedBy: [stream nextPutAll: ', '].
-	stream nextPutAll: ']'.
-	superSend ifTrue: [
-		stream nextPutAll: ', smalltalk.', (self classNameFor: self currentClass superclass)].
-	stream nextPutAll: ')'
+        | str receiver superSend inlined |
+        str := stream.
+        (messageSends includes: aNode selector) ifFalse: [
+                messageSends add: aNode selector].
+        stream := '' writeStream.
+        self visit: aNode receiver.
+        superSend := stream contents = 'super'.
+        receiver := superSend ifTrue: ['self'] ifFalse: [stream contents].
+        stream := str.
+	
+	self performOptimizations 
+		ifTrue: [
+			(self inlineLiteral: aNode selector receiverNode: aNode receiver argumentNodes: aNode arguments) ifFalse: [
+				(self inline: aNode selector receiver: receiver argumentNodes: aNode arguments)
+                			ifTrue: [stream nextPutAll: ' : ', (self send: aNode selector to: '$receiver' arguments: aNode arguments superSend: superSend)]
+                			ifFalse: [stream nextPutAll: (self send: aNode selector to: receiver arguments: aNode arguments superSend: superSend)]]]
+		ifFalse: [stream nextPutAll: (self send: aNode selector to: receiver arguments: aNode arguments superSend: superSend)]
 !
 
 visitCascadeNode: aNode
@@ -666,6 +971,35 @@ visitJSStatementNode: aNode
 
 visitFailure: aFailure
 	self error: aFailure asString
+!
+
+send: aSelector to: aReceiver arguments: aCollection superSend: aBoolean
+	^String streamContents: [:str || tmp |
+        	tmp := stream.
+		str nextPutAll: 'smalltalk.send('.
+		str nextPutAll: aReceiver.
+		str nextPutAll: ', "', aSelector asSelector, '", ['.
+                stream := str.
+		aCollection
+	    		do: [:each | self visit: each]
+	    		separatedBy: [stream nextPutAll: ', '].
+                stream := tmp.
+                str nextPutAll: ']'.
+		aBoolean ifTrue: [
+			str nextPutAll: ', smalltalk.', (self classNameFor: self currentClass superclass)].
+		str nextPutAll: ')']
+! !
+
+Compiler class instanceVariableNames: 'performOptimizations'!
+
+!Compiler class methodsFor: 'accessing'!
+
+performOptimizations
+	^performOptimizations ifNil: [true]
+!
+
+performOptimizations: aBoolean
+	performOptimizations := aBoolean
 ! !
 
 !Compiler class methodsFor: 'compiling'!
@@ -689,6 +1023,6 @@ Object subclass: #DoIt
 
 !DoIt methodsFor: ''!
 
-doIt ^[StrippedExporter new exportCategory: 'IDE'] value
+doIt ^[Compiler performOptimizations: false.] value
 ! !
 

+ 1 - 2
st/IDE.st

@@ -1384,8 +1384,7 @@ print: aString
 	stop at: 'ch' put: ((start at: 'ch') + aString size + 2).
 	editor replaceSelection: (editor getSelection, ' ', aString, ' ').
 	editor setCursor: (editor getCursor: true).
-	editor setSelection: stop end: start.
-	console log: start; log: stop
+	editor setSelection: stop end: start
 !
 
 printIt

+ 43 - 0
st/Kernel.st

@@ -180,18 +180,22 @@ isMemberOf: aClass
 !
 
 ifNil: aBlock
+	"inlined in the Compiler"
 	^self
 !
 
 ifNil: aBlock ifNotNil: anotherBlock
+	"inlined in the Compiler"
 	^anotherBlock value
 !
 
 ifNotNil: aBlock
+	"inlined in the Compiler"
 	^aBlock value
 !
 
 ifNotNil: aBlock ifNil: anotherBlock
+	"inlined in the Compiler"
 	^aBlock value
 !
 
@@ -534,18 +538,22 @@ Object subclass: #Number
 !Number methodsFor: 'arithmetic'!
 
 + aNumber
+	"Inlined in the Compiler"
 	<return self + aNumber>
 !
 
 - aNumber
+	"Inlined in the Compiler"
 	<return self - aNumber>
 !
 
 * aNumber
+	"Inlined in the Compiler"
 	<return self * aNumber>
 !
 
 / aNumber
+	"Inlined in the Compiler"
 	<return self / aNumber>
 !
 
@@ -564,22 +572,27 @@ modulo: aNumber
 !Number methodsFor: 'comparing'!
 
 = aNumber
+	"Inlined in the Compiler"
 	<return Number(self) == aNumber>
 !
 
 > aNumber
+	"Inlined in the Compiler"
 	<return self >> aNumber>
 !
 
 < aNumber
+	"Inlined in the Compiler"
 	<return self < aNumber>
 !
 
 >= aNumber
+	"Inlined in the Compiler"
 	<return self >>= aNumber>
 !
 
 <= aNumber
+	"Inlined in the Compiler"
 	<return self <= aNumber>
 ! !
 
@@ -695,11 +708,23 @@ compiledSource
 !BlockClosure methodsFor: 'controlling'!
 
 whileTrue: aBlock
+	"inlined in the Compiler"
 	<while(self()) {aBlock()}>
 !
 
 whileFalse: aBlock
+	"inlined in the Compiler"
 	<while(!!self()) {aBlock()}>
+!
+
+whileFalse
+	"inlined in the Compiler"
+	self whileFalse: []
+!
+
+whileTrue
+	"inlined in the Compiler"
+	self whileTrue: []
 ! !
 
 !BlockClosure methodsFor: 'error handling'!
@@ -714,23 +739,33 @@ on: anErrorClass do: aBlock
 !BlockClosure methodsFor: 'evaluating'!
 
 value
+	"inlined in the Compiler"
 	<return self();>
 !
 
 value: anArg
+	"inlined in the Compiler"
 	<return self(anArg);>
 !
 
 value: firstArg value: secondArg
+	"inlined in the Compiler"
 	<return self(firstArg, secondArg);>
 !
 
 value: firstArg value: secondArg value: thirdArg
+	"inlined in the Compiler"
 	<return self(firstArg, secondArg, thirdArg);>
 !
 
 valueWithPossibleArguments: aCollection
 	<return self.apply(null, aCollection);>
+!
+
+new
+	"Use the receiver as a JS constructor. 
+	*Do not* use this method to instanciate Smalltalk objects!!"
+	<return new self()>
 ! !
 
 !BlockClosure methodsFor: 'printing'!
@@ -773,18 +808,22 @@ asJSONObject
 !Boolean methodsFor: 'controlling'!
 
 ifTrue: aBlock
+	"inlined in the Compiler"
 	^self ifTrue: aBlock ifFalse: []
 !
 
 ifFalse: aBlock
+	"inlined in the Compiler"
 	^self ifTrue: [] ifFalse: aBlock
 !
 
 ifFalse: aBlock ifTrue: anotherBlock
+	"inlined in the Compiler"
 	^self ifTrue: anotherBlock ifFalse: aBlock
 !
 
 ifTrue: aBlock ifFalse: anotherBlock
+	"inlined in the Compiler"
 	<
 	    if(self == true) {
 		return aBlock();
@@ -1046,18 +1085,22 @@ printString
 !UndefinedObject methodsFor: 'testing'!
 
 ifNil: aBlock
+	"inlined in the Compiler"
 	^self ifNil: aBlock ifNotNil: []
 !
 
 ifNotNil: aBlock
+	"inlined in the Compiler"
 	^self
 !
 
 ifNil: aBlock ifNotNil: anotherBlock
+	"inlined in the Compiler"
 	^aBlock value
 !
 
 ifNotNil: aBlock ifNil: anotherBlock
+	"inlined in the Compiler"
 	^anotherBlock value
 !
 

+ 0 - 1
st/Parser.st

@@ -988,7 +988,6 @@ exportMethod: aMethod of: aClass on: aStream
 		nextPutAll: 'smalltalk.method({';lf;
 		nextPutAll: 'selector: ''', aMethod selector, ''',';lf;
 		nextPutAll: 'fn: ', aMethod fn compiledSource;lf;
-		nextPutAll: ']';lf;
 		nextPutAll: '}),';lf;
 		nextPutAll: 'smalltalk.', (self classNameFor: aClass);
 		nextPutAll: ');';lf;lf

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini