浏览代码

- fix the parser for '\\' selectors
- improvements the new compiler for contexts
- all files js recompiled

Nicolas Petton 12 年之前
父节点
当前提交
5921e6bb67
共有 52 个文件被更改,包括 6579 次插入6461 次删除
  1. 93 93
      js/Benchfib.deploy.js
  2. 93 93
      js/Benchfib.js
  3. 112 112
      js/Canvas.deploy.js
  4. 112 112
      js/Canvas.js
  5. 95 95
      js/Compiler-AST.deploy.js
  6. 95 95
      js/Compiler-AST.js
  7. 78 78
      js/Compiler-Core.deploy.js
  8. 78 78
      js/Compiler-Core.js
  9. 8 8
      js/Compiler-Exceptions.deploy.js
  10. 8 8
      js/Compiler-Exceptions.js
  11. 168 167
      js/Compiler-IR.deploy.js
  12. 168 167
      js/Compiler-IR.js
  13. 191 191
      js/Compiler-Inlining.deploy.js
  14. 191 191
      js/Compiler-Inlining.js
  15. 67 56
      js/Compiler-Interpreter.deploy.js
  16. 85 69
      js/Compiler-Interpreter.js
  17. 140 133
      js/Compiler-Semantic.deploy.js
  18. 145 138
      js/Compiler-Semantic.js
  19. 149 149
      js/Compiler-Tests.deploy.js
  20. 149 149
      js/Compiler-Tests.js
  21. 13 13
      js/Examples.deploy.js
  22. 13 13
      js/Examples.js
  23. 363 340
      js/IDE.deploy.js
  24. 363 340
      js/IDE.js
  25. 167 167
      js/Importer-Exporter.deploy.js
  26. 167 167
      js/Importer-Exporter.js
  27. 17 17
      js/Kernel-Announcements.deploy.js
  28. 17 17
      js/Kernel-Announcements.js
  29. 152 152
      js/Kernel-Classes.deploy.js
  30. 152 152
      js/Kernel-Classes.js
  31. 195 195
      js/Kernel-Collections.deploy.js
  32. 195 195
      js/Kernel-Collections.js
  33. 25 25
      js/Kernel-Exceptions.deploy.js
  34. 25 25
      js/Kernel-Exceptions.js
  35. 317 301
      js/Kernel-Methods.deploy.js
  36. 320 299
      js/Kernel-Methods.js
  37. 319 322
      js/Kernel-Objects.deploy.js
  38. 319 322
      js/Kernel-Objects.js
  39. 336 336
      js/Kernel-Tests.deploy.js
  40. 336 336
      js/Kernel-Tests.js
  41. 12 12
      js/Kernel-Transcript.deploy.js
  42. 12 12
      js/Kernel-Transcript.js
  43. 234 235
      js/SUnit.deploy.js
  44. 234 235
      js/SUnit.js
  45. 1 1
      js/parser.js
  46. 1 1
      js/parser.pegjs
  47. 2 22
      st/Compiler-IR.st
  48. 25 17
      st/Compiler-Interpreter.st
  49. 16 4
      st/Compiler-Semantic.st
  50. 1 1
      st/IDE.st
  51. 1 5
      st/Kernel-Methods.st
  52. 4 0
      st/Kernel-Objects.st

+ 93 - 93
js/Benchfib.deploy.js

@@ -7,9 +7,9 @@ smalltalk.method({
 selector: "main",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var result;
-result=_st((0))._tinyBenchmarks();
-_st(console)._log_(_st("0 tinyBenchmarks => ").__comma(result));
+return smalltalk.withContext(function($ctx1) { 
$ctx1.result=nil;
+$ctx1.locals.result=_st((0))._tinyBenchmarks();
+_st(console)._log_(_st("0 tinyBenchmarks => ").__comma($ctx1.locals.result));
 return self}, self, "main", [], smalltalk.Benchfib.klass)}
 }),
 smalltalk.Benchfib.klass);
@@ -21,7 +21,7 @@ smalltalk.method({
 selector: "benchFib",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$1;
 $2=_st(self).__lt((2));
 if(smalltalk.assert($2)){
 $1=(1);
@@ -39,41 +39,41 @@ smalltalk.method({
 selector: "benchmark",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var size;
-var flags;
-var prime;
-var k;
-var count;
-size=(8190);
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.size=nil;
+$ctx1.flags=nil;
+$ctx1.prime=nil;
+$ctx1.k=nil;
+$ctx1.count=nil;
+$ctx1.locals.size=(8190);
 _st((1))._to_do_(self,(function(iter){
-count=(0);
-count;
-flags=_st((smalltalk.Array || Array))._new();
-flags;
-_st(size)._timesRepeat_((function(){
-return _st(flags)._add_(true);
-}));
-return _st((1))._to_do_(size,(function(i){
-$1=_st(flags)._at_(i);
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.count=(0);
+$ctx1.locals.count;
+$ctx1.locals.flags=_st((smalltalk.Array || Array))._new();
+$ctx1.locals.flags;
+_st($ctx1.locals.size)._timesRepeat_((function(){
+return smalltalk.withContext(function($ctx3) { 
return _st($ctx1.locals.flags)._add_(true);
+})}));
+return _st((1))._to_do_($ctx1.locals.size,(function(i){
+return smalltalk.withContext(function($ctx3) { 
$1=_st($ctx1.locals.flags)._at_(i);
 if(smalltalk.assert($1)){
-prime=_st(i).__plus((1));
-prime;
-k=_st(i).__plus(prime);
-k;
+$ctx1.locals.prime=_st(i).__plus((1));
+$ctx1.locals.prime;
+$ctx1.locals.k=_st(i).__plus($ctx1.locals.prime);
+$ctx1.locals.k;
 _st((function(){
-return _st(k).__lt_eq(size);
-}))._whileTrue_((function(){
-_st(flags)._at_put_(k,false);
-k=_st(k).__plus(prime);
-return k;
-}));
-count=_st(count).__plus((1));
-return count;
+return smalltalk.withContext(function($ctx4) { 
return _st($ctx1.locals.k).__lt_eq($ctx1.locals.size);
+})}))._whileTrue_((function(){
+return smalltalk.withContext(function($ctx4) { 
_st($ctx1.locals.flags)._at_put_($ctx1.locals.k,false);
+$ctx1.locals.k=_st($ctx1.locals.k).__plus($ctx1.locals.prime);
+return $ctx1.locals.k;
+})}));
+$ctx1.locals.count=_st($ctx1.locals.count).__plus((1));
+return $ctx1.locals.count;
 };
-}));
-}));
-return count;
+})}));
+})}));
+return $ctx1.locals.count;
 }, self, "benchmark", [], smalltalk.Number)}
 }),
 smalltalk.Number);
@@ -84,7 +84,7 @@ smalltalk.method({
 selector: "jsbenchFib",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { if (this < 2) {
+return smalltalk.withContext(function($ctx1) { 
if (this < 2) {
 return 1;
 } else {
 return (this-1)._jsbenchFib() + (this-2)._jsbenchFib() + 1;};
@@ -99,7 +99,7 @@ smalltalk.method({
 selector: "jsbenchmark",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { 
+return smalltalk.withContext(function($ctx1) { 
 var size = 8190;
 var count;
 for (var z=0;z<this;z++) {
@@ -132,36 +132,36 @@ smalltalk.method({
 selector: "jstinyBenchmarks",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var t1;
-var t2;
-var r;
-var n1;
-var n2;
-n1=(1);
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.t1=nil;
+$ctx1.t2=nil;
+$ctx1.r=nil;
+$ctx1.n1=nil;
+$ctx1.n2=nil;
+$ctx1.locals.n1=(1);
 _st((function(){
-t1=_st((smalltalk.Date || Date))._millisecondsToRun_((function(){
-return _st(n1)._jsbenchmark();
-}));
-t1;
-return _st(t1).__lt((1000));
-}))._whileTrue_((function(){
-n1=_st(n1).__star((2));
-return n1;
-}));
-n2=(28);
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.t1=_st((smalltalk.Date || Date))._millisecondsToRun_((function(){
+return smalltalk.withContext(function($ctx3) { 
return _st($ctx1.locals.n1)._jsbenchmark();
+})}));
+$ctx1.locals.t1;
+return _st($ctx1.locals.t1).__lt((1000));
+})}))._whileTrue_((function(){
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.n1=_st($ctx1.locals.n1).__star((2));
+return $ctx1.locals.n1;
+})}));
+$ctx1.locals.n2=(28);
 _st((function(){
-t2=_st((smalltalk.Date || Date))._millisecondsToRun_((function(){
-r=_st(n2)._jsbenchFib();
-return r;
-}));
-t2;
-return _st(t2).__lt((1000));
-}))._whileTrue_((function(){
-n2=_st(n2).__plus((1));
-return n2;
-}));
-$1=_st(_st(_st(_st(_st(_st(_st(n1).__star((500000))).__star((1000))).__slash(t1))._printString()).__comma(" bytecodes/sec; ")).__comma(_st(_st(_st(r).__star((1000))).__slash(t2))._printString())).__comma(" sends/sec");
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.t2=_st((smalltalk.Date || Date))._millisecondsToRun_((function(){
+return smalltalk.withContext(function($ctx3) { 
$ctx1.locals.r=_st($ctx1.locals.n2)._jsbenchFib();
+return $ctx1.locals.r;
+})}));
+$ctx1.locals.t2;
+return _st($ctx1.locals.t2).__lt((1000));
+})}))._whileTrue_((function(){
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.n2=_st($ctx1.locals.n2).__plus((1));
+return $ctx1.locals.n2;
+})}));
+$1=_st(_st(_st(_st(_st(_st(_st($ctx1.locals.n1).__star((500000))).__star((1000))).__slash($ctx1.locals.t1))._printString()).__comma(" bytecodes/sec; ")).__comma(_st(_st(_st($ctx1.locals.r).__star((1000))).__slash($ctx1.locals.t2))._printString())).__comma(" sends/sec");
 return $1;
 }, self, "jstinyBenchmarks", [], smalltalk.Number)}
 }),
@@ -173,36 +173,36 @@ smalltalk.method({
 selector: "tinyBenchmarks",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var t1;
-var t2;
-var r;
-var n1;
-var n2;
-n1=(1);
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.t1=nil;
+$ctx1.t2=nil;
+$ctx1.r=nil;
+$ctx1.n1=nil;
+$ctx1.n2=nil;
+$ctx1.locals.n1=(1);
 _st((function(){
-t1=_st((smalltalk.Date || Date))._millisecondsToRun_((function(){
-return _st(n1)._benchmark();
-}));
-t1;
-return _st(t1).__lt((1000));
-}))._whileTrue_((function(){
-n1=_st(n1).__star((2));
-return n1;
-}));
-n2=(16);
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.t1=_st((smalltalk.Date || Date))._millisecondsToRun_((function(){
+return smalltalk.withContext(function($ctx3) { 
return _st($ctx1.locals.n1)._benchmark();
+})}));
+$ctx1.locals.t1;
+return _st($ctx1.locals.t1).__lt((1000));
+})}))._whileTrue_((function(){
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.n1=_st($ctx1.locals.n1).__star((2));
+return $ctx1.locals.n1;
+})}));
+$ctx1.locals.n2=(16);
 _st((function(){
-t2=_st((smalltalk.Date || Date))._millisecondsToRun_((function(){
-r=_st(n2)._benchFib();
-return r;
-}));
-t2;
-return _st(t2).__lt((1000));
-}))._whileTrue_((function(){
-n2=_st(n2).__plus((1));
-return n2;
-}));
-$1=_st(_st(_st(_st(_st(_st(_st(n1).__star((500000))).__star((1000))).__slash(t1))._printString()).__comma(" bytecodes/sec; ")).__comma(_st(_st(_st(r).__star((1000))).__slash(t2))._printString())).__comma(" sends/sec");
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.t2=_st((smalltalk.Date || Date))._millisecondsToRun_((function(){
+return smalltalk.withContext(function($ctx3) { 
$ctx1.locals.r=_st($ctx1.locals.n2)._benchFib();
+return $ctx1.locals.r;
+})}));
+$ctx1.locals.t2;
+return _st($ctx1.locals.t2).__lt((1000));
+})}))._whileTrue_((function(){
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.n2=_st($ctx1.locals.n2).__plus((1));
+return $ctx1.locals.n2;
+})}));
+$1=_st(_st(_st(_st(_st(_st(_st($ctx1.locals.n1).__star((500000))).__star((1000))).__slash($ctx1.locals.t1))._printString()).__comma(" bytecodes/sec; ")).__comma(_st(_st(_st($ctx1.locals.r).__star((1000))).__slash($ctx1.locals.t2))._printString())).__comma(" sends/sec");
 return $1;
 }, self, "tinyBenchmarks", [], smalltalk.Number)}
 }),

+ 93 - 93
js/Benchfib.js

@@ -8,9 +8,9 @@ selector: "main",
 category: 'not yet classified',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var result;
-result=_st((0))._tinyBenchmarks();
-_st(console)._log_(_st("0 tinyBenchmarks => ").__comma(result));
+return smalltalk.withContext(function($ctx1) { 
$ctx1.result=nil;
+$ctx1.locals.result=_st((0))._tinyBenchmarks();
+_st(console)._log_(_st("0 tinyBenchmarks => ").__comma($ctx1.locals.result));
 return self}, self, "main", [], smalltalk.Benchfib.klass)},
 args: [],
 source: "main\x0a\x0a\x09| result |\x0a\x09result := 0 tinyBenchmarks.\x0a\x09console log: '0 tinyBenchmarks => ' , result",
@@ -27,7 +27,7 @@ selector: "benchFib",
 category: '*Benchfib',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$1;
 $2=_st(self).__lt((2));
 if(smalltalk.assert($2)){
 $1=(1);
@@ -50,41 +50,41 @@ selector: "benchmark",
 category: '*Benchfib',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var size;
-var flags;
-var prime;
-var k;
-var count;
-size=(8190);
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.size=nil;
+$ctx1.flags=nil;
+$ctx1.prime=nil;
+$ctx1.k=nil;
+$ctx1.count=nil;
+$ctx1.locals.size=(8190);
 _st((1))._to_do_(self,(function(iter){
-count=(0);
-count;
-flags=_st((smalltalk.Array || Array))._new();
-flags;
-_st(size)._timesRepeat_((function(){
-return _st(flags)._add_(true);
-}));
-return _st((1))._to_do_(size,(function(i){
-$1=_st(flags)._at_(i);
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.count=(0);
+$ctx1.locals.count;
+$ctx1.locals.flags=_st((smalltalk.Array || Array))._new();
+$ctx1.locals.flags;
+_st($ctx1.locals.size)._timesRepeat_((function(){
+return smalltalk.withContext(function($ctx3) { 
return _st($ctx1.locals.flags)._add_(true);
+})}));
+return _st((1))._to_do_($ctx1.locals.size,(function(i){
+return smalltalk.withContext(function($ctx3) { 
$1=_st($ctx1.locals.flags)._at_(i);
 if(smalltalk.assert($1)){
-prime=_st(i).__plus((1));
-prime;
-k=_st(i).__plus(prime);
-k;
+$ctx1.locals.prime=_st(i).__plus((1));
+$ctx1.locals.prime;
+$ctx1.locals.k=_st(i).__plus($ctx1.locals.prime);
+$ctx1.locals.k;
 _st((function(){
-return _st(k).__lt_eq(size);
-}))._whileTrue_((function(){
-_st(flags)._at_put_(k,false);
-k=_st(k).__plus(prime);
-return k;
-}));
-count=_st(count).__plus((1));
-return count;
+return smalltalk.withContext(function($ctx4) { 
return _st($ctx1.locals.k).__lt_eq($ctx1.locals.size);
+})}))._whileTrue_((function(){
+return smalltalk.withContext(function($ctx4) { 
_st($ctx1.locals.flags)._at_put_($ctx1.locals.k,false);
+$ctx1.locals.k=_st($ctx1.locals.k).__plus($ctx1.locals.prime);
+return $ctx1.locals.k;
+})}));
+$ctx1.locals.count=_st($ctx1.locals.count).__plus((1));
+return $ctx1.locals.count;
 };
-}));
-}));
-return count;
+})}));
+})}));
+return $ctx1.locals.count;
 }, self, "benchmark", [], smalltalk.Number)},
 args: [],
 source: "benchmark \x0a\x09\x22Handy bytecode-heavy benchmark\x22\x0a\x09\x22(500000 // time to run) = approx bytecodes per second\x22\x0a\x09\x225000000 // (Time millisecondsToRun: [10 benchmark]) * 1000\x22\x0a\x09\x223059000 on a Mac 8100/100\x22\x0a    | size flags prime k count |\x0a    size := 8190.\x0a    1 to: self do:\x0a        [:iter |\x0a        count := 0.\x0a        flags := Array new.\x0a        size timesRepeat: [ flags add: true].\x0a        1 to: size do:\x0a            [:i | (flags at: i) ifTrue:\x0a                [prime := i+1.\x0a                k := i + prime.\x0a                [k <= size] whileTrue:\x0a                    [flags at: k put: false.\x0a                    k := k + prime].\x0a                count := count + 1]]].\x0a    ^ count",
@@ -100,7 +100,7 @@ selector: "jsbenchFib",
 category: '*Benchfib',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { if (this < 2) {
+return smalltalk.withContext(function($ctx1) { 
if (this < 2) {
 return 1;
 } else {
 return (this-1)._jsbenchFib() + (this-2)._jsbenchFib() + 1;};
@@ -120,7 +120,7 @@ selector: "jsbenchmark",
 category: '*Benchfib',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { 
+return smalltalk.withContext(function($ctx1) { 
 var size = 8190;
 var count;
 for (var z=0;z<this;z++) {
@@ -158,36 +158,36 @@ selector: "jstinyBenchmarks",
 category: '*Benchfib',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var t1;
-var t2;
-var r;
-var n1;
-var n2;
-n1=(1);
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.t1=nil;
+$ctx1.t2=nil;
+$ctx1.r=nil;
+$ctx1.n1=nil;
+$ctx1.n2=nil;
+$ctx1.locals.n1=(1);
 _st((function(){
-t1=_st((smalltalk.Date || Date))._millisecondsToRun_((function(){
-return _st(n1)._jsbenchmark();
-}));
-t1;
-return _st(t1).__lt((1000));
-}))._whileTrue_((function(){
-n1=_st(n1).__star((2));
-return n1;
-}));
-n2=(28);
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.t1=_st((smalltalk.Date || Date))._millisecondsToRun_((function(){
+return smalltalk.withContext(function($ctx3) { 
return _st($ctx1.locals.n1)._jsbenchmark();
+})}));
+$ctx1.locals.t1;
+return _st($ctx1.locals.t1).__lt((1000));
+})}))._whileTrue_((function(){
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.n1=_st($ctx1.locals.n1).__star((2));
+return $ctx1.locals.n1;
+})}));
+$ctx1.locals.n2=(28);
 _st((function(){
-t2=_st((smalltalk.Date || Date))._millisecondsToRun_((function(){
-r=_st(n2)._jsbenchFib();
-return r;
-}));
-t2;
-return _st(t2).__lt((1000));
-}))._whileTrue_((function(){
-n2=_st(n2).__plus((1));
-return n2;
-}));
-$1=_st(_st(_st(_st(_st(_st(_st(n1).__star((500000))).__star((1000))).__slash(t1))._printString()).__comma(" bytecodes/sec; ")).__comma(_st(_st(_st(r).__star((1000))).__slash(t2))._printString())).__comma(" sends/sec");
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.t2=_st((smalltalk.Date || Date))._millisecondsToRun_((function(){
+return smalltalk.withContext(function($ctx3) { 
$ctx1.locals.r=_st($ctx1.locals.n2)._jsbenchFib();
+return $ctx1.locals.r;
+})}));
+$ctx1.locals.t2;
+return _st($ctx1.locals.t2).__lt((1000));
+})}))._whileTrue_((function(){
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.n2=_st($ctx1.locals.n2).__plus((1));
+return $ctx1.locals.n2;
+})}));
+$1=_st(_st(_st(_st(_st(_st(_st($ctx1.locals.n1).__star((500000))).__star((1000))).__slash($ctx1.locals.t1))._printString()).__comma(" bytecodes/sec; ")).__comma(_st(_st(_st($ctx1.locals.r).__star((1000))).__slash($ctx1.locals.t2))._printString())).__comma(" sends/sec");
 return $1;
 }, self, "jstinyBenchmarks", [], smalltalk.Number)},
 args: [],
@@ -204,36 +204,36 @@ selector: "tinyBenchmarks",
 category: '*Benchfib',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var t1;
-var t2;
-var r;
-var n1;
-var n2;
-n1=(1);
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.t1=nil;
+$ctx1.t2=nil;
+$ctx1.r=nil;
+$ctx1.n1=nil;
+$ctx1.n2=nil;
+$ctx1.locals.n1=(1);
 _st((function(){
-t1=_st((smalltalk.Date || Date))._millisecondsToRun_((function(){
-return _st(n1)._benchmark();
-}));
-t1;
-return _st(t1).__lt((1000));
-}))._whileTrue_((function(){
-n1=_st(n1).__star((2));
-return n1;
-}));
-n2=(16);
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.t1=_st((smalltalk.Date || Date))._millisecondsToRun_((function(){
+return smalltalk.withContext(function($ctx3) { 
return _st($ctx1.locals.n1)._benchmark();
+})}));
+$ctx1.locals.t1;
+return _st($ctx1.locals.t1).__lt((1000));
+})}))._whileTrue_((function(){
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.n1=_st($ctx1.locals.n1).__star((2));
+return $ctx1.locals.n1;
+})}));
+$ctx1.locals.n2=(16);
 _st((function(){
-t2=_st((smalltalk.Date || Date))._millisecondsToRun_((function(){
-r=_st(n2)._benchFib();
-return r;
-}));
-t2;
-return _st(t2).__lt((1000));
-}))._whileTrue_((function(){
-n2=_st(n2).__plus((1));
-return n2;
-}));
-$1=_st(_st(_st(_st(_st(_st(_st(n1).__star((500000))).__star((1000))).__slash(t1))._printString()).__comma(" bytecodes/sec; ")).__comma(_st(_st(_st(r).__star((1000))).__slash(t2))._printString())).__comma(" sends/sec");
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.t2=_st((smalltalk.Date || Date))._millisecondsToRun_((function(){
+return smalltalk.withContext(function($ctx3) { 
$ctx1.locals.r=_st($ctx1.locals.n2)._benchFib();
+return $ctx1.locals.r;
+})}));
+$ctx1.locals.t2;
+return _st($ctx1.locals.t2).__lt((1000));
+})}))._whileTrue_((function(){
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.n2=_st($ctx1.locals.n2).__plus((1));
+return $ctx1.locals.n2;
+})}));
+$1=_st(_st(_st(_st(_st(_st(_st($ctx1.locals.n1).__star((500000))).__star((1000))).__slash($ctx1.locals.t1))._printString()).__comma(" bytecodes/sec; ")).__comma(_st(_st(_st($ctx1.locals.r).__star((1000))).__slash($ctx1.locals.t2))._printString())).__comma(" sends/sec");
 return $1;
 }, self, "tinyBenchmarks", [], smalltalk.Number)},
 args: [],

文件差异内容过多而无法显示
+ 112 - 112
js/Canvas.deploy.js


文件差异内容过多而无法显示
+ 112 - 112
js/Canvas.js


+ 95 - 95
js/Compiler-AST.deploy.js

@@ -6,7 +6,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.Node)}
@@ -19,7 +19,7 @@ smalltalk.method({
 selector: "addNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._nodes())._add_(aNode);
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._nodes())._add_(aNode);
 return self}, self, "addNode:", [aNode], smalltalk.Node)}
 }),
 smalltalk.Node);
@@ -30,7 +30,7 @@ smalltalk.method({
 selector: "isAssignmentNode",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isAssignmentNode", [], smalltalk.Node)}
 }),
 smalltalk.Node);
@@ -41,7 +41,7 @@ smalltalk.method({
 selector: "isBlockNode",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isBlockNode", [], smalltalk.Node)}
 }),
 smalltalk.Node);
@@ -52,7 +52,7 @@ smalltalk.method({
 selector: "isBlockSequenceNode",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isBlockSequenceNode", [], smalltalk.Node)}
 }),
 smalltalk.Node);
@@ -63,7 +63,7 @@ smalltalk.method({
 selector: "isReturnNode",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isReturnNode", [], smalltalk.Node)}
 }),
 smalltalk.Node);
@@ -74,7 +74,7 @@ smalltalk.method({
 selector: "isSendNode",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isSendNode", [], smalltalk.Node)}
 }),
 smalltalk.Node);
@@ -85,7 +85,7 @@ smalltalk.method({
 selector: "isValueNode",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isValueNode", [], smalltalk.Node)}
 }),
 smalltalk.Node);
@@ -96,7 +96,7 @@ smalltalk.method({
 selector: "nodes",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@nodes"]) == nil || $receiver == undefined){
 self["@nodes"]=_st((smalltalk.Array || Array))._new();
 $1=self["@nodes"];
@@ -114,7 +114,7 @@ smalltalk.method({
 selector: "nodes:",
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@nodes"]=aCollection;
+return smalltalk.withContext(function($ctx1) { 
self["@nodes"]=aCollection;
 return self}, self, "nodes:", [aCollection], smalltalk.Node)}
 }),
 smalltalk.Node);
@@ -125,7 +125,7 @@ smalltalk.method({
 selector: "position",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@position"]) == nil || $receiver == undefined){
 self["@position"]=_st((0)).__at((0));
 $1=self["@position"];
@@ -143,7 +143,7 @@ smalltalk.method({
 selector: "position:",
 fn: function (aPosition){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@position"]=aPosition;
+return smalltalk.withContext(function($ctx1) { 
self["@position"]=aPosition;
 return self}, self, "position:", [aPosition], smalltalk.Node)}
 }),
 smalltalk.Node);
@@ -154,7 +154,7 @@ smalltalk.method({
 selector: "shouldBeAliased",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@shouldBeAliased"]) == nil || $receiver == undefined){
 $1=false;
 } else {
@@ -171,7 +171,7 @@ smalltalk.method({
 selector: "shouldBeAliased:",
 fn: function (aBoolean){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@shouldBeAliased"]=aBoolean;
+return smalltalk.withContext(function($ctx1) { 
self["@shouldBeAliased"]=aBoolean;
 return self}, self, "shouldBeAliased:", [aBoolean], smalltalk.Node)}
 }),
 smalltalk.Node);
@@ -182,7 +182,7 @@ smalltalk.method({
 selector: "shouldBeInlined",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@shouldBeInlined"]) == nil || $receiver == undefined){
 $1=false;
 } else {
@@ -199,7 +199,7 @@ smalltalk.method({
 selector: "shouldBeInlined:",
 fn: function (aBoolean){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@shouldBeInlined"]=aBoolean;
+return smalltalk.withContext(function($ctx1) { 
self["@shouldBeInlined"]=aBoolean;
 return self}, self, "shouldBeInlined:", [aBoolean], smalltalk.Node)}
 }),
 smalltalk.Node);
@@ -213,7 +213,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitAssignmentNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.AssignmentNode)}
@@ -226,7 +226,7 @@ smalltalk.method({
 selector: "isAssignmentNode",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isAssignmentNode", [], smalltalk.AssignmentNode)}
 }),
 smalltalk.AssignmentNode);
@@ -237,7 +237,7 @@ smalltalk.method({
 selector: "left",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@left"];
+return smalltalk.withContext(function($ctx1) { 
return self["@left"];
 }, self, "left", [], smalltalk.AssignmentNode)}
 }),
 smalltalk.AssignmentNode);
@@ -248,7 +248,7 @@ smalltalk.method({
 selector: "left:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@left"]=aNode;
+return smalltalk.withContext(function($ctx1) { 
self["@left"]=aNode;
 return self}, self, "left:", [aNode], smalltalk.AssignmentNode)}
 }),
 smalltalk.AssignmentNode);
@@ -259,7 +259,7 @@ smalltalk.method({
 selector: "nodes",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st((smalltalk.Array || Array))._with_with_(_st(self)._left(),_st(self)._right());
 return $1;
 }, self, "nodes", [], smalltalk.AssignmentNode)}
@@ -272,7 +272,7 @@ smalltalk.method({
 selector: "right",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@right"];
+return smalltalk.withContext(function($ctx1) { 
return self["@right"];
 }, self, "right", [], smalltalk.AssignmentNode)}
 }),
 smalltalk.AssignmentNode);
@@ -283,7 +283,7 @@ smalltalk.method({
 selector: "right:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@right"]=aNode;
+return smalltalk.withContext(function($ctx1) { 
self["@right"]=aNode;
 return self}, self, "right:", [aNode], smalltalk.AssignmentNode)}
 }),
 smalltalk.AssignmentNode);
@@ -297,7 +297,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitBlockNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.BlockNode)}
@@ -310,7 +310,7 @@ smalltalk.method({
 selector: "isBlockNode",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isBlockNode", [], smalltalk.BlockNode)}
 }),
 smalltalk.BlockNode);
@@ -321,7 +321,7 @@ smalltalk.method({
 selector: "parameters",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@parameters"]) == nil || $receiver == undefined){
 self["@parameters"]=_st((smalltalk.Array || Array))._new();
 $1=self["@parameters"];
@@ -339,7 +339,7 @@ smalltalk.method({
 selector: "parameters:",
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@parameters"]=aCollection;
+return smalltalk.withContext(function($ctx1) { 
self["@parameters"]=aCollection;
 return self}, self, "parameters:", [aCollection], smalltalk.BlockNode)}
 }),
 smalltalk.BlockNode);
@@ -350,7 +350,7 @@ smalltalk.method({
 selector: "scope",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@scope"];
+return smalltalk.withContext(function($ctx1) { 
return self["@scope"];
 }, self, "scope", [], smalltalk.BlockNode)}
 }),
 smalltalk.BlockNode);
@@ -361,7 +361,7 @@ smalltalk.method({
 selector: "scope:",
 fn: function (aLexicalScope){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@scope"]=aLexicalScope;
+return smalltalk.withContext(function($ctx1) { 
self["@scope"]=aLexicalScope;
 return self}, self, "scope:", [aLexicalScope], smalltalk.BlockNode)}
 }),
 smalltalk.BlockNode);
@@ -375,7 +375,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitCascadeNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.CascadeNode)}
@@ -388,7 +388,7 @@ smalltalk.method({
 selector: "receiver",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@receiver"];
+return smalltalk.withContext(function($ctx1) { 
return self["@receiver"];
 }, self, "receiver", [], smalltalk.CascadeNode)}
 }),
 smalltalk.CascadeNode);
@@ -399,7 +399,7 @@ smalltalk.method({
 selector: "receiver:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@receiver"]=aNode;
+return smalltalk.withContext(function($ctx1) { 
self["@receiver"]=aNode;
 return self}, self, "receiver:", [aNode], smalltalk.CascadeNode)}
 }),
 smalltalk.CascadeNode);
@@ -413,7 +413,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitDynamicArrayNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.DynamicArrayNode)}
@@ -429,7 +429,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitDynamicDictionaryNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.DynamicDictionaryNode)}
@@ -445,7 +445,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitJSStatementNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.JSStatementNode)}
@@ -458,7 +458,7 @@ smalltalk.method({
 selector: "source",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@source"]) == nil || $receiver == undefined){
 $1="";
 } else {
@@ -475,7 +475,7 @@ smalltalk.method({
 selector: "source:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@source"]=aString;
+return smalltalk.withContext(function($ctx1) { 
self["@source"]=aString;
 return self}, self, "source:", [aString], smalltalk.JSStatementNode)}
 }),
 smalltalk.JSStatementNode);
@@ -489,7 +489,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitMethodNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.MethodNode)}
@@ -502,7 +502,7 @@ smalltalk.method({
 selector: "arguments",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@arguments"]) == nil || $receiver == undefined){
 $1=[];
 } else {
@@ -519,7 +519,7 @@ smalltalk.method({
 selector: "arguments:",
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@arguments"]=aCollection;
+return smalltalk.withContext(function($ctx1) { 
self["@arguments"]=aCollection;
 return self}, self, "arguments:", [aCollection], smalltalk.MethodNode)}
 }),
 smalltalk.MethodNode);
@@ -530,7 +530,7 @@ smalltalk.method({
 selector: "classReferences",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@classReferences"];
+return smalltalk.withContext(function($ctx1) { 
return self["@classReferences"];
 }, self, "classReferences", [], smalltalk.MethodNode)}
 }),
 smalltalk.MethodNode);
@@ -541,7 +541,7 @@ smalltalk.method({
 selector: "classReferences:",
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@classReferences"]=aCollection;
+return smalltalk.withContext(function($ctx1) { 
self["@classReferences"]=aCollection;
 return self}, self, "classReferences:", [aCollection], smalltalk.MethodNode)}
 }),
 smalltalk.MethodNode);
@@ -552,7 +552,7 @@ smalltalk.method({
 selector: "messageSends",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@messageSends"];
+return smalltalk.withContext(function($ctx1) { 
return self["@messageSends"];
 }, self, "messageSends", [], smalltalk.MethodNode)}
 }),
 smalltalk.MethodNode);
@@ -563,7 +563,7 @@ smalltalk.method({
 selector: "messageSends:",
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@messageSends"]=aCollection;
+return smalltalk.withContext(function($ctx1) { 
self["@messageSends"]=aCollection;
 return self}, self, "messageSends:", [aCollection], smalltalk.MethodNode)}
 }),
 smalltalk.MethodNode);
@@ -574,7 +574,7 @@ smalltalk.method({
 selector: "scope",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@scope"];
+return smalltalk.withContext(function($ctx1) { 
return self["@scope"];
 }, self, "scope", [], smalltalk.MethodNode)}
 }),
 smalltalk.MethodNode);
@@ -585,7 +585,7 @@ smalltalk.method({
 selector: "scope:",
 fn: function (aMethodScope){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@scope"]=aMethodScope;
+return smalltalk.withContext(function($ctx1) { 
self["@scope"]=aMethodScope;
 return self}, self, "scope:", [aMethodScope], smalltalk.MethodNode)}
 }),
 smalltalk.MethodNode);
@@ -596,7 +596,7 @@ smalltalk.method({
 selector: "selector",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@selector"];
+return smalltalk.withContext(function($ctx1) { 
return self["@selector"];
 }, self, "selector", [], smalltalk.MethodNode)}
 }),
 smalltalk.MethodNode);
@@ -607,7 +607,7 @@ smalltalk.method({
 selector: "selector:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@selector"]=aString;
+return smalltalk.withContext(function($ctx1) { 
self["@selector"]=aString;
 return self}, self, "selector:", [aString], smalltalk.MethodNode)}
 }),
 smalltalk.MethodNode);
@@ -618,7 +618,7 @@ smalltalk.method({
 selector: "source",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@source"];
+return smalltalk.withContext(function($ctx1) { 
return self["@source"];
 }, self, "source", [], smalltalk.MethodNode)}
 }),
 smalltalk.MethodNode);
@@ -629,7 +629,7 @@ smalltalk.method({
 selector: "source:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@source"]=aString;
+return smalltalk.withContext(function($ctx1) { 
self["@source"]=aString;
 return self}, self, "source:", [aString], smalltalk.MethodNode)}
 }),
 smalltalk.MethodNode);
@@ -640,7 +640,7 @@ smalltalk.method({
 selector: "superSends",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@superSends"];
+return smalltalk.withContext(function($ctx1) { 
return self["@superSends"];
 }, self, "superSends", [], smalltalk.MethodNode)}
 }),
 smalltalk.MethodNode);
@@ -651,7 +651,7 @@ smalltalk.method({
 selector: "superSends:",
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@superSends"]=aCollection;
+return smalltalk.withContext(function($ctx1) { 
self["@superSends"]=aCollection;
 return self}, self, "superSends:", [aCollection], smalltalk.MethodNode)}
 }),
 smalltalk.MethodNode);
@@ -665,7 +665,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitReturnNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.ReturnNode)}
@@ -678,7 +678,7 @@ smalltalk.method({
 selector: "isReturnNode",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isReturnNode", [], smalltalk.ReturnNode)}
 }),
 smalltalk.ReturnNode);
@@ -689,7 +689,7 @@ smalltalk.method({
 selector: "nonLocalReturn",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(_st(self)._scope())._isMethodScope())._not();
 return $1;
 }, self, "nonLocalReturn", [], smalltalk.ReturnNode)}
@@ -702,7 +702,7 @@ smalltalk.method({
 selector: "scope",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@scope"];
+return smalltalk.withContext(function($ctx1) { 
return self["@scope"];
 }, self, "scope", [], smalltalk.ReturnNode)}
 }),
 smalltalk.ReturnNode);
@@ -713,7 +713,7 @@ smalltalk.method({
 selector: "scope:",
 fn: function (aLexicalScope){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@scope"]=aLexicalScope;
+return smalltalk.withContext(function($ctx1) { 
self["@scope"]=aLexicalScope;
 return self}, self, "scope:", [aLexicalScope], smalltalk.ReturnNode)}
 }),
 smalltalk.ReturnNode);
@@ -727,7 +727,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitSendNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.SendNode)}
@@ -740,7 +740,7 @@ smalltalk.method({
 selector: "arguments",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@arguments"]) == nil || $receiver == undefined){
 self["@arguments"]=[];
 $1=self["@arguments"];
@@ -758,7 +758,7 @@ smalltalk.method({
 selector: "arguments:",
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@arguments"]=aCollection;
+return smalltalk.withContext(function($ctx1) { 
self["@arguments"]=aCollection;
 return self}, self, "arguments:", [aCollection], smalltalk.SendNode)}
 }),
 smalltalk.SendNode);
@@ -769,16 +769,16 @@ smalltalk.method({
 selector: "cascadeNodeWithMessages:",
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$4,$5,$3;
-var first;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$4,$5,$3;
+$ctx1.first=nil;
 $1=_st((smalltalk.SendNode || SendNode))._new();
 _st($1)._selector_(_st(self)._selector());
 _st($1)._arguments_(_st(self)._arguments());
 $2=_st($1)._yourself();
-first=$2;
+$ctx1.locals.first=$2;
 $4=_st((smalltalk.CascadeNode || CascadeNode))._new();
 _st($4)._receiver_(_st(self)._receiver());
-_st($4)._nodes_(_st(_st((smalltalk.Array || Array))._with_(first)).__comma(aCollection));
+_st($4)._nodes_(_st(_st((smalltalk.Array || Array))._with_($ctx1.locals.first)).__comma(aCollection));
 $5=_st($4)._yourself();
 $3=$5;
 return $3;
@@ -792,7 +792,7 @@ smalltalk.method({
 selector: "index",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@index"];
+return smalltalk.withContext(function($ctx1) { 
return self["@index"];
 }, self, "index", [], smalltalk.SendNode)}
 }),
 smalltalk.SendNode);
@@ -803,7 +803,7 @@ smalltalk.method({
 selector: "index:",
 fn: function (anInteger){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@index"]=anInteger;
+return smalltalk.withContext(function($ctx1) { 
self["@index"]=anInteger;
 return self}, self, "index:", [anInteger], smalltalk.SendNode)}
 }),
 smalltalk.SendNode);
@@ -814,7 +814,7 @@ smalltalk.method({
 selector: "isSendNode",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isSendNode", [], smalltalk.SendNode)}
 }),
 smalltalk.SendNode);
@@ -825,7 +825,7 @@ smalltalk.method({
 selector: "nodes",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st((smalltalk.Array || Array))._withAll_(_st(self)._arguments());
 _st($2)._add_(_st(self)._receiver());
 $3=_st($2)._yourself();
@@ -841,7 +841,7 @@ smalltalk.method({
 selector: "receiver",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@receiver"];
+return smalltalk.withContext(function($ctx1) { 
return self["@receiver"];
 }, self, "receiver", [], smalltalk.SendNode)}
 }),
 smalltalk.SendNode);
@@ -852,7 +852,7 @@ smalltalk.method({
 selector: "receiver:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@receiver"]=aNode;
+return smalltalk.withContext(function($ctx1) { 
self["@receiver"]=aNode;
 return self}, self, "receiver:", [aNode], smalltalk.SendNode)}
 }),
 smalltalk.SendNode);
@@ -863,7 +863,7 @@ smalltalk.method({
 selector: "selector",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@selector"];
+return smalltalk.withContext(function($ctx1) { 
return self["@selector"];
 }, self, "selector", [], smalltalk.SendNode)}
 }),
 smalltalk.SendNode);
@@ -874,7 +874,7 @@ smalltalk.method({
 selector: "selector:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@selector"]=aString;
+return smalltalk.withContext(function($ctx1) { 
self["@selector"]=aString;
 return self}, self, "selector:", [aString], smalltalk.SendNode)}
 }),
 smalltalk.SendNode);
@@ -885,7 +885,7 @@ smalltalk.method({
 selector: "superSend",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@superSend"]) == nil || $receiver == undefined){
 $1=false;
 } else {
@@ -902,7 +902,7 @@ smalltalk.method({
 selector: "superSend:",
 fn: function (aBoolean){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@superSend"]=aBoolean;
+return smalltalk.withContext(function($ctx1) { 
self["@superSend"]=aBoolean;
 return self}, self, "superSend:", [aBoolean], smalltalk.SendNode)}
 }),
 smalltalk.SendNode);
@@ -913,7 +913,7 @@ smalltalk.method({
 selector: "valueForReceiver:",
 fn: function (anObject){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$4,$3,$5,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$4,$3,$5,$1;
 $2=_st((smalltalk.SendNode || SendNode))._new();
 $4=_st(self)._receiver();
 if(($receiver = $4) == nil || $receiver == undefined){
@@ -940,7 +940,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitSequenceNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.SequenceNode)}
@@ -953,7 +953,7 @@ smalltalk.method({
 selector: "asBlockSequenceNode",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st((smalltalk.BlockSequenceNode || BlockSequenceNode))._new();
 _st($2)._nodes_(_st(self)._nodes());
 _st($2)._temps_(_st(self)._temps());
@@ -970,7 +970,7 @@ smalltalk.method({
 selector: "scope",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@scope"];
+return smalltalk.withContext(function($ctx1) { 
return self["@scope"];
 }, self, "scope", [], smalltalk.SequenceNode)}
 }),
 smalltalk.SequenceNode);
@@ -981,7 +981,7 @@ smalltalk.method({
 selector: "scope:",
 fn: function (aLexicalScope){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@scope"]=aLexicalScope;
+return smalltalk.withContext(function($ctx1) { 
self["@scope"]=aLexicalScope;
 return self}, self, "scope:", [aLexicalScope], smalltalk.SequenceNode)}
 }),
 smalltalk.SequenceNode);
@@ -992,7 +992,7 @@ smalltalk.method({
 selector: "temps",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@temps"]) == nil || $receiver == undefined){
 $1=[];
 } else {
@@ -1009,7 +1009,7 @@ smalltalk.method({
 selector: "temps:",
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@temps"]=aCollection;
+return smalltalk.withContext(function($ctx1) { 
self["@temps"]=aCollection;
 return self}, self, "temps:", [aCollection], smalltalk.SequenceNode)}
 }),
 smalltalk.SequenceNode);
@@ -1023,7 +1023,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitBlockSequenceNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.BlockSequenceNode)}
@@ -1036,7 +1036,7 @@ smalltalk.method({
 selector: "isBlockSequenceNode",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isBlockSequenceNode", [], smalltalk.BlockSequenceNode)}
 }),
 smalltalk.BlockSequenceNode);
@@ -1050,7 +1050,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitValueNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.ValueNode)}
@@ -1063,7 +1063,7 @@ smalltalk.method({
 selector: "isValueNode",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isValueNode", [], smalltalk.ValueNode)}
 }),
 smalltalk.ValueNode);
@@ -1074,7 +1074,7 @@ smalltalk.method({
 selector: "value",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@value"];
+return smalltalk.withContext(function($ctx1) { 
return self["@value"];
 }, self, "value", [], smalltalk.ValueNode)}
 }),
 smalltalk.ValueNode);
@@ -1085,7 +1085,7 @@ smalltalk.method({
 selector: "value:",
 fn: function (anObject){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@value"]=anObject;
+return smalltalk.withContext(function($ctx1) { 
self["@value"]=anObject;
 return self}, self, "value:", [anObject], smalltalk.ValueNode)}
 }),
 smalltalk.ValueNode);
@@ -1099,7 +1099,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitVariableNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.VariableNode)}
@@ -1112,7 +1112,7 @@ smalltalk.method({
 selector: "alias",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._binding())._alias();
 return $1;
 }, self, "alias", [], smalltalk.VariableNode)}
@@ -1125,7 +1125,7 @@ smalltalk.method({
 selector: "assigned",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@assigned"]) == nil || $receiver == undefined){
 $1=false;
 } else {
@@ -1142,7 +1142,7 @@ smalltalk.method({
 selector: "assigned:",
 fn: function (aBoolean){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@assigned"]=aBoolean;
+return smalltalk.withContext(function($ctx1) { 
self["@assigned"]=aBoolean;
 return self}, self, "assigned:", [aBoolean], smalltalk.VariableNode)}
 }),
 smalltalk.VariableNode);
@@ -1153,7 +1153,7 @@ smalltalk.method({
 selector: "beAssigned",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._binding())._validateAssignment();
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._binding())._validateAssignment();
 self["@assigned"]=true;
 return self}, self, "beAssigned", [], smalltalk.VariableNode)}
 }),
@@ -1165,7 +1165,7 @@ smalltalk.method({
 selector: "binding",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@binding"];
+return smalltalk.withContext(function($ctx1) { 
return self["@binding"];
 }, self, "binding", [], smalltalk.VariableNode)}
 }),
 smalltalk.VariableNode);
@@ -1176,7 +1176,7 @@ smalltalk.method({
 selector: "binding:",
 fn: function (aScopeVar){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@binding"]=aScopeVar;
+return smalltalk.withContext(function($ctx1) { 
self["@binding"]=aScopeVar;
 return self}, self, "binding:", [aScopeVar], smalltalk.VariableNode)}
 }),
 smalltalk.VariableNode);
@@ -1190,7 +1190,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitClassReferenceNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.ClassReferenceNode)}

+ 95 - 95
js/Compiler-AST.js

@@ -8,7 +8,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.Node)},
@@ -26,7 +26,7 @@ selector: "addNode:",
 category: 'accessing',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._nodes())._add_(aNode);
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._nodes())._add_(aNode);
 return self}, self, "addNode:", [aNode], smalltalk.Node)},
 args: ["aNode"],
 source: "addNode: aNode\x0a\x09self nodes add: aNode",
@@ -42,7 +42,7 @@ selector: "isAssignmentNode",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isAssignmentNode", [], smalltalk.Node)},
 args: [],
 source: "isAssignmentNode\x0a\x09^ false",
@@ -58,7 +58,7 @@ selector: "isBlockNode",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isBlockNode", [], smalltalk.Node)},
 args: [],
 source: "isBlockNode\x0a\x09^false",
@@ -74,7 +74,7 @@ selector: "isBlockSequenceNode",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isBlockSequenceNode", [], smalltalk.Node)},
 args: [],
 source: "isBlockSequenceNode\x0a\x09^false",
@@ -90,7 +90,7 @@ selector: "isReturnNode",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isReturnNode", [], smalltalk.Node)},
 args: [],
 source: "isReturnNode\x0a\x09^false",
@@ -106,7 +106,7 @@ selector: "isSendNode",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isSendNode", [], smalltalk.Node)},
 args: [],
 source: "isSendNode\x0a\x09^false",
@@ -122,7 +122,7 @@ selector: "isValueNode",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isValueNode", [], smalltalk.Node)},
 args: [],
 source: "isValueNode\x0a\x09^false",
@@ -138,7 +138,7 @@ selector: "nodes",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@nodes"]) == nil || $receiver == undefined){
 self["@nodes"]=_st((smalltalk.Array || Array))._new();
 $1=self["@nodes"];
@@ -161,7 +161,7 @@ selector: "nodes:",
 category: 'building',
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@nodes"]=aCollection;
+return smalltalk.withContext(function($ctx1) { 
self["@nodes"]=aCollection;
 return self}, self, "nodes:", [aCollection], smalltalk.Node)},
 args: ["aCollection"],
 source: "nodes: aCollection\x0a\x09nodes := aCollection",
@@ -177,7 +177,7 @@ selector: "position",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@position"]) == nil || $receiver == undefined){
 self["@position"]=_st((0)).__at((0));
 $1=self["@position"];
@@ -200,7 +200,7 @@ selector: "position:",
 category: 'building',
 fn: function (aPosition){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@position"]=aPosition;
+return smalltalk.withContext(function($ctx1) { 
self["@position"]=aPosition;
 return self}, self, "position:", [aPosition], smalltalk.Node)},
 args: ["aPosition"],
 source: "position: aPosition\x0a\x09position := aPosition",
@@ -216,7 +216,7 @@ selector: "shouldBeAliased",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@shouldBeAliased"]) == nil || $receiver == undefined){
 $1=false;
 } else {
@@ -238,7 +238,7 @@ selector: "shouldBeAliased:",
 category: 'accessing',
 fn: function (aBoolean){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@shouldBeAliased"]=aBoolean;
+return smalltalk.withContext(function($ctx1) { 
self["@shouldBeAliased"]=aBoolean;
 return self}, self, "shouldBeAliased:", [aBoolean], smalltalk.Node)},
 args: ["aBoolean"],
 source: "shouldBeAliased: aBoolean\x0a\x09shouldBeAliased := aBoolean",
@@ -254,7 +254,7 @@ selector: "shouldBeInlined",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@shouldBeInlined"]) == nil || $receiver == undefined){
 $1=false;
 } else {
@@ -276,7 +276,7 @@ selector: "shouldBeInlined:",
 category: 'accessing',
 fn: function (aBoolean){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@shouldBeInlined"]=aBoolean;
+return smalltalk.withContext(function($ctx1) { 
self["@shouldBeInlined"]=aBoolean;
 return self}, self, "shouldBeInlined:", [aBoolean], smalltalk.Node)},
 args: ["aBoolean"],
 source: "shouldBeInlined: aBoolean\x0a\x09shouldBeInlined := aBoolean",
@@ -295,7 +295,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitAssignmentNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.AssignmentNode)},
@@ -313,7 +313,7 @@ selector: "isAssignmentNode",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isAssignmentNode", [], smalltalk.AssignmentNode)},
 args: [],
 source: "isAssignmentNode\x0a\x09^ true",
@@ -329,7 +329,7 @@ selector: "left",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@left"];
+return smalltalk.withContext(function($ctx1) { 
return self["@left"];
 }, self, "left", [], smalltalk.AssignmentNode)},
 args: [],
 source: "left\x0a\x09^left",
@@ -345,7 +345,7 @@ selector: "left:",
 category: 'accessing',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@left"]=aNode;
+return smalltalk.withContext(function($ctx1) { 
self["@left"]=aNode;
 return self}, self, "left:", [aNode], smalltalk.AssignmentNode)},
 args: ["aNode"],
 source: "left: aNode\x0a\x09left := aNode",
@@ -361,7 +361,7 @@ selector: "nodes",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st((smalltalk.Array || Array))._with_with_(_st(self)._left(),_st(self)._right());
 return $1;
 }, self, "nodes", [], smalltalk.AssignmentNode)},
@@ -379,7 +379,7 @@ selector: "right",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@right"];
+return smalltalk.withContext(function($ctx1) { 
return self["@right"];
 }, self, "right", [], smalltalk.AssignmentNode)},
 args: [],
 source: "right\x0a\x09^right",
@@ -395,7 +395,7 @@ selector: "right:",
 category: 'accessing',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@right"]=aNode;
+return smalltalk.withContext(function($ctx1) { 
self["@right"]=aNode;
 return self}, self, "right:", [aNode], smalltalk.AssignmentNode)},
 args: ["aNode"],
 source: "right: aNode\x0a\x09right := aNode",
@@ -414,7 +414,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitBlockNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.BlockNode)},
@@ -432,7 +432,7 @@ selector: "isBlockNode",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isBlockNode", [], smalltalk.BlockNode)},
 args: [],
 source: "isBlockNode\x0a\x09^true",
@@ -448,7 +448,7 @@ selector: "parameters",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@parameters"]) == nil || $receiver == undefined){
 self["@parameters"]=_st((smalltalk.Array || Array))._new();
 $1=self["@parameters"];
@@ -471,7 +471,7 @@ selector: "parameters:",
 category: 'accessing',
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@parameters"]=aCollection;
+return smalltalk.withContext(function($ctx1) { 
self["@parameters"]=aCollection;
 return self}, self, "parameters:", [aCollection], smalltalk.BlockNode)},
 args: ["aCollection"],
 source: "parameters: aCollection\x0a\x09parameters := aCollection",
@@ -487,7 +487,7 @@ selector: "scope",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@scope"];
+return smalltalk.withContext(function($ctx1) { 
return self["@scope"];
 }, self, "scope", [], smalltalk.BlockNode)},
 args: [],
 source: "scope\x0a\x09^ scope",
@@ -503,7 +503,7 @@ selector: "scope:",
 category: 'accessing',
 fn: function (aLexicalScope){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@scope"]=aLexicalScope;
+return smalltalk.withContext(function($ctx1) { 
self["@scope"]=aLexicalScope;
 return self}, self, "scope:", [aLexicalScope], smalltalk.BlockNode)},
 args: ["aLexicalScope"],
 source: "scope: aLexicalScope\x0a\x09scope := aLexicalScope",
@@ -522,7 +522,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitCascadeNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.CascadeNode)},
@@ -540,7 +540,7 @@ selector: "receiver",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@receiver"];
+return smalltalk.withContext(function($ctx1) { 
return self["@receiver"];
 }, self, "receiver", [], smalltalk.CascadeNode)},
 args: [],
 source: "receiver\x0a\x09^receiver",
@@ -556,7 +556,7 @@ selector: "receiver:",
 category: 'accessing',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@receiver"]=aNode;
+return smalltalk.withContext(function($ctx1) { 
self["@receiver"]=aNode;
 return self}, self, "receiver:", [aNode], smalltalk.CascadeNode)},
 args: ["aNode"],
 source: "receiver: aNode\x0a\x09receiver := aNode",
@@ -575,7 +575,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitDynamicArrayNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.DynamicArrayNode)},
@@ -596,7 +596,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitDynamicDictionaryNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.DynamicDictionaryNode)},
@@ -617,7 +617,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitJSStatementNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.JSStatementNode)},
@@ -635,7 +635,7 @@ selector: "source",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@source"]) == nil || $receiver == undefined){
 $1="";
 } else {
@@ -657,7 +657,7 @@ selector: "source:",
 category: 'accessing',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@source"]=aString;
+return smalltalk.withContext(function($ctx1) { 
self["@source"]=aString;
 return self}, self, "source:", [aString], smalltalk.JSStatementNode)},
 args: ["aString"],
 source: "source: aString\x0a\x09source := aString",
@@ -676,7 +676,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitMethodNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.MethodNode)},
@@ -694,7 +694,7 @@ selector: "arguments",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@arguments"]) == nil || $receiver == undefined){
 $1=[];
 } else {
@@ -716,7 +716,7 @@ selector: "arguments:",
 category: 'accessing',
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@arguments"]=aCollection;
+return smalltalk.withContext(function($ctx1) { 
self["@arguments"]=aCollection;
 return self}, self, "arguments:", [aCollection], smalltalk.MethodNode)},
 args: ["aCollection"],
 source: "arguments: aCollection\x0a\x09arguments := aCollection",
@@ -732,7 +732,7 @@ selector: "classReferences",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@classReferences"];
+return smalltalk.withContext(function($ctx1) { 
return self["@classReferences"];
 }, self, "classReferences", [], smalltalk.MethodNode)},
 args: [],
 source: "classReferences\x0a\x09^ classReferences",
@@ -748,7 +748,7 @@ selector: "classReferences:",
 category: 'accessing',
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@classReferences"]=aCollection;
+return smalltalk.withContext(function($ctx1) { 
self["@classReferences"]=aCollection;
 return self}, self, "classReferences:", [aCollection], smalltalk.MethodNode)},
 args: ["aCollection"],
 source: "classReferences: aCollection\x0a\x09classReferences := aCollection",
@@ -764,7 +764,7 @@ selector: "messageSends",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@messageSends"];
+return smalltalk.withContext(function($ctx1) { 
return self["@messageSends"];
 }, self, "messageSends", [], smalltalk.MethodNode)},
 args: [],
 source: "messageSends\x0a\x09^ messageSends",
@@ -780,7 +780,7 @@ selector: "messageSends:",
 category: 'accessing',
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@messageSends"]=aCollection;
+return smalltalk.withContext(function($ctx1) { 
self["@messageSends"]=aCollection;
 return self}, self, "messageSends:", [aCollection], smalltalk.MethodNode)},
 args: ["aCollection"],
 source: "messageSends: aCollection\x0a\x09messageSends := aCollection",
@@ -796,7 +796,7 @@ selector: "scope",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@scope"];
+return smalltalk.withContext(function($ctx1) { 
return self["@scope"];
 }, self, "scope", [], smalltalk.MethodNode)},
 args: [],
 source: "scope\x0a\x09^ scope",
@@ -812,7 +812,7 @@ selector: "scope:",
 category: 'accessing',
 fn: function (aMethodScope){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@scope"]=aMethodScope;
+return smalltalk.withContext(function($ctx1) { 
self["@scope"]=aMethodScope;
 return self}, self, "scope:", [aMethodScope], smalltalk.MethodNode)},
 args: ["aMethodScope"],
 source: "scope: aMethodScope\x0a\x09scope := aMethodScope",
@@ -828,7 +828,7 @@ selector: "selector",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@selector"];
+return smalltalk.withContext(function($ctx1) { 
return self["@selector"];
 }, self, "selector", [], smalltalk.MethodNode)},
 args: [],
 source: "selector\x0a\x09^selector",
@@ -844,7 +844,7 @@ selector: "selector:",
 category: 'accessing',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@selector"]=aString;
+return smalltalk.withContext(function($ctx1) { 
self["@selector"]=aString;
 return self}, self, "selector:", [aString], smalltalk.MethodNode)},
 args: ["aString"],
 source: "selector: aString\x0a\x09selector := aString",
@@ -860,7 +860,7 @@ selector: "source",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@source"];
+return smalltalk.withContext(function($ctx1) { 
return self["@source"];
 }, self, "source", [], smalltalk.MethodNode)},
 args: [],
 source: "source\x0a\x09^source",
@@ -876,7 +876,7 @@ selector: "source:",
 category: 'accessing',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@source"]=aString;
+return smalltalk.withContext(function($ctx1) { 
self["@source"]=aString;
 return self}, self, "source:", [aString], smalltalk.MethodNode)},
 args: ["aString"],
 source: "source: aString\x0a\x09source := aString",
@@ -892,7 +892,7 @@ selector: "superSends",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@superSends"];
+return smalltalk.withContext(function($ctx1) { 
return self["@superSends"];
 }, self, "superSends", [], smalltalk.MethodNode)},
 args: [],
 source: "superSends\x0a\x09^ superSends",
@@ -908,7 +908,7 @@ selector: "superSends:",
 category: 'accessing',
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@superSends"]=aCollection;
+return smalltalk.withContext(function($ctx1) { 
self["@superSends"]=aCollection;
 return self}, self, "superSends:", [aCollection], smalltalk.MethodNode)},
 args: ["aCollection"],
 source: "superSends: aCollection\x0a\x09superSends := aCollection",
@@ -927,7 +927,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitReturnNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.ReturnNode)},
@@ -945,7 +945,7 @@ selector: "isReturnNode",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isReturnNode", [], smalltalk.ReturnNode)},
 args: [],
 source: "isReturnNode\x0a\x09^ true",
@@ -961,7 +961,7 @@ selector: "nonLocalReturn",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(_st(self)._scope())._isMethodScope())._not();
 return $1;
 }, self, "nonLocalReturn", [], smalltalk.ReturnNode)},
@@ -979,7 +979,7 @@ selector: "scope",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@scope"];
+return smalltalk.withContext(function($ctx1) { 
return self["@scope"];
 }, self, "scope", [], smalltalk.ReturnNode)},
 args: [],
 source: "scope\x0a\x09^ scope",
@@ -995,7 +995,7 @@ selector: "scope:",
 category: 'accessing',
 fn: function (aLexicalScope){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@scope"]=aLexicalScope;
+return smalltalk.withContext(function($ctx1) { 
self["@scope"]=aLexicalScope;
 return self}, self, "scope:", [aLexicalScope], smalltalk.ReturnNode)},
 args: ["aLexicalScope"],
 source: "scope: aLexicalScope\x0a\x09scope := aLexicalScope",
@@ -1014,7 +1014,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitSendNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.SendNode)},
@@ -1032,7 +1032,7 @@ selector: "arguments",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@arguments"]) == nil || $receiver == undefined){
 self["@arguments"]=[];
 $1=self["@arguments"];
@@ -1055,7 +1055,7 @@ selector: "arguments:",
 category: 'accessing',
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@arguments"]=aCollection;
+return smalltalk.withContext(function($ctx1) { 
self["@arguments"]=aCollection;
 return self}, self, "arguments:", [aCollection], smalltalk.SendNode)},
 args: ["aCollection"],
 source: "arguments: aCollection\x0a\x09arguments := aCollection",
@@ -1071,16 +1071,16 @@ selector: "cascadeNodeWithMessages:",
 category: 'accessing',
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$4,$5,$3;
-var first;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$4,$5,$3;
+$ctx1.first=nil;
 $1=_st((smalltalk.SendNode || SendNode))._new();
 _st($1)._selector_(_st(self)._selector());
 _st($1)._arguments_(_st(self)._arguments());
 $2=_st($1)._yourself();
-first=$2;
+$ctx1.locals.first=$2;
 $4=_st((smalltalk.CascadeNode || CascadeNode))._new();
 _st($4)._receiver_(_st(self)._receiver());
-_st($4)._nodes_(_st(_st((smalltalk.Array || Array))._with_(first)).__comma(aCollection));
+_st($4)._nodes_(_st(_st((smalltalk.Array || Array))._with_($ctx1.locals.first)).__comma(aCollection));
 $5=_st($4)._yourself();
 $3=$5;
 return $3;
@@ -1099,7 +1099,7 @@ selector: "index",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@index"];
+return smalltalk.withContext(function($ctx1) { 
return self["@index"];
 }, self, "index", [], smalltalk.SendNode)},
 args: [],
 source: "index\x0a\x09^ index",
@@ -1115,7 +1115,7 @@ selector: "index:",
 category: 'accessing',
 fn: function (anInteger){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@index"]=anInteger;
+return smalltalk.withContext(function($ctx1) { 
self["@index"]=anInteger;
 return self}, self, "index:", [anInteger], smalltalk.SendNode)},
 args: ["anInteger"],
 source: "index: anInteger\x0a\x09index := anInteger",
@@ -1131,7 +1131,7 @@ selector: "isSendNode",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isSendNode", [], smalltalk.SendNode)},
 args: [],
 source: "isSendNode\x0a\x09^ true",
@@ -1147,7 +1147,7 @@ selector: "nodes",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st((smalltalk.Array || Array))._withAll_(_st(self)._arguments());
 _st($2)._add_(_st(self)._receiver());
 $3=_st($2)._yourself();
@@ -1168,7 +1168,7 @@ selector: "receiver",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@receiver"];
+return smalltalk.withContext(function($ctx1) { 
return self["@receiver"];
 }, self, "receiver", [], smalltalk.SendNode)},
 args: [],
 source: "receiver\x0a\x09^receiver",
@@ -1184,7 +1184,7 @@ selector: "receiver:",
 category: 'accessing',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@receiver"]=aNode;
+return smalltalk.withContext(function($ctx1) { 
self["@receiver"]=aNode;
 return self}, self, "receiver:", [aNode], smalltalk.SendNode)},
 args: ["aNode"],
 source: "receiver: aNode\x0a\x09receiver := aNode",
@@ -1200,7 +1200,7 @@ selector: "selector",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@selector"];
+return smalltalk.withContext(function($ctx1) { 
return self["@selector"];
 }, self, "selector", [], smalltalk.SendNode)},
 args: [],
 source: "selector\x0a\x09^selector",
@@ -1216,7 +1216,7 @@ selector: "selector:",
 category: 'accessing',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@selector"]=aString;
+return smalltalk.withContext(function($ctx1) { 
self["@selector"]=aString;
 return self}, self, "selector:", [aString], smalltalk.SendNode)},
 args: ["aString"],
 source: "selector: aString\x0a\x09selector := aString",
@@ -1232,7 +1232,7 @@ selector: "superSend",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@superSend"]) == nil || $receiver == undefined){
 $1=false;
 } else {
@@ -1254,7 +1254,7 @@ selector: "superSend:",
 category: 'accessing',
 fn: function (aBoolean){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@superSend"]=aBoolean;
+return smalltalk.withContext(function($ctx1) { 
self["@superSend"]=aBoolean;
 return self}, self, "superSend:", [aBoolean], smalltalk.SendNode)},
 args: ["aBoolean"],
 source: "superSend: aBoolean\x0a\x09superSend := aBoolean",
@@ -1270,7 +1270,7 @@ selector: "valueForReceiver:",
 category: 'accessing',
 fn: function (anObject){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$4,$3,$5,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$4,$3,$5,$1;
 $2=_st((smalltalk.SendNode || SendNode))._new();
 $4=_st(self)._receiver();
 if(($receiver = $4) == nil || $receiver == undefined){
@@ -1302,7 +1302,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitSequenceNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.SequenceNode)},
@@ -1320,7 +1320,7 @@ selector: "asBlockSequenceNode",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st((smalltalk.BlockSequenceNode || BlockSequenceNode))._new();
 _st($2)._nodes_(_st(self)._nodes());
 _st($2)._temps_(_st(self)._temps());
@@ -1342,7 +1342,7 @@ selector: "scope",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@scope"];
+return smalltalk.withContext(function($ctx1) { 
return self["@scope"];
 }, self, "scope", [], smalltalk.SequenceNode)},
 args: [],
 source: "scope\x0a\x09^ scope",
@@ -1358,7 +1358,7 @@ selector: "scope:",
 category: 'accessing',
 fn: function (aLexicalScope){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@scope"]=aLexicalScope;
+return smalltalk.withContext(function($ctx1) { 
self["@scope"]=aLexicalScope;
 return self}, self, "scope:", [aLexicalScope], smalltalk.SequenceNode)},
 args: ["aLexicalScope"],
 source: "scope: aLexicalScope\x0a\x09scope := aLexicalScope",
@@ -1374,7 +1374,7 @@ selector: "temps",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@temps"]) == nil || $receiver == undefined){
 $1=[];
 } else {
@@ -1396,7 +1396,7 @@ selector: "temps:",
 category: 'accessing',
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@temps"]=aCollection;
+return smalltalk.withContext(function($ctx1) { 
self["@temps"]=aCollection;
 return self}, self, "temps:", [aCollection], smalltalk.SequenceNode)},
 args: ["aCollection"],
 source: "temps: aCollection\x0a\x09temps := aCollection",
@@ -1415,7 +1415,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitBlockSequenceNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.BlockSequenceNode)},
@@ -1433,7 +1433,7 @@ selector: "isBlockSequenceNode",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isBlockSequenceNode", [], smalltalk.BlockSequenceNode)},
 args: [],
 source: "isBlockSequenceNode\x0a\x09^true",
@@ -1452,7 +1452,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitValueNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.ValueNode)},
@@ -1470,7 +1470,7 @@ selector: "isValueNode",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isValueNode", [], smalltalk.ValueNode)},
 args: [],
 source: "isValueNode\x0a\x09^true",
@@ -1486,7 +1486,7 @@ selector: "value",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@value"];
+return smalltalk.withContext(function($ctx1) { 
return self["@value"];
 }, self, "value", [], smalltalk.ValueNode)},
 args: [],
 source: "value\x0a\x09^value",
@@ -1502,7 +1502,7 @@ selector: "value:",
 category: 'accessing',
 fn: function (anObject){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@value"]=anObject;
+return smalltalk.withContext(function($ctx1) { 
self["@value"]=anObject;
 return self}, self, "value:", [anObject], smalltalk.ValueNode)},
 args: ["anObject"],
 source: "value: anObject\x0a\x09value := anObject",
@@ -1521,7 +1521,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitVariableNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.VariableNode)},
@@ -1539,7 +1539,7 @@ selector: "alias",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._binding())._alias();
 return $1;
 }, self, "alias", [], smalltalk.VariableNode)},
@@ -1557,7 +1557,7 @@ selector: "assigned",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@assigned"]) == nil || $receiver == undefined){
 $1=false;
 } else {
@@ -1579,7 +1579,7 @@ selector: "assigned:",
 category: 'accessing',
 fn: function (aBoolean){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@assigned"]=aBoolean;
+return smalltalk.withContext(function($ctx1) { 
self["@assigned"]=aBoolean;
 return self}, self, "assigned:", [aBoolean], smalltalk.VariableNode)},
 args: ["aBoolean"],
 source: "assigned: aBoolean\x0a\x09assigned := aBoolean",
@@ -1595,7 +1595,7 @@ selector: "beAssigned",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._binding())._validateAssignment();
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._binding())._validateAssignment();
 self["@assigned"]=true;
 return self}, self, "beAssigned", [], smalltalk.VariableNode)},
 args: [],
@@ -1612,7 +1612,7 @@ selector: "binding",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@binding"];
+return smalltalk.withContext(function($ctx1) { 
return self["@binding"];
 }, self, "binding", [], smalltalk.VariableNode)},
 args: [],
 source: "binding\x0a\x09^ binding",
@@ -1628,7 +1628,7 @@ selector: "binding:",
 category: 'accessing',
 fn: function (aScopeVar){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@binding"]=aScopeVar;
+return smalltalk.withContext(function($ctx1) { 
self["@binding"]=aScopeVar;
 return self}, self, "binding:", [aScopeVar], smalltalk.VariableNode)},
 args: ["aScopeVar"],
 source: "binding: aScopeVar\x0a\x09binding := aScopeVar",
@@ -1647,7 +1647,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitClassReferenceNode_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.ClassReferenceNode)},

+ 78 - 78
js/Compiler-Core.deploy.js

@@ -6,7 +6,7 @@ smalltalk.method({
 selector: "codeGeneratorClass",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@codeGeneratorClass"]) == nil || $receiver == undefined){
 $1=(smalltalk.InliningCodeGenerator || InliningCodeGenerator);
 } else {
@@ -23,7 +23,7 @@ smalltalk.method({
 selector: "codeGeneratorClass:",
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@codeGeneratorClass"]=aClass;
+return smalltalk.withContext(function($ctx1) { 
self["@codeGeneratorClass"]=aClass;
 return self}, self, "codeGeneratorClass:", [aClass], smalltalk.Compiler)}
 }),
 smalltalk.Compiler);
@@ -34,7 +34,7 @@ smalltalk.method({
 selector: "compile:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._compileNode_(_st(self)._parse_(aString));
 return $1;
 }, self, "compile:", [aString], smalltalk.Compiler)}
@@ -47,7 +47,7 @@ smalltalk.method({
 selector: "compile:forClass:",
 fn: function (aString,aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(self)._currentClass_(aClass);
 _st(self)._source_(aString);
 $1=_st(self)._compile_(aString);
@@ -62,7 +62,7 @@ smalltalk.method({
 selector: "compileExpression:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(self)._currentClass_((smalltalk.DoIt || DoIt));
 _st(self)._source_(_st(_st("doIt ^[").__comma(aString)).__comma("] value"));
 $1=_st(self)._compileNode_(_st(self)._parse_(_st(self)._source()));
@@ -77,15 +77,15 @@ smalltalk.method({
 selector: "compileNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var generator;
-var result;
-generator=_st(_st(self)._codeGeneratorClass())._new();
-_st(generator)._source_(_st(self)._source());
-$1=_st(generator)._currentClass_(_st(self)._currentClass());
-result=_st(generator)._compileNode_(aNode);
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.generator=nil;
+$ctx1.result=nil;
+$ctx1.locals.generator=_st(_st(self)._codeGeneratorClass())._new();
+_st($ctx1.locals.generator)._source_(_st(self)._source());
+$1=_st($ctx1.locals.generator)._currentClass_(_st(self)._currentClass());
+$ctx1.locals.result=_st($ctx1.locals.generator)._compileNode_(aNode);
 _st(self)._unknownVariables_([]);
-return result;
+return $ctx1.locals.result;
 }, self, "compileNode:", [aNode], smalltalk.Compiler)}
 }),
 smalltalk.Compiler);
@@ -96,7 +96,7 @@ smalltalk.method({
 selector: "currentClass",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@currentClass"];
+return smalltalk.withContext(function($ctx1) { 
return self["@currentClass"];
 }, self, "currentClass", [], smalltalk.Compiler)}
 }),
 smalltalk.Compiler);
@@ -107,7 +107,7 @@ smalltalk.method({
 selector: "currentClass:",
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@currentClass"]=aClass;
+return smalltalk.withContext(function($ctx1) { 
self["@currentClass"]=aClass;
 return self}, self, "currentClass:", [aClass], smalltalk.Compiler)}
 }),
 smalltalk.Compiler);
@@ -118,7 +118,7 @@ smalltalk.method({
 selector: "eval:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { return eval(aString);
+return smalltalk.withContext(function($ctx1) { 
return eval(aString);
 ;
 return self}, self, "eval:", [aString], smalltalk.Compiler)}
 }),
@@ -130,11 +130,11 @@ smalltalk.method({
 selector: "evaluateExpression:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var result;
+return smalltalk.withContext(function($ctx1) { 
$ctx1.result=nil;
 _st((smalltalk.DoIt || DoIt))._addCompiledMethod_(_st(self)._eval_(_st(self)._compileExpression_(aString)));
-result=_st(_st((smalltalk.DoIt || DoIt))._new())._doIt();
+$ctx1.locals.result=_st(_st((smalltalk.DoIt || DoIt))._new())._doIt();
 _st((smalltalk.DoIt || DoIt))._removeCompiledMethod_(_st(_st((smalltalk.DoIt || DoIt))._methodDictionary())._at_("doIt"));
-return result;
+return $ctx1.locals.result;
 }, self, "evaluateExpression:", [aString], smalltalk.Compiler)}
 }),
 smalltalk.Compiler);
@@ -145,12 +145,12 @@ smalltalk.method({
 selector: "install:forClass:category:",
 fn: function (aString,aBehavior,anotherString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var compiled;
-compiled=_st(self)._eval_(_st(self)._compile_forClass_(aString,aBehavior));
-_st(compiled)._category_(anotherString);
-_st(aBehavior)._addCompiledMethod_(compiled);
+return smalltalk.withContext(function($ctx1) { 
$ctx1.compiled=nil;
+$ctx1.locals.compiled=_st(self)._eval_(_st(self)._compile_forClass_(aString,aBehavior));
+_st($ctx1.locals.compiled)._category_(anotherString);
+_st(aBehavior)._addCompiledMethod_($ctx1.locals.compiled);
 _st(self)._setupClass_(aBehavior);
-return compiled;
+return $ctx1.locals.compiled;
 }, self, "install:forClass:category:", [aString,aBehavior,anotherString], smalltalk.Compiler)}
 }),
 smalltalk.Compiler);
@@ -161,7 +161,7 @@ smalltalk.method({
 selector: "parse:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._parse_(aString);
 return $1;
 }, self, "parse:", [aString], smalltalk.Compiler)}
@@ -174,7 +174,7 @@ smalltalk.method({
 selector: "parseExpression:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._parse_(_st(_st("doIt ^[").__comma(aString)).__comma("] value"));
 return $1;
 }, self, "parseExpression:", [aString], smalltalk.Compiler)}
@@ -187,11 +187,11 @@ smalltalk.method({
 selector: "recompile:",
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(_st(aClass)._methodDictionary())._do_((function(each){
-_st(console)._log_(_st(_st(_st(aClass)._name()).__comma(" >> ")).__comma(_st(each)._selector()));
+return smalltalk.withContext(function($ctx2) { 
_st(console)._log_(_st(_st(_st(aClass)._name()).__comma(" >> ")).__comma(_st(each)._selector()));
 return _st(self)._install_forClass_category_(_st(each)._source(),aClass,_st(each)._category());
-}));
+})}));
 _st(self)._setupClass_(aClass);
 $1=_st(aClass)._isMetaclass();
 if(! smalltalk.assert($1)){
@@ -207,15 +207,15 @@ smalltalk.method({
 selector: "recompileAll",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._classes())._do_((function(each){
-_st((smalltalk.Transcript || Transcript))._show_(each);
+return smalltalk.withContext(function($ctx2) { 
_st((smalltalk.Transcript || Transcript))._show_(each);
 $1=_st((smalltalk.Transcript || Transcript))._cr();
 $1;
 return _st((function(){
-return _st(self)._recompile_(each);
-}))._valueWithTimeout_((100));
-}));
+return smalltalk.withContext(function($ctx3) { 
return _st(self)._recompile_(each);
+})}))._valueWithTimeout_((100));
+})}));
 return self}, self, "recompileAll", [], smalltalk.Compiler)}
 }),
 smalltalk.Compiler);
@@ -226,7 +226,7 @@ smalltalk.method({
 selector: "setupClass:",
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { smalltalk.init(aClass);
+return smalltalk.withContext(function($ctx1) { 
smalltalk.init(aClass);
 ;
 return self}, self, "setupClass:", [aClass], smalltalk.Compiler)}
 }),
@@ -238,7 +238,7 @@ smalltalk.method({
 selector: "source",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@source"]) == nil || $receiver == undefined){
 $1="";
 } else {
@@ -255,7 +255,7 @@ smalltalk.method({
 selector: "source:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@source"]=aString;
+return smalltalk.withContext(function($ctx1) { 
self["@source"]=aString;
 return self}, self, "source:", [aString], smalltalk.Compiler)}
 }),
 smalltalk.Compiler);
@@ -266,7 +266,7 @@ smalltalk.method({
 selector: "unknownVariables",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@unknownVariables"];
+return smalltalk.withContext(function($ctx1) { 
return self["@unknownVariables"];
 }, self, "unknownVariables", [], smalltalk.Compiler)}
 }),
 smalltalk.Compiler);
@@ -277,7 +277,7 @@ smalltalk.method({
 selector: "unknownVariables:",
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@unknownVariables"]=aCollection;
+return smalltalk.withContext(function($ctx1) { 
self["@unknownVariables"]=aCollection;
 return self}, self, "unknownVariables:", [aCollection], smalltalk.Compiler)}
 }),
 smalltalk.Compiler);
@@ -289,7 +289,7 @@ smalltalk.method({
 selector: "recompile:",
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._new())._recompile_(aClass);
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._new())._recompile_(aClass);
 return self}, self, "recompile:", [aClass], smalltalk.Compiler.klass)}
 }),
 smalltalk.Compiler.klass);
@@ -300,9 +300,9 @@ smalltalk.method({
 selector: "recompileAll",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._classes())._do_((function(each){
-return _st(self)._recompile_(each);
-}));
+return smalltalk.withContext(function($ctx1) { 
_st(_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._classes())._do_((function(each){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._recompile_(each);
+})}));
 return self}, self, "recompileAll", [], smalltalk.Compiler.klass)}
 }),
 smalltalk.Compiler.klass);
@@ -318,7 +318,7 @@ smalltalk.method({
 selector: "visit:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aNode)._accept_(self);
 return $1;
 }, self, "visit:", [aNode], smalltalk.NodeVisitor)}
@@ -331,10 +331,10 @@ smalltalk.method({
 selector: "visitAll:",
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aCollection)._do_((function(each){
-return _st(self)._visit_(each);
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._visit_(each);
+})}));
 return $1;
 }, self, "visitAll:", [aCollection], smalltalk.NodeVisitor)}
 }),
@@ -346,7 +346,7 @@ smalltalk.method({
 selector: "visitAssignmentNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitNode_(aNode);
 return $1;
 }, self, "visitAssignmentNode:", [aNode], smalltalk.NodeVisitor)}
@@ -359,7 +359,7 @@ smalltalk.method({
 selector: "visitBlockNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitNode_(aNode);
 return $1;
 }, self, "visitBlockNode:", [aNode], smalltalk.NodeVisitor)}
@@ -372,7 +372,7 @@ smalltalk.method({
 selector: "visitBlockSequenceNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitSequenceNode_(aNode);
 return $1;
 }, self, "visitBlockSequenceNode:", [aNode], smalltalk.NodeVisitor)}
@@ -385,7 +385,7 @@ smalltalk.method({
 selector: "visitCascadeNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitNode_(aNode);
 return $1;
 }, self, "visitCascadeNode:", [aNode], smalltalk.NodeVisitor)}
@@ -398,7 +398,7 @@ smalltalk.method({
 selector: "visitClassReferenceNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitVariableNode_(aNode);
 return $1;
 }, self, "visitClassReferenceNode:", [aNode], smalltalk.NodeVisitor)}
@@ -411,7 +411,7 @@ smalltalk.method({
 selector: "visitDynamicArrayNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitNode_(aNode);
 return $1;
 }, self, "visitDynamicArrayNode:", [aNode], smalltalk.NodeVisitor)}
@@ -424,7 +424,7 @@ smalltalk.method({
 selector: "visitDynamicDictionaryNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitNode_(aNode);
 return $1;
 }, self, "visitDynamicDictionaryNode:", [aNode], smalltalk.NodeVisitor)}
@@ -437,7 +437,7 @@ smalltalk.method({
 selector: "visitJSStatementNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitNode_(aNode);
 return $1;
 }, self, "visitJSStatementNode:", [aNode], smalltalk.NodeVisitor)}
@@ -450,7 +450,7 @@ smalltalk.method({
 selector: "visitMethodNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitNode_(aNode);
 return $1;
 }, self, "visitMethodNode:", [aNode], smalltalk.NodeVisitor)}
@@ -463,7 +463,7 @@ smalltalk.method({
 selector: "visitNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitAll_(_st(aNode)._nodes());
 return $1;
 }, self, "visitNode:", [aNode], smalltalk.NodeVisitor)}
@@ -476,7 +476,7 @@ smalltalk.method({
 selector: "visitReturnNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitNode_(aNode);
 return $1;
 }, self, "visitReturnNode:", [aNode], smalltalk.NodeVisitor)}
@@ -489,7 +489,7 @@ smalltalk.method({
 selector: "visitSendNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitNode_(aNode);
 return $1;
 }, self, "visitSendNode:", [aNode], smalltalk.NodeVisitor)}
@@ -502,7 +502,7 @@ smalltalk.method({
 selector: "visitSequenceNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitNode_(aNode);
 return $1;
 }, self, "visitSequenceNode:", [aNode], smalltalk.NodeVisitor)}
@@ -515,7 +515,7 @@ smalltalk.method({
 selector: "visitValueNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitNode_(aNode);
 return $1;
 }, self, "visitValueNode:", [aNode], smalltalk.NodeVisitor)}
@@ -528,7 +528,7 @@ smalltalk.method({
 selector: "visitVariableNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitNode_(aNode);
 return $1;
 }, self, "visitVariableNode:", [aNode], smalltalk.NodeVisitor)}
@@ -544,7 +544,7 @@ smalltalk.method({
 selector: "classNameFor:",
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st(aClass)._isMetaclass();
 if(smalltalk.assert($2)){
 $1=_st(_st(_st(aClass)._instanceClass())._name()).__comma(".klass");
@@ -567,7 +567,7 @@ smalltalk.method({
 selector: "compileNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._subclassResponsibility();
+return smalltalk.withContext(function($ctx1) { 
_st(self)._subclassResponsibility();
 return self}, self, "compileNode:", [aNode], smalltalk.AbstractCodeGenerator)}
 }),
 smalltalk.AbstractCodeGenerator);
@@ -578,7 +578,7 @@ smalltalk.method({
 selector: "currentClass",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@currentClass"];
+return smalltalk.withContext(function($ctx1) { 
return self["@currentClass"];
 }, self, "currentClass", [], smalltalk.AbstractCodeGenerator)}
 }),
 smalltalk.AbstractCodeGenerator);
@@ -589,7 +589,7 @@ smalltalk.method({
 selector: "currentClass:",
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@currentClass"]=aClass;
+return smalltalk.withContext(function($ctx1) { 
self["@currentClass"]=aClass;
 return self}, self, "currentClass:", [aClass], smalltalk.AbstractCodeGenerator)}
 }),
 smalltalk.AbstractCodeGenerator);
@@ -600,7 +600,7 @@ smalltalk.method({
 selector: "pseudoVariables",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return ["self", "super", "true", "false", "nil", "thisContext"];
+return smalltalk.withContext(function($ctx1) { 
return ["self", "super", "true", "false", "nil", "thisContext"];
 }, self, "pseudoVariables", [], smalltalk.AbstractCodeGenerator)}
 }),
 smalltalk.AbstractCodeGenerator);
@@ -611,7 +611,7 @@ smalltalk.method({
 selector: "safeVariableNameFor:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$1;
 $2=_st(_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._reservedWords())._includes_(aString);
 if(smalltalk.assert($2)){
 $1=_st(aString).__comma("_");
@@ -629,7 +629,7 @@ smalltalk.method({
 selector: "source",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@source"]) == nil || $receiver == undefined){
 $1="";
 } else {
@@ -646,7 +646,7 @@ smalltalk.method({
 selector: "source:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@source"]=aString;
+return smalltalk.withContext(function($ctx1) { 
self["@source"]=aString;
 return self}, self, "source:", [aString], smalltalk.AbstractCodeGenerator)}
 }),
 smalltalk.AbstractCodeGenerator);
@@ -660,13 +660,13 @@ smalltalk.method({
 selector: "compileNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
-var ir;
-var stream;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
+$ctx1.ir=nil;
+$ctx1.stream=nil;
 _st(_st(self)._semanticAnalyzer())._visit_(aNode);
-ir=_st(_st(self)._translator())._visit_(aNode);
+$ctx1.locals.ir=_st(_st(self)._translator())._visit_(aNode);
 $2=_st(self)._irTranslator();
-_st($2)._visit_(ir);
+_st($2)._visit_($ctx1.locals.ir);
 $3=_st($2)._contents();
 $1=$3;
 return $1;
@@ -680,7 +680,7 @@ smalltalk.method({
 selector: "irTranslator",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st((smalltalk.IRJSTranslator || IRJSTranslator))._new();
 return $1;
 }, self, "irTranslator", [], smalltalk.CodeGenerator)}
@@ -693,7 +693,7 @@ smalltalk.method({
 selector: "semanticAnalyzer",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st((smalltalk.SemanticAnalyzer || SemanticAnalyzer))._on_(_st(self)._currentClass());
 return $1;
 }, self, "semanticAnalyzer", [], smalltalk.CodeGenerator)}
@@ -706,7 +706,7 @@ smalltalk.method({
 selector: "translator",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st((smalltalk.IRASTTranslator || IRASTTranslator))._new();
 _st($2)._source_(_st(self)._source());
 _st($2)._theClass_(_st(self)._currentClass());

+ 78 - 78
js/Compiler-Core.js

@@ -8,7 +8,7 @@ selector: "codeGeneratorClass",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@codeGeneratorClass"]) == nil || $receiver == undefined){
 $1=(smalltalk.InliningCodeGenerator || InliningCodeGenerator);
 } else {
@@ -30,7 +30,7 @@ selector: "codeGeneratorClass:",
 category: 'accessing',
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@codeGeneratorClass"]=aClass;
+return smalltalk.withContext(function($ctx1) { 
self["@codeGeneratorClass"]=aClass;
 return self}, self, "codeGeneratorClass:", [aClass], smalltalk.Compiler)},
 args: ["aClass"],
 source: "codeGeneratorClass: aClass\x0a\x09codeGeneratorClass := aClass",
@@ -46,7 +46,7 @@ selector: "compile:",
 category: 'compiling',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._compileNode_(_st(self)._parse_(aString));
 return $1;
 }, self, "compile:", [aString], smalltalk.Compiler)},
@@ -64,7 +64,7 @@ selector: "compile:forClass:",
 category: 'compiling',
 fn: function (aString,aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(self)._currentClass_(aClass);
 _st(self)._source_(aString);
 $1=_st(self)._compile_(aString);
@@ -84,7 +84,7 @@ selector: "compileExpression:",
 category: 'compiling',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(self)._currentClass_((smalltalk.DoIt || DoIt));
 _st(self)._source_(_st(_st("doIt ^[").__comma(aString)).__comma("] value"));
 $1=_st(self)._compileNode_(_st(self)._parse_(_st(self)._source()));
@@ -104,15 +104,15 @@ selector: "compileNode:",
 category: 'compiling',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var generator;
-var result;
-generator=_st(_st(self)._codeGeneratorClass())._new();
-_st(generator)._source_(_st(self)._source());
-$1=_st(generator)._currentClass_(_st(self)._currentClass());
-result=_st(generator)._compileNode_(aNode);
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.generator=nil;
+$ctx1.result=nil;
+$ctx1.locals.generator=_st(_st(self)._codeGeneratorClass())._new();
+_st($ctx1.locals.generator)._source_(_st(self)._source());
+$1=_st($ctx1.locals.generator)._currentClass_(_st(self)._currentClass());
+$ctx1.locals.result=_st($ctx1.locals.generator)._compileNode_(aNode);
 _st(self)._unknownVariables_([]);
-return result;
+return $ctx1.locals.result;
 }, self, "compileNode:", [aNode], smalltalk.Compiler)},
 args: ["aNode"],
 source: "compileNode: aNode\x0a\x09| generator result |\x0a\x09generator := self codeGeneratorClass new.\x0a\x09generator\x0a\x09\x09source: self source;\x0a\x09\x09currentClass: self currentClass.\x0a\x09result := generator compileNode: aNode.\x0a\x09self unknownVariables: #().\x0a\x09^result",
@@ -128,7 +128,7 @@ selector: "currentClass",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@currentClass"];
+return smalltalk.withContext(function($ctx1) { 
return self["@currentClass"];
 }, self, "currentClass", [], smalltalk.Compiler)},
 args: [],
 source: "currentClass\x0a\x09^currentClass",
@@ -144,7 +144,7 @@ selector: "currentClass:",
 category: 'accessing',
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@currentClass"]=aClass;
+return smalltalk.withContext(function($ctx1) { 
self["@currentClass"]=aClass;
 return self}, self, "currentClass:", [aClass], smalltalk.Compiler)},
 args: ["aClass"],
 source: "currentClass: aClass\x0a\x09currentClass := aClass",
@@ -160,7 +160,7 @@ selector: "eval:",
 category: 'compiling',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { return eval(aString);
+return smalltalk.withContext(function($ctx1) { 
return eval(aString);
 ;
 return self}, self, "eval:", [aString], smalltalk.Compiler)},
 args: ["aString"],
@@ -177,11 +177,11 @@ selector: "evaluateExpression:",
 category: 'compiling',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var result;
+return smalltalk.withContext(function($ctx1) { 
$ctx1.result=nil;
 _st((smalltalk.DoIt || DoIt))._addCompiledMethod_(_st(self)._eval_(_st(self)._compileExpression_(aString)));
-result=_st(_st((smalltalk.DoIt || DoIt))._new())._doIt();
+$ctx1.locals.result=_st(_st((smalltalk.DoIt || DoIt))._new())._doIt();
 _st((smalltalk.DoIt || DoIt))._removeCompiledMethod_(_st(_st((smalltalk.DoIt || DoIt))._methodDictionary())._at_("doIt"));
-return result;
+return $ctx1.locals.result;
 }, self, "evaluateExpression:", [aString], smalltalk.Compiler)},
 args: ["aString"],
 source: "evaluateExpression: aString\x0a\x09\x22Unlike #eval: evaluate a Smalltalk expression and answer the returned object\x22\x0a\x09| result |\x0a\x09DoIt addCompiledMethod: (self eval: (self compileExpression: aString)).\x0a\x09result := DoIt new doIt.\x0a\x09DoIt removeCompiledMethod: (DoIt methodDictionary at: 'doIt').\x0a\x09^result",
@@ -197,12 +197,12 @@ selector: "install:forClass:category:",
 category: 'compiling',
 fn: function (aString,aBehavior,anotherString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var compiled;
-compiled=_st(self)._eval_(_st(self)._compile_forClass_(aString,aBehavior));
-_st(compiled)._category_(anotherString);
-_st(aBehavior)._addCompiledMethod_(compiled);
+return smalltalk.withContext(function($ctx1) { 
$ctx1.compiled=nil;
+$ctx1.locals.compiled=_st(self)._eval_(_st(self)._compile_forClass_(aString,aBehavior));
+_st($ctx1.locals.compiled)._category_(anotherString);
+_st(aBehavior)._addCompiledMethod_($ctx1.locals.compiled);
 _st(self)._setupClass_(aBehavior);
-return compiled;
+return $ctx1.locals.compiled;
 }, self, "install:forClass:category:", [aString,aBehavior,anotherString], smalltalk.Compiler)},
 args: ["aString", "aBehavior", "anotherString"],
 source: "install: aString forClass: aBehavior category: anotherString\x0a\x09| compiled |\x0a\x09compiled := self eval: (self compile: aString forClass: aBehavior).\x0a\x09compiled category: anotherString.\x0a\x09aBehavior addCompiledMethod: compiled.\x0a    self setupClass: aBehavior.\x0a\x09^compiled",
@@ -218,7 +218,7 @@ selector: "parse:",
 category: 'compiling',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._parse_(aString);
 return $1;
 }, self, "parse:", [aString], smalltalk.Compiler)},
@@ -236,7 +236,7 @@ selector: "parseExpression:",
 category: 'compiling',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._parse_(_st(_st("doIt ^[").__comma(aString)).__comma("] value"));
 return $1;
 }, self, "parseExpression:", [aString], smalltalk.Compiler)},
@@ -254,11 +254,11 @@ selector: "recompile:",
 category: 'compiling',
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(_st(aClass)._methodDictionary())._do_((function(each){
-_st(console)._log_(_st(_st(_st(aClass)._name()).__comma(" >> ")).__comma(_st(each)._selector()));
+return smalltalk.withContext(function($ctx2) { 
_st(console)._log_(_st(_st(_st(aClass)._name()).__comma(" >> ")).__comma(_st(each)._selector()));
 return _st(self)._install_forClass_category_(_st(each)._source(),aClass,_st(each)._category());
-}));
+})}));
 _st(self)._setupClass_(aClass);
 $1=_st(aClass)._isMetaclass();
 if(! smalltalk.assert($1)){
@@ -279,15 +279,15 @@ selector: "recompileAll",
 category: 'compiling',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._classes())._do_((function(each){
-_st((smalltalk.Transcript || Transcript))._show_(each);
+return smalltalk.withContext(function($ctx2) { 
_st((smalltalk.Transcript || Transcript))._show_(each);
 $1=_st((smalltalk.Transcript || Transcript))._cr();
 $1;
 return _st((function(){
-return _st(self)._recompile_(each);
-}))._valueWithTimeout_((100));
-}));
+return smalltalk.withContext(function($ctx3) { 
return _st(self)._recompile_(each);
+})}))._valueWithTimeout_((100));
+})}));
 return self}, self, "recompileAll", [], smalltalk.Compiler)},
 args: [],
 source: "recompileAll\x0a\x09Smalltalk current classes do: [:each |\x0a\x09\x09Transcript show: each; cr.\x0a\x09\x09[self recompile: each] valueWithTimeout: 100]",
@@ -303,7 +303,7 @@ selector: "setupClass:",
 category: 'compiling',
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { smalltalk.init(aClass);
+return smalltalk.withContext(function($ctx1) { 
smalltalk.init(aClass);
 ;
 return self}, self, "setupClass:", [aClass], smalltalk.Compiler)},
 args: ["aClass"],
@@ -320,7 +320,7 @@ selector: "source",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@source"]) == nil || $receiver == undefined){
 $1="";
 } else {
@@ -342,7 +342,7 @@ selector: "source:",
 category: 'accessing',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@source"]=aString;
+return smalltalk.withContext(function($ctx1) { 
self["@source"]=aString;
 return self}, self, "source:", [aString], smalltalk.Compiler)},
 args: ["aString"],
 source: "source: aString\x0a\x09source := aString",
@@ -358,7 +358,7 @@ selector: "unknownVariables",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@unknownVariables"];
+return smalltalk.withContext(function($ctx1) { 
return self["@unknownVariables"];
 }, self, "unknownVariables", [], smalltalk.Compiler)},
 args: [],
 source: "unknownVariables\x0a\x09^unknownVariables",
@@ -374,7 +374,7 @@ selector: "unknownVariables:",
 category: 'accessing',
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@unknownVariables"]=aCollection;
+return smalltalk.withContext(function($ctx1) { 
self["@unknownVariables"]=aCollection;
 return self}, self, "unknownVariables:", [aCollection], smalltalk.Compiler)},
 args: ["aCollection"],
 source: "unknownVariables: aCollection\x0a\x09unknownVariables := aCollection",
@@ -391,7 +391,7 @@ selector: "recompile:",
 category: 'compiling',
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._new())._recompile_(aClass);
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._new())._recompile_(aClass);
 return self}, self, "recompile:", [aClass], smalltalk.Compiler.klass)},
 args: ["aClass"],
 source: "recompile: aClass\x0a\x09self new recompile: aClass",
@@ -407,9 +407,9 @@ selector: "recompileAll",
 category: 'compiling',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._classes())._do_((function(each){
-return _st(self)._recompile_(each);
-}));
+return smalltalk.withContext(function($ctx1) { 
_st(_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._classes())._do_((function(each){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._recompile_(each);
+})}));
 return self}, self, "recompileAll", [], smalltalk.Compiler.klass)},
 args: [],
 source: "recompileAll\x0a\x09Smalltalk current classes do: [:each |\x0a\x09\x09self recompile: each]",
@@ -432,7 +432,7 @@ selector: "visit:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aNode)._accept_(self);
 return $1;
 }, self, "visit:", [aNode], smalltalk.NodeVisitor)},
@@ -450,10 +450,10 @@ selector: "visitAll:",
 category: 'visiting',
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aCollection)._do_((function(each){
-return _st(self)._visit_(each);
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._visit_(each);
+})}));
 return $1;
 }, self, "visitAll:", [aCollection], smalltalk.NodeVisitor)},
 args: ["aCollection"],
@@ -470,7 +470,7 @@ selector: "visitAssignmentNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitNode_(aNode);
 return $1;
 }, self, "visitAssignmentNode:", [aNode], smalltalk.NodeVisitor)},
@@ -488,7 +488,7 @@ selector: "visitBlockNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitNode_(aNode);
 return $1;
 }, self, "visitBlockNode:", [aNode], smalltalk.NodeVisitor)},
@@ -506,7 +506,7 @@ selector: "visitBlockSequenceNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitSequenceNode_(aNode);
 return $1;
 }, self, "visitBlockSequenceNode:", [aNode], smalltalk.NodeVisitor)},
@@ -524,7 +524,7 @@ selector: "visitCascadeNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitNode_(aNode);
 return $1;
 }, self, "visitCascadeNode:", [aNode], smalltalk.NodeVisitor)},
@@ -542,7 +542,7 @@ selector: "visitClassReferenceNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitVariableNode_(aNode);
 return $1;
 }, self, "visitClassReferenceNode:", [aNode], smalltalk.NodeVisitor)},
@@ -560,7 +560,7 @@ selector: "visitDynamicArrayNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitNode_(aNode);
 return $1;
 }, self, "visitDynamicArrayNode:", [aNode], smalltalk.NodeVisitor)},
@@ -578,7 +578,7 @@ selector: "visitDynamicDictionaryNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitNode_(aNode);
 return $1;
 }, self, "visitDynamicDictionaryNode:", [aNode], smalltalk.NodeVisitor)},
@@ -596,7 +596,7 @@ selector: "visitJSStatementNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitNode_(aNode);
 return $1;
 }, self, "visitJSStatementNode:", [aNode], smalltalk.NodeVisitor)},
@@ -614,7 +614,7 @@ selector: "visitMethodNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitNode_(aNode);
 return $1;
 }, self, "visitMethodNode:", [aNode], smalltalk.NodeVisitor)},
@@ -632,7 +632,7 @@ selector: "visitNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitAll_(_st(aNode)._nodes());
 return $1;
 }, self, "visitNode:", [aNode], smalltalk.NodeVisitor)},
@@ -650,7 +650,7 @@ selector: "visitReturnNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitNode_(aNode);
 return $1;
 }, self, "visitReturnNode:", [aNode], smalltalk.NodeVisitor)},
@@ -668,7 +668,7 @@ selector: "visitSendNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitNode_(aNode);
 return $1;
 }, self, "visitSendNode:", [aNode], smalltalk.NodeVisitor)},
@@ -686,7 +686,7 @@ selector: "visitSequenceNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitNode_(aNode);
 return $1;
 }, self, "visitSequenceNode:", [aNode], smalltalk.NodeVisitor)},
@@ -704,7 +704,7 @@ selector: "visitValueNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitNode_(aNode);
 return $1;
 }, self, "visitValueNode:", [aNode], smalltalk.NodeVisitor)},
@@ -722,7 +722,7 @@ selector: "visitVariableNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._visitNode_(aNode);
 return $1;
 }, self, "visitVariableNode:", [aNode], smalltalk.NodeVisitor)},
@@ -744,7 +744,7 @@ selector: "classNameFor:",
 category: 'accessing',
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st(aClass)._isMetaclass();
 if(smalltalk.assert($2)){
 $1=_st(_st(_st(aClass)._instanceClass())._name()).__comma(".klass");
@@ -772,7 +772,7 @@ selector: "compileNode:",
 category: 'compiling',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._subclassResponsibility();
+return smalltalk.withContext(function($ctx1) { 
_st(self)._subclassResponsibility();
 return self}, self, "compileNode:", [aNode], smalltalk.AbstractCodeGenerator)},
 args: ["aNode"],
 source: "compileNode: aNode\x0a\x09self subclassResponsibility",
@@ -788,7 +788,7 @@ selector: "currentClass",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@currentClass"];
+return smalltalk.withContext(function($ctx1) { 
return self["@currentClass"];
 }, self, "currentClass", [], smalltalk.AbstractCodeGenerator)},
 args: [],
 source: "currentClass\x0a\x09^currentClass",
@@ -804,7 +804,7 @@ selector: "currentClass:",
 category: 'accessing',
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@currentClass"]=aClass;
+return smalltalk.withContext(function($ctx1) { 
self["@currentClass"]=aClass;
 return self}, self, "currentClass:", [aClass], smalltalk.AbstractCodeGenerator)},
 args: ["aClass"],
 source: "currentClass: aClass\x0a\x09currentClass := aClass",
@@ -820,7 +820,7 @@ selector: "pseudoVariables",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return ["self", "super", "true", "false", "nil", "thisContext"];
+return smalltalk.withContext(function($ctx1) { 
return ["self", "super", "true", "false", "nil", "thisContext"];
 }, self, "pseudoVariables", [], smalltalk.AbstractCodeGenerator)},
 args: [],
 source: "pseudoVariables\x0a\x09^#('self' 'super' 'true' 'false' 'nil' 'thisContext')",
@@ -836,7 +836,7 @@ selector: "safeVariableNameFor:",
 category: 'accessing',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$1;
 $2=_st(_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._reservedWords())._includes_(aString);
 if(smalltalk.assert($2)){
 $1=_st(aString).__comma("_");
@@ -859,7 +859,7 @@ selector: "source",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@source"]) == nil || $receiver == undefined){
 $1="";
 } else {
@@ -881,7 +881,7 @@ selector: "source:",
 category: 'accessing',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@source"]=aString;
+return smalltalk.withContext(function($ctx1) { 
self["@source"]=aString;
 return self}, self, "source:", [aString], smalltalk.AbstractCodeGenerator)},
 args: ["aString"],
 source: "source: aString\x0a\x09source := aString",
@@ -901,13 +901,13 @@ selector: "compileNode:",
 category: 'compiling',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
-var ir;
-var stream;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
+$ctx1.ir=nil;
+$ctx1.stream=nil;
 _st(_st(self)._semanticAnalyzer())._visit_(aNode);
-ir=_st(_st(self)._translator())._visit_(aNode);
+$ctx1.locals.ir=_st(_st(self)._translator())._visit_(aNode);
 $2=_st(self)._irTranslator();
-_st($2)._visit_(ir);
+_st($2)._visit_($ctx1.locals.ir);
 $3=_st($2)._contents();
 $1=$3;
 return $1;
@@ -926,7 +926,7 @@ selector: "irTranslator",
 category: 'compiling',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st((smalltalk.IRJSTranslator || IRJSTranslator))._new();
 return $1;
 }, self, "irTranslator", [], smalltalk.CodeGenerator)},
@@ -944,7 +944,7 @@ selector: "semanticAnalyzer",
 category: 'compiling',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st((smalltalk.SemanticAnalyzer || SemanticAnalyzer))._on_(_st(self)._currentClass());
 return $1;
 }, self, "semanticAnalyzer", [], smalltalk.CodeGenerator)},
@@ -962,7 +962,7 @@ selector: "translator",
 category: 'compiling',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st((smalltalk.IRASTTranslator || IRASTTranslator))._new();
 _st($2)._source_(_st(self)._source());
 _st($2)._theClass_(_st(self)._currentClass());

+ 8 - 8
js/Compiler-Exceptions.deploy.js

@@ -18,7 +18,7 @@ smalltalk.method({
 selector: "messageText",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(" Invalid assignment to variable: ").__comma(_st(self)._variableName());
 return $1;
 }, self, "messageText", [], smalltalk.InvalidAssignmentError)}
@@ -31,7 +31,7 @@ smalltalk.method({
 selector: "variableName",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@variableName"];
+return smalltalk.withContext(function($ctx1) { 
return self["@variableName"];
 }, self, "variableName", [], smalltalk.InvalidAssignmentError)}
 }),
 smalltalk.InvalidAssignmentError);
@@ -42,7 +42,7 @@ smalltalk.method({
 selector: "variableName:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@variableName"]=aString;
+return smalltalk.withContext(function($ctx1) { 
self["@variableName"]=aString;
 return self}, self, "variableName:", [aString], smalltalk.InvalidAssignmentError)}
 }),
 smalltalk.InvalidAssignmentError);
@@ -56,7 +56,7 @@ smalltalk.method({
 selector: "messageText",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st("Variable shadowing error: ").__comma(_st(self)._variableName())).__comma(" is already defined");
 return $1;
 }, self, "messageText", [], smalltalk.ShadowingVariableError)}
@@ -69,7 +69,7 @@ smalltalk.method({
 selector: "variableName",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@variableName"];
+return smalltalk.withContext(function($ctx1) { 
return self["@variableName"];
 }, self, "variableName", [], smalltalk.ShadowingVariableError)}
 }),
 smalltalk.ShadowingVariableError);
@@ -80,7 +80,7 @@ smalltalk.method({
 selector: "variableName:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@variableName"]=aString;
+return smalltalk.withContext(function($ctx1) { 
self["@variableName"]=aString;
 return self}, self, "variableName:", [aString], smalltalk.ShadowingVariableError)}
 }),
 smalltalk.ShadowingVariableError);
@@ -94,7 +94,7 @@ smalltalk.method({
 selector: "variableName",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@variableName"];
+return smalltalk.withContext(function($ctx1) { 
return self["@variableName"];
 }, self, "variableName", [], smalltalk.UnknownVariableError)}
 }),
 smalltalk.UnknownVariableError);
@@ -105,7 +105,7 @@ smalltalk.method({
 selector: "variableName:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@variableName"]=aString;
+return smalltalk.withContext(function($ctx1) { 
self["@variableName"]=aString;
 return self}, self, "variableName:", [aString], smalltalk.UnknownVariableError)}
 }),
 smalltalk.UnknownVariableError);

+ 8 - 8
js/Compiler-Exceptions.js

@@ -24,7 +24,7 @@ selector: "messageText",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(" Invalid assignment to variable: ").__comma(_st(self)._variableName());
 return $1;
 }, self, "messageText", [], smalltalk.InvalidAssignmentError)},
@@ -42,7 +42,7 @@ selector: "variableName",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@variableName"];
+return smalltalk.withContext(function($ctx1) { 
return self["@variableName"];
 }, self, "variableName", [], smalltalk.InvalidAssignmentError)},
 args: [],
 source: "variableName\x0a\x09^ variableName",
@@ -58,7 +58,7 @@ selector: "variableName:",
 category: 'accessing',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@variableName"]=aString;
+return smalltalk.withContext(function($ctx1) { 
self["@variableName"]=aString;
 return self}, self, "variableName:", [aString], smalltalk.InvalidAssignmentError)},
 args: ["aString"],
 source: "variableName: aString\x0a\x09variableName := aString",
@@ -78,7 +78,7 @@ selector: "messageText",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st("Variable shadowing error: ").__comma(_st(self)._variableName())).__comma(" is already defined");
 return $1;
 }, self, "messageText", [], smalltalk.ShadowingVariableError)},
@@ -96,7 +96,7 @@ selector: "variableName",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@variableName"];
+return smalltalk.withContext(function($ctx1) { 
return self["@variableName"];
 }, self, "variableName", [], smalltalk.ShadowingVariableError)},
 args: [],
 source: "variableName\x0a\x09^ variableName",
@@ -112,7 +112,7 @@ selector: "variableName:",
 category: 'accessing',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@variableName"]=aString;
+return smalltalk.withContext(function($ctx1) { 
self["@variableName"]=aString;
 return self}, self, "variableName:", [aString], smalltalk.ShadowingVariableError)},
 args: ["aString"],
 source: "variableName: aString\x0a\x09variableName := aString",
@@ -132,7 +132,7 @@ selector: "variableName",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@variableName"];
+return smalltalk.withContext(function($ctx1) { 
return self["@variableName"];
 }, self, "variableName", [], smalltalk.UnknownVariableError)},
 args: [],
 source: "variableName\x0a\x09^ variableName",
@@ -148,7 +148,7 @@ selector: "variableName:",
 category: 'accessing',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@variableName"]=aString;
+return smalltalk.withContext(function($ctx1) { 
self["@variableName"]=aString;
 return self}, self, "variableName:", [aString], smalltalk.UnknownVariableError)},
 args: ["aString"],
 source: "variableName: aString\x0a\x09variableName := aString",

文件差异内容过多而无法显示
+ 168 - 167
js/Compiler-IR.deploy.js


文件差异内容过多而无法显示
+ 168 - 167
js/Compiler-IR.js


+ 191 - 191
js/Compiler-Inlining.deploy.js

@@ -6,7 +6,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitIRInlinedAssignment_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.IRInlinedAssignment)}
@@ -19,7 +19,7 @@ smalltalk.method({
 selector: "isInlined",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isInlined", [], smalltalk.IRInlinedAssignment)}
 }),
 smalltalk.IRInlinedAssignment);
@@ -33,7 +33,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(aVisitor)._visitIRInlinedClosure_(self);
+return smalltalk.withContext(function($ctx1) { 
_st(aVisitor)._visitIRInlinedClosure_(self);
 return self}, self, "accept:", [aVisitor], smalltalk.IRInlinedClosure)}
 }),
 smalltalk.IRInlinedClosure);
@@ -44,7 +44,7 @@ smalltalk.method({
 selector: "isInlined",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isInlined", [], smalltalk.IRInlinedClosure)}
 }),
 smalltalk.IRInlinedClosure);
@@ -58,7 +58,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitIRInlinedReturn_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.IRInlinedReturn)}
@@ -71,7 +71,7 @@ smalltalk.method({
 selector: "isInlined",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isInlined", [], smalltalk.IRInlinedReturn)}
 }),
 smalltalk.IRInlinedReturn);
@@ -85,7 +85,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitIRInlinedNonLocalReturn_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.IRInlinedNonLocalReturn)}
@@ -98,7 +98,7 @@ smalltalk.method({
 selector: "isInlined",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isInlined", [], smalltalk.IRInlinedNonLocalReturn)}
 }),
 smalltalk.IRInlinedNonLocalReturn);
@@ -112,7 +112,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(aVisitor)._visitInlinedSend_(self);
+return smalltalk.withContext(function($ctx1) { 
_st(aVisitor)._visitInlinedSend_(self);
 return self}, self, "accept:", [aVisitor], smalltalk.IRInlinedSend)}
 }),
 smalltalk.IRInlinedSend);
@@ -123,7 +123,7 @@ smalltalk.method({
 selector: "isInlined",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isInlined", [], smalltalk.IRInlinedSend)}
 }),
 smalltalk.IRInlinedSend);
@@ -137,7 +137,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(aVisitor)._visitIRInlinedIfFalse_(self);
+return smalltalk.withContext(function($ctx1) { 
_st(aVisitor)._visitIRInlinedIfFalse_(self);
 return self}, self, "accept:", [aVisitor], smalltalk.IRInlinedIfFalse)}
 }),
 smalltalk.IRInlinedIfFalse);
@@ -151,7 +151,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(aVisitor)._visitIRInlinedIfNilIfNotNil_(self);
+return smalltalk.withContext(function($ctx1) { 
_st(aVisitor)._visitIRInlinedIfNilIfNotNil_(self);
 return self}, self, "accept:", [aVisitor], smalltalk.IRInlinedIfNilIfNotNil)}
 }),
 smalltalk.IRInlinedIfNilIfNotNil);
@@ -165,7 +165,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(aVisitor)._visitIRInlinedIfTrue_(self);
+return smalltalk.withContext(function($ctx1) { 
_st(aVisitor)._visitIRInlinedIfTrue_(self);
 return self}, self, "accept:", [aVisitor], smalltalk.IRInlinedIfTrue)}
 }),
 smalltalk.IRInlinedIfTrue);
@@ -179,7 +179,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(aVisitor)._visitIRInlinedIfTrueIfFalse_(self);
+return smalltalk.withContext(function($ctx1) { 
_st(aVisitor)._visitIRInlinedIfTrueIfFalse_(self);
 return self}, self, "accept:", [aVisitor], smalltalk.IRInlinedIfTrueIfFalse)}
 }),
 smalltalk.IRInlinedIfTrueIfFalse);
@@ -193,7 +193,7 @@ smalltalk.method({
 selector: "accept:",
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(aVisitor)._visitIRInlinedSequence_(self);
+return smalltalk.withContext(function($ctx1) { 
_st(aVisitor)._visitIRInlinedSequence_(self);
 return self}, self, "accept:", [aVisitor], smalltalk.IRInlinedSequence)}
 }),
 smalltalk.IRInlinedSequence);
@@ -204,7 +204,7 @@ smalltalk.method({
 selector: "isInlined",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isInlined", [], smalltalk.IRInlinedSequence)}
 }),
 smalltalk.IRInlinedSequence);
@@ -218,7 +218,7 @@ smalltalk.method({
 selector: "assignmentInliner",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st((smalltalk.IRAssignmentInliner || IRAssignmentInliner))._new();
 _st($2)._translator_(self);
 $3=_st($2)._yourself();
@@ -234,7 +234,7 @@ smalltalk.method({
 selector: "nonLocalReturnInliner",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st((smalltalk.IRNonLocalReturnInliner || IRNonLocalReturnInliner))._new();
 _st($2)._translator_(self);
 $3=_st($2)._yourself();
@@ -250,7 +250,7 @@ smalltalk.method({
 selector: "returnInliner",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st((smalltalk.IRReturnInliner || IRReturnInliner))._new();
 _st($2)._translator_(self);
 $3=_st($2)._yourself();
@@ -266,7 +266,7 @@ smalltalk.method({
 selector: "sendInliner",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st((smalltalk.IRSendInliner || IRSendInliner))._new();
 _st($2)._translator_(self);
 $3=_st($2)._yourself();
@@ -282,12 +282,12 @@ smalltalk.method({
 selector: "shouldInlineAssignment:",
 fn: function (anIRAssignment){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(_st(anIRAssignment)._isInlined())._not())._and_((function(){
-return _st(_st(_st(_st(anIRAssignment)._instructions())._last())._isSend())._and_((function(){
-return _st(self)._shouldInlineSend_(_st(_st(anIRAssignment)._instructions())._last());
-}));
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(_st(_st(anIRAssignment)._instructions())._last())._isSend())._and_((function(){
+return smalltalk.withContext(function($ctx3) { 
return _st(self)._shouldInlineSend_(_st(_st(anIRAssignment)._instructions())._last());
+})}));
+})}));
 return $1;
 }, self, "shouldInlineAssignment:", [anIRAssignment], smalltalk.IRInliner)}
 }),
@@ -299,12 +299,12 @@ smalltalk.method({
 selector: "shouldInlineReturn:",
 fn: function (anIRReturn){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(_st(anIRReturn)._isInlined())._not())._and_((function(){
-return _st(_st(_st(_st(anIRReturn)._instructions())._first())._isSend())._and_((function(){
-return _st(self)._shouldInlineSend_(_st(_st(anIRReturn)._instructions())._first());
-}));
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(_st(_st(anIRReturn)._instructions())._first())._isSend())._and_((function(){
+return smalltalk.withContext(function($ctx3) { 
return _st(self)._shouldInlineSend_(_st(_st(anIRReturn)._instructions())._first());
+})}));
+})}));
 return $1;
 }, self, "shouldInlineReturn:", [anIRReturn], smalltalk.IRInliner)}
 }),
@@ -316,10 +316,10 @@ smalltalk.method({
 selector: "shouldInlineSend:",
 fn: function (anIRSend){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(_st(anIRSend)._isInlined())._not())._and_((function(){
-return _st((smalltalk.IRSendInliner || IRSendInliner))._shouldInline_(anIRSend);
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st((smalltalk.IRSendInliner || IRSendInliner))._shouldInline_(anIRSend);
+})}));
 return $1;
 }, self, "shouldInlineSend:", [anIRSend], smalltalk.IRInliner)}
 }),
@@ -331,21 +331,21 @@ smalltalk.method({
 selector: "transformNonLocalReturn:",
 fn: function (anIRNonLocalReturn){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3,$4;
-var localReturn;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3,$4;
+$ctx1.localReturn=nil;
 $1=_st(_st(anIRNonLocalReturn)._scope())._canInlineNonLocalReturns();
 if(smalltalk.assert($1)){
 _st(_st(_st(anIRNonLocalReturn)._scope())._methodScope())._removeNonLocalReturn_(_st(anIRNonLocalReturn)._scope());
 $2=_st((smalltalk.IRReturn || IRReturn))._new();
 _st($2)._scope_(_st(anIRNonLocalReturn)._scope());
 $3=_st($2)._yourself();
-localReturn=$3;
-localReturn;
+$ctx1.locals.localReturn=$3;
+$ctx1.locals.localReturn;
 _st(_st(anIRNonLocalReturn)._instructions())._do_((function(each){
-return _st(localReturn)._add_(each);
-}));
-_st(anIRNonLocalReturn)._replaceWith_(localReturn);
-return localReturn;
+return smalltalk.withContext(function($ctx2) { 
return _st($ctx1.locals.localReturn)._add_(each);
+})}));
+_st(anIRNonLocalReturn)._replaceWith_($ctx1.locals.localReturn);
+return $ctx1.locals.localReturn;
 };
 $4=smalltalk.IRVisitor.fn.prototype._visitIRNonLocalReturn_.apply(_st(self), [anIRNonLocalReturn]);
 return $4;
@@ -359,7 +359,7 @@ smalltalk.method({
 selector: "visitIRAssignment:",
 fn: function (anIRAssignment){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$1;
 $2=_st(self)._shouldInlineAssignment_(anIRAssignment);
 if(smalltalk.assert($2)){
 $1=_st(_st(self)._assignmentInliner())._inlineAssignment_(anIRAssignment);
@@ -377,7 +377,7 @@ smalltalk.method({
 selector: "visitIRNonLocalReturn:",
 fn: function (anIRNonLocalReturn){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$1;
 $2=_st(self)._shouldInlineReturn_(anIRNonLocalReturn);
 if(smalltalk.assert($2)){
 $1=_st(_st(self)._nonLocalReturnInliner())._inlineReturn_(anIRNonLocalReturn);
@@ -395,7 +395,7 @@ smalltalk.method({
 selector: "visitIRReturn:",
 fn: function (anIRReturn){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$1;
 $2=_st(self)._shouldInlineReturn_(anIRReturn);
 if(smalltalk.assert($2)){
 $1=_st(_st(self)._returnInliner())._inlineReturn_(anIRReturn);
@@ -413,7 +413,7 @@ smalltalk.method({
 selector: "visitIRSend:",
 fn: function (anIRSend){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$1;
 $2=_st(self)._shouldInlineSend_(anIRSend);
 if(smalltalk.assert($2)){
 $1=_st(_st(self)._sendInliner())._inlineSend_(anIRSend);
@@ -434,7 +434,7 @@ smalltalk.method({
 selector: "visitIRInlinedAssignment:",
 fn: function (anIRInlinedAssignment){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._visit_(_st(_st(anIRInlinedAssignment)._instructions())._last());
+return smalltalk.withContext(function($ctx1) { 
_st(self)._visit_(_st(_st(anIRInlinedAssignment)._instructions())._last());
 return self}, self, "visitIRInlinedAssignment:", [anIRInlinedAssignment], smalltalk.IRInliningJSTranslator)}
 }),
 smalltalk.IRInliningJSTranslator);
@@ -445,9 +445,9 @@ smalltalk.method({
 selector: "visitIRInlinedClosure:",
 fn: function (anIRInlinedClosure){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(anIRInlinedClosure)._instructions())._do_((function(each){
-return _st(self)._visit_(each);
-}));
+return smalltalk.withContext(function($ctx1) { 
_st(_st(anIRInlinedClosure)._instructions())._do_((function(each){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._visit_(each);
+})}));
 return self}, self, "visitIRInlinedClosure:", [anIRInlinedClosure], smalltalk.IRInliningJSTranslator)}
 }),
 smalltalk.IRInliningJSTranslator);
@@ -458,13 +458,13 @@ smalltalk.method({
 selector: "visitIRInlinedIfFalse:",
 fn: function (anIRInlinedIfFalse){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._stream())._nextPutIf_with_((function(){
-_st(_st(self)._stream())._nextPutAll_("! smalltalk.assert(");
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._stream())._nextPutIf_with_((function(){
+return smalltalk.withContext(function($ctx2) { 
_st(_st(self)._stream())._nextPutAll_("! smalltalk.assert(");
 _st(self)._visit_(_st(_st(anIRInlinedIfFalse)._instructions())._first());
 return _st(_st(self)._stream())._nextPutAll_(")");
-}),(function(){
-return _st(self)._visit_(_st(_st(anIRInlinedIfFalse)._instructions())._last());
-}));
+})}),(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._visit_(_st(_st(anIRInlinedIfFalse)._instructions())._last());
+})}));
 return self}, self, "visitIRInlinedIfFalse:", [anIRInlinedIfFalse], smalltalk.IRInliningJSTranslator)}
 }),
 smalltalk.IRInliningJSTranslator);
@@ -475,13 +475,13 @@ smalltalk.method({
 selector: "visitIRInlinedIfNil:",
 fn: function (anIRInlinedIfNil){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._stream())._nextPutIf_with_((function(){
-_st(_st(self)._stream())._nextPutAll_("($receiver = ");
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._stream())._nextPutIf_with_((function(){
+return smalltalk.withContext(function($ctx2) { 
_st(_st(self)._stream())._nextPutAll_("($receiver = ");
 _st(self)._visit_(_st(_st(anIRInlinedIfNil)._instructions())._first());
 return _st(_st(self)._stream())._nextPutAll_(") == nil || $receiver == undefined");
-}),(function(){
-return _st(self)._visit_(_st(_st(anIRInlinedIfNil)._instructions())._last());
-}));
+})}),(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._visit_(_st(_st(anIRInlinedIfNil)._instructions())._last());
+})}));
 return self}, self, "visitIRInlinedIfNil:", [anIRInlinedIfNil], smalltalk.IRInliningJSTranslator)}
 }),
 smalltalk.IRInliningJSTranslator);
@@ -492,15 +492,15 @@ smalltalk.method({
 selector: "visitIRInlinedIfNilIfNotNil:",
 fn: function (anIRInlinedIfNilIfNotNil){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._stream())._nextPutIfElse_with_with_((function(){
-_st(_st(self)._stream())._nextPutAll_("($receiver = ");
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._stream())._nextPutIfElse_with_with_((function(){
+return smalltalk.withContext(function($ctx2) { 
_st(_st(self)._stream())._nextPutAll_("($receiver = ");
 _st(self)._visit_(_st(_st(anIRInlinedIfNilIfNotNil)._instructions())._first());
 return _st(_st(self)._stream())._nextPutAll_(") == nil || $receiver == undefined");
-}),(function(){
-return _st(self)._visit_(_st(_st(anIRInlinedIfNilIfNotNil)._instructions())._second());
-}),(function(){
-return _st(self)._visit_(_st(_st(anIRInlinedIfNilIfNotNil)._instructions())._third());
-}));
+})}),(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._visit_(_st(_st(anIRInlinedIfNilIfNotNil)._instructions())._second());
+})}),(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._visit_(_st(_st(anIRInlinedIfNilIfNotNil)._instructions())._third());
+})}));
 return self}, self, "visitIRInlinedIfNilIfNotNil:", [anIRInlinedIfNilIfNotNil], smalltalk.IRInliningJSTranslator)}
 }),
 smalltalk.IRInliningJSTranslator);
@@ -511,13 +511,13 @@ smalltalk.method({
 selector: "visitIRInlinedIfTrue:",
 fn: function (anIRInlinedIfTrue){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._stream())._nextPutIf_with_((function(){
-_st(_st(self)._stream())._nextPutAll_("smalltalk.assert(");
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._stream())._nextPutIf_with_((function(){
+return smalltalk.withContext(function($ctx2) { 
_st(_st(self)._stream())._nextPutAll_("smalltalk.assert(");
 _st(self)._visit_(_st(_st(anIRInlinedIfTrue)._instructions())._first());
 return _st(_st(self)._stream())._nextPutAll_(")");
-}),(function(){
-return _st(self)._visit_(_st(_st(anIRInlinedIfTrue)._instructions())._last());
-}));
+})}),(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._visit_(_st(_st(anIRInlinedIfTrue)._instructions())._last());
+})}));
 return self}, self, "visitIRInlinedIfTrue:", [anIRInlinedIfTrue], smalltalk.IRInliningJSTranslator)}
 }),
 smalltalk.IRInliningJSTranslator);
@@ -528,15 +528,15 @@ smalltalk.method({
 selector: "visitIRInlinedIfTrueIfFalse:",
 fn: function (anIRInlinedIfTrueIfFalse){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._stream())._nextPutIfElse_with_with_((function(){
-_st(_st(self)._stream())._nextPutAll_("smalltalk.assert(");
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._stream())._nextPutIfElse_with_with_((function(){
+return smalltalk.withContext(function($ctx2) { 
_st(_st(self)._stream())._nextPutAll_("smalltalk.assert(");
 _st(self)._visit_(_st(_st(anIRInlinedIfTrueIfFalse)._instructions())._first());
 return _st(_st(self)._stream())._nextPutAll_(")");
-}),(function(){
-return _st(self)._visit_(_st(_st(anIRInlinedIfTrueIfFalse)._instructions())._second());
-}),(function(){
-return _st(self)._visit_(_st(_st(anIRInlinedIfTrueIfFalse)._instructions())._third());
-}));
+})}),(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._visit_(_st(_st(anIRInlinedIfTrueIfFalse)._instructions())._second());
+})}),(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._visit_(_st(_st(anIRInlinedIfTrueIfFalse)._instructions())._third());
+})}));
 return self}, self, "visitIRInlinedIfTrueIfFalse:", [anIRInlinedIfTrueIfFalse], smalltalk.IRInliningJSTranslator)}
 }),
 smalltalk.IRInliningJSTranslator);
@@ -547,11 +547,11 @@ smalltalk.method({
 selector: "visitIRInlinedNonLocalReturn:",
 fn: function (anIRInlinedReturn){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._stream())._nextPutStatementWith_((function(){
-return _st(self)._visit_(_st(_st(anIRInlinedReturn)._instructions())._last());
-}));
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._stream())._nextPutStatementWith_((function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._visit_(_st(_st(anIRInlinedReturn)._instructions())._last());
+})}));
 _st(_st(self)._stream())._nextPutNonLocalReturnWith_((function(){
-}));
+return smalltalk.withContext(function($ctx2) { 
})}));
 return self}, self, "visitIRInlinedNonLocalReturn:", [anIRInlinedReturn], smalltalk.IRInliningJSTranslator)}
 }),
 smalltalk.IRInliningJSTranslator);
@@ -562,7 +562,7 @@ smalltalk.method({
 selector: "visitIRInlinedReturn:",
 fn: function (anIRInlinedReturn){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._visit_(_st(_st(anIRInlinedReturn)._instructions())._last());
+return smalltalk.withContext(function($ctx1) { 
_st(self)._visit_(_st(_st(anIRInlinedReturn)._instructions())._last());
 return self}, self, "visitIRInlinedReturn:", [anIRInlinedReturn], smalltalk.IRInliningJSTranslator)}
 }),
 smalltalk.IRInliningJSTranslator);
@@ -573,11 +573,11 @@ smalltalk.method({
 selector: "visitIRInlinedSequence:",
 fn: function (anIRInlinedSequence){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(anIRInlinedSequence)._instructions())._do_((function(each){
-return _st(_st(self)._stream())._nextPutStatementWith_((function(){
-return _st(self)._visit_(each);
-}));
-}));
+return smalltalk.withContext(function($ctx1) { 
_st(_st(anIRInlinedSequence)._instructions())._do_((function(each){
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(self)._stream())._nextPutStatementWith_((function(){
+return smalltalk.withContext(function($ctx3) { 
return _st(self)._visit_(each);
+})}));
+})}));
 return self}, self, "visitIRInlinedSequence:", [anIRInlinedSequence], smalltalk.IRInliningJSTranslator)}
 }),
 smalltalk.IRInliningJSTranslator);
@@ -591,7 +591,7 @@ smalltalk.method({
 selector: "ifFalse:",
 fn: function (anIRInstruction){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._inlinedSend_with_(_st((smalltalk.IRInlinedIfFalse || IRInlinedIfFalse))._new(),anIRInstruction);
 return $1;
 }, self, "ifFalse:", [anIRInstruction], smalltalk.IRSendInliner)}
@@ -604,7 +604,7 @@ smalltalk.method({
 selector: "ifFalse:ifTrue:",
 fn: function (anIRInstruction,anotherIRInstruction){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._perform_withArguments_(smalltalk.symbolFor("ifTrue:ifFalse:"),[anotherIRInstruction,anIRInstruction]);
 return $1;
 }, self, "ifFalse:ifTrue:", [anIRInstruction,anotherIRInstruction], smalltalk.IRSendInliner)}
@@ -617,7 +617,7 @@ smalltalk.method({
 selector: "ifNil:",
 fn: function (anIRInstruction){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$4,$5,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$4,$5,$1;
 $2=_st((smalltalk.IRClosure || IRClosure))._new();
 _st($2)._scope_(_st(_st(anIRInstruction)._scope())._copy());
 $3=_st((smalltalk.IRBlockSequence || IRBlockSequence))._new();
@@ -637,7 +637,7 @@ smalltalk.method({
 selector: "ifNil:ifNotNil:",
 fn: function (anIRInstruction,anotherIRInstruction){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._inlinedSend_with_with_(_st((smalltalk.IRInlinedIfNilIfNotNil || IRInlinedIfNilIfNotNil))._new(),anIRInstruction,anotherIRInstruction);
 return $1;
 }, self, "ifNil:ifNotNil:", [anIRInstruction,anotherIRInstruction], smalltalk.IRSendInliner)}
@@ -650,7 +650,7 @@ smalltalk.method({
 selector: "ifNotNil:",
 fn: function (anIRInstruction){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$4,$5,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$4,$5,$1;
 $2=_st((smalltalk.IRClosure || IRClosure))._new();
 _st($2)._scope_(_st(_st(anIRInstruction)._scope())._copy());
 $3=_st((smalltalk.IRBlockSequence || IRBlockSequence))._new();
@@ -670,7 +670,7 @@ smalltalk.method({
 selector: "ifNotNil:ifNil:",
 fn: function (anIRInstruction,anotherIRInstruction){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._inlinedSend_with_with_(_st((smalltalk.IRInlinedIfNilIfNotNil || IRInlinedIfNilIfNotNil))._new(),anotherIRInstruction,anIRInstruction);
 return $1;
 }, self, "ifNotNil:ifNil:", [anIRInstruction,anotherIRInstruction], smalltalk.IRSendInliner)}
@@ -683,7 +683,7 @@ smalltalk.method({
 selector: "ifTrue:",
 fn: function (anIRInstruction){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._inlinedSend_with_(_st((smalltalk.IRInlinedIfTrue || IRInlinedIfTrue))._new(),anIRInstruction);
 return $1;
 }, self, "ifTrue:", [anIRInstruction], smalltalk.IRSendInliner)}
@@ -696,7 +696,7 @@ smalltalk.method({
 selector: "ifTrue:ifFalse:",
 fn: function (anIRInstruction,anotherIRInstruction){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._inlinedSend_with_with_(_st((smalltalk.IRInlinedIfTrueIfFalse || IRInlinedIfTrueIfFalse))._new(),anIRInstruction,anotherIRInstruction);
 return $1;
 }, self, "ifTrue:ifFalse:", [anIRInstruction,anotherIRInstruction], smalltalk.IRSendInliner)}
@@ -709,35 +709,35 @@ smalltalk.method({
 selector: "inlineClosure:",
 fn: function (anIRClosure){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
-var inlinedClosure;
-var sequence;
-var statements;
-inlinedClosure=_st(self)._inlinedClosure();
-_st(inlinedClosure)._scope_(_st(anIRClosure)._scope());
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
+$ctx1.inlinedClosure=nil;
+$ctx1.sequence=nil;
+$ctx1.statements=nil;
+$ctx1.locals.inlinedClosure=_st(self)._inlinedClosure();
+_st($ctx1.locals.inlinedClosure)._scope_(_st(anIRClosure)._scope());
 _st(_st(anIRClosure)._instructions())._do_((function(each){
-$1=_st(each)._isSequence();
+return smalltalk.withContext(function($ctx2) { 
$1=_st(each)._isSequence();
 if(! smalltalk.assert($1)){
-return _st(inlinedClosure)._add_(each);
+return _st($ctx1.locals.inlinedClosure)._add_(each);
 };
-}));
-sequence=_st(self)._inlinedSequence();
-_st(inlinedClosure)._add_(sequence);
-statements=_st(_st(_st(anIRClosure)._instructions())._last())._instructions();
-_st(statements)._ifNotEmpty_((function(){
-_st(_st(statements)._allButLast())._do_((function(each){
-return _st(sequence)._add_(each);
-}));
-$2=_st(_st(_st(statements)._last())._isReturn())._and_((function(){
-return _st(_st(statements)._last())._isBlockReturn();
-}));
+})}));
+$ctx1.locals.sequence=_st(self)._inlinedSequence();
+_st($ctx1.locals.inlinedClosure)._add_($ctx1.locals.sequence);
+$ctx1.locals.statements=_st(_st(_st(anIRClosure)._instructions())._last())._instructions();
+_st($ctx1.locals.statements)._ifNotEmpty_((function(){
+return smalltalk.withContext(function($ctx2) { 
_st(_st($ctx1.locals.statements)._allButLast())._do_((function(each){
+return smalltalk.withContext(function($ctx3) { 
return _st($ctx1.locals.sequence)._add_(each);
+})}));
+$2=_st(_st(_st($ctx1.locals.statements)._last())._isReturn())._and_((function(){
+return smalltalk.withContext(function($ctx3) { 
return _st(_st($ctx1.locals.statements)._last())._isBlockReturn();
+})}));
 if(smalltalk.assert($2)){
-return _st(sequence)._add_(_st(_st(_st(statements)._last())._instructions())._first());
+return _st($ctx1.locals.sequence)._add_(_st(_st(_st($ctx1.locals.statements)._last())._instructions())._first());
 } else {
-return _st(sequence)._add_(_st(statements)._last());
+return _st($ctx1.locals.sequence)._add_(_st($ctx1.locals.statements)._last());
 };
-}));
-return inlinedClosure;
+})}));
+return $ctx1.locals.inlinedClosure;
 }, self, "inlineClosure:", [anIRClosure], smalltalk.IRSendInliner)}
 }),
 smalltalk.IRSendInliner);
@@ -748,7 +748,7 @@ smalltalk.method({
 selector: "inlineSend:",
 fn: function (anIRSend){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(self)._send_(anIRSend);
 $1=_st(self)._perform_withArguments_(_st(_st(self)._send())._selector(),_st(_st(_st(self)._send())._instructions())._allButFirst());
 return $1;
@@ -762,7 +762,7 @@ smalltalk.method({
 selector: "inlinedClosure",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st((smalltalk.IRInlinedClosure || IRInlinedClosure))._new();
 return $1;
 }, self, "inlinedClosure", [], smalltalk.IRSendInliner)}
@@ -775,8 +775,8 @@ smalltalk.method({
 selector: "inlinedSend:with:",
 fn: function (inlinedSend,anIRInstruction){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3;
-var inlinedClosure;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3;
+$ctx1.inlinedClosure=nil;
 $1=_st(anIRInstruction)._isClosure();
 if(! smalltalk.assert($1)){
 _st(self)._inliningError_("Message argument should be a block");
@@ -785,9 +785,9 @@ $2=_st(_st(_st(anIRInstruction)._arguments())._size()).__eq((0));
 if(! smalltalk.assert($2)){
 _st(self)._inliningError_("Inlined block should have zero argument");
 };
-inlinedClosure=_st(_st(self)._translator())._visit_(_st(self)._inlineClosure_(anIRInstruction));
+$ctx1.locals.inlinedClosure=_st(_st(self)._translator())._visit_(_st(self)._inlineClosure_(anIRInstruction));
 _st(inlinedSend)._add_(_st(_st(_st(self)._send())._instructions())._first());
-$3=_st(inlinedSend)._add_(inlinedClosure);
+$3=_st(inlinedSend)._add_($ctx1.locals.inlinedClosure);
 _st(_st(self)._send())._replaceWith_(inlinedSend);
 return inlinedSend;
 }, self, "inlinedSend:with:", [inlinedSend,anIRInstruction], smalltalk.IRSendInliner)}
@@ -800,9 +800,9 @@ smalltalk.method({
 selector: "inlinedSend:with:with:",
 fn: function (inlinedSend,anIRInstruction,anotherIRInstruction){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3,$4,$5;
-var inlinedClosure1;
-var inlinedClosure2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3,$4,$5;
+$ctx1.inlinedClosure1=nil;
+$ctx1.inlinedClosure2=nil;
 $1=_st(anIRInstruction)._isClosure();
 if(! smalltalk.assert($1)){
 _st(self)._inliningError_("Message argument should be a block");
@@ -819,11 +819,11 @@ $4=_st(_st(_st(anotherIRInstruction)._arguments())._size()).__eq((0));
 if(! smalltalk.assert($4)){
 _st(self)._inliningError_("Inlined block should have zero argument");
 };
-inlinedClosure1=_st(_st(self)._translator())._visit_(_st(self)._inlineClosure_(anIRInstruction));
-inlinedClosure2=_st(_st(self)._translator())._visit_(_st(self)._inlineClosure_(anotherIRInstruction));
+$ctx1.locals.inlinedClosure1=_st(_st(self)._translator())._visit_(_st(self)._inlineClosure_(anIRInstruction));
+$ctx1.locals.inlinedClosure2=_st(_st(self)._translator())._visit_(_st(self)._inlineClosure_(anotherIRInstruction));
 _st(inlinedSend)._add_(_st(_st(_st(self)._send())._instructions())._first());
-_st(inlinedSend)._add_(inlinedClosure1);
-$5=_st(inlinedSend)._add_(inlinedClosure2);
+_st(inlinedSend)._add_($ctx1.locals.inlinedClosure1);
+$5=_st(inlinedSend)._add_($ctx1.locals.inlinedClosure2);
 _st(_st(self)._send())._replaceWith_(inlinedSend);
 return inlinedSend;
 }, self, "inlinedSend:with:with:", [inlinedSend,anIRInstruction,anotherIRInstruction], smalltalk.IRSendInliner)}
@@ -836,7 +836,7 @@ smalltalk.method({
 selector: "inlinedSequence",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st((smalltalk.IRInlinedSequence || IRInlinedSequence))._new();
 return $1;
 }, self, "inlinedSequence", [], smalltalk.IRSendInliner)}
@@ -849,7 +849,7 @@ smalltalk.method({
 selector: "inliningError:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st((smalltalk.InliningError || InliningError))._signal_(aString);
+return smalltalk.withContext(function($ctx1) { 
_st((smalltalk.InliningError || InliningError))._signal_(aString);
 return self}, self, "inliningError:", [aString], smalltalk.IRSendInliner)}
 }),
 smalltalk.IRSendInliner);
@@ -860,7 +860,7 @@ smalltalk.method({
 selector: "send",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@send"];
+return smalltalk.withContext(function($ctx1) { 
return self["@send"];
 }, self, "send", [], smalltalk.IRSendInliner)}
 }),
 smalltalk.IRSendInliner);
@@ -871,7 +871,7 @@ smalltalk.method({
 selector: "send:",
 fn: function (anIRSend){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@send"]=anIRSend;
+return smalltalk.withContext(function($ctx1) { 
self["@send"]=anIRSend;
 return self}, self, "send:", [anIRSend], smalltalk.IRSendInliner)}
 }),
 smalltalk.IRSendInliner);
@@ -882,7 +882,7 @@ smalltalk.method({
 selector: "translator",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@translator"];
+return smalltalk.withContext(function($ctx1) { 
return self["@translator"];
 }, self, "translator", [], smalltalk.IRSendInliner)}
 }),
 smalltalk.IRSendInliner);
@@ -893,7 +893,7 @@ smalltalk.method({
 selector: "translator:",
 fn: function (anASTTranslator){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@translator"]=anASTTranslator;
+return smalltalk.withContext(function($ctx1) { 
self["@translator"]=anASTTranslator;
 return self}, self, "translator:", [anASTTranslator], smalltalk.IRSendInliner)}
 }),
 smalltalk.IRSendInliner);
@@ -905,7 +905,7 @@ smalltalk.method({
 selector: "inlinedSelectors",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return ["ifTrue:", "ifFalse:", "ifTrue:ifFalse:", "ifFalse:ifTrue:", "ifNil:", "ifNotNil:", "ifNil:ifNotNil:", "ifNotNil:ifNil"];
+return smalltalk.withContext(function($ctx1) { 
return ["ifTrue:", "ifFalse:", "ifTrue:ifFalse:", "ifFalse:ifTrue:", "ifNil:", "ifNotNil:", "ifNil:ifNotNil:", "ifNotNil:ifNil"];
 }, self, "inlinedSelectors", [], smalltalk.IRSendInliner.klass)}
 }),
 smalltalk.IRSendInliner.klass);
@@ -916,7 +916,7 @@ smalltalk.method({
 selector: "shouldInline:",
 fn: function (anIRInstruction){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 var $early={};
 try {
 $1=_st(_st(self)._inlinedSelectors())._includes_(_st(anIRInstruction)._selector());
@@ -924,11 +924,11 @@ if(! smalltalk.assert($1)){
 return false;
 };
 _st(_st(_st(anIRInstruction)._instructions())._allButFirst())._do_((function(each){
-$2=_st(each)._isClosure();
+return smalltalk.withContext(function($ctx2) { 
$2=_st(each)._isClosure();
 if(! smalltalk.assert($2)){
 throw $early=[false];
 };
-}));
+})}));
 return true;
 }
 catch(e) {if(e===$early)return e[0]; throw e}
@@ -944,7 +944,7 @@ smalltalk.method({
 selector: "assignment",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@assignment"];
+return smalltalk.withContext(function($ctx1) { 
return self["@assignment"];
 }, self, "assignment", [], smalltalk.IRAssignmentInliner)}
 }),
 smalltalk.IRAssignmentInliner);
@@ -955,7 +955,7 @@ smalltalk.method({
 selector: "assignment:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@assignment"]=aNode;
+return smalltalk.withContext(function($ctx1) { 
self["@assignment"]=aNode;
 return self}, self, "assignment:", [aNode], smalltalk.IRAssignmentInliner)}
 }),
 smalltalk.IRAssignmentInliner);
@@ -966,15 +966,15 @@ smalltalk.method({
 selector: "inlineAssignment:",
 fn: function (anIRAssignment){
 var self=this;
-return smalltalk.withContext(function($ctx) { var inlinedAssignment;
+return smalltalk.withContext(function($ctx1) { 
$ctx1.inlinedAssignment=nil;
 _st(self)._assignment_(anIRAssignment);
-inlinedAssignment=_st((smalltalk.IRInlinedAssignment || IRInlinedAssignment))._new();
+$ctx1.locals.inlinedAssignment=_st((smalltalk.IRInlinedAssignment || IRInlinedAssignment))._new();
 _st(_st(anIRAssignment)._instructions())._do_((function(each){
-return _st(inlinedAssignment)._add_(each);
-}));
-_st(anIRAssignment)._replaceWith_(inlinedAssignment);
-_st(self)._inlineSend_(_st(_st(inlinedAssignment)._instructions())._last());
-return inlinedAssignment;
+return smalltalk.withContext(function($ctx2) { 
return _st($ctx1.locals.inlinedAssignment)._add_(each);
+})}));
+_st(anIRAssignment)._replaceWith_($ctx1.locals.inlinedAssignment);
+_st(self)._inlineSend_(_st(_st($ctx1.locals.inlinedAssignment)._instructions())._last());
+return $ctx1.locals.inlinedAssignment;
 }, self, "inlineAssignment:", [anIRAssignment], smalltalk.IRAssignmentInliner)}
 }),
 smalltalk.IRAssignmentInliner);
@@ -985,22 +985,22 @@ smalltalk.method({
 selector: "inlineClosure:",
 fn: function (anIRClosure){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3;
-var inlinedClosure;
-var statements;
-inlinedClosure=smalltalk.IRSendInliner.fn.prototype._inlineClosure_.apply(_st(self), [anIRClosure]);
-statements=_st(_st(_st(inlinedClosure)._instructions())._last())._instructions();
-_st(statements)._ifNotEmpty_((function(){
-$1=_st(_st(statements)._last())._canBeAssigned();
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3;
+$ctx1.inlinedClosure=nil;
+$ctx1.statements=nil;
+$ctx1.locals.inlinedClosure=smalltalk.IRSendInliner.fn.prototype._inlineClosure_.apply(_st(self), [anIRClosure]);
+$ctx1.locals.statements=_st(_st(_st($ctx1.locals.inlinedClosure)._instructions())._last())._instructions();
+_st($ctx1.locals.statements)._ifNotEmpty_((function(){
+return smalltalk.withContext(function($ctx2) { 
$1=_st(_st($ctx1.locals.statements)._last())._canBeAssigned();
 if(smalltalk.assert($1)){
 $2=_st((smalltalk.IRAssignment || IRAssignment))._new();
 _st($2)._add_(_st(_st(_st(self)._assignment())._instructions())._first());
-_st($2)._add_(_st(_st(statements)._last())._copy());
+_st($2)._add_(_st(_st($ctx1.locals.statements)._last())._copy());
 $3=_st($2)._yourself();
-return _st(_st(statements)._last())._replaceWith_($3);
+return _st(_st($ctx1.locals.statements)._last())._replaceWith_($3);
 };
-}));
-return inlinedClosure;
+})}));
+return $ctx1.locals.inlinedClosure;
 }, self, "inlineClosure:", [anIRClosure], smalltalk.IRAssignmentInliner)}
 }),
 smalltalk.IRAssignmentInliner);
@@ -1014,7 +1014,7 @@ smalltalk.method({
 selector: "inlineClosure:",
 fn: function (anIRClosure){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=smalltalk.IRSendInliner.fn.prototype._inlineCLosure_.apply(_st(self), [anIRClosure]);
 return $1;
 }, self, "inlineClosure:", [anIRClosure], smalltalk.IRNonLocalReturnInliner)}
@@ -1027,7 +1027,7 @@ smalltalk.method({
 selector: "inlinedReturn",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st((smalltalk.IRInlinedNonLocalReturn || IRInlinedNonLocalReturn))._new();
 return $1;
 }, self, "inlinedReturn", [], smalltalk.IRNonLocalReturnInliner)}
@@ -1043,21 +1043,21 @@ smalltalk.method({
 selector: "inlineClosure:",
 fn: function (anIRClosure){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3;
-var closure;
-var statements;
-closure=smalltalk.IRSendInliner.fn.prototype._inlineClosure_.apply(_st(self), [anIRClosure]);
-statements=_st(_st(_st(closure)._instructions())._last())._instructions();
-_st(statements)._ifNotEmpty_((function(){
-$1=_st(_st(statements)._last())._isReturn();
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3;
+$ctx1.closure=nil;
+$ctx1.statements=nil;
+$ctx1.locals.closure=smalltalk.IRSendInliner.fn.prototype._inlineClosure_.apply(_st(self), [anIRClosure]);
+$ctx1.locals.statements=_st(_st(_st($ctx1.locals.closure)._instructions())._last())._instructions();
+_st($ctx1.locals.statements)._ifNotEmpty_((function(){
+return smalltalk.withContext(function($ctx2) { 
$1=_st(_st($ctx1.locals.statements)._last())._isReturn();
 if(! smalltalk.assert($1)){
 $2=_st((smalltalk.IRReturn || IRReturn))._new();
-_st($2)._add_(_st(_st(statements)._last())._copy());
+_st($2)._add_(_st(_st($ctx1.locals.statements)._last())._copy());
 $3=_st($2)._yourself();
-return _st(_st(statements)._last())._replaceWith_($3);
+return _st(_st($ctx1.locals.statements)._last())._replaceWith_($3);
 };
-}));
-return closure;
+})}));
+return $ctx1.locals.closure;
 }, self, "inlineClosure:", [anIRClosure], smalltalk.IRReturnInliner)}
 }),
 smalltalk.IRReturnInliner);
@@ -1068,14 +1068,14 @@ smalltalk.method({
 selector: "inlineReturn:",
 fn: function (anIRReturn){
 var self=this;
-return smalltalk.withContext(function($ctx) { var return_;
-return_=_st(self)._inlinedReturn();
+return smalltalk.withContext(function($ctx1) { 
$ctx1.return=nil;
+$ctx1.locals.return_=_st(self)._inlinedReturn();
 _st(_st(anIRReturn)._instructions())._do_((function(each){
-return _st(return_)._add_(each);
-}));
-_st(anIRReturn)._replaceWith_(return_);
-_st(self)._inlineSend_(_st(_st(return_)._instructions())._last());
-return return_;
+return smalltalk.withContext(function($ctx2) { 
return _st($ctx1.locals.return_)._add_(each);
+})}));
+_st(anIRReturn)._replaceWith_($ctx1.locals.return_);
+_st(self)._inlineSend_(_st(_st($ctx1.locals.return_)._instructions())._last());
+return $ctx1.locals.return_;
 }, self, "inlineReturn:", [anIRReturn], smalltalk.IRReturnInliner)}
 }),
 smalltalk.IRReturnInliner);
@@ -1086,7 +1086,7 @@ smalltalk.method({
 selector: "inlinedReturn",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st((smalltalk.IRInlinedReturn || IRInlinedReturn))._new();
 return $1;
 }, self, "inlinedReturn", [], smalltalk.IRReturnInliner)}
@@ -1102,14 +1102,14 @@ smalltalk.method({
 selector: "compileNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
-var ir;
-var stream;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
+$ctx1.ir=nil;
+$ctx1.stream=nil;
 _st(_st(self)._semanticAnalyzer())._visit_(aNode);
-ir=_st(_st(self)._translator())._visit_(aNode);
-_st(_st(self)._inliner())._visit_(ir);
+$ctx1.locals.ir=_st(_st(self)._translator())._visit_(aNode);
+_st(_st(self)._inliner())._visit_($ctx1.locals.ir);
 $2=_st(self)._irTranslator();
-_st($2)._visit_(ir);
+_st($2)._visit_($ctx1.locals.ir);
 $3=_st($2)._contents();
 $1=$3;
 return $1;
@@ -1123,7 +1123,7 @@ smalltalk.method({
 selector: "inliner",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st((smalltalk.IRInliner || IRInliner))._new();
 return $1;
 }, self, "inliner", [], smalltalk.InliningCodeGenerator)}
@@ -1136,7 +1136,7 @@ smalltalk.method({
 selector: "irTranslator",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st((smalltalk.IRInliningJSTranslator || IRInliningJSTranslator))._new();
 return $1;
 }, self, "irTranslator", [], smalltalk.InliningCodeGenerator)}

+ 191 - 191
js/Compiler-Inlining.js

@@ -8,7 +8,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitIRInlinedAssignment_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.IRInlinedAssignment)},
@@ -26,7 +26,7 @@ selector: "isInlined",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isInlined", [], smalltalk.IRInlinedAssignment)},
 args: [],
 source: "isInlined\x0a\x09^ true",
@@ -46,7 +46,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(aVisitor)._visitIRInlinedClosure_(self);
+return smalltalk.withContext(function($ctx1) { 
_st(aVisitor)._visitIRInlinedClosure_(self);
 return self}, self, "accept:", [aVisitor], smalltalk.IRInlinedClosure)},
 args: ["aVisitor"],
 source: "accept: aVisitor\x0a\x09aVisitor visitIRInlinedClosure: self",
@@ -62,7 +62,7 @@ selector: "isInlined",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isInlined", [], smalltalk.IRInlinedClosure)},
 args: [],
 source: "isInlined\x0a\x09^ true",
@@ -82,7 +82,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitIRInlinedReturn_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.IRInlinedReturn)},
@@ -100,7 +100,7 @@ selector: "isInlined",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isInlined", [], smalltalk.IRInlinedReturn)},
 args: [],
 source: "isInlined\x0a\x09^ true",
@@ -120,7 +120,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aVisitor)._visitIRInlinedNonLocalReturn_(self);
 return $1;
 }, self, "accept:", [aVisitor], smalltalk.IRInlinedNonLocalReturn)},
@@ -138,7 +138,7 @@ selector: "isInlined",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isInlined", [], smalltalk.IRInlinedNonLocalReturn)},
 args: [],
 source: "isInlined\x0a\x09^ true",
@@ -158,7 +158,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(aVisitor)._visitInlinedSend_(self);
+return smalltalk.withContext(function($ctx1) { 
_st(aVisitor)._visitInlinedSend_(self);
 return self}, self, "accept:", [aVisitor], smalltalk.IRInlinedSend)},
 args: ["aVisitor"],
 source: "accept: aVisitor\x0a\x09aVisitor visitInlinedSend: self",
@@ -174,7 +174,7 @@ selector: "isInlined",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isInlined", [], smalltalk.IRInlinedSend)},
 args: [],
 source: "isInlined\x0a\x09^ true",
@@ -193,7 +193,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(aVisitor)._visitIRInlinedIfFalse_(self);
+return smalltalk.withContext(function($ctx1) { 
_st(aVisitor)._visitIRInlinedIfFalse_(self);
 return self}, self, "accept:", [aVisitor], smalltalk.IRInlinedIfFalse)},
 args: ["aVisitor"],
 source: "accept: aVisitor\x0a\x09aVisitor visitIRInlinedIfFalse: self",
@@ -212,7 +212,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(aVisitor)._visitIRInlinedIfNilIfNotNil_(self);
+return smalltalk.withContext(function($ctx1) { 
_st(aVisitor)._visitIRInlinedIfNilIfNotNil_(self);
 return self}, self, "accept:", [aVisitor], smalltalk.IRInlinedIfNilIfNotNil)},
 args: ["aVisitor"],
 source: "accept: aVisitor\x0a\x09aVisitor visitIRInlinedIfNilIfNotNil: self",
@@ -231,7 +231,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(aVisitor)._visitIRInlinedIfTrue_(self);
+return smalltalk.withContext(function($ctx1) { 
_st(aVisitor)._visitIRInlinedIfTrue_(self);
 return self}, self, "accept:", [aVisitor], smalltalk.IRInlinedIfTrue)},
 args: ["aVisitor"],
 source: "accept: aVisitor\x0a\x09aVisitor visitIRInlinedIfTrue: self",
@@ -250,7 +250,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(aVisitor)._visitIRInlinedIfTrueIfFalse_(self);
+return smalltalk.withContext(function($ctx1) { 
_st(aVisitor)._visitIRInlinedIfTrueIfFalse_(self);
 return self}, self, "accept:", [aVisitor], smalltalk.IRInlinedIfTrueIfFalse)},
 args: ["aVisitor"],
 source: "accept: aVisitor\x0a\x09aVisitor visitIRInlinedIfTrueIfFalse: self",
@@ -270,7 +270,7 @@ selector: "accept:",
 category: 'visiting',
 fn: function (aVisitor){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(aVisitor)._visitIRInlinedSequence_(self);
+return smalltalk.withContext(function($ctx1) { 
_st(aVisitor)._visitIRInlinedSequence_(self);
 return self}, self, "accept:", [aVisitor], smalltalk.IRInlinedSequence)},
 args: ["aVisitor"],
 source: "accept: aVisitor\x0a\x09aVisitor visitIRInlinedSequence: self",
@@ -286,7 +286,7 @@ selector: "isInlined",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isInlined", [], smalltalk.IRInlinedSequence)},
 args: [],
 source: "isInlined\x0a\x09^ true",
@@ -306,7 +306,7 @@ selector: "assignmentInliner",
 category: 'factory',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st((smalltalk.IRAssignmentInliner || IRAssignmentInliner))._new();
 _st($2)._translator_(self);
 $3=_st($2)._yourself();
@@ -327,7 +327,7 @@ selector: "nonLocalReturnInliner",
 category: 'factory',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st((smalltalk.IRNonLocalReturnInliner || IRNonLocalReturnInliner))._new();
 _st($2)._translator_(self);
 $3=_st($2)._yourself();
@@ -348,7 +348,7 @@ selector: "returnInliner",
 category: 'factory',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st((smalltalk.IRReturnInliner || IRReturnInliner))._new();
 _st($2)._translator_(self);
 $3=_st($2)._yourself();
@@ -369,7 +369,7 @@ selector: "sendInliner",
 category: 'factory',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st((smalltalk.IRSendInliner || IRSendInliner))._new();
 _st($2)._translator_(self);
 $3=_st($2)._yourself();
@@ -390,12 +390,12 @@ selector: "shouldInlineAssignment:",
 category: 'testing',
 fn: function (anIRAssignment){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(_st(anIRAssignment)._isInlined())._not())._and_((function(){
-return _st(_st(_st(_st(anIRAssignment)._instructions())._last())._isSend())._and_((function(){
-return _st(self)._shouldInlineSend_(_st(_st(anIRAssignment)._instructions())._last());
-}));
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(_st(_st(anIRAssignment)._instructions())._last())._isSend())._and_((function(){
+return smalltalk.withContext(function($ctx3) { 
return _st(self)._shouldInlineSend_(_st(_st(anIRAssignment)._instructions())._last());
+})}));
+})}));
 return $1;
 }, self, "shouldInlineAssignment:", [anIRAssignment], smalltalk.IRInliner)},
 args: ["anIRAssignment"],
@@ -412,12 +412,12 @@ selector: "shouldInlineReturn:",
 category: 'testing',
 fn: function (anIRReturn){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(_st(anIRReturn)._isInlined())._not())._and_((function(){
-return _st(_st(_st(_st(anIRReturn)._instructions())._first())._isSend())._and_((function(){
-return _st(self)._shouldInlineSend_(_st(_st(anIRReturn)._instructions())._first());
-}));
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(_st(_st(anIRReturn)._instructions())._first())._isSend())._and_((function(){
+return smalltalk.withContext(function($ctx3) { 
return _st(self)._shouldInlineSend_(_st(_st(anIRReturn)._instructions())._first());
+})}));
+})}));
 return $1;
 }, self, "shouldInlineReturn:", [anIRReturn], smalltalk.IRInliner)},
 args: ["anIRReturn"],
@@ -434,10 +434,10 @@ selector: "shouldInlineSend:",
 category: 'testing',
 fn: function (anIRSend){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(_st(anIRSend)._isInlined())._not())._and_((function(){
-return _st((smalltalk.IRSendInliner || IRSendInliner))._shouldInline_(anIRSend);
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st((smalltalk.IRSendInliner || IRSendInliner))._shouldInline_(anIRSend);
+})}));
 return $1;
 }, self, "shouldInlineSend:", [anIRSend], smalltalk.IRInliner)},
 args: ["anIRSend"],
@@ -454,21 +454,21 @@ selector: "transformNonLocalReturn:",
 category: 'visiting',
 fn: function (anIRNonLocalReturn){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3,$4;
-var localReturn;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3,$4;
+$ctx1.localReturn=nil;
 $1=_st(_st(anIRNonLocalReturn)._scope())._canInlineNonLocalReturns();
 if(smalltalk.assert($1)){
 _st(_st(_st(anIRNonLocalReturn)._scope())._methodScope())._removeNonLocalReturn_(_st(anIRNonLocalReturn)._scope());
 $2=_st((smalltalk.IRReturn || IRReturn))._new();
 _st($2)._scope_(_st(anIRNonLocalReturn)._scope());
 $3=_st($2)._yourself();
-localReturn=$3;
-localReturn;
+$ctx1.locals.localReturn=$3;
+$ctx1.locals.localReturn;
 _st(_st(anIRNonLocalReturn)._instructions())._do_((function(each){
-return _st(localReturn)._add_(each);
-}));
-_st(anIRNonLocalReturn)._replaceWith_(localReturn);
-return localReturn;
+return smalltalk.withContext(function($ctx2) { 
return _st($ctx1.locals.localReturn)._add_(each);
+})}));
+_st(anIRNonLocalReturn)._replaceWith_($ctx1.locals.localReturn);
+return $ctx1.locals.localReturn;
 };
 $4=smalltalk.IRVisitor.fn.prototype._visitIRNonLocalReturn_.apply(_st(self), [anIRNonLocalReturn]);
 return $4;
@@ -487,7 +487,7 @@ selector: "visitIRAssignment:",
 category: 'visiting',
 fn: function (anIRAssignment){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$1;
 $2=_st(self)._shouldInlineAssignment_(anIRAssignment);
 if(smalltalk.assert($2)){
 $1=_st(_st(self)._assignmentInliner())._inlineAssignment_(anIRAssignment);
@@ -510,7 +510,7 @@ selector: "visitIRNonLocalReturn:",
 category: 'visiting',
 fn: function (anIRNonLocalReturn){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$1;
 $2=_st(self)._shouldInlineReturn_(anIRNonLocalReturn);
 if(smalltalk.assert($2)){
 $1=_st(_st(self)._nonLocalReturnInliner())._inlineReturn_(anIRNonLocalReturn);
@@ -533,7 +533,7 @@ selector: "visitIRReturn:",
 category: 'visiting',
 fn: function (anIRReturn){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$1;
 $2=_st(self)._shouldInlineReturn_(anIRReturn);
 if(smalltalk.assert($2)){
 $1=_st(_st(self)._returnInliner())._inlineReturn_(anIRReturn);
@@ -556,7 +556,7 @@ selector: "visitIRSend:",
 category: 'visiting',
 fn: function (anIRSend){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$1;
 $2=_st(self)._shouldInlineSend_(anIRSend);
 if(smalltalk.assert($2)){
 $1=_st(_st(self)._sendInliner())._inlineSend_(anIRSend);
@@ -583,7 +583,7 @@ selector: "visitIRInlinedAssignment:",
 category: 'visiting',
 fn: function (anIRInlinedAssignment){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._visit_(_st(_st(anIRInlinedAssignment)._instructions())._last());
+return smalltalk.withContext(function($ctx1) { 
_st(self)._visit_(_st(_st(anIRInlinedAssignment)._instructions())._last());
 return self}, self, "visitIRInlinedAssignment:", [anIRInlinedAssignment], smalltalk.IRInliningJSTranslator)},
 args: ["anIRInlinedAssignment"],
 source: "visitIRInlinedAssignment: anIRInlinedAssignment\x0a\x09self visit: anIRInlinedAssignment instructions last",
@@ -599,9 +599,9 @@ selector: "visitIRInlinedClosure:",
 category: 'visiting',
 fn: function (anIRInlinedClosure){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(anIRInlinedClosure)._instructions())._do_((function(each){
-return _st(self)._visit_(each);
-}));
+return smalltalk.withContext(function($ctx1) { 
_st(_st(anIRInlinedClosure)._instructions())._do_((function(each){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._visit_(each);
+})}));
 return self}, self, "visitIRInlinedClosure:", [anIRInlinedClosure], smalltalk.IRInliningJSTranslator)},
 args: ["anIRInlinedClosure"],
 source: "visitIRInlinedClosure: anIRInlinedClosure\x0a\x09anIRInlinedClosure instructions do: [ :each |\x0a\x09\x09self visit: each ]",
@@ -617,13 +617,13 @@ selector: "visitIRInlinedIfFalse:",
 category: 'visiting',
 fn: function (anIRInlinedIfFalse){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._stream())._nextPutIf_with_((function(){
-_st(_st(self)._stream())._nextPutAll_("! smalltalk.assert(");
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._stream())._nextPutIf_with_((function(){
+return smalltalk.withContext(function($ctx2) { 
_st(_st(self)._stream())._nextPutAll_("! smalltalk.assert(");
 _st(self)._visit_(_st(_st(anIRInlinedIfFalse)._instructions())._first());
 return _st(_st(self)._stream())._nextPutAll_(")");
-}),(function(){
-return _st(self)._visit_(_st(_st(anIRInlinedIfFalse)._instructions())._last());
-}));
+})}),(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._visit_(_st(_st(anIRInlinedIfFalse)._instructions())._last());
+})}));
 return self}, self, "visitIRInlinedIfFalse:", [anIRInlinedIfFalse], smalltalk.IRInliningJSTranslator)},
 args: ["anIRInlinedIfFalse"],
 source: "visitIRInlinedIfFalse: anIRInlinedIfFalse\x0a\x09self stream nextPutIf: [ \x0a\x09\x09self stream nextPutAll: '! smalltalk.assert('.\x0a\x09\x09self visit: anIRInlinedIfFalse instructions first.\x0a\x09\x09self stream nextPutAll: ')' ]\x0a\x09\x09with: [ self visit: anIRInlinedIfFalse instructions last ]",
@@ -639,13 +639,13 @@ selector: "visitIRInlinedIfNil:",
 category: 'visiting',
 fn: function (anIRInlinedIfNil){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._stream())._nextPutIf_with_((function(){
-_st(_st(self)._stream())._nextPutAll_("($receiver = ");
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._stream())._nextPutIf_with_((function(){
+return smalltalk.withContext(function($ctx2) { 
_st(_st(self)._stream())._nextPutAll_("($receiver = ");
 _st(self)._visit_(_st(_st(anIRInlinedIfNil)._instructions())._first());
 return _st(_st(self)._stream())._nextPutAll_(") == nil || $receiver == undefined");
-}),(function(){
-return _st(self)._visit_(_st(_st(anIRInlinedIfNil)._instructions())._last());
-}));
+})}),(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._visit_(_st(_st(anIRInlinedIfNil)._instructions())._last());
+})}));
 return self}, self, "visitIRInlinedIfNil:", [anIRInlinedIfNil], smalltalk.IRInliningJSTranslator)},
 args: ["anIRInlinedIfNil"],
 source: "visitIRInlinedIfNil: anIRInlinedIfNil\x0a\x09self stream nextPutIf: [ \x0a\x09\x09self stream nextPutAll: '($receiver = '. \x0a\x09\x09self visit: anIRInlinedIfNil instructions first.\x0a\x09\x09self stream nextPutAll: ') == nil || $receiver == undefined' ]\x0a\x09\x09with: [ self visit: anIRInlinedIfNil instructions last ]",
@@ -661,15 +661,15 @@ selector: "visitIRInlinedIfNilIfNotNil:",
 category: 'visiting',
 fn: function (anIRInlinedIfNilIfNotNil){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._stream())._nextPutIfElse_with_with_((function(){
-_st(_st(self)._stream())._nextPutAll_("($receiver = ");
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._stream())._nextPutIfElse_with_with_((function(){
+return smalltalk.withContext(function($ctx2) { 
_st(_st(self)._stream())._nextPutAll_("($receiver = ");
 _st(self)._visit_(_st(_st(anIRInlinedIfNilIfNotNil)._instructions())._first());
 return _st(_st(self)._stream())._nextPutAll_(") == nil || $receiver == undefined");
-}),(function(){
-return _st(self)._visit_(_st(_st(anIRInlinedIfNilIfNotNil)._instructions())._second());
-}),(function(){
-return _st(self)._visit_(_st(_st(anIRInlinedIfNilIfNotNil)._instructions())._third());
-}));
+})}),(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._visit_(_st(_st(anIRInlinedIfNilIfNotNil)._instructions())._second());
+})}),(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._visit_(_st(_st(anIRInlinedIfNilIfNotNil)._instructions())._third());
+})}));
 return self}, self, "visitIRInlinedIfNilIfNotNil:", [anIRInlinedIfNilIfNotNil], smalltalk.IRInliningJSTranslator)},
 args: ["anIRInlinedIfNilIfNotNil"],
 source: "visitIRInlinedIfNilIfNotNil: anIRInlinedIfNilIfNotNil\x0a\x09self stream \x0a\x09\x09nextPutIfElse: [ \x0a\x09\x09\x09self stream nextPutAll: '($receiver = '. \x0a\x09\x09\x09self visit: anIRInlinedIfNilIfNotNil instructions first.\x0a\x09\x09\x09self stream nextPutAll: ') == nil || $receiver == undefined' ]\x0a\x09\x09with: [ self visit: anIRInlinedIfNilIfNotNil instructions second ]\x0a\x09\x09with: [ self visit: anIRInlinedIfNilIfNotNil instructions third ]",
@@ -685,13 +685,13 @@ selector: "visitIRInlinedIfTrue:",
 category: 'visiting',
 fn: function (anIRInlinedIfTrue){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._stream())._nextPutIf_with_((function(){
-_st(_st(self)._stream())._nextPutAll_("smalltalk.assert(");
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._stream())._nextPutIf_with_((function(){
+return smalltalk.withContext(function($ctx2) { 
_st(_st(self)._stream())._nextPutAll_("smalltalk.assert(");
 _st(self)._visit_(_st(_st(anIRInlinedIfTrue)._instructions())._first());
 return _st(_st(self)._stream())._nextPutAll_(")");
-}),(function(){
-return _st(self)._visit_(_st(_st(anIRInlinedIfTrue)._instructions())._last());
-}));
+})}),(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._visit_(_st(_st(anIRInlinedIfTrue)._instructions())._last());
+})}));
 return self}, self, "visitIRInlinedIfTrue:", [anIRInlinedIfTrue], smalltalk.IRInliningJSTranslator)},
 args: ["anIRInlinedIfTrue"],
 source: "visitIRInlinedIfTrue: anIRInlinedIfTrue\x0a\x09self stream nextPutIf: [ \x0a\x09\x09self stream nextPutAll: 'smalltalk.assert('. \x0a\x09\x09self visit: anIRInlinedIfTrue instructions first.\x0a\x09\x09self stream nextPutAll: ')' ]\x0a\x09\x09with: [ self visit: anIRInlinedIfTrue instructions last ]",
@@ -707,15 +707,15 @@ selector: "visitIRInlinedIfTrueIfFalse:",
 category: 'visiting',
 fn: function (anIRInlinedIfTrueIfFalse){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._stream())._nextPutIfElse_with_with_((function(){
-_st(_st(self)._stream())._nextPutAll_("smalltalk.assert(");
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._stream())._nextPutIfElse_with_with_((function(){
+return smalltalk.withContext(function($ctx2) { 
_st(_st(self)._stream())._nextPutAll_("smalltalk.assert(");
 _st(self)._visit_(_st(_st(anIRInlinedIfTrueIfFalse)._instructions())._first());
 return _st(_st(self)._stream())._nextPutAll_(")");
-}),(function(){
-return _st(self)._visit_(_st(_st(anIRInlinedIfTrueIfFalse)._instructions())._second());
-}),(function(){
-return _st(self)._visit_(_st(_st(anIRInlinedIfTrueIfFalse)._instructions())._third());
-}));
+})}),(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._visit_(_st(_st(anIRInlinedIfTrueIfFalse)._instructions())._second());
+})}),(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._visit_(_st(_st(anIRInlinedIfTrueIfFalse)._instructions())._third());
+})}));
 return self}, self, "visitIRInlinedIfTrueIfFalse:", [anIRInlinedIfTrueIfFalse], smalltalk.IRInliningJSTranslator)},
 args: ["anIRInlinedIfTrueIfFalse"],
 source: "visitIRInlinedIfTrueIfFalse: anIRInlinedIfTrueIfFalse\x0a\x09self stream \x0a\x09\x09nextPutIfElse: [ \x0a\x09\x09\x09self stream nextPutAll: 'smalltalk.assert('. \x0a\x09\x09\x09self visit: anIRInlinedIfTrueIfFalse instructions first.\x0a\x09\x09\x09self stream nextPutAll: ')' ]\x0a\x09\x09with: [ self visit: anIRInlinedIfTrueIfFalse instructions second ]\x0a\x09\x09with: [ self visit: anIRInlinedIfTrueIfFalse instructions third ]",
@@ -731,11 +731,11 @@ selector: "visitIRInlinedNonLocalReturn:",
 category: 'visiting',
 fn: function (anIRInlinedReturn){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._stream())._nextPutStatementWith_((function(){
-return _st(self)._visit_(_st(_st(anIRInlinedReturn)._instructions())._last());
-}));
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._stream())._nextPutStatementWith_((function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._visit_(_st(_st(anIRInlinedReturn)._instructions())._last());
+})}));
 _st(_st(self)._stream())._nextPutNonLocalReturnWith_((function(){
-}));
+return smalltalk.withContext(function($ctx2) { 
})}));
 return self}, self, "visitIRInlinedNonLocalReturn:", [anIRInlinedReturn], smalltalk.IRInliningJSTranslator)},
 args: ["anIRInlinedReturn"],
 source: "visitIRInlinedNonLocalReturn: anIRInlinedReturn\x0a\x09self stream nextPutStatementWith: [\x0a\x09\x09self visit: anIRInlinedReturn instructions last ].\x0a\x09self stream nextPutNonLocalReturnWith: [ ]",
@@ -751,7 +751,7 @@ selector: "visitIRInlinedReturn:",
 category: 'visiting',
 fn: function (anIRInlinedReturn){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._visit_(_st(_st(anIRInlinedReturn)._instructions())._last());
+return smalltalk.withContext(function($ctx1) { 
_st(self)._visit_(_st(_st(anIRInlinedReturn)._instructions())._last());
 return self}, self, "visitIRInlinedReturn:", [anIRInlinedReturn], smalltalk.IRInliningJSTranslator)},
 args: ["anIRInlinedReturn"],
 source: "visitIRInlinedReturn: anIRInlinedReturn\x0a\x09self visit: anIRInlinedReturn instructions last",
@@ -767,11 +767,11 @@ selector: "visitIRInlinedSequence:",
 category: 'visiting',
 fn: function (anIRInlinedSequence){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(anIRInlinedSequence)._instructions())._do_((function(each){
-return _st(_st(self)._stream())._nextPutStatementWith_((function(){
-return _st(self)._visit_(each);
-}));
-}));
+return smalltalk.withContext(function($ctx1) { 
_st(_st(anIRInlinedSequence)._instructions())._do_((function(each){
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(self)._stream())._nextPutStatementWith_((function(){
+return smalltalk.withContext(function($ctx3) { 
return _st(self)._visit_(each);
+})}));
+})}));
 return self}, self, "visitIRInlinedSequence:", [anIRInlinedSequence], smalltalk.IRInliningJSTranslator)},
 args: ["anIRInlinedSequence"],
 source: "visitIRInlinedSequence: anIRInlinedSequence\x0a\x09anIRInlinedSequence instructions do: [ :each | \x0a\x09\x09self stream nextPutStatementWith: [ self visit: each ]]",
@@ -791,7 +791,7 @@ selector: "ifFalse:",
 category: 'inlining',
 fn: function (anIRInstruction){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._inlinedSend_with_(_st((smalltalk.IRInlinedIfFalse || IRInlinedIfFalse))._new(),anIRInstruction);
 return $1;
 }, self, "ifFalse:", [anIRInstruction], smalltalk.IRSendInliner)},
@@ -809,7 +809,7 @@ selector: "ifFalse:ifTrue:",
 category: 'inlining',
 fn: function (anIRInstruction,anotherIRInstruction){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._perform_withArguments_(smalltalk.symbolFor("ifTrue:ifFalse:"),[anotherIRInstruction,anIRInstruction]);
 return $1;
 }, self, "ifFalse:ifTrue:", [anIRInstruction,anotherIRInstruction], smalltalk.IRSendInliner)},
@@ -827,7 +827,7 @@ selector: "ifNil:",
 category: 'inlining',
 fn: function (anIRInstruction){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$4,$5,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$4,$5,$1;
 $2=_st((smalltalk.IRClosure || IRClosure))._new();
 _st($2)._scope_(_st(_st(anIRInstruction)._scope())._copy());
 $3=_st((smalltalk.IRBlockSequence || IRBlockSequence))._new();
@@ -852,7 +852,7 @@ selector: "ifNil:ifNotNil:",
 category: 'inlining',
 fn: function (anIRInstruction,anotherIRInstruction){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._inlinedSend_with_with_(_st((smalltalk.IRInlinedIfNilIfNotNil || IRInlinedIfNilIfNotNil))._new(),anIRInstruction,anotherIRInstruction);
 return $1;
 }, self, "ifNil:ifNotNil:", [anIRInstruction,anotherIRInstruction], smalltalk.IRSendInliner)},
@@ -870,7 +870,7 @@ selector: "ifNotNil:",
 category: 'inlining',
 fn: function (anIRInstruction){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$4,$5,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$4,$5,$1;
 $2=_st((smalltalk.IRClosure || IRClosure))._new();
 _st($2)._scope_(_st(_st(anIRInstruction)._scope())._copy());
 $3=_st((smalltalk.IRBlockSequence || IRBlockSequence))._new();
@@ -895,7 +895,7 @@ selector: "ifNotNil:ifNil:",
 category: 'inlining',
 fn: function (anIRInstruction,anotherIRInstruction){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._inlinedSend_with_with_(_st((smalltalk.IRInlinedIfNilIfNotNil || IRInlinedIfNilIfNotNil))._new(),anotherIRInstruction,anIRInstruction);
 return $1;
 }, self, "ifNotNil:ifNil:", [anIRInstruction,anotherIRInstruction], smalltalk.IRSendInliner)},
@@ -913,7 +913,7 @@ selector: "ifTrue:",
 category: 'inlining',
 fn: function (anIRInstruction){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._inlinedSend_with_(_st((smalltalk.IRInlinedIfTrue || IRInlinedIfTrue))._new(),anIRInstruction);
 return $1;
 }, self, "ifTrue:", [anIRInstruction], smalltalk.IRSendInliner)},
@@ -931,7 +931,7 @@ selector: "ifTrue:ifFalse:",
 category: 'inlining',
 fn: function (anIRInstruction,anotherIRInstruction){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._inlinedSend_with_with_(_st((smalltalk.IRInlinedIfTrueIfFalse || IRInlinedIfTrueIfFalse))._new(),anIRInstruction,anotherIRInstruction);
 return $1;
 }, self, "ifTrue:ifFalse:", [anIRInstruction,anotherIRInstruction], smalltalk.IRSendInliner)},
@@ -949,35 +949,35 @@ selector: "inlineClosure:",
 category: 'inlining',
 fn: function (anIRClosure){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
-var inlinedClosure;
-var sequence;
-var statements;
-inlinedClosure=_st(self)._inlinedClosure();
-_st(inlinedClosure)._scope_(_st(anIRClosure)._scope());
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
+$ctx1.inlinedClosure=nil;
+$ctx1.sequence=nil;
+$ctx1.statements=nil;
+$ctx1.locals.inlinedClosure=_st(self)._inlinedClosure();
+_st($ctx1.locals.inlinedClosure)._scope_(_st(anIRClosure)._scope());
 _st(_st(anIRClosure)._instructions())._do_((function(each){
-$1=_st(each)._isSequence();
+return smalltalk.withContext(function($ctx2) { 
$1=_st(each)._isSequence();
 if(! smalltalk.assert($1)){
-return _st(inlinedClosure)._add_(each);
+return _st($ctx1.locals.inlinedClosure)._add_(each);
 };
-}));
-sequence=_st(self)._inlinedSequence();
-_st(inlinedClosure)._add_(sequence);
-statements=_st(_st(_st(anIRClosure)._instructions())._last())._instructions();
-_st(statements)._ifNotEmpty_((function(){
-_st(_st(statements)._allButLast())._do_((function(each){
-return _st(sequence)._add_(each);
-}));
-$2=_st(_st(_st(statements)._last())._isReturn())._and_((function(){
-return _st(_st(statements)._last())._isBlockReturn();
-}));
+})}));
+$ctx1.locals.sequence=_st(self)._inlinedSequence();
+_st($ctx1.locals.inlinedClosure)._add_($ctx1.locals.sequence);
+$ctx1.locals.statements=_st(_st(_st(anIRClosure)._instructions())._last())._instructions();
+_st($ctx1.locals.statements)._ifNotEmpty_((function(){
+return smalltalk.withContext(function($ctx2) { 
_st(_st($ctx1.locals.statements)._allButLast())._do_((function(each){
+return smalltalk.withContext(function($ctx3) { 
return _st($ctx1.locals.sequence)._add_(each);
+})}));
+$2=_st(_st(_st($ctx1.locals.statements)._last())._isReturn())._and_((function(){
+return smalltalk.withContext(function($ctx3) { 
return _st(_st($ctx1.locals.statements)._last())._isBlockReturn();
+})}));
 if(smalltalk.assert($2)){
-return _st(sequence)._add_(_st(_st(_st(statements)._last())._instructions())._first());
+return _st($ctx1.locals.sequence)._add_(_st(_st(_st($ctx1.locals.statements)._last())._instructions())._first());
 } else {
-return _st(sequence)._add_(_st(statements)._last());
+return _st($ctx1.locals.sequence)._add_(_st($ctx1.locals.statements)._last());
 };
-}));
-return inlinedClosure;
+})}));
+return $ctx1.locals.inlinedClosure;
 }, self, "inlineClosure:", [anIRClosure], smalltalk.IRSendInliner)},
 args: ["anIRClosure"],
 source: "inlineClosure: anIRClosure\x0a\x09| inlinedClosure sequence statements |\x0a\x0a\x09inlinedClosure := self inlinedClosure.\x0a\x09inlinedClosure scope: anIRClosure scope.\x0a\x0a\x09\x22Add the possible temp declarations\x22\x0a\x09anIRClosure instructions do: [ :each | \x0a\x09\x09each isSequence ifFalse: [\x0a\x09\x09\x09inlinedClosure add: each ]].\x0a\x0a\x09\x22Add a block sequence\x22\x0a\x09sequence := self inlinedSequence.\x0a\x09inlinedClosure add: sequence.\x0a\x0a\x09\x22Get all the statements\x22\x0a\x09statements := anIRClosure instructions last instructions.\x0a\x09\x0a\x09statements ifNotEmpty: [\x0a\x09\x09statements allButLast do: [ :each | sequence add: each ].\x0a\x0a\x09\x09\x22Inlined closures don't have implicit local returns\x22\x0a\x09\x09(statements last isReturn and: [ statements last isBlockReturn ])\x0a\x09\x09\x09ifTrue: [ sequence add: statements last instructions first ]\x0a\x09\x09\x09ifFalse: [ sequence add: statements last ] ].\x0a\x0a\x09^ inlinedClosure",
@@ -993,7 +993,7 @@ selector: "inlineSend:",
 category: 'inlining',
 fn: function (anIRSend){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(self)._send_(anIRSend);
 $1=_st(self)._perform_withArguments_(_st(_st(self)._send())._selector(),_st(_st(_st(self)._send())._instructions())._allButFirst());
 return $1;
@@ -1012,7 +1012,7 @@ selector: "inlinedClosure",
 category: 'factory',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st((smalltalk.IRInlinedClosure || IRInlinedClosure))._new();
 return $1;
 }, self, "inlinedClosure", [], smalltalk.IRSendInliner)},
@@ -1030,8 +1030,8 @@ selector: "inlinedSend:with:",
 category: 'inlining',
 fn: function (inlinedSend,anIRInstruction){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3;
-var inlinedClosure;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3;
+$ctx1.inlinedClosure=nil;
 $1=_st(anIRInstruction)._isClosure();
 if(! smalltalk.assert($1)){
 _st(self)._inliningError_("Message argument should be a block");
@@ -1040,9 +1040,9 @@ $2=_st(_st(_st(anIRInstruction)._arguments())._size()).__eq((0));
 if(! smalltalk.assert($2)){
 _st(self)._inliningError_("Inlined block should have zero argument");
 };
-inlinedClosure=_st(_st(self)._translator())._visit_(_st(self)._inlineClosure_(anIRInstruction));
+$ctx1.locals.inlinedClosure=_st(_st(self)._translator())._visit_(_st(self)._inlineClosure_(anIRInstruction));
 _st(inlinedSend)._add_(_st(_st(_st(self)._send())._instructions())._first());
-$3=_st(inlinedSend)._add_(inlinedClosure);
+$3=_st(inlinedSend)._add_($ctx1.locals.inlinedClosure);
 _st(_st(self)._send())._replaceWith_(inlinedSend);
 return inlinedSend;
 }, self, "inlinedSend:with:", [inlinedSend,anIRInstruction], smalltalk.IRSendInliner)},
@@ -1060,9 +1060,9 @@ selector: "inlinedSend:with:with:",
 category: 'inlining',
 fn: function (inlinedSend,anIRInstruction,anotherIRInstruction){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3,$4,$5;
-var inlinedClosure1;
-var inlinedClosure2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3,$4,$5;
+$ctx1.inlinedClosure1=nil;
+$ctx1.inlinedClosure2=nil;
 $1=_st(anIRInstruction)._isClosure();
 if(! smalltalk.assert($1)){
 _st(self)._inliningError_("Message argument should be a block");
@@ -1079,11 +1079,11 @@ $4=_st(_st(_st(anotherIRInstruction)._arguments())._size()).__eq((0));
 if(! smalltalk.assert($4)){
 _st(self)._inliningError_("Inlined block should have zero argument");
 };
-inlinedClosure1=_st(_st(self)._translator())._visit_(_st(self)._inlineClosure_(anIRInstruction));
-inlinedClosure2=_st(_st(self)._translator())._visit_(_st(self)._inlineClosure_(anotherIRInstruction));
+$ctx1.locals.inlinedClosure1=_st(_st(self)._translator())._visit_(_st(self)._inlineClosure_(anIRInstruction));
+$ctx1.locals.inlinedClosure2=_st(_st(self)._translator())._visit_(_st(self)._inlineClosure_(anotherIRInstruction));
 _st(inlinedSend)._add_(_st(_st(_st(self)._send())._instructions())._first());
-_st(inlinedSend)._add_(inlinedClosure1);
-$5=_st(inlinedSend)._add_(inlinedClosure2);
+_st(inlinedSend)._add_($ctx1.locals.inlinedClosure1);
+$5=_st(inlinedSend)._add_($ctx1.locals.inlinedClosure2);
 _st(_st(self)._send())._replaceWith_(inlinedSend);
 return inlinedSend;
 }, self, "inlinedSend:with:with:", [inlinedSend,anIRInstruction,anotherIRInstruction], smalltalk.IRSendInliner)},
@@ -1101,7 +1101,7 @@ selector: "inlinedSequence",
 category: 'factory',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st((smalltalk.IRInlinedSequence || IRInlinedSequence))._new();
 return $1;
 }, self, "inlinedSequence", [], smalltalk.IRSendInliner)},
@@ -1119,7 +1119,7 @@ selector: "inliningError:",
 category: 'error handling',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st((smalltalk.InliningError || InliningError))._signal_(aString);
+return smalltalk.withContext(function($ctx1) { 
_st((smalltalk.InliningError || InliningError))._signal_(aString);
 return self}, self, "inliningError:", [aString], smalltalk.IRSendInliner)},
 args: ["aString"],
 source: "inliningError: aString\x0a\x09InliningError signal: aString",
@@ -1135,7 +1135,7 @@ selector: "send",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@send"];
+return smalltalk.withContext(function($ctx1) { 
return self["@send"];
 }, self, "send", [], smalltalk.IRSendInliner)},
 args: [],
 source: "send\x0a\x09^ send",
@@ -1151,7 +1151,7 @@ selector: "send:",
 category: 'accessing',
 fn: function (anIRSend){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@send"]=anIRSend;
+return smalltalk.withContext(function($ctx1) { 
self["@send"]=anIRSend;
 return self}, self, "send:", [anIRSend], smalltalk.IRSendInliner)},
 args: ["anIRSend"],
 source: "send: anIRSend\x0a\x09send := anIRSend",
@@ -1167,7 +1167,7 @@ selector: "translator",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@translator"];
+return smalltalk.withContext(function($ctx1) { 
return self["@translator"];
 }, self, "translator", [], smalltalk.IRSendInliner)},
 args: [],
 source: "translator\x0a\x09^ translator",
@@ -1183,7 +1183,7 @@ selector: "translator:",
 category: 'accessing',
 fn: function (anASTTranslator){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@translator"]=anASTTranslator;
+return smalltalk.withContext(function($ctx1) { 
self["@translator"]=anASTTranslator;
 return self}, self, "translator:", [anASTTranslator], smalltalk.IRSendInliner)},
 args: ["anASTTranslator"],
 source: "translator: anASTTranslator\x0a\x09translator := anASTTranslator",
@@ -1200,7 +1200,7 @@ selector: "inlinedSelectors",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return ["ifTrue:", "ifFalse:", "ifTrue:ifFalse:", "ifFalse:ifTrue:", "ifNil:", "ifNotNil:", "ifNil:ifNotNil:", "ifNotNil:ifNil"];
+return smalltalk.withContext(function($ctx1) { 
return ["ifTrue:", "ifFalse:", "ifTrue:ifFalse:", "ifFalse:ifTrue:", "ifNil:", "ifNotNil:", "ifNil:ifNotNil:", "ifNotNil:ifNil"];
 }, self, "inlinedSelectors", [], smalltalk.IRSendInliner.klass)},
 args: [],
 source: "inlinedSelectors\x0a\x09^ #('ifTrue:' 'ifFalse:' 'ifTrue:ifFalse:' 'ifFalse:ifTrue:' 'ifNil:' 'ifNotNil:' 'ifNil:ifNotNil:' 'ifNotNil:ifNil')",
@@ -1216,7 +1216,7 @@ selector: "shouldInline:",
 category: 'accessing',
 fn: function (anIRInstruction){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 var $early={};
 try {
 $1=_st(_st(self)._inlinedSelectors())._includes_(_st(anIRInstruction)._selector());
@@ -1224,11 +1224,11 @@ if(! smalltalk.assert($1)){
 return false;
 };
 _st(_st(_st(anIRInstruction)._instructions())._allButFirst())._do_((function(each){
-$2=_st(each)._isClosure();
+return smalltalk.withContext(function($ctx2) { 
$2=_st(each)._isClosure();
 if(! smalltalk.assert($2)){
 throw $early=[false];
 };
-}));
+})}));
 return true;
 }
 catch(e) {if(e===$early)return e[0]; throw e}
@@ -1250,7 +1250,7 @@ selector: "assignment",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@assignment"];
+return smalltalk.withContext(function($ctx1) { 
return self["@assignment"];
 }, self, "assignment", [], smalltalk.IRAssignmentInliner)},
 args: [],
 source: "assignment\x0a\x09^ assignment",
@@ -1266,7 +1266,7 @@ selector: "assignment:",
 category: 'accessing',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@assignment"]=aNode;
+return smalltalk.withContext(function($ctx1) { 
self["@assignment"]=aNode;
 return self}, self, "assignment:", [aNode], smalltalk.IRAssignmentInliner)},
 args: ["aNode"],
 source: "assignment: aNode\x0a\x09assignment := aNode",
@@ -1282,15 +1282,15 @@ selector: "inlineAssignment:",
 category: 'inlining',
 fn: function (anIRAssignment){
 var self=this;
-return smalltalk.withContext(function($ctx) { var inlinedAssignment;
+return smalltalk.withContext(function($ctx1) { 
$ctx1.inlinedAssignment=nil;
 _st(self)._assignment_(anIRAssignment);
-inlinedAssignment=_st((smalltalk.IRInlinedAssignment || IRInlinedAssignment))._new();
+$ctx1.locals.inlinedAssignment=_st((smalltalk.IRInlinedAssignment || IRInlinedAssignment))._new();
 _st(_st(anIRAssignment)._instructions())._do_((function(each){
-return _st(inlinedAssignment)._add_(each);
-}));
-_st(anIRAssignment)._replaceWith_(inlinedAssignment);
-_st(self)._inlineSend_(_st(_st(inlinedAssignment)._instructions())._last());
-return inlinedAssignment;
+return smalltalk.withContext(function($ctx2) { 
return _st($ctx1.locals.inlinedAssignment)._add_(each);
+})}));
+_st(anIRAssignment)._replaceWith_($ctx1.locals.inlinedAssignment);
+_st(self)._inlineSend_(_st(_st($ctx1.locals.inlinedAssignment)._instructions())._last());
+return $ctx1.locals.inlinedAssignment;
 }, self, "inlineAssignment:", [anIRAssignment], smalltalk.IRAssignmentInliner)},
 args: ["anIRAssignment"],
 source: "inlineAssignment: anIRAssignment\x0a\x09| inlinedAssignment |\x0a\x09self assignment: anIRAssignment.\x0a\x09inlinedAssignment := IRInlinedAssignment new.\x0a\x09anIRAssignment instructions do: [ :each |\x0a\x09\x09inlinedAssignment add: each ].\x0a\x09anIRAssignment replaceWith: inlinedAssignment.\x0a\x09self inlineSend: inlinedAssignment instructions last.\x0a\x09^ inlinedAssignment",
@@ -1306,22 +1306,22 @@ selector: "inlineClosure:",
 category: 'inlining',
 fn: function (anIRClosure){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3;
-var inlinedClosure;
-var statements;
-inlinedClosure=smalltalk.IRSendInliner.fn.prototype._inlineClosure_.apply(_st(self), [anIRClosure]);
-statements=_st(_st(_st(inlinedClosure)._instructions())._last())._instructions();
-_st(statements)._ifNotEmpty_((function(){
-$1=_st(_st(statements)._last())._canBeAssigned();
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3;
+$ctx1.inlinedClosure=nil;
+$ctx1.statements=nil;
+$ctx1.locals.inlinedClosure=smalltalk.IRSendInliner.fn.prototype._inlineClosure_.apply(_st(self), [anIRClosure]);
+$ctx1.locals.statements=_st(_st(_st($ctx1.locals.inlinedClosure)._instructions())._last())._instructions();
+_st($ctx1.locals.statements)._ifNotEmpty_((function(){
+return smalltalk.withContext(function($ctx2) { 
$1=_st(_st($ctx1.locals.statements)._last())._canBeAssigned();
 if(smalltalk.assert($1)){
 $2=_st((smalltalk.IRAssignment || IRAssignment))._new();
 _st($2)._add_(_st(_st(_st(self)._assignment())._instructions())._first());
-_st($2)._add_(_st(_st(statements)._last())._copy());
+_st($2)._add_(_st(_st($ctx1.locals.statements)._last())._copy());
 $3=_st($2)._yourself();
-return _st(_st(statements)._last())._replaceWith_($3);
+return _st(_st($ctx1.locals.statements)._last())._replaceWith_($3);
 };
-}));
-return inlinedClosure;
+})}));
+return $ctx1.locals.inlinedClosure;
 }, self, "inlineClosure:", [anIRClosure], smalltalk.IRAssignmentInliner)},
 args: ["anIRClosure"],
 source: "inlineClosure: anIRClosure\x0a\x09| inlinedClosure statements |\x0a\x0a\x09inlinedClosure := super inlineClosure: anIRClosure.\x0a\x09statements := inlinedClosure instructions last instructions.\x0a\x09\x0a\x09statements ifNotEmpty: [\x0a\x09\x09statements last canBeAssigned ifTrue: [\x0a\x09\x09\x09statements last replaceWith: (IRAssignment new\x0a\x09\x09\x09\x09add: self assignment instructions first;\x0a\x09\x09\x09\x09add: statements last copy;\x0a\x09\x09\x09\x09yourself) ] ].\x0a\x0a\x09^ inlinedClosure",
@@ -1340,7 +1340,7 @@ selector: "inlineClosure:",
 category: 'inlining',
 fn: function (anIRClosure){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=smalltalk.IRSendInliner.fn.prototype._inlineCLosure_.apply(_st(self), [anIRClosure]);
 return $1;
 }, self, "inlineClosure:", [anIRClosure], smalltalk.IRNonLocalReturnInliner)},
@@ -1358,7 +1358,7 @@ selector: "inlinedReturn",
 category: 'factory',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st((smalltalk.IRInlinedNonLocalReturn || IRInlinedNonLocalReturn))._new();
 return $1;
 }, self, "inlinedReturn", [], smalltalk.IRNonLocalReturnInliner)},
@@ -1380,21 +1380,21 @@ selector: "inlineClosure:",
 category: 'inlining',
 fn: function (anIRClosure){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3;
-var closure;
-var statements;
-closure=smalltalk.IRSendInliner.fn.prototype._inlineClosure_.apply(_st(self), [anIRClosure]);
-statements=_st(_st(_st(closure)._instructions())._last())._instructions();
-_st(statements)._ifNotEmpty_((function(){
-$1=_st(_st(statements)._last())._isReturn();
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3;
+$ctx1.closure=nil;
+$ctx1.statements=nil;
+$ctx1.locals.closure=smalltalk.IRSendInliner.fn.prototype._inlineClosure_.apply(_st(self), [anIRClosure]);
+$ctx1.locals.statements=_st(_st(_st($ctx1.locals.closure)._instructions())._last())._instructions();
+_st($ctx1.locals.statements)._ifNotEmpty_((function(){
+return smalltalk.withContext(function($ctx2) { 
$1=_st(_st($ctx1.locals.statements)._last())._isReturn();
 if(! smalltalk.assert($1)){
 $2=_st((smalltalk.IRReturn || IRReturn))._new();
-_st($2)._add_(_st(_st(statements)._last())._copy());
+_st($2)._add_(_st(_st($ctx1.locals.statements)._last())._copy());
 $3=_st($2)._yourself();
-return _st(_st(statements)._last())._replaceWith_($3);
+return _st(_st($ctx1.locals.statements)._last())._replaceWith_($3);
 };
-}));
-return closure;
+})}));
+return $ctx1.locals.closure;
 }, self, "inlineClosure:", [anIRClosure], smalltalk.IRReturnInliner)},
 args: ["anIRClosure"],
 source: "inlineClosure: anIRClosure\x0a\x09| closure statements |\x0a\x0a\x09closure := super inlineClosure: anIRClosure.\x0a\x09statements := closure instructions last instructions.\x0a\x09\x0a\x09statements ifNotEmpty: [\x0a\x09\x09statements last isReturn\x0a\x09\x09\x09ifFalse: [ statements last replaceWith: (IRReturn new\x0a\x09\x09\x09\x09add: statements last copy;\x0a\x09\x09\x09\x09yourself)] ].\x0a\x0a\x09^ closure",
@@ -1410,14 +1410,14 @@ selector: "inlineReturn:",
 category: 'inlining',
 fn: function (anIRReturn){
 var self=this;
-return smalltalk.withContext(function($ctx) { var return_;
-return_=_st(self)._inlinedReturn();
+return smalltalk.withContext(function($ctx1) { 
$ctx1.return=nil;
+$ctx1.locals.return_=_st(self)._inlinedReturn();
 _st(_st(anIRReturn)._instructions())._do_((function(each){
-return _st(return_)._add_(each);
-}));
-_st(anIRReturn)._replaceWith_(return_);
-_st(self)._inlineSend_(_st(_st(return_)._instructions())._last());
-return return_;
+return smalltalk.withContext(function($ctx2) { 
return _st($ctx1.locals.return_)._add_(each);
+})}));
+_st(anIRReturn)._replaceWith_($ctx1.locals.return_);
+_st(self)._inlineSend_(_st(_st($ctx1.locals.return_)._instructions())._last());
+return $ctx1.locals.return_;
 }, self, "inlineReturn:", [anIRReturn], smalltalk.IRReturnInliner)},
 args: ["anIRReturn"],
 source: "inlineReturn: anIRReturn\x0a\x09| return |\x0a\x09return := self inlinedReturn.\x0a\x09anIRReturn instructions do: [ :each |\x0a\x09\x09return add: each ].\x0a\x09anIRReturn replaceWith: return.\x0a\x09self inlineSend: return instructions last.\x0a\x09^ return",
@@ -1433,7 +1433,7 @@ selector: "inlinedReturn",
 category: 'factory',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st((smalltalk.IRInlinedReturn || IRInlinedReturn))._new();
 return $1;
 }, self, "inlinedReturn", [], smalltalk.IRReturnInliner)},
@@ -1455,14 +1455,14 @@ selector: "compileNode:",
 category: 'compiling',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
-var ir;
-var stream;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
+$ctx1.ir=nil;
+$ctx1.stream=nil;
 _st(_st(self)._semanticAnalyzer())._visit_(aNode);
-ir=_st(_st(self)._translator())._visit_(aNode);
-_st(_st(self)._inliner())._visit_(ir);
+$ctx1.locals.ir=_st(_st(self)._translator())._visit_(aNode);
+_st(_st(self)._inliner())._visit_($ctx1.locals.ir);
 $2=_st(self)._irTranslator();
-_st($2)._visit_(ir);
+_st($2)._visit_($ctx1.locals.ir);
 $3=_st($2)._contents();
 $1=$3;
 return $1;
@@ -1481,7 +1481,7 @@ selector: "inliner",
 category: 'compiling',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st((smalltalk.IRInliner || IRInliner))._new();
 return $1;
 }, self, "inliner", [], smalltalk.InliningCodeGenerator)},
@@ -1499,7 +1499,7 @@ selector: "irTranslator",
 category: 'compiling',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st((smalltalk.IRInliningJSTranslator || IRInliningJSTranslator))._new();
 return $1;
 }, self, "irTranslator", [], smalltalk.InliningCodeGenerator)},

+ 67 - 56
js/Compiler-Interpreter.deploy.js

@@ -1,25 +1,12 @@
 smalltalk.addPackage('Compiler-Interpreter', {});
 smalltalk.addClass('ASTInterpreter', smalltalk.NodeVisitor, ['currentNode', 'context', 'shouldReturn'], 'Compiler-Interpreter');
-smalltalk.addMethod(
-"_blockValue_",
-smalltalk.method({
-selector: "blockValue:",
-fn: function (anASTBlockClosure){
-var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-$1=_st(self)._interpret_(_st(_st(_st(anASTBlockClosure)._astNode())._nodes())._first());
-return $1;
-}, self, "blockValue:", [anASTBlockClosure], smalltalk.ASTInterpreter)}
-}),
-smalltalk.ASTInterpreter);
-
 smalltalk.addMethod(
 "_context",
 smalltalk.method({
 selector: "context",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@context"];
+return smalltalk.withContext(function($ctx1) { 
return self["@context"];
 }, self, "context", [], smalltalk.ASTInterpreter)}
 }),
 smalltalk.ASTInterpreter);
@@ -30,7 +17,7 @@ smalltalk.method({
 selector: "context:",
 fn: function (aMethodContext){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@context"]=aMethodContext;
+return smalltalk.withContext(function($ctx1) { 
self["@context"]=aMethodContext;
 return self}, self, "context:", [aMethodContext], smalltalk.ASTInterpreter)}
 }),
 smalltalk.ASTInterpreter);
@@ -41,7 +28,7 @@ smalltalk.method({
 selector: "initialize",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { smalltalk.NodeVisitor.fn.prototype._initialize.apply(_st(self), []);
+return smalltalk.withContext(function($ctx1) { 
smalltalk.NodeVisitor.fn.prototype._initialize.apply(_st(self), []);
 self["@shouldReturn"]=false;
 return self}, self, "initialize", [], smalltalk.ASTInterpreter)}
 }),
@@ -53,7 +40,7 @@ smalltalk.method({
 selector: "interpret:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 self["@shouldReturn"]=false;
 $1=_st(self)._interpretNode_(aNode);
 return $1;
@@ -67,7 +54,7 @@ smalltalk.method({
 selector: "interpretNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 self["@currentNode"]=aNode;
 $1=_st(self)._visit_(aNode);
 return $1;
@@ -76,15 +63,21 @@ return $1;
 smalltalk.ASTInterpreter);
 
 smalltalk.addMethod(
-"_send_to_arguments_",
+"_messageFromSendNode_",
 smalltalk.method({
-selector: "send:to:arguments:",
-fn: function (aSelector,anObject,aCollection){
+selector: "messageFromSendNode:",
+fn: function (aSendNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-$1=_st(anObject)._perform_withArguments_(aSelector,aCollection);
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
+$2=_st((smalltalk.Message || Message))._new();
+_st($2)._selector_(_st(aSendNode)._selector());
+_st($2)._arguments_(_st(_st(aSendNode)._arguments())._collect_((function(each){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._interpretNode_(each);
+})})));
+$3=_st($2)._yourself();
+$1=$3;
 return $1;
-}, self, "send:to:arguments:", [aSelector,anObject,aCollection], smalltalk.ASTInterpreter)}
+}, self, "messageFromSendNode:", [aSendNode], smalltalk.ASTInterpreter)}
 }),
 smalltalk.ASTInterpreter);
 
@@ -94,10 +87,10 @@ smalltalk.method({
 selector: "visitBlockNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=(function(){
-return _st(self)._interpretNode_(_st(_st(aNode)._nodes())._first());
-});
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._interpretNode_(_st(_st(aNode)._nodes())._first());
+})});
 return $1;
 }, self, "visitBlockNode:", [aNode], smalltalk.ASTInterpreter)}
 }),
@@ -109,25 +102,38 @@ smalltalk.method({
 selector: "visitCascadeNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.locals.receiver=nil;
+$ctx1.locals.receiver=_st(self)._interpretNode_(_st(aNode)._receiver());
 _st(_st(_st(aNode)._nodes())._allButLast())._do_((function(each){
-_st(each)._receiver_(_st(aNode)._receiver());
-return _st(self)._interpretNode_(each);
-}));
-_st(_st(_st(aNode)._nodes())._last())._receiver_(_st(aNode)._receiver());
-$1=_st(self)._interpretNode_(_st(_st(aNode)._nodes())._last());
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(self)._messageFromSendNode_(each))._sendTo_($ctx1.locals.receiver);
+})}));
+$1=_st(_st(self)._messageFromSendNode_(_st(_st(aNode)._nodes())._last()))._sendTo_($ctx1.locals.receiver);
 return $1;
 }, self, "visitCascadeNode:", [aNode], smalltalk.ASTInterpreter)}
 }),
 smalltalk.ASTInterpreter);
 
+smalltalk.addMethod(
+"_visitClassReferenceNode_",
+smalltalk.method({
+selector: "visitClassReferenceNode:",
+fn: function (aNode){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$1=_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._at_(_st(aNode)._value());
+return $1;
+}, self, "visitClassReferenceNode:", [aNode], smalltalk.ASTInterpreter)}
+}),
+smalltalk.ASTInterpreter);
+
 smalltalk.addMethod(
 "_visitJSStatementNode_",
 smalltalk.method({
 selector: "visitJSStatementNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._halt();
+return smalltalk.withContext(function($ctx1) { 
_st(self)._halt();
 return self}, self, "visitJSStatementNode:", [aNode], smalltalk.ASTInterpreter)}
 }),
 smalltalk.ASTInterpreter);
@@ -138,7 +144,7 @@ smalltalk.method({
 selector: "visitReturnNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 self["@shouldReturn"]=true;
 $1=_st(self)._interpretNode_(_st(_st(aNode)._nodes())._first());
 return $1;
@@ -152,14 +158,8 @@ smalltalk.method({
 selector: "visitSendNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var receiver;
-var arguments;
-receiver=_st(self)._interpretNode_(_st(aNode)._receiver());
-arguments=_st(_st(aNode)._arguments())._collect_((function(each){
-return _st(self)._interpretNode_(each);
-}));
-$1=_st(self)._send_to_arguments_(_st(aNode)._selector(),receiver,arguments);
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$1=_st(_st(self)._messageFromSendNode_(aNode))._sendTo_(_st(self)._interpretNode_(_st(aNode)._receiver()));
 return $1;
 }, self, "visitSendNode:", [aNode], smalltalk.ASTInterpreter)}
 }),
@@ -171,17 +171,17 @@ smalltalk.method({
 selector: "visitSequenceNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 var $early={};
 try {
 _st(_st(_st(aNode)._nodes())._allButLast())._do_((function(each){
-var value;
-value=_st(self)._interpretNode_(each);
-value;
+return smalltalk.withContext(function($ctx2) { 
$ctx2.value=nil;
+$ctx2.locals.value=_st(self)._interpretNode_(each);
+$ctx2.locals.value;
 if(smalltalk.assert(self["@shouldReturn"])){
-throw $early=[value];
+throw $early=[$ctx2.locals.value];
 };
-}));
+})}));
 $1=_st(self)._interpretNode_(_st(_st(aNode)._nodes())._last());
 return $1;
 }
@@ -196,7 +196,7 @@ smalltalk.method({
 selector: "visitValueNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aNode)._value();
 return $1;
 }, self, "visitValueNode:", [aNode], smalltalk.ASTInterpreter)}
@@ -212,7 +212,7 @@ smalltalk.method({
 selector: "analyze:forClass:",
 fn: function (aNode,aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st((smalltalk.SemanticAnalyzer || SemanticAnalyzer))._on_(aClass))._visit_(aNode);
+return smalltalk.withContext(function($ctx1) { 
_st(_st((smalltalk.SemanticAnalyzer || SemanticAnalyzer))._on_(aClass))._visit_(aNode);
 return aNode;
 }, self, "analyze:forClass:", [aNode,aClass], smalltalk.ASTInterpreterTest)}
 }),
@@ -224,7 +224,7 @@ smalltalk.method({
 selector: "interpret:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st((smalltalk.ASTInterpreter || ASTInterpreter))._new())._interpret_(_st(_st(_st(self)._parse_forClass_(aString,(smalltalk.Object || Object)))._nodes())._first());
 return $1;
 }, self, "interpret:", [aString], smalltalk.ASTInterpreterTest)}
@@ -237,7 +237,7 @@ smalltalk.method({
 selector: "parse:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._parse_(aString);
 return $1;
 }, self, "parse:", [aString], smalltalk.ASTInterpreterTest)}
@@ -250,7 +250,7 @@ smalltalk.method({
 selector: "parse:forClass:",
 fn: function (aString,aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._analyze_forClass_(_st(self)._parse_(aString),aClass);
 return $1;
 }, self, "parse:forClass:", [aString,aClass], smalltalk.ASTInterpreterTest)}
@@ -263,7 +263,7 @@ smalltalk.method({
 selector: "testBinarySend",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._assert_equals_(_st(self)._interpret_("foo 2+3+4"),(9));
+return smalltalk.withContext(function($ctx1) { 
_st(self)._assert_equals_(_st(self)._interpret_("foo 2+3+4"),(9));
 return self}, self, "testBinarySend", [], smalltalk.ASTInterpreterTest)}
 }),
 smalltalk.ASTInterpreterTest);
@@ -274,12 +274,23 @@ smalltalk.method({
 selector: "testBlockLiteral",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._assert_equals_(_st(self)._interpret_("foo ^ true ifTrue: [ 1 ] ifFalse: [ 2 ]"),(1));
+return smalltalk.withContext(function($ctx1) { 
_st(self)._assert_equals_(_st(self)._interpret_("foo ^ true ifTrue: [ 1 ] ifFalse: [ 2 ]"),(1));
 _st(self)._assert_equals_(_st(self)._interpret_("foo true ifTrue: [ ^ 1 ] ifFalse: [ 2 ]"),(1));
 _st(self)._assert_equals_(_st(self)._interpret_("foo ^ false ifTrue: [ 1 ] ifFalse: [ 2 ]"),(2));
 return self}, self, "testBlockLiteral", [], smalltalk.ASTInterpreterTest)}
 }),
 smalltalk.ASTInterpreterTest);
 
+smalltalk.addMethod(
+"_testCascade",
+smalltalk.method({
+selector: "testCascade",
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(self)._assert_equals_(_st(self)._interpret_("foo ^ OrderedCollection new add: 2; add: 3; yourself"),_st((smalltalk.OrderedCollection || OrderedCollection))._with_with_((2),(3)));
+return self}, self, "testCascade", [], smalltalk.ASTInterpreterTest)}
+}),
+smalltalk.ASTInterpreterTest);
+
 
 

+ 85 - 69
js/Compiler-Interpreter.js

@@ -1,23 +1,5 @@
 smalltalk.addPackage('Compiler-Interpreter', {});
 smalltalk.addClass('ASTInterpreter', smalltalk.NodeVisitor, ['currentNode', 'context', 'shouldReturn'], 'Compiler-Interpreter');
-smalltalk.addMethod(
-"_blockValue_",
-smalltalk.method({
-selector: "blockValue:",
-category: 'interpreting',
-fn: function (anASTBlockClosure){
-var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-$1=_st(self)._interpret_(_st(_st(_st(anASTBlockClosure)._astNode())._nodes())._first());
-return $1;
-}, self, "blockValue:", [anASTBlockClosure], smalltalk.ASTInterpreter)},
-args: ["anASTBlockClosure"],
-source: "blockValue: anASTBlockClosure\x0a\x09^ self interpret: anASTBlockClosure astNode nodes first",
-messageSends: ["interpret:", "first", "nodes", "astNode"],
-referencedClasses: []
-}),
-smalltalk.ASTInterpreter);
-
 smalltalk.addMethod(
 "_context",
 smalltalk.method({
@@ -25,7 +7,7 @@ selector: "context",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@context"];
+return smalltalk.withContext(function($ctx1) { 
return self["@context"];
 }, self, "context", [], smalltalk.ASTInterpreter)},
 args: [],
 source: "context\x0a\x09^ context",
@@ -41,7 +23,7 @@ selector: "context:",
 category: 'accessing',
 fn: function (aMethodContext){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@context"]=aMethodContext;
+return smalltalk.withContext(function($ctx1) { 
self["@context"]=aMethodContext;
 return self}, self, "context:", [aMethodContext], smalltalk.ASTInterpreter)},
 args: ["aMethodContext"],
 source: "context: aMethodContext\x0a\x09context := aMethodContext",
@@ -57,7 +39,7 @@ selector: "initialize",
 category: 'initialization',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { smalltalk.NodeVisitor.fn.prototype._initialize.apply(_st(self), []);
+return smalltalk.withContext(function($ctx1) { 
smalltalk.NodeVisitor.fn.prototype._initialize.apply(_st(self), []);
 self["@shouldReturn"]=false;
 return self}, self, "initialize", [], smalltalk.ASTInterpreter)},
 args: [],
@@ -74,7 +56,7 @@ selector: "interpret:",
 category: 'interpreting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 self["@shouldReturn"]=false;
 $1=_st(self)._interpretNode_(aNode);
 return $1;
@@ -93,7 +75,7 @@ selector: "interpretNode:",
 category: 'interpreting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 self["@currentNode"]=aNode;
 $1=_st(self)._visit_(aNode);
 return $1;
@@ -106,20 +88,26 @@ referencedClasses: []
 smalltalk.ASTInterpreter);
 
 smalltalk.addMethod(
-"_send_to_arguments_",
+"_messageFromSendNode_",
 smalltalk.method({
-selector: "send:to:arguments:",
+selector: "messageFromSendNode:",
 category: 'interpreting',
-fn: function (aSelector,anObject,aCollection){
+fn: function (aSendNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-$1=_st(anObject)._perform_withArguments_(aSelector,aCollection);
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
+$2=_st((smalltalk.Message || Message))._new();
+_st($2)._selector_(_st(aSendNode)._selector());
+_st($2)._arguments_(_st(_st(aSendNode)._arguments())._collect_((function(each){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._interpretNode_(each);
+})})));
+$3=_st($2)._yourself();
+$1=$3;
 return $1;
-}, self, "send:to:arguments:", [aSelector,anObject,aCollection], smalltalk.ASTInterpreter)},
-args: ["aSelector", "anObject", "aCollection"],
-source: "send: aSelector to: anObject arguments: aCollection\x0a\x09^ anObject perform: aSelector withArguments: aCollection",
-messageSends: ["perform:withArguments:"],
-referencedClasses: []
+}, self, "messageFromSendNode:", [aSendNode], smalltalk.ASTInterpreter)},
+args: ["aSendNode"],
+source: "messageFromSendNode: aSendNode\x0a\x09^ Message new\x0a    \x09selector: aSendNode selector;\x0a        arguments: (aSendNode arguments collect: [ :each |\x0a        \x09self interpretNode: each ]);\x0a        yourself",
+messageSends: ["selector:", "selector", "new", "arguments:", "collect:", "interpretNode:", "arguments", "yourself"],
+referencedClasses: ["Message"]
 }),
 smalltalk.ASTInterpreter);
 
@@ -130,10 +118,10 @@ selector: "visitBlockNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=(function(){
-return _st(self)._interpretNode_(_st(_st(aNode)._nodes())._first());
-});
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._interpretNode_(_st(_st(aNode)._nodes())._first());
+})});
 return $1;
 }, self, "visitBlockNode:", [aNode], smalltalk.ASTInterpreter)},
 args: ["aNode"],
@@ -150,22 +138,40 @@ selector: "visitCascadeNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.locals.receiver=nil;
+$ctx1.locals.receiver=_st(self)._interpretNode_(_st(aNode)._receiver());
 _st(_st(_st(aNode)._nodes())._allButLast())._do_((function(each){
-_st(each)._receiver_(_st(aNode)._receiver());
-return _st(self)._interpretNode_(each);
-}));
-_st(_st(_st(aNode)._nodes())._last())._receiver_(_st(aNode)._receiver());
-$1=_st(self)._interpretNode_(_st(_st(aNode)._nodes())._last());
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(self)._messageFromSendNode_(each))._sendTo_($ctx1.locals.receiver);
+})}));
+$1=_st(_st(self)._messageFromSendNode_(_st(_st(aNode)._nodes())._last()))._sendTo_($ctx1.locals.receiver);
 return $1;
 }, self, "visitCascadeNode:", [aNode], smalltalk.ASTInterpreter)},
 args: ["aNode"],
-source: "visitCascadeNode: aNode\x0a\x0a    aNode nodes allButLast\x0a    \x09do: [ :each | \x0a        \x09each receiver: aNode receiver.\x0a\x09\x09\x09self interpretNode: each ].\x0a            \x0a\x09aNode nodes last receiver: aNode receiver.\x0a    ^ self interpretNode: aNode nodes last",
-messageSends: ["do:", "receiver:", "receiver", "interpretNode:", "allButLast", "nodes", "last"],
+source: "visitCascadeNode: aNode\x0a\x09\x22TODO: Handle super sends\x22\x0a\x09| receiver |\x0a    \x0a    receiver := self interpretNode: aNode receiver.\x0a\x0a    aNode nodes allButLast\x0a    \x09do: [ :each | \x0a        \x09(self messageFromSendNode: each)\x0a            \x09sendTo: receiver ].\x0a\x0a    ^ (self messageFromSendNode: aNode nodes last)\x0a            \x09sendTo: receiver",
+messageSends: ["interpretNode:", "receiver", "do:", "sendTo:", "messageFromSendNode:", "allButLast", "nodes", "last"],
 referencedClasses: []
 }),
 smalltalk.ASTInterpreter);
 
+smalltalk.addMethod(
+"_visitClassReferenceNode_",
+smalltalk.method({
+selector: "visitClassReferenceNode:",
+category: 'visiting',
+fn: function (aNode){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$1=_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._at_(_st(aNode)._value());
+return $1;
+}, self, "visitClassReferenceNode:", [aNode], smalltalk.ASTInterpreter)},
+args: ["aNode"],
+source: "visitClassReferenceNode: aNode\x0a\x09^ Smalltalk current at: aNode value",
+messageSends: ["at:", "value", "current"],
+referencedClasses: ["Smalltalk"]
+}),
+smalltalk.ASTInterpreter);
+
 smalltalk.addMethod(
 "_visitJSStatementNode_",
 smalltalk.method({
@@ -173,7 +179,7 @@ selector: "visitJSStatementNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._halt();
+return smalltalk.withContext(function($ctx1) { 
_st(self)._halt();
 return self}, self, "visitJSStatementNode:", [aNode], smalltalk.ASTInterpreter)},
 args: ["aNode"],
 source: "visitJSStatementNode: aNode\x0a\x09self halt",
@@ -189,7 +195,7 @@ selector: "visitReturnNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 self["@shouldReturn"]=true;
 $1=_st(self)._interpretNode_(_st(_st(aNode)._nodes())._first());
 return $1;
@@ -208,19 +214,13 @@ selector: "visitSendNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var receiver;
-var arguments;
-receiver=_st(self)._interpretNode_(_st(aNode)._receiver());
-arguments=_st(_st(aNode)._arguments())._collect_((function(each){
-return _st(self)._interpretNode_(each);
-}));
-$1=_st(self)._send_to_arguments_(_st(aNode)._selector(),receiver,arguments);
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$1=_st(_st(self)._messageFromSendNode_(aNode))._sendTo_(_st(self)._interpretNode_(_st(aNode)._receiver()));
 return $1;
 }, self, "visitSendNode:", [aNode], smalltalk.ASTInterpreter)},
 args: ["aNode"],
-source: "visitSendNode: aNode\x0a\x09\x22TODO: Handle super sends\x22\x0a\x09| receiver arguments |\x0a    \x0a    receiver := self interpretNode: aNode receiver.\x0a    arguments := aNode arguments collect: [ :each |\x0a\x09\x09self interpretNode: each ].\x0a    \x0a    ^ self send: aNode selector to: receiver arguments: arguments",
-messageSends: ["interpretNode:", "receiver", "collect:", "arguments", "send:to:arguments:", "selector"],
+source: "visitSendNode: aNode\x0a\x09\x22TODO: Handle super sends\x22\x0a    \x0a    ^ (self messageFromSendNode: aNode)\x0a    \x09sendTo: (self interpretNode: aNode receiver)",
+messageSends: ["sendTo:", "interpretNode:", "receiver", "messageFromSendNode:"],
 referencedClasses: []
 }),
 smalltalk.ASTInterpreter);
@@ -232,17 +232,17 @@ selector: "visitSequenceNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 var $early={};
 try {
 _st(_st(_st(aNode)._nodes())._allButLast())._do_((function(each){
-var value;
-value=_st(self)._interpretNode_(each);
-value;
+return smalltalk.withContext(function($ctx2) { 
$ctx2.value=nil;
+$ctx2.locals.value=_st(self)._interpretNode_(each);
+$ctx2.locals.value;
 if(smalltalk.assert(self["@shouldReturn"])){
-throw $early=[value];
+throw $early=[$ctx2.locals.value];
 };
-}));
+})}));
 $1=_st(self)._interpretNode_(_st(_st(aNode)._nodes())._last());
 return $1;
 }
@@ -262,7 +262,7 @@ selector: "visitValueNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aNode)._value();
 return $1;
 }, self, "visitValueNode:", [aNode], smalltalk.ASTInterpreter)},
@@ -283,7 +283,7 @@ selector: "analyze:forClass:",
 category: 'accessing',
 fn: function (aNode,aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st((smalltalk.SemanticAnalyzer || SemanticAnalyzer))._on_(aClass))._visit_(aNode);
+return smalltalk.withContext(function($ctx1) { 
_st(_st((smalltalk.SemanticAnalyzer || SemanticAnalyzer))._on_(aClass))._visit_(aNode);
 return aNode;
 }, self, "analyze:forClass:", [aNode,aClass], smalltalk.ASTInterpreterTest)},
 args: ["aNode", "aClass"],
@@ -300,7 +300,7 @@ selector: "interpret:",
 category: 'accessing',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st((smalltalk.ASTInterpreter || ASTInterpreter))._new())._interpret_(_st(_st(_st(self)._parse_forClass_(aString,(smalltalk.Object || Object)))._nodes())._first());
 return $1;
 }, self, "interpret:", [aString], smalltalk.ASTInterpreterTest)},
@@ -318,7 +318,7 @@ selector: "parse:",
 category: 'accessing',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._parse_(aString);
 return $1;
 }, self, "parse:", [aString], smalltalk.ASTInterpreterTest)},
@@ -336,7 +336,7 @@ selector: "parse:forClass:",
 category: 'accessing',
 fn: function (aString,aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._analyze_forClass_(_st(self)._parse_(aString),aClass);
 return $1;
 }, self, "parse:forClass:", [aString,aClass], smalltalk.ASTInterpreterTest)},
@@ -354,7 +354,7 @@ selector: "testBinarySend",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._assert_equals_(_st(self)._interpret_("foo 2+3+4"),(9));
+return smalltalk.withContext(function($ctx1) { 
_st(self)._assert_equals_(_st(self)._interpret_("foo 2+3+4"),(9));
 return self}, self, "testBinarySend", [], smalltalk.ASTInterpreterTest)},
 args: [],
 source: "testBinarySend\x0a\x09self assert: (self interpret: 'foo 2+3+4') equals: 9",
@@ -370,7 +370,7 @@ selector: "testBlockLiteral",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._assert_equals_(_st(self)._interpret_("foo ^ true ifTrue: [ 1 ] ifFalse: [ 2 ]"),(1));
+return smalltalk.withContext(function($ctx1) { 
_st(self)._assert_equals_(_st(self)._interpret_("foo ^ true ifTrue: [ 1 ] ifFalse: [ 2 ]"),(1));
 _st(self)._assert_equals_(_st(self)._interpret_("foo true ifTrue: [ ^ 1 ] ifFalse: [ 2 ]"),(1));
 _st(self)._assert_equals_(_st(self)._interpret_("foo ^ false ifTrue: [ 1 ] ifFalse: [ 2 ]"),(2));
 return self}, self, "testBlockLiteral", [], smalltalk.ASTInterpreterTest)},
@@ -381,5 +381,21 @@ referencedClasses: []
 }),
 smalltalk.ASTInterpreterTest);
 
+smalltalk.addMethod(
+"_testCascade",
+smalltalk.method({
+selector: "testCascade",
+category: 'tests',
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(self)._assert_equals_(_st(self)._interpret_("foo ^ OrderedCollection new add: 2; add: 3; yourself"),_st((smalltalk.OrderedCollection || OrderedCollection))._with_with_((2),(3)));
+return self}, self, "testCascade", [], smalltalk.ASTInterpreterTest)},
+args: [],
+source: "testCascade\x0a\x09self assert: (self interpret: 'foo ^ OrderedCollection new add: 2; add: 3; yourself') equals: (OrderedCollection with: 2 with: 3)",
+messageSends: ["assert:equals:", "interpret:", "with:with:"],
+referencedClasses: ["OrderedCollection"]
+}),
+smalltalk.ASTInterpreterTest);
+
 
 

+ 140 - 133
js/Compiler-Semantic.deploy.js

@@ -6,7 +6,7 @@ smalltalk.method({
 selector: "addArg:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._args())._at_put_(aString,_st((smalltalk.ArgVar || ArgVar))._on_(aString));
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._args())._at_put_(aString,_st((smalltalk.ArgVar || ArgVar))._on_(aString));
 _st(_st(_st(self)._args())._at_(aString))._scope_(self);
 return self}, self, "addArg:", [aString], smalltalk.LexicalScope)}
 }),
@@ -18,7 +18,7 @@ smalltalk.method({
 selector: "addTemp:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._temps())._at_put_(aString,_st((smalltalk.TempVar || TempVar))._on_(aString));
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._temps())._at_put_(aString,_st((smalltalk.TempVar || TempVar))._on_(aString));
 _st(_st(_st(self)._temps())._at_(aString))._scope_(self);
 return self}, self, "addTemp:", [aString], smalltalk.LexicalScope)}
 }),
@@ -30,7 +30,7 @@ smalltalk.method({
 selector: "alias",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st("$ctx").__comma(_st(_st(self)._scopeLevel())._asString());
 return $1;
 }, self, "alias", [], smalltalk.LexicalScope)}
@@ -43,7 +43,7 @@ smalltalk.method({
 selector: "allVariableNames",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(_st(self)._args())._keys()).__comma(_st(_st(self)._temps())._keys());
 return $1;
 }, self, "allVariableNames", [], smalltalk.LexicalScope)}
@@ -56,7 +56,7 @@ smalltalk.method({
 selector: "args",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@args"]) == nil || $receiver == undefined){
 self["@args"]=_st((smalltalk.Dictionary || Dictionary))._new();
 $1=self["@args"];
@@ -74,14 +74,14 @@ smalltalk.method({
 selector: "bindingFor:",
 fn: function (aStringOrNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._pseudoVars())._at_ifAbsent_(_st(aStringOrNode)._value(),(function(){
-return _st(_st(self)._args())._at_ifAbsent_(_st(aStringOrNode)._value(),(function(){
-return _st(_st(self)._temps())._at_ifAbsent_(_st(aStringOrNode)._value(),(function(){
-return nil;
-}));
-}));
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(self)._args())._at_ifAbsent_(_st(aStringOrNode)._value(),(function(){
+return smalltalk.withContext(function($ctx3) { 
return _st(_st(self)._temps())._at_ifAbsent_(_st(aStringOrNode)._value(),(function(){
+return smalltalk.withContext(function($ctx4) { 
return nil;
+})}));
+})}));
+})}));
 return $1;
 }, self, "bindingFor:", [aStringOrNode], smalltalk.LexicalScope)}
 }),
@@ -93,10 +93,10 @@ smalltalk.method({
 selector: "canInlineNonLocalReturns",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._isInlined())._and_((function(){
-return _st(_st(self)._outerScope())._canInlineNonLocalReturns();
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(self)._outerScope())._canInlineNonLocalReturns();
+})}));
 return $1;
 }, self, "canInlineNonLocalReturns", [], smalltalk.LexicalScope)}
 }),
@@ -108,7 +108,7 @@ smalltalk.method({
 selector: "instruction",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@instruction"];
+return smalltalk.withContext(function($ctx1) { 
return self["@instruction"];
 }, self, "instruction", [], smalltalk.LexicalScope)}
 }),
 smalltalk.LexicalScope);
@@ -119,7 +119,7 @@ smalltalk.method({
 selector: "instruction:",
 fn: function (anIRInstruction){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@instruction"]=anIRInstruction;
+return smalltalk.withContext(function($ctx1) { 
self["@instruction"]=anIRInstruction;
 return self}, self, "instruction:", [anIRInstruction], smalltalk.LexicalScope)}
 }),
 smalltalk.LexicalScope);
@@ -130,7 +130,7 @@ smalltalk.method({
 selector: "isBlockScope",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._isMethodScope())._not();
 return $1;
 }, self, "isBlockScope", [], smalltalk.LexicalScope)}
@@ -143,8 +143,10 @@ smalltalk.method({
 selector: "isInlined",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-$1=_st(_st(self)._instruction())._isInlined();
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$1=_st(_st(_st(self)._instruction())._notNil())._and_((function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(self)._instruction())._isInlined();
+})}));
 return $1;
 }, self, "isInlined", [], smalltalk.LexicalScope)}
 }),
@@ -156,7 +158,7 @@ smalltalk.method({
 selector: "isMethodScope",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isMethodScope", [], smalltalk.LexicalScope)}
 }),
 smalltalk.LexicalScope);
@@ -167,21 +169,21 @@ smalltalk.method({
 selector: "lookupVariable:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var lookup;
-lookup=_st(self)._bindingFor_(aNode);
-if(($receiver = lookup) == nil || $receiver == undefined){
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.lookup=nil;
+$ctx1.locals.lookup=_st(self)._bindingFor_(aNode);
+if(($receiver = $ctx1.locals.lookup) == nil || $receiver == undefined){
 $1=_st(self)._outerScope();
 if(($receiver = $1) == nil || $receiver == undefined){
-lookup=$1;
+$ctx1.locals.lookup=$1;
 } else {
-lookup=_st(_st(self)._outerScope())._lookupVariable_(aNode);
+$ctx1.locals.lookup=_st(_st(self)._outerScope())._lookupVariable_(aNode);
 };
-lookup;
+$ctx1.locals.lookup;
 } else {
-lookup;
+$ctx1.locals.lookup;
 };
-return lookup;
+return $ctx1.locals.lookup;
 }, self, "lookupVariable:", [aNode], smalltalk.LexicalScope)}
 }),
 smalltalk.LexicalScope);
@@ -192,7 +194,7 @@ smalltalk.method({
 selector: "methodScope",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$1;
 $2=_st(self)._outerScope();
 if(($receiver = $2) == nil || $receiver == undefined){
 $1=$2;
@@ -210,7 +212,7 @@ smalltalk.method({
 selector: "node",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@node"];
+return smalltalk.withContext(function($ctx1) { 
return self["@node"];
 }, self, "node", [], smalltalk.LexicalScope)}
 }),
 smalltalk.LexicalScope);
@@ -221,7 +223,7 @@ smalltalk.method({
 selector: "node:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@node"]=aNode;
+return smalltalk.withContext(function($ctx1) { 
self["@node"]=aNode;
 return self}, self, "node:", [aNode], smalltalk.LexicalScope)}
 }),
 smalltalk.LexicalScope);
@@ -232,7 +234,7 @@ smalltalk.method({
 selector: "outerScope",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@outerScope"];
+return smalltalk.withContext(function($ctx1) { 
return self["@outerScope"];
 }, self, "outerScope", [], smalltalk.LexicalScope)}
 }),
 smalltalk.LexicalScope);
@@ -243,7 +245,7 @@ smalltalk.method({
 selector: "outerScope:",
 fn: function (aLexicalScope){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@outerScope"]=aLexicalScope;
+return smalltalk.withContext(function($ctx1) { 
self["@outerScope"]=aLexicalScope;
 return self}, self, "outerScope:", [aLexicalScope], smalltalk.LexicalScope)}
 }),
 smalltalk.LexicalScope);
@@ -254,7 +256,7 @@ smalltalk.method({
 selector: "pseudoVars",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._methodScope())._pseudoVars();
 return $1;
 }, self, "pseudoVars", [], smalltalk.LexicalScope)}
@@ -267,15 +269,20 @@ smalltalk.method({
 selector: "scopeLevel",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $3,$2,$1;
-$3=_st(self)._outerScope();
-if(($receiver = $3) == nil || $receiver == undefined){
-$2=(0);
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3,$4;
+$1=_st(self)._outerScope();
+if(($receiver = $1) == nil || $receiver == undefined){
+return (1);
 } else {
-$2=_st(_st(self)._outerScope())._scopeLevel();
+$1;
 };
-$1=_st($2).__plus((1));
-return $1;
+$2=_st(self)._isInlined();
+if(smalltalk.assert($2)){
+$3=_st(_st(self)._outerScope())._scopeLevel();
+return $3;
+};
+$4=_st(_st(_st(self)._outerScope())._scopeLevel()).__plus((1));
+return $4;
 }, self, "scopeLevel", [], smalltalk.LexicalScope)}
 }),
 smalltalk.LexicalScope);
@@ -286,7 +293,7 @@ smalltalk.method({
 selector: "temps",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@temps"]) == nil || $receiver == undefined){
 self["@temps"]=_st((smalltalk.Dictionary || Dictionary))._new();
 $1=self["@temps"];
@@ -307,7 +314,7 @@ smalltalk.method({
 selector: "addIVar:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._iVars())._at_put_(aString,_st((smalltalk.InstanceVar || InstanceVar))._on_(aString));
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._iVars())._at_put_(aString,_st((smalltalk.InstanceVar || InstanceVar))._on_(aString));
 _st(_st(_st(self)._iVars())._at_(aString))._scope_(self);
 return self}, self, "addIVar:", [aString], smalltalk.MethodLexicalScope)}
 }),
@@ -319,7 +326,7 @@ smalltalk.method({
 selector: "addNonLocalReturn:",
 fn: function (aScope){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._nonLocalReturns())._add_(aScope);
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._nonLocalReturns())._add_(aScope);
 return self}, self, "addNonLocalReturn:", [aScope], smalltalk.MethodLexicalScope)}
 }),
 smalltalk.MethodLexicalScope);
@@ -330,7 +337,7 @@ smalltalk.method({
 selector: "allVariableNames",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(smalltalk.LexicalScope.fn.prototype._allVariableNames.apply(_st(self), [])).__comma(_st(_st(self)._iVars())._keys());
 return $1;
 }, self, "allVariableNames", [], smalltalk.MethodLexicalScope)}
@@ -343,12 +350,12 @@ smalltalk.method({
 selector: "bindingFor:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$1;
 $2=smalltalk.LexicalScope.fn.prototype._bindingFor_.apply(_st(self), [aNode]);
 if(($receiver = $2) == nil || $receiver == undefined){
 $1=_st(_st(self)._iVars())._at_ifAbsent_(_st(aNode)._value(),(function(){
-return nil;
-}));
+return smalltalk.withContext(function($ctx2) { 
return nil;
+})}));
 } else {
 $1=$2;
 };
@@ -363,7 +370,7 @@ smalltalk.method({
 selector: "canInlineNonLocalReturns",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "canInlineNonLocalReturns", [], smalltalk.MethodLexicalScope)}
 }),
 smalltalk.MethodLexicalScope);
@@ -374,7 +381,7 @@ smalltalk.method({
 selector: "hasLocalReturn",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._localReturn();
 return $1;
 }, self, "hasLocalReturn", [], smalltalk.MethodLexicalScope)}
@@ -387,7 +394,7 @@ smalltalk.method({
 selector: "hasNonLocalReturn",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._nonLocalReturns())._notEmpty();
 return $1;
 }, self, "hasNonLocalReturn", [], smalltalk.MethodLexicalScope)}
@@ -400,7 +407,7 @@ smalltalk.method({
 selector: "iVars",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@iVars"]) == nil || $receiver == undefined){
 self["@iVars"]=_st((smalltalk.Dictionary || Dictionary))._new();
 $1=self["@iVars"];
@@ -418,7 +425,7 @@ smalltalk.method({
 selector: "isMethodScope",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isMethodScope", [], smalltalk.MethodLexicalScope)}
 }),
 smalltalk.MethodLexicalScope);
@@ -429,7 +436,7 @@ smalltalk.method({
 selector: "localReturn",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@localReturn"]) == nil || $receiver == undefined){
 $1=false;
 } else {
@@ -446,7 +453,7 @@ smalltalk.method({
 selector: "localReturn:",
 fn: function (aBoolean){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@localReturn"]=aBoolean;
+return smalltalk.withContext(function($ctx1) { 
self["@localReturn"]=aBoolean;
 return self}, self, "localReturn:", [aBoolean], smalltalk.MethodLexicalScope)}
 }),
 smalltalk.MethodLexicalScope);
@@ -457,7 +464,7 @@ smalltalk.method({
 selector: "methodScope",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self;
+return smalltalk.withContext(function($ctx1) { 
return self;
 }, self, "methodScope", [], smalltalk.MethodLexicalScope)}
 }),
 smalltalk.MethodLexicalScope);
@@ -468,7 +475,7 @@ smalltalk.method({
 selector: "nonLocalReturns",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@nonLocalReturns"]) == nil || $receiver == undefined){
 self["@nonLocalReturns"]=_st((smalltalk.OrderedCollection || OrderedCollection))._new();
 $1=self["@nonLocalReturns"];
@@ -486,16 +493,16 @@ smalltalk.method({
 selector: "pseudoVars",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 if(($receiver = self["@pseudoVars"]) == nil || $receiver == undefined){
 self["@pseudoVars"]=_st((smalltalk.Dictionary || Dictionary))._new();
 self["@pseudoVars"];
 _st(_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._pseudoVariableNames())._do_((function(each){
-$1=_st((smalltalk.PseudoVar || PseudoVar))._on_(each);
+return smalltalk.withContext(function($ctx2) { 
$1=_st((smalltalk.PseudoVar || PseudoVar))._on_(each);
 _st($1)._scope_(_st(self)._methodScope());
 $2=_st($1)._yourself();
 return _st(self["@pseudoVars"])._at_put_(each,$2);
-}));
+})}));
 } else {
 self["@pseudoVars"];
 };
@@ -510,8 +517,8 @@ smalltalk.method({
 selector: "removeNonLocalReturn:",
 fn: function (aScope){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._nonLocalReturns())._remove_ifAbsent_(aScope,(function(){
-}));
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._nonLocalReturns())._remove_ifAbsent_(aScope,(function(){
+return smalltalk.withContext(function($ctx2) { 
})}));
 return self}, self, "removeNonLocalReturn:", [aScope], smalltalk.MethodLexicalScope)}
 }),
 smalltalk.MethodLexicalScope);
@@ -522,7 +529,7 @@ smalltalk.method({
 selector: "unknownVariables",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@unknownVariables"]) == nil || $receiver == undefined){
 self["@unknownVariables"]=_st((smalltalk.OrderedCollection || OrderedCollection))._new();
 $1=self["@unknownVariables"];
@@ -543,7 +550,7 @@ smalltalk.method({
 selector: "alias",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._name())._asVariableName();
 return $1;
 }, self, "alias", [], smalltalk.ScopeVar)}
@@ -556,7 +563,7 @@ smalltalk.method({
 selector: "isArgVar",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isArgVar", [], smalltalk.ScopeVar)}
 }),
 smalltalk.ScopeVar);
@@ -567,7 +574,7 @@ smalltalk.method({
 selector: "isClassRefVar",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isClassRefVar", [], smalltalk.ScopeVar)}
 }),
 smalltalk.ScopeVar);
@@ -578,7 +585,7 @@ smalltalk.method({
 selector: "isInstanceVar",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isInstanceVar", [], smalltalk.ScopeVar)}
 }),
 smalltalk.ScopeVar);
@@ -589,7 +596,7 @@ smalltalk.method({
 selector: "isPseudoVar",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isPseudoVar", [], smalltalk.ScopeVar)}
 }),
 smalltalk.ScopeVar);
@@ -600,7 +607,7 @@ smalltalk.method({
 selector: "isTempVar",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isTempVar", [], smalltalk.ScopeVar)}
 }),
 smalltalk.ScopeVar);
@@ -611,7 +618,7 @@ smalltalk.method({
 selector: "isUnknownVar",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isUnknownVar", [], smalltalk.ScopeVar)}
 }),
 smalltalk.ScopeVar);
@@ -622,7 +629,7 @@ smalltalk.method({
 selector: "name",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@name"];
+return smalltalk.withContext(function($ctx1) { 
return self["@name"];
 }, self, "name", [], smalltalk.ScopeVar)}
 }),
 smalltalk.ScopeVar);
@@ -633,7 +640,7 @@ smalltalk.method({
 selector: "name:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@name"]=aString;
+return smalltalk.withContext(function($ctx1) { 
self["@name"]=aString;
 return self}, self, "name:", [aString], smalltalk.ScopeVar)}
 }),
 smalltalk.ScopeVar);
@@ -644,7 +651,7 @@ smalltalk.method({
 selector: "scope",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@scope"];
+return smalltalk.withContext(function($ctx1) { 
return self["@scope"];
 }, self, "scope", [], smalltalk.ScopeVar)}
 }),
 smalltalk.ScopeVar);
@@ -655,7 +662,7 @@ smalltalk.method({
 selector: "scope:",
 fn: function (aScope){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@scope"]=aScope;
+return smalltalk.withContext(function($ctx1) { 
self["@scope"]=aScope;
 return self}, self, "scope:", [aScope], smalltalk.ScopeVar)}
 }),
 smalltalk.ScopeVar);
@@ -666,10 +673,10 @@ smalltalk.method({
 selector: "validateAssignment",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3;
 $1=_st(_st(self)._isArgVar())._or_((function(){
-return _st(self)._isPseudoVar();
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._isPseudoVar();
+})}));
 if(smalltalk.assert($1)){
 $2=_st((smalltalk.InvalidAssignmentError || InvalidAssignmentError))._new();
 _st($2)._variableName_(_st(self)._name());
@@ -687,7 +694,7 @@ smalltalk.method({
 selector: "on:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st(self)._new();
 _st($2)._name_(aString);
 $3=_st($2)._yourself();
@@ -705,7 +712,7 @@ smalltalk.method({
 selector: "node",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@node"];
+return smalltalk.withContext(function($ctx1) { 
return self["@node"];
 }, self, "node", [], smalltalk.AliasVar)}
 }),
 smalltalk.AliasVar);
@@ -716,7 +723,7 @@ smalltalk.method({
 selector: "node:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@node"]=aNode;
+return smalltalk.withContext(function($ctx1) { 
self["@node"]=aNode;
 return self}, self, "node:", [aNode], smalltalk.AliasVar)}
 }),
 smalltalk.AliasVar);
@@ -730,7 +737,7 @@ smalltalk.method({
 selector: "isArgVar",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isArgVar", [], smalltalk.ArgVar)}
 }),
 smalltalk.ArgVar);
@@ -744,7 +751,7 @@ smalltalk.method({
 selector: "alias",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(_st(_st("(smalltalk.").__comma(_st(self)._name())).__comma(" || ")).__comma(_st(self)._name())).__comma(")");
 return $1;
 }, self, "alias", [], smalltalk.ClassRefVar)}
@@ -757,7 +764,7 @@ smalltalk.method({
 selector: "isClassRefVar",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isClassRefVar", [], smalltalk.ClassRefVar)}
 }),
 smalltalk.ClassRefVar);
@@ -771,7 +778,7 @@ smalltalk.method({
 selector: "alias",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st("self[\x22@").__comma(_st(self)._name())).__comma("\x22]");
 return $1;
 }, self, "alias", [], smalltalk.InstanceVar)}
@@ -784,7 +791,7 @@ smalltalk.method({
 selector: "isInstanceVar",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isInstanceVar", [], smalltalk.InstanceVar)}
 }),
 smalltalk.InstanceVar);
@@ -798,7 +805,7 @@ smalltalk.method({
 selector: "alias",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._name();
 return $1;
 }, self, "alias", [], smalltalk.PseudoVar)}
@@ -811,7 +818,7 @@ smalltalk.method({
 selector: "isPseudoVar",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isPseudoVar", [], smalltalk.PseudoVar)}
 }),
 smalltalk.PseudoVar);
@@ -825,8 +832,8 @@ smalltalk.method({
 selector: "alias",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-$1=_st(_st(_st(_st(self)._scope())._alias()).__comma(".")).__comma(smalltalk.ScopeVar.fn.prototype._alias.apply(_st(self), []));
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$1=_st(_st(_st(_st(self)._scope())._alias()).__comma(".locals.")).__comma(smalltalk.ScopeVar.fn.prototype._alias.apply(_st(self), []));
 return $1;
 }, self, "alias", [], smalltalk.TempVar)}
 }),
@@ -838,7 +845,7 @@ smalltalk.method({
 selector: "isTempVar",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isTempVar", [], smalltalk.TempVar)}
 }),
 smalltalk.TempVar);
@@ -852,7 +859,7 @@ smalltalk.method({
 selector: "isUnknownVar",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isUnknownVar", [], smalltalk.UnknownVar)}
 }),
 smalltalk.UnknownVar);
@@ -866,7 +873,7 @@ smalltalk.method({
 selector: "classReferences",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@classReferences"]) == nil || $receiver == undefined){
 self["@classReferences"]=_st((smalltalk.Set || Set))._new();
 $1=self["@classReferences"];
@@ -884,7 +891,7 @@ smalltalk.method({
 selector: "errorShadowingVariable:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 $1=_st((smalltalk.ShadowingVariableError || ShadowingVariableError))._new();
 _st($1)._variableName_(aString);
 $2=_st($1)._signal();
@@ -898,7 +905,7 @@ smalltalk.method({
 selector: "errorUnknownVariable:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3;
 $1=_st(self)._isVariableGloballyUndefined_(_st(aNode)._value());
 if(smalltalk.assert($1)){
 $2=_st((smalltalk.UnknownVariableError || UnknownVariableError))._new();
@@ -918,7 +925,7 @@ smalltalk.method({
 selector: "isVariableGloballyUndefined:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { return eval('typeof ' + aString + ' == "undefined"');
+return smalltalk.withContext(function($ctx1) { 
return eval('typeof ' + aString + ' == "undefined"');
 ;
 return self}, self, "isVariableGloballyUndefined:", [aString], smalltalk.SemanticAnalyzer)}
 }),
@@ -930,7 +937,7 @@ smalltalk.method({
 selector: "messageSends",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@messageSends"]) == nil || $receiver == undefined){
 self["@messageSends"]=_st((smalltalk.Dictionary || Dictionary))._new();
 $1=self["@messageSends"];
@@ -948,7 +955,7 @@ smalltalk.method({
 selector: "newBlockScope",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._newScopeOfClass_((smalltalk.LexicalScope || LexicalScope));
 return $1;
 }, self, "newBlockScope", [], smalltalk.SemanticAnalyzer)}
@@ -961,7 +968,7 @@ smalltalk.method({
 selector: "newMethodScope",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._newScopeOfClass_((smalltalk.MethodLexicalScope || MethodLexicalScope));
 return $1;
 }, self, "newMethodScope", [], smalltalk.SemanticAnalyzer)}
@@ -974,7 +981,7 @@ smalltalk.method({
 selector: "newScopeOfClass:",
 fn: function (aLexicalScopeClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st(aLexicalScopeClass)._new();
 _st($2)._outerScope_(self["@currentScope"]);
 $3=_st($2)._yourself();
@@ -990,7 +997,7 @@ smalltalk.method({
 selector: "popScope",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { if(($receiver = self["@currentScope"]) == nil || $receiver == undefined){
+return smalltalk.withContext(function($ctx1) { 
if(($receiver = self["@currentScope"]) == nil || $receiver == undefined){
 self["@currentScope"];
 } else {
 self["@currentScope"]=_st(self["@currentScope"])._outerScope();
@@ -1006,7 +1013,7 @@ smalltalk.method({
 selector: "pushScope:",
 fn: function (aScope){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(aScope)._outerScope_(self["@currentScope"]);
+return smalltalk.withContext(function($ctx1) { 
_st(aScope)._outerScope_(self["@currentScope"]);
 self["@currentScope"]=aScope;
 return self}, self, "pushScope:", [aScope], smalltalk.SemanticAnalyzer)}
 }),
@@ -1018,7 +1025,7 @@ smalltalk.method({
 selector: "superSends",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@superSends"]) == nil || $receiver == undefined){
 self["@superSends"]=_st((smalltalk.Dictionary || Dictionary))._new();
 $1=self["@superSends"];
@@ -1036,7 +1043,7 @@ smalltalk.method({
 selector: "theClass",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@theClass"];
+return smalltalk.withContext(function($ctx1) { 
return self["@theClass"];
 }, self, "theClass", [], smalltalk.SemanticAnalyzer)}
 }),
 smalltalk.SemanticAnalyzer);
@@ -1047,7 +1054,7 @@ smalltalk.method({
 selector: "theClass:",
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@theClass"]=aClass;
+return smalltalk.withContext(function($ctx1) { 
self["@theClass"]=aClass;
 return self}, self, "theClass:", [aClass], smalltalk.SemanticAnalyzer)}
 }),
 smalltalk.SemanticAnalyzer);
@@ -1058,7 +1065,7 @@ smalltalk.method({
 selector: "validateVariableScope:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self["@currentScope"])._lookupVariable_(aString);
 if(($receiver = $1) == nil || $receiver == undefined){
 $1;
@@ -1075,7 +1082,7 @@ smalltalk.method({
 selector: "visitAssignmentNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { smalltalk.NodeVisitor.fn.prototype._visitAssignmentNode_.apply(_st(self), [aNode]);
+return smalltalk.withContext(function($ctx1) { 
smalltalk.NodeVisitor.fn.prototype._visitAssignmentNode_.apply(_st(self), [aNode]);
 _st(_st(aNode)._left())._beAssigned();
 return self}, self, "visitAssignmentNode:", [aNode], smalltalk.SemanticAnalyzer)}
 }),
@@ -1087,13 +1094,13 @@ smalltalk.method({
 selector: "visitBlockNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._pushScope_(_st(self)._newBlockScope());
+return smalltalk.withContext(function($ctx1) { 
_st(self)._pushScope_(_st(self)._newBlockScope());
 _st(aNode)._scope_(self["@currentScope"]);
 _st(self["@currentScope"])._node_(aNode);
 _st(_st(aNode)._parameters())._do_((function(each){
-_st(self)._validateVariableScope_(each);
+return smalltalk.withContext(function($ctx2) { 
_st(self)._validateVariableScope_(each);
 return _st(self["@currentScope"])._addArg_(each);
-}));
+})}));
 smalltalk.NodeVisitor.fn.prototype._visitBlockNode_.apply(_st(self), [aNode]);
 _st(self)._popScope();
 return self}, self, "visitBlockNode:", [aNode], smalltalk.SemanticAnalyzer)}
@@ -1106,16 +1113,16 @@ smalltalk.method({
 selector: "visitCascadeNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(_st(aNode)._nodes())._do_((function(each){
-return _st(each)._receiver_(_st(aNode)._receiver());
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(each)._receiver_(_st(aNode)._receiver());
+})}));
 smalltalk.NodeVisitor.fn.prototype._visitCascadeNode_.apply(_st(self), [aNode]);
 $1=_st(_st(_st(aNode)._nodes())._first())._superSend();
 if(smalltalk.assert($1)){
 _st(_st(aNode)._nodes())._do_((function(each){
-return _st(each)._superSend_(true);
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(each)._superSend_(true);
+})}));
 };
 return self}, self, "visitCascadeNode:", [aNode], smalltalk.SemanticAnalyzer)}
 }),
@@ -1127,7 +1134,7 @@ smalltalk.method({
 selector: "visitClassReferenceNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 _st(_st(self)._classReferences())._add_(_st(aNode)._value());
 $1=_st((smalltalk.ClassRefVar || ClassRefVar))._new();
 _st($1)._name_(_st(aNode)._value());
@@ -1143,17 +1150,17 @@ smalltalk.method({
 selector: "visitMethodNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(self)._pushScope_(_st(self)._newMethodScope());
 _st(aNode)._scope_(self["@currentScope"]);
 _st(self["@currentScope"])._node_(aNode);
 _st(_st(_st(self)._theClass())._allInstanceVariableNames())._do_((function(each){
-return _st(self["@currentScope"])._addIVar_(each);
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(self["@currentScope"])._addIVar_(each);
+})}));
 _st(_st(aNode)._arguments())._do_((function(each){
-_st(self)._validateVariableScope_(each);
+return smalltalk.withContext(function($ctx2) { 
_st(self)._validateVariableScope_(each);
 return _st(self["@currentScope"])._addArg_(each);
-}));
+})}));
 smalltalk.NodeVisitor.fn.prototype._visitMethodNode_.apply(_st(self), [aNode]);
 _st(aNode)._classReferences_(_st(self)._classReferences());
 _st(aNode)._messageSends_(_st(_st(self)._messageSends())._keys());
@@ -1169,7 +1176,7 @@ smalltalk.method({
 selector: "visitReturnNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(aNode)._scope_(self["@currentScope"]);
 $1=_st(self["@currentScope"])._isMethodScope();
 if(smalltalk.assert($1)){
@@ -1188,14 +1195,14 @@ smalltalk.method({
 selector: "visitSendNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3;
 $1=_st(_st(_st(aNode)._receiver())._value()).__eq("super");
 if(smalltalk.assert($1)){
 _st(aNode)._superSend_(true);
 _st(_st(aNode)._receiver())._value_("self");
 _st(_st(self)._superSends())._at_ifAbsentPut_(_st(aNode)._selector(),(function(){
-return _st((smalltalk.Set || Set))._new();
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st((smalltalk.Set || Set))._new();
+})}));
 _st(_st(_st(self)._superSends())._at_(_st(aNode)._selector()))._add_(aNode);
 } else {
 $2=_st(_st((smalltalk.IRSendInliner || IRSendInliner))._inlinedSelectors())._includes_(_st(aNode)._selector());
@@ -1208,8 +1215,8 @@ _st(_st(aNode)._receiver())._shouldBeAliased_(true);
 };
 };
 _st(_st(self)._messageSends())._at_ifAbsentPut_(_st(aNode)._selector(),(function(){
-return _st((smalltalk.Set || Set))._new();
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st((smalltalk.Set || Set))._new();
+})}));
 _st(_st(_st(self)._messageSends())._at_(_st(aNode)._selector()))._add_(aNode);
 _st(aNode)._index_(_st(_st(_st(self)._messageSends())._at_(_st(aNode)._selector()))._size());
 smalltalk.NodeVisitor.fn.prototype._visitSendNode_.apply(_st(self), [aNode]);
@@ -1223,10 +1230,10 @@ smalltalk.method({
 selector: "visitSequenceNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(aNode)._temps())._do_((function(each){
-_st(self)._validateVariableScope_(each);
+return smalltalk.withContext(function($ctx1) { 
_st(_st(aNode)._temps())._do_((function(each){
+return smalltalk.withContext(function($ctx2) { 
_st(self)._validateVariableScope_(each);
 return _st(self["@currentScope"])._addTemp_(each);
-}));
+})}));
 smalltalk.NodeVisitor.fn.prototype._visitSequenceNode_.apply(_st(self), [aNode]);
 return self}, self, "visitSequenceNode:", [aNode], smalltalk.SemanticAnalyzer)}
 }),
@@ -1238,7 +1245,7 @@ smalltalk.method({
 selector: "visitVariableNode:",
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$4,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$4,$1;
 $2=_st(self["@currentScope"])._lookupVariable_(aNode);
 if(($receiver = $2) == nil || $receiver == undefined){
 _st(self)._errorUnknownVariable_(aNode);
@@ -1261,7 +1268,7 @@ smalltalk.method({
 selector: "on:",
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st(self)._new();
 _st($2)._theClass_(aClass);
 $3=_st($2)._yourself();

+ 145 - 138
js/Compiler-Semantic.js

@@ -8,7 +8,7 @@ selector: "addArg:",
 category: 'adding',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._args())._at_put_(aString,_st((smalltalk.ArgVar || ArgVar))._on_(aString));
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._args())._at_put_(aString,_st((smalltalk.ArgVar || ArgVar))._on_(aString));
 _st(_st(_st(self)._args())._at_(aString))._scope_(self);
 return self}, self, "addArg:", [aString], smalltalk.LexicalScope)},
 args: ["aString"],
@@ -25,7 +25,7 @@ selector: "addTemp:",
 category: 'adding',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._temps())._at_put_(aString,_st((smalltalk.TempVar || TempVar))._on_(aString));
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._temps())._at_put_(aString,_st((smalltalk.TempVar || TempVar))._on_(aString));
 _st(_st(_st(self)._temps())._at_(aString))._scope_(self);
 return self}, self, "addTemp:", [aString], smalltalk.LexicalScope)},
 args: ["aString"],
@@ -42,7 +42,7 @@ selector: "alias",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st("$ctx").__comma(_st(_st(self)._scopeLevel())._asString());
 return $1;
 }, self, "alias", [], smalltalk.LexicalScope)},
@@ -60,7 +60,7 @@ selector: "allVariableNames",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(_st(self)._args())._keys()).__comma(_st(_st(self)._temps())._keys());
 return $1;
 }, self, "allVariableNames", [], smalltalk.LexicalScope)},
@@ -78,7 +78,7 @@ selector: "args",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@args"]) == nil || $receiver == undefined){
 self["@args"]=_st((smalltalk.Dictionary || Dictionary))._new();
 $1=self["@args"];
@@ -101,14 +101,14 @@ selector: "bindingFor:",
 category: 'accessing',
 fn: function (aStringOrNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._pseudoVars())._at_ifAbsent_(_st(aStringOrNode)._value(),(function(){
-return _st(_st(self)._args())._at_ifAbsent_(_st(aStringOrNode)._value(),(function(){
-return _st(_st(self)._temps())._at_ifAbsent_(_st(aStringOrNode)._value(),(function(){
-return nil;
-}));
-}));
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(self)._args())._at_ifAbsent_(_st(aStringOrNode)._value(),(function(){
+return smalltalk.withContext(function($ctx3) { 
return _st(_st(self)._temps())._at_ifAbsent_(_st(aStringOrNode)._value(),(function(){
+return smalltalk.withContext(function($ctx4) { 
return nil;
+})}));
+})}));
+})}));
 return $1;
 }, self, "bindingFor:", [aStringOrNode], smalltalk.LexicalScope)},
 args: ["aStringOrNode"],
@@ -125,10 +125,10 @@ selector: "canInlineNonLocalReturns",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._isInlined())._and_((function(){
-return _st(_st(self)._outerScope())._canInlineNonLocalReturns();
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(self)._outerScope())._canInlineNonLocalReturns();
+})}));
 return $1;
 }, self, "canInlineNonLocalReturns", [], smalltalk.LexicalScope)},
 args: [],
@@ -145,7 +145,7 @@ selector: "instruction",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@instruction"];
+return smalltalk.withContext(function($ctx1) { 
return self["@instruction"];
 }, self, "instruction", [], smalltalk.LexicalScope)},
 args: [],
 source: "instruction\x0a\x09^ instruction",
@@ -161,7 +161,7 @@ selector: "instruction:",
 category: 'accessing',
 fn: function (anIRInstruction){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@instruction"]=anIRInstruction;
+return smalltalk.withContext(function($ctx1) { 
self["@instruction"]=anIRInstruction;
 return self}, self, "instruction:", [anIRInstruction], smalltalk.LexicalScope)},
 args: ["anIRInstruction"],
 source: "instruction: anIRInstruction\x0a\x09instruction := anIRInstruction",
@@ -177,7 +177,7 @@ selector: "isBlockScope",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._isMethodScope())._not();
 return $1;
 }, self, "isBlockScope", [], smalltalk.LexicalScope)},
@@ -195,13 +195,15 @@ selector: "isInlined",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-$1=_st(_st(self)._instruction())._isInlined();
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$1=_st(_st(_st(self)._instruction())._notNil())._and_((function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(self)._instruction())._isInlined();
+})}));
 return $1;
 }, self, "isInlined", [], smalltalk.LexicalScope)},
 args: [],
-source: "isInlined\x0a\x09^ self instruction isInlined",
-messageSends: ["isInlined", "instruction"],
+source: "isInlined\x0a\x09^ self instruction notNil and: [\x0a      \x09self instruction isInlined ]",
+messageSends: ["and:", "isInlined", "instruction", "notNil"],
 referencedClasses: []
 }),
 smalltalk.LexicalScope);
@@ -213,7 +215,7 @@ selector: "isMethodScope",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isMethodScope", [], smalltalk.LexicalScope)},
 args: [],
 source: "isMethodScope\x0a\x09^ false",
@@ -229,21 +231,21 @@ selector: "lookupVariable:",
 category: 'accessing',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var lookup;
-lookup=_st(self)._bindingFor_(aNode);
-if(($receiver = lookup) == nil || $receiver == undefined){
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.lookup=nil;
+$ctx1.locals.lookup=_st(self)._bindingFor_(aNode);
+if(($receiver = $ctx1.locals.lookup) == nil || $receiver == undefined){
 $1=_st(self)._outerScope();
 if(($receiver = $1) == nil || $receiver == undefined){
-lookup=$1;
+$ctx1.locals.lookup=$1;
 } else {
-lookup=_st(_st(self)._outerScope())._lookupVariable_(aNode);
+$ctx1.locals.lookup=_st(_st(self)._outerScope())._lookupVariable_(aNode);
 };
-lookup;
+$ctx1.locals.lookup;
 } else {
-lookup;
+$ctx1.locals.lookup;
 };
-return lookup;
+return $ctx1.locals.lookup;
 }, self, "lookupVariable:", [aNode], smalltalk.LexicalScope)},
 args: ["aNode"],
 source: "lookupVariable: aNode\x0a\x09| lookup |\x0a\x09lookup := (self bindingFor: aNode).\x0a\x09lookup ifNil: [\x0a\x09\x09lookup := self outerScope ifNotNil: [ \x0a\x09\x09\x09(self outerScope lookupVariable: aNode) ]].\x0a\x09^ lookup",
@@ -259,7 +261,7 @@ selector: "methodScope",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$1;
 $2=_st(self)._outerScope();
 if(($receiver = $2) == nil || $receiver == undefined){
 $1=$2;
@@ -282,7 +284,7 @@ selector: "node",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@node"];
+return smalltalk.withContext(function($ctx1) { 
return self["@node"];
 }, self, "node", [], smalltalk.LexicalScope)},
 args: [],
 source: "node\x0a\x09\x22Answer the node in which I am defined\x22\x0a\x09\x0a\x09^ node",
@@ -298,7 +300,7 @@ selector: "node:",
 category: 'accessing',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@node"]=aNode;
+return smalltalk.withContext(function($ctx1) { 
self["@node"]=aNode;
 return self}, self, "node:", [aNode], smalltalk.LexicalScope)},
 args: ["aNode"],
 source: "node: aNode\x0a\x09node := aNode",
@@ -314,7 +316,7 @@ selector: "outerScope",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@outerScope"];
+return smalltalk.withContext(function($ctx1) { 
return self["@outerScope"];
 }, self, "outerScope", [], smalltalk.LexicalScope)},
 args: [],
 source: "outerScope\x0a\x09^ outerScope",
@@ -330,7 +332,7 @@ selector: "outerScope:",
 category: 'accessing',
 fn: function (aLexicalScope){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@outerScope"]=aLexicalScope;
+return smalltalk.withContext(function($ctx1) { 
self["@outerScope"]=aLexicalScope;
 return self}, self, "outerScope:", [aLexicalScope], smalltalk.LexicalScope)},
 args: ["aLexicalScope"],
 source: "outerScope: aLexicalScope\x0a\x09outerScope := aLexicalScope",
@@ -346,7 +348,7 @@ selector: "pseudoVars",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._methodScope())._pseudoVars();
 return $1;
 }, self, "pseudoVars", [], smalltalk.LexicalScope)},
@@ -364,19 +366,24 @@ selector: "scopeLevel",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $3,$2,$1;
-$3=_st(self)._outerScope();
-if(($receiver = $3) == nil || $receiver == undefined){
-$2=(0);
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3,$4;
+$1=_st(self)._outerScope();
+if(($receiver = $1) == nil || $receiver == undefined){
+return (1);
 } else {
-$2=_st(_st(self)._outerScope())._scopeLevel();
+$1;
 };
-$1=_st($2).__plus((1));
-return $1;
+$2=_st(self)._isInlined();
+if(smalltalk.assert($2)){
+$3=_st(_st(self)._outerScope())._scopeLevel();
+return $3;
+};
+$4=_st(_st(_st(self)._outerScope())._scopeLevel()).__plus((1));
+return $4;
 }, self, "scopeLevel", [], smalltalk.LexicalScope)},
 args: [],
-source: "scopeLevel\x0a\x09^ (self outerScope \x0a\x09\x09ifNil: [ 0 ]\x0a\x09\x09ifNotNil: [ self outerScope scopeLevel ]) + 1",
-messageSends: ["+", "ifNil:ifNotNil:", "scopeLevel", "outerScope"],
+source: "scopeLevel\x0a\x09self outerScope ifNil: [ ^ 1 ].\x0a\x09self isInlined ifTrue: [ ^ self outerScope scopeLevel ].\x0a    \x0a\x09^ self outerScope scopeLevel + 1",
+messageSends: ["ifNil:", "outerScope", "ifTrue:", "scopeLevel", "isInlined", "+"],
 referencedClasses: []
 }),
 smalltalk.LexicalScope);
@@ -388,7 +395,7 @@ selector: "temps",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@temps"]) == nil || $receiver == undefined){
 self["@temps"]=_st((smalltalk.Dictionary || Dictionary))._new();
 $1=self["@temps"];
@@ -415,7 +422,7 @@ selector: "addIVar:",
 category: 'adding',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._iVars())._at_put_(aString,_st((smalltalk.InstanceVar || InstanceVar))._on_(aString));
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._iVars())._at_put_(aString,_st((smalltalk.InstanceVar || InstanceVar))._on_(aString));
 _st(_st(_st(self)._iVars())._at_(aString))._scope_(self);
 return self}, self, "addIVar:", [aString], smalltalk.MethodLexicalScope)},
 args: ["aString"],
@@ -432,7 +439,7 @@ selector: "addNonLocalReturn:",
 category: 'adding',
 fn: function (aScope){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._nonLocalReturns())._add_(aScope);
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._nonLocalReturns())._add_(aScope);
 return self}, self, "addNonLocalReturn:", [aScope], smalltalk.MethodLexicalScope)},
 args: ["aScope"],
 source: "addNonLocalReturn: aScope\x0a\x09self nonLocalReturns add: aScope",
@@ -448,7 +455,7 @@ selector: "allVariableNames",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(smalltalk.LexicalScope.fn.prototype._allVariableNames.apply(_st(self), [])).__comma(_st(_st(self)._iVars())._keys());
 return $1;
 }, self, "allVariableNames", [], smalltalk.MethodLexicalScope)},
@@ -466,12 +473,12 @@ selector: "bindingFor:",
 category: 'accessing',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$1;
 $2=smalltalk.LexicalScope.fn.prototype._bindingFor_.apply(_st(self), [aNode]);
 if(($receiver = $2) == nil || $receiver == undefined){
 $1=_st(_st(self)._iVars())._at_ifAbsent_(_st(aNode)._value(),(function(){
-return nil;
-}));
+return smalltalk.withContext(function($ctx2) { 
return nil;
+})}));
 } else {
 $1=$2;
 };
@@ -491,7 +498,7 @@ selector: "canInlineNonLocalReturns",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "canInlineNonLocalReturns", [], smalltalk.MethodLexicalScope)},
 args: [],
 source: "canInlineNonLocalReturns\x0a\x09^ true",
@@ -507,7 +514,7 @@ selector: "hasLocalReturn",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._localReturn();
 return $1;
 }, self, "hasLocalReturn", [], smalltalk.MethodLexicalScope)},
@@ -525,7 +532,7 @@ selector: "hasNonLocalReturn",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._nonLocalReturns())._notEmpty();
 return $1;
 }, self, "hasNonLocalReturn", [], smalltalk.MethodLexicalScope)},
@@ -543,7 +550,7 @@ selector: "iVars",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@iVars"]) == nil || $receiver == undefined){
 self["@iVars"]=_st((smalltalk.Dictionary || Dictionary))._new();
 $1=self["@iVars"];
@@ -566,7 +573,7 @@ selector: "isMethodScope",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isMethodScope", [], smalltalk.MethodLexicalScope)},
 args: [],
 source: "isMethodScope\x0a\x09^ true",
@@ -582,7 +589,7 @@ selector: "localReturn",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@localReturn"]) == nil || $receiver == undefined){
 $1=false;
 } else {
@@ -604,7 +611,7 @@ selector: "localReturn:",
 category: 'accessing',
 fn: function (aBoolean){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@localReturn"]=aBoolean;
+return smalltalk.withContext(function($ctx1) { 
self["@localReturn"]=aBoolean;
 return self}, self, "localReturn:", [aBoolean], smalltalk.MethodLexicalScope)},
 args: ["aBoolean"],
 source: "localReturn: aBoolean\x0a\x09localReturn := aBoolean",
@@ -620,7 +627,7 @@ selector: "methodScope",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self;
+return smalltalk.withContext(function($ctx1) { 
return self;
 }, self, "methodScope", [], smalltalk.MethodLexicalScope)},
 args: [],
 source: "methodScope\x0a\x09^ self",
@@ -636,7 +643,7 @@ selector: "nonLocalReturns",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@nonLocalReturns"]) == nil || $receiver == undefined){
 self["@nonLocalReturns"]=_st((smalltalk.OrderedCollection || OrderedCollection))._new();
 $1=self["@nonLocalReturns"];
@@ -659,16 +666,16 @@ selector: "pseudoVars",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 if(($receiver = self["@pseudoVars"]) == nil || $receiver == undefined){
 self["@pseudoVars"]=_st((smalltalk.Dictionary || Dictionary))._new();
 self["@pseudoVars"];
 _st(_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._pseudoVariableNames())._do_((function(each){
-$1=_st((smalltalk.PseudoVar || PseudoVar))._on_(each);
+return smalltalk.withContext(function($ctx2) { 
$1=_st((smalltalk.PseudoVar || PseudoVar))._on_(each);
 _st($1)._scope_(_st(self)._methodScope());
 $2=_st($1)._yourself();
 return _st(self["@pseudoVars"])._at_put_(each,$2);
-}));
+})}));
 } else {
 self["@pseudoVars"];
 };
@@ -688,8 +695,8 @@ selector: "removeNonLocalReturn:",
 category: 'adding',
 fn: function (aScope){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._nonLocalReturns())._remove_ifAbsent_(aScope,(function(){
-}));
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._nonLocalReturns())._remove_ifAbsent_(aScope,(function(){
+return smalltalk.withContext(function($ctx2) { 
})}));
 return self}, self, "removeNonLocalReturn:", [aScope], smalltalk.MethodLexicalScope)},
 args: ["aScope"],
 source: "removeNonLocalReturn: aScope\x0a\x09self nonLocalReturns remove: aScope ifAbsent: []",
@@ -705,7 +712,7 @@ selector: "unknownVariables",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@unknownVariables"]) == nil || $receiver == undefined){
 self["@unknownVariables"]=_st((smalltalk.OrderedCollection || OrderedCollection))._new();
 $1=self["@unknownVariables"];
@@ -732,7 +739,7 @@ selector: "alias",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._name())._asVariableName();
 return $1;
 }, self, "alias", [], smalltalk.ScopeVar)},
@@ -750,7 +757,7 @@ selector: "isArgVar",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isArgVar", [], smalltalk.ScopeVar)},
 args: [],
 source: "isArgVar\x0a\x09^ false",
@@ -766,7 +773,7 @@ selector: "isClassRefVar",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isClassRefVar", [], smalltalk.ScopeVar)},
 args: [],
 source: "isClassRefVar\x0a\x09^ false",
@@ -782,7 +789,7 @@ selector: "isInstanceVar",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isInstanceVar", [], smalltalk.ScopeVar)},
 args: [],
 source: "isInstanceVar\x0a\x09^ false",
@@ -798,7 +805,7 @@ selector: "isPseudoVar",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isPseudoVar", [], smalltalk.ScopeVar)},
 args: [],
 source: "isPseudoVar\x0a\x09^ false",
@@ -814,7 +821,7 @@ selector: "isTempVar",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isTempVar", [], smalltalk.ScopeVar)},
 args: [],
 source: "isTempVar\x0a\x09^ false",
@@ -830,7 +837,7 @@ selector: "isUnknownVar",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return false;
+return smalltalk.withContext(function($ctx1) { 
return false;
 }, self, "isUnknownVar", [], smalltalk.ScopeVar)},
 args: [],
 source: "isUnknownVar\x0a\x09^ false",
@@ -846,7 +853,7 @@ selector: "name",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@name"];
+return smalltalk.withContext(function($ctx1) { 
return self["@name"];
 }, self, "name", [], smalltalk.ScopeVar)},
 args: [],
 source: "name\x0a\x09^ name",
@@ -862,7 +869,7 @@ selector: "name:",
 category: 'accessing',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@name"]=aString;
+return smalltalk.withContext(function($ctx1) { 
self["@name"]=aString;
 return self}, self, "name:", [aString], smalltalk.ScopeVar)},
 args: ["aString"],
 source: "name: aString\x0a\x09name := aString",
@@ -878,7 +885,7 @@ selector: "scope",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@scope"];
+return smalltalk.withContext(function($ctx1) { 
return self["@scope"];
 }, self, "scope", [], smalltalk.ScopeVar)},
 args: [],
 source: "scope\x0a\x09^ scope",
@@ -894,7 +901,7 @@ selector: "scope:",
 category: 'accessing',
 fn: function (aScope){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@scope"]=aScope;
+return smalltalk.withContext(function($ctx1) { 
self["@scope"]=aScope;
 return self}, self, "scope:", [aScope], smalltalk.ScopeVar)},
 args: ["aScope"],
 source: "scope: aScope\x0a\x09scope := aScope",
@@ -910,10 +917,10 @@ selector: "validateAssignment",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3;
 $1=_st(_st(self)._isArgVar())._or_((function(){
-return _st(self)._isPseudoVar();
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._isPseudoVar();
+})}));
 if(smalltalk.assert($1)){
 $2=_st((smalltalk.InvalidAssignmentError || InvalidAssignmentError))._new();
 _st($2)._variableName_(_st(self)._name());
@@ -936,7 +943,7 @@ selector: "on:",
 category: 'instance creation',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st(self)._new();
 _st($2)._name_(aString);
 $3=_st($2)._yourself();
@@ -960,7 +967,7 @@ selector: "node",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@node"];
+return smalltalk.withContext(function($ctx1) { 
return self["@node"];
 }, self, "node", [], smalltalk.AliasVar)},
 args: [],
 source: "node\x0a\x09^ node",
@@ -976,7 +983,7 @@ selector: "node:",
 category: 'accessing',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@node"]=aNode;
+return smalltalk.withContext(function($ctx1) { 
self["@node"]=aNode;
 return self}, self, "node:", [aNode], smalltalk.AliasVar)},
 args: ["aNode"],
 source: "node: aNode\x0a\x09node := aNode",
@@ -996,7 +1003,7 @@ selector: "isArgVar",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isArgVar", [], smalltalk.ArgVar)},
 args: [],
 source: "isArgVar\x0a\x09^ true",
@@ -1016,7 +1023,7 @@ selector: "alias",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(_st(_st("(smalltalk.").__comma(_st(self)._name())).__comma(" || ")).__comma(_st(self)._name())).__comma(")");
 return $1;
 }, self, "alias", [], smalltalk.ClassRefVar)},
@@ -1034,7 +1041,7 @@ selector: "isClassRefVar",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isClassRefVar", [], smalltalk.ClassRefVar)},
 args: [],
 source: "isClassRefVar\x0a\x09^ true",
@@ -1054,7 +1061,7 @@ selector: "alias",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st("self[\x22@").__comma(_st(self)._name())).__comma("\x22]");
 return $1;
 }, self, "alias", [], smalltalk.InstanceVar)},
@@ -1072,7 +1079,7 @@ selector: "isInstanceVar",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isInstanceVar", [], smalltalk.InstanceVar)},
 args: [],
 source: "isInstanceVar\x0a\x09^ true",
@@ -1092,7 +1099,7 @@ selector: "alias",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._name();
 return $1;
 }, self, "alias", [], smalltalk.PseudoVar)},
@@ -1110,7 +1117,7 @@ selector: "isPseudoVar",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isPseudoVar", [], smalltalk.PseudoVar)},
 args: [],
 source: "isPseudoVar\x0a\x09^ true",
@@ -1130,12 +1137,12 @@ selector: "alias",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-$1=_st(_st(_st(_st(self)._scope())._alias()).__comma(".")).__comma(smalltalk.ScopeVar.fn.prototype._alias.apply(_st(self), []));
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$1=_st(_st(_st(_st(self)._scope())._alias()).__comma(".locals.")).__comma(smalltalk.ScopeVar.fn.prototype._alias.apply(_st(self), []));
 return $1;
 }, self, "alias", [], smalltalk.TempVar)},
 args: [],
-source: "alias\x0a\x09^ self scope alias, '.', super alias",
+source: "alias\x0a\x09^ self scope alias, '.locals.', super alias",
 messageSends: [",", "alias", "scope"],
 referencedClasses: []
 }),
@@ -1148,7 +1155,7 @@ selector: "isTempVar",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isTempVar", [], smalltalk.TempVar)},
 args: [],
 source: "isTempVar\x0a\x09^ true",
@@ -1168,7 +1175,7 @@ selector: "isUnknownVar",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isUnknownVar", [], smalltalk.UnknownVar)},
 args: [],
 source: "isUnknownVar\x0a\x09^ true",
@@ -1188,7 +1195,7 @@ selector: "classReferences",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@classReferences"]) == nil || $receiver == undefined){
 self["@classReferences"]=_st((smalltalk.Set || Set))._new();
 $1=self["@classReferences"];
@@ -1211,7 +1218,7 @@ selector: "errorShadowingVariable:",
 category: 'error handling',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 $1=_st((smalltalk.ShadowingVariableError || ShadowingVariableError))._new();
 _st($1)._variableName_(aString);
 $2=_st($1)._signal();
@@ -1230,7 +1237,7 @@ selector: "errorUnknownVariable:",
 category: 'error handling',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3;
 $1=_st(self)._isVariableGloballyUndefined_(_st(aNode)._value());
 if(smalltalk.assert($1)){
 $2=_st((smalltalk.UnknownVariableError || UnknownVariableError))._new();
@@ -1255,7 +1262,7 @@ selector: "isVariableGloballyUndefined:",
 category: 'testing',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { return eval('typeof ' + aString + ' == "undefined"');
+return smalltalk.withContext(function($ctx1) { 
return eval('typeof ' + aString + ' == "undefined"');
 ;
 return self}, self, "isVariableGloballyUndefined:", [aString], smalltalk.SemanticAnalyzer)},
 args: ["aString"],
@@ -1272,7 +1279,7 @@ selector: "messageSends",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@messageSends"]) == nil || $receiver == undefined){
 self["@messageSends"]=_st((smalltalk.Dictionary || Dictionary))._new();
 $1=self["@messageSends"];
@@ -1295,7 +1302,7 @@ selector: "newBlockScope",
 category: 'factory',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._newScopeOfClass_((smalltalk.LexicalScope || LexicalScope));
 return $1;
 }, self, "newBlockScope", [], smalltalk.SemanticAnalyzer)},
@@ -1313,7 +1320,7 @@ selector: "newMethodScope",
 category: 'factory',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._newScopeOfClass_((smalltalk.MethodLexicalScope || MethodLexicalScope));
 return $1;
 }, self, "newMethodScope", [], smalltalk.SemanticAnalyzer)},
@@ -1331,7 +1338,7 @@ selector: "newScopeOfClass:",
 category: 'factory',
 fn: function (aLexicalScopeClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st(aLexicalScopeClass)._new();
 _st($2)._outerScope_(self["@currentScope"]);
 $3=_st($2)._yourself();
@@ -1352,7 +1359,7 @@ selector: "popScope",
 category: 'scope',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { if(($receiver = self["@currentScope"]) == nil || $receiver == undefined){
+return smalltalk.withContext(function($ctx1) { 
if(($receiver = self["@currentScope"]) == nil || $receiver == undefined){
 self["@currentScope"];
 } else {
 self["@currentScope"]=_st(self["@currentScope"])._outerScope();
@@ -1373,7 +1380,7 @@ selector: "pushScope:",
 category: 'scope',
 fn: function (aScope){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(aScope)._outerScope_(self["@currentScope"]);
+return smalltalk.withContext(function($ctx1) { 
_st(aScope)._outerScope_(self["@currentScope"]);
 self["@currentScope"]=aScope;
 return self}, self, "pushScope:", [aScope], smalltalk.SemanticAnalyzer)},
 args: ["aScope"],
@@ -1390,7 +1397,7 @@ selector: "superSends",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@superSends"]) == nil || $receiver == undefined){
 self["@superSends"]=_st((smalltalk.Dictionary || Dictionary))._new();
 $1=self["@superSends"];
@@ -1413,7 +1420,7 @@ selector: "theClass",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@theClass"];
+return smalltalk.withContext(function($ctx1) { 
return self["@theClass"];
 }, self, "theClass", [], smalltalk.SemanticAnalyzer)},
 args: [],
 source: "theClass\x0a\x09^ theClass",
@@ -1429,7 +1436,7 @@ selector: "theClass:",
 category: 'accessing',
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@theClass"]=aClass;
+return smalltalk.withContext(function($ctx1) { 
self["@theClass"]=aClass;
 return self}, self, "theClass:", [aClass], smalltalk.SemanticAnalyzer)},
 args: ["aClass"],
 source: "theClass: aClass\x0a\x09theClass := aClass",
@@ -1445,7 +1452,7 @@ selector: "validateVariableScope:",
 category: 'scope',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self["@currentScope"])._lookupVariable_(aString);
 if(($receiver = $1) == nil || $receiver == undefined){
 $1;
@@ -1467,7 +1474,7 @@ selector: "visitAssignmentNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { smalltalk.NodeVisitor.fn.prototype._visitAssignmentNode_.apply(_st(self), [aNode]);
+return smalltalk.withContext(function($ctx1) { 
smalltalk.NodeVisitor.fn.prototype._visitAssignmentNode_.apply(_st(self), [aNode]);
 _st(_st(aNode)._left())._beAssigned();
 return self}, self, "visitAssignmentNode:", [aNode], smalltalk.SemanticAnalyzer)},
 args: ["aNode"],
@@ -1484,13 +1491,13 @@ selector: "visitBlockNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._pushScope_(_st(self)._newBlockScope());
+return smalltalk.withContext(function($ctx1) { 
_st(self)._pushScope_(_st(self)._newBlockScope());
 _st(aNode)._scope_(self["@currentScope"]);
 _st(self["@currentScope"])._node_(aNode);
 _st(_st(aNode)._parameters())._do_((function(each){
-_st(self)._validateVariableScope_(each);
+return smalltalk.withContext(function($ctx2) { 
_st(self)._validateVariableScope_(each);
 return _st(self["@currentScope"])._addArg_(each);
-}));
+})}));
 smalltalk.NodeVisitor.fn.prototype._visitBlockNode_.apply(_st(self), [aNode]);
 _st(self)._popScope();
 return self}, self, "visitBlockNode:", [aNode], smalltalk.SemanticAnalyzer)},
@@ -1508,16 +1515,16 @@ selector: "visitCascadeNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(_st(aNode)._nodes())._do_((function(each){
-return _st(each)._receiver_(_st(aNode)._receiver());
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(each)._receiver_(_st(aNode)._receiver());
+})}));
 smalltalk.NodeVisitor.fn.prototype._visitCascadeNode_.apply(_st(self), [aNode]);
 $1=_st(_st(_st(aNode)._nodes())._first())._superSend();
 if(smalltalk.assert($1)){
 _st(_st(aNode)._nodes())._do_((function(each){
-return _st(each)._superSend_(true);
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(each)._superSend_(true);
+})}));
 };
 return self}, self, "visitCascadeNode:", [aNode], smalltalk.SemanticAnalyzer)},
 args: ["aNode"],
@@ -1534,7 +1541,7 @@ selector: "visitClassReferenceNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 _st(_st(self)._classReferences())._add_(_st(aNode)._value());
 $1=_st((smalltalk.ClassRefVar || ClassRefVar))._new();
 _st($1)._name_(_st(aNode)._value());
@@ -1555,17 +1562,17 @@ selector: "visitMethodNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(self)._pushScope_(_st(self)._newMethodScope());
 _st(aNode)._scope_(self["@currentScope"]);
 _st(self["@currentScope"])._node_(aNode);
 _st(_st(_st(self)._theClass())._allInstanceVariableNames())._do_((function(each){
-return _st(self["@currentScope"])._addIVar_(each);
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(self["@currentScope"])._addIVar_(each);
+})}));
 _st(_st(aNode)._arguments())._do_((function(each){
-_st(self)._validateVariableScope_(each);
+return smalltalk.withContext(function($ctx2) { 
_st(self)._validateVariableScope_(each);
 return _st(self["@currentScope"])._addArg_(each);
-}));
+})}));
 smalltalk.NodeVisitor.fn.prototype._visitMethodNode_.apply(_st(self), [aNode]);
 _st(aNode)._classReferences_(_st(self)._classReferences());
 _st(aNode)._messageSends_(_st(_st(self)._messageSends())._keys());
@@ -1586,7 +1593,7 @@ selector: "visitReturnNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(aNode)._scope_(self["@currentScope"]);
 $1=_st(self["@currentScope"])._isMethodScope();
 if(smalltalk.assert($1)){
@@ -1610,14 +1617,14 @@ selector: "visitSendNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3;
 $1=_st(_st(_st(aNode)._receiver())._value()).__eq("super");
 if(smalltalk.assert($1)){
 _st(aNode)._superSend_(true);
 _st(_st(aNode)._receiver())._value_("self");
 _st(_st(self)._superSends())._at_ifAbsentPut_(_st(aNode)._selector(),(function(){
-return _st((smalltalk.Set || Set))._new();
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st((smalltalk.Set || Set))._new();
+})}));
 _st(_st(_st(self)._superSends())._at_(_st(aNode)._selector()))._add_(aNode);
 } else {
 $2=_st(_st((smalltalk.IRSendInliner || IRSendInliner))._inlinedSelectors())._includes_(_st(aNode)._selector());
@@ -1630,8 +1637,8 @@ _st(_st(aNode)._receiver())._shouldBeAliased_(true);
 };
 };
 _st(_st(self)._messageSends())._at_ifAbsentPut_(_st(aNode)._selector(),(function(){
-return _st((smalltalk.Set || Set))._new();
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st((smalltalk.Set || Set))._new();
+})}));
 _st(_st(_st(self)._messageSends())._at_(_st(aNode)._selector()))._add_(aNode);
 _st(aNode)._index_(_st(_st(_st(self)._messageSends())._at_(_st(aNode)._selector()))._size());
 smalltalk.NodeVisitor.fn.prototype._visitSendNode_.apply(_st(self), [aNode]);
@@ -1650,10 +1657,10 @@ selector: "visitSequenceNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(aNode)._temps())._do_((function(each){
-_st(self)._validateVariableScope_(each);
+return smalltalk.withContext(function($ctx1) { 
_st(_st(aNode)._temps())._do_((function(each){
+return smalltalk.withContext(function($ctx2) { 
_st(self)._validateVariableScope_(each);
 return _st(self["@currentScope"])._addTemp_(each);
-}));
+})}));
 smalltalk.NodeVisitor.fn.prototype._visitSequenceNode_.apply(_st(self), [aNode]);
 return self}, self, "visitSequenceNode:", [aNode], smalltalk.SemanticAnalyzer)},
 args: ["aNode"],
@@ -1670,7 +1677,7 @@ selector: "visitVariableNode:",
 category: 'visiting',
 fn: function (aNode){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$4,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$4,$1;
 $2=_st(self["@currentScope"])._lookupVariable_(aNode);
 if(($receiver = $2) == nil || $receiver == undefined){
 _st(self)._errorUnknownVariable_(aNode);
@@ -1698,7 +1705,7 @@ selector: "on:",
 category: 'instance creation',
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st(self)._new();
 _st($2)._theClass_(aClass);
 $3=_st($2)._yourself();

+ 149 - 149
js/Compiler-Tests.deploy.js

@@ -6,7 +6,7 @@ smalltalk.method({
 selector: "codeGeneratorClass",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return (smalltalk.CodeGenerator || CodeGenerator);
+return smalltalk.withContext(function($ctx1) { 
return (smalltalk.CodeGenerator || CodeGenerator);
 }, self, "codeGeneratorClass", [], smalltalk.CodeGeneratorTest)}
 }),
 smalltalk.CodeGeneratorTest);
@@ -17,7 +17,7 @@ smalltalk.method({
 selector: "compiler",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st((smalltalk.Compiler || Compiler))._new();
 _st($2)._codeGeneratorClass_(_st(self)._codeGeneratorClass());
 $3=_st($2)._yourself();
@@ -33,7 +33,7 @@ smalltalk.method({
 selector: "setUp",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@receiver"]=_st(_st(self)._targetClass())._new();
+return smalltalk.withContext(function($ctx1) { 
self["@receiver"]=_st(_st(self)._targetClass())._new();
 return self}, self, "setUp", [], smalltalk.CodeGeneratorTest)}
 }),
 smalltalk.CodeGeneratorTest);
@@ -44,12 +44,12 @@ smalltalk.method({
 selector: "should:return:",
 fn: function (aString,anObject){
 var self=this;
-return smalltalk.withContext(function($ctx) { var method;
-var result;
-method=_st(_st(self)._compiler())._install_forClass_category_(aString,_st(self)._targetClass(),"tests");
-result=_st(self["@receiver"])._perform_(_st(method)._selector());
-_st(_st(self)._targetClass())._removeCompiledMethod_(method);
-_st(self)._assert_equals_(anObject,result);
+return smalltalk.withContext(function($ctx1) { 
$ctx1.method=nil;
+$ctx1.result=nil;
+$ctx1.locals.method=_st(_st(self)._compiler())._install_forClass_category_(aString,_st(self)._targetClass(),"tests");
+$ctx1.locals.result=_st(self["@receiver"])._perform_(_st($ctx1.locals.method)._selector());
+_st(_st(self)._targetClass())._removeCompiledMethod_($ctx1.locals.method);
+_st(self)._assert_equals_(anObject,$ctx1.locals.result);
 return self}, self, "should:return:", [aString,anObject], smalltalk.CodeGeneratorTest)}
 }),
 smalltalk.CodeGeneratorTest);
@@ -60,7 +60,7 @@ smalltalk.method({
 selector: "targetClass",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return (smalltalk.DoIt || DoIt);
+return smalltalk.withContext(function($ctx1) { 
return (smalltalk.DoIt || DoIt);
 }, self, "targetClass", [], smalltalk.CodeGeneratorTest)}
 }),
 smalltalk.CodeGeneratorTest);
@@ -71,7 +71,7 @@ smalltalk.method({
 selector: "tearDown",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self}, self, "tearDown", [], smalltalk.CodeGeneratorTest)}
+return smalltalk.withContext(function($ctx1) { 
return self}, self, "tearDown", [], smalltalk.CodeGeneratorTest)}
 }),
 smalltalk.CodeGeneratorTest);
 
@@ -81,7 +81,7 @@ smalltalk.method({
 selector: "testAssignment",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo | a | a := true ifTrue: [ 1 ]. ^ a",(1));
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo | a | a := true ifTrue: [ 1 ]. ^ a",(1));
 _st(self)._should_return_("foo | a | a := false ifTrue: [ 1 ]. ^ a",nil);
 _st(self)._should_return_("foo | a | ^ a := true ifTrue: [ 1 ]",(1));
 return self}, self, "testAssignment", [], smalltalk.CodeGeneratorTest)}
@@ -94,7 +94,7 @@ smalltalk.method({
 selector: "testBlockReturn",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo ^ #(1 2 3) collect: [ :each | true ifTrue: [ each + 1 ] ]",[(2), (3), (4)]);
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo ^ #(1 2 3) collect: [ :each | true ifTrue: [ each + 1 ] ]",[(2), (3), (4)]);
 _st(self)._should_return_("foo ^ #(1 2 3) collect: [ :each | false ifFalse: [ each + 1 ] ]",[(2), (3), (4)]);
 _st(self)._should_return_("foo ^ #(1 2 3) collect: [ :each | each odd ifTrue: [ each + 1 ] ifFalse: [ each - 1 ] ]",[(2), (1), (4)]);
 return self}, self, "testBlockReturn", [], smalltalk.CodeGeneratorTest)}
@@ -107,7 +107,7 @@ smalltalk.method({
 selector: "testCascades",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo ^ Array new add: 3; add: 4; yourself",[(3), (4)]);
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo ^ Array new add: 3; add: 4; yourself",[(3), (4)]);
 return self}, self, "testCascades", [], smalltalk.CodeGeneratorTest)}
 }),
 smalltalk.CodeGeneratorTest);
@@ -118,7 +118,7 @@ smalltalk.method({
 selector: "testLiterals",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo ^ 1",(1));
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo ^ 1",(1));
 _st(self)._should_return_("foo ^ 'hello'","hello");
 _st(self)._should_return_("foo ^ #(1 2 3 4)",[(1), (2), (3), (4)]);
 _st(self)._should_return_("foo ^ {1. [:x | x ] value: 2. 3. [4] value}",[(1), (2), (3), (4)]);
@@ -137,7 +137,7 @@ smalltalk.method({
 selector: "testLocalReturn",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo ^ 1",(1));
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo ^ 1",(1));
 _st(self)._should_return_("foo ^ 1 + 1",(2));
 _st(self)._should_return_("foo ",self["@receiver"]);
 _st(self)._should_return_("foo self asString",self["@receiver"]);
@@ -152,7 +152,7 @@ smalltalk.method({
 selector: "testMessageSends",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo ^ 1 asString","1");
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo ^ 1 asString","1");
 _st(self)._should_return_("foo ^ 1 + 1",(2));
 _st(self)._should_return_("foo ^ 1 + 2 * 3",(9));
 _st(self)._should_return_("foo ^ 1 to: 3",[(1), (2), (3)]);
@@ -167,7 +167,7 @@ smalltalk.method({
 selector: "testNestedIfTrue",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo ^ true ifTrue: [ false ifFalse: [ 1 ] ]",(1));
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo ^ true ifTrue: [ false ifFalse: [ 1 ] ]",(1));
 _st(self)._should_return_("foo ^ true ifTrue: [ false ifTrue: [ 1 ] ]",nil);
 _st(self)._should_return_("foo true ifTrue: [ false ifFalse: [ ^ 1 ] ]",(1));
 _st(self)._should_return_("foo true ifTrue: [ false ifTrue: [ ^ 1 ] ]",self["@receiver"]);
@@ -181,7 +181,7 @@ smalltalk.method({
 selector: "testNonLocalReturn",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo [ ^ 1 ] value",(1));
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo [ ^ 1 ] value",(1));
 _st(self)._should_return_("foo [ ^ 1 + 1 ] value",(2));
 _st(self)._should_return_("foo | a b | a := 1. b := 2. [ ^ a + b ] value. self halt",(3));
 _st(self)._should_return_("foo [ :x | ^ x + x ] value: 4. ^ 2",(8));
@@ -195,7 +195,7 @@ smalltalk.method({
 selector: "testifFalse",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo true ifFalse: [ ^ 1 ]",self["@receiver"]);
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo true ifFalse: [ ^ 1 ]",self["@receiver"]);
 _st(self)._should_return_("foo false ifFalse: [ ^ 2 ]",(2));
 _st(self)._should_return_("foo ^ true ifFalse: [ 1 ]",nil);
 _st(self)._should_return_("foo ^ false ifFalse: [ 2 ]",(2));
@@ -209,7 +209,7 @@ smalltalk.method({
 selector: "testifFalseIfTrue",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo true ifFalse: [ ^ 1 ] ifTrue: [ ^ 2 ]",(2));
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo true ifFalse: [ ^ 1 ] ifTrue: [ ^ 2 ]",(2));
 _st(self)._should_return_("foo false ifFalse: [ ^ 2 ] ifTrue: [ ^1 ]",(2));
 _st(self)._should_return_("foo ^ true ifFalse: [ 1 ] ifTrue: [ 2 ]",(2));
 _st(self)._should_return_("foo ^ false ifFalse: [ 2 ] ifTrue: [ 1 ]",(2));
@@ -223,7 +223,7 @@ smalltalk.method({
 selector: "testifNil",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo ^ 1 ifNil: [ 2 ]",(1));
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo ^ 1 ifNil: [ 2 ]",(1));
 _st(self)._should_return_("foo ^ nil ifNil: [ 2 ]",(2));
 _st(self)._should_return_("foo 1 ifNil: [ ^ 2 ]",self["@receiver"]);
 _st(self)._should_return_("foo nil ifNil: [ ^ 2 ]",(2));
@@ -237,7 +237,7 @@ smalltalk.method({
 selector: "testifNilIfNotNil",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo ^ 1 ifNil: [ 2 ] ifNotNil: [ 3 ]",(3));
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo ^ 1 ifNil: [ 2 ] ifNotNil: [ 3 ]",(3));
 _st(self)._should_return_("foo ^ nil ifNil: [ 2 ] ifNotNil: [ 3 ]",(2));
 _st(self)._should_return_("foo 1 ifNil: [ ^ 2 ] ifNotNil: [ ^3 ]",(3));
 _st(self)._should_return_("foo nil ifNil: [ ^ 2 ] ifNotNil: [ ^3 ]",(2));
@@ -251,7 +251,7 @@ smalltalk.method({
 selector: "testifNotNil",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo ^ 1 ifNotNil: [ 2 ]",(2));
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo ^ 1 ifNotNil: [ 2 ]",(2));
 _st(self)._should_return_("foo ^ nil ifNotNil: [ 2 ]",nil);
 _st(self)._should_return_("foo 1 ifNotNil: [ ^ 2 ]",(2));
 _st(self)._should_return_("foo nil ifNotNil: [ ^ 2 ]",self["@receiver"]);
@@ -265,7 +265,7 @@ smalltalk.method({
 selector: "testifTrue",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo false ifTrue: [ ^ 1 ]",self["@receiver"]);
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo false ifTrue: [ ^ 1 ]",self["@receiver"]);
 _st(self)._should_return_("foo true ifTrue: [ ^ 2 ]",(2));
 _st(self)._should_return_("foo ^ false ifTrue: [ 1 ]",nil);
 _st(self)._should_return_("foo ^ true ifTrue: [ 2 ]",(2));
@@ -279,7 +279,7 @@ smalltalk.method({
 selector: "testifTrueIfFalse",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo false ifTrue: [ ^ 1 ] ifFalse: [ ^2 ]",(2));
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo false ifTrue: [ ^ 1 ] ifFalse: [ ^2 ]",(2));
 _st(self)._should_return_("foo true ifTrue: [ ^ 1 ] ifFalse: [ ^ 2 ]",(1));
 _st(self)._should_return_("foo ^ false ifTrue: [ 2 ] ifFalse: [ 1 ]",(1));
 _st(self)._should_return_("foo ^ true ifTrue: [ 2 ] ifFalse: [ 1 ]",(2));
@@ -296,7 +296,7 @@ smalltalk.method({
 selector: "codeGeneratorClass",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return (smalltalk.InliningCodeGenerator || InliningCodeGenerator);
+return smalltalk.withContext(function($ctx1) { 
return (smalltalk.InliningCodeGenerator || InliningCodeGenerator);
 }, self, "codeGeneratorClass", [], smalltalk.InliningCodeGeneratorTest)}
 }),
 smalltalk.InliningCodeGeneratorTest);
@@ -310,14 +310,14 @@ smalltalk.method({
 selector: "testClassRefVar",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
-var node;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
+$ctx1.node=nil;
 $1=_st((smalltalk.ClassReferenceNode || ClassReferenceNode))._new();
 _st($1)._value_("Object");
 $2=_st($1)._yourself();
-node=$2;
-_st(_st((smalltalk.SemanticAnalyzer || SemanticAnalyzer))._new())._visit_(node);
-_st(self)._assert_(_st(_st(node)._binding())._isClassRefVar());
+$ctx1.locals.node=$2;
+_st(_st((smalltalk.SemanticAnalyzer || SemanticAnalyzer))._new())._visit_($ctx1.locals.node);
+_st(self)._assert_(_st(_st($ctx1.locals.node)._binding())._isClassRefVar());
 return self}, self, "testClassRefVar", [], smalltalk.ScopeVarTest)}
 }),
 smalltalk.ScopeVarTest);
@@ -328,16 +328,16 @@ smalltalk.method({
 selector: "testInstanceVar",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
-var node;
-var scope;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
+$ctx1.node=nil;
+$ctx1.scope=nil;
 $1=_st((smalltalk.VariableNode || VariableNode))._new();
 _st($1)._value_("bzzz");
 $2=_st($1)._yourself();
-node=$2;
-scope=_st((smalltalk.MethodLexicalScope || MethodLexicalScope))._new();
-_st(scope)._addIVar_("bzzz");
-_st(self)._assert_(_st(_st(scope)._bindingFor_(node))._isInstanceVar());
+$ctx1.locals.node=$2;
+$ctx1.locals.scope=_st((smalltalk.MethodLexicalScope || MethodLexicalScope))._new();
+_st($ctx1.locals.scope)._addIVar_("bzzz");
+_st(self)._assert_(_st(_st($ctx1.locals.scope)._bindingFor_($ctx1.locals.node))._isInstanceVar());
 return self}, self, "testInstanceVar", [], smalltalk.ScopeVarTest)}
 }),
 smalltalk.ScopeVarTest);
@@ -348,18 +348,18 @@ smalltalk.method({
 selector: "testPseudoVar",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
-var node;
-var pseudoVars;
-pseudoVars=["self", "super", "true", "false", "nil"];
-_st(pseudoVars)._do_((function(each){
-$1=_st((smalltalk.VariableNode || VariableNode))._new();
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
+$ctx1.node=nil;
+$ctx1.pseudoVars=nil;
+$ctx1.locals.pseudoVars=["self", "super", "true", "false", "nil"];
+_st($ctx1.locals.pseudoVars)._do_((function(each){
+return smalltalk.withContext(function($ctx2) { 
$1=_st((smalltalk.VariableNode || VariableNode))._new();
 _st($1)._value_(each);
 $2=_st($1)._yourself();
-node=$2;
-node;
-return _st(self)._assert_(_st(_st(_st((smalltalk.MethodLexicalScope || MethodLexicalScope))._new())._bindingFor_(node))._isPseudoVar());
-}));
+$ctx1.locals.node=$2;
+$ctx1.locals.node;
+return _st(self)._assert_(_st(_st(_st((smalltalk.MethodLexicalScope || MethodLexicalScope))._new())._bindingFor_($ctx1.locals.node))._isPseudoVar());
+})}));
 return self}, self, "testPseudoVar", [], smalltalk.ScopeVarTest)}
 }),
 smalltalk.ScopeVarTest);
@@ -370,16 +370,16 @@ smalltalk.method({
 selector: "testTempVar",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
-var node;
-var scope;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
+$ctx1.node=nil;
+$ctx1.scope=nil;
 $1=_st((smalltalk.VariableNode || VariableNode))._new();
 _st($1)._value_("bzzz");
 $2=_st($1)._yourself();
-node=$2;
-scope=_st((smalltalk.MethodLexicalScope || MethodLexicalScope))._new();
-_st(scope)._addTemp_("bzzz");
-_st(self)._assert_(_st(_st(scope)._bindingFor_(node))._isTempVar());
+$ctx1.locals.node=$2;
+$ctx1.locals.scope=_st((smalltalk.MethodLexicalScope || MethodLexicalScope))._new();
+_st($ctx1.locals.scope)._addTemp_("bzzz");
+_st(self)._assert_(_st(_st($ctx1.locals.scope)._bindingFor_($ctx1.locals.node))._isTempVar());
 return self}, self, "testTempVar", [], smalltalk.ScopeVarTest)}
 }),
 smalltalk.ScopeVarTest);
@@ -390,13 +390,13 @@ smalltalk.method({
 selector: "testUnknownVar",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
-var node;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
+$ctx1.node=nil;
 $1=_st((smalltalk.VariableNode || VariableNode))._new();
 _st($1)._value_("bzzz");
 $2=_st($1)._yourself();
-node=$2;
-_st(self)._assert_(_st(_st(_st((smalltalk.MethodLexicalScope || MethodLexicalScope))._new())._bindingFor_(node))._isNil());
+$ctx1.locals.node=$2;
+_st(self)._assert_(_st(_st(_st((smalltalk.MethodLexicalScope || MethodLexicalScope))._new())._bindingFor_($ctx1.locals.node))._isNil());
 return self}, self, "testUnknownVar", [], smalltalk.ScopeVarTest)}
 }),
 smalltalk.ScopeVarTest);
@@ -410,7 +410,7 @@ smalltalk.method({
 selector: "setUp",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@analyzer"]=_st((smalltalk.SemanticAnalyzer || SemanticAnalyzer))._on_((smalltalk.Object || Object));
+return smalltalk.withContext(function($ctx1) { 
self["@analyzer"]=_st((smalltalk.SemanticAnalyzer || SemanticAnalyzer))._on_((smalltalk.Object || Object));
 return self}, self, "setUp", [], smalltalk.SemanticAnalyzerTest)}
 }),
 smalltalk.SemanticAnalyzerTest);
@@ -421,13 +421,13 @@ smalltalk.method({
 selector: "testAssignment",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo self := 1";
-ast=_st(smalltalk)._parse_(src);
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo self := 1";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
 _st(self)._should_raise_((function(){
-return _st(self["@analyzer"])._visit_(ast);
-}),(smalltalk.InvalidAssignmentError || InvalidAssignmentError));
+return smalltalk.withContext(function($ctx2) { 
return _st(self["@analyzer"])._visit_($ctx1.locals.ast);
+})}),(smalltalk.InvalidAssignmentError || InvalidAssignmentError));
 return self}, self, "testAssignment", [], smalltalk.SemanticAnalyzerTest)}
 }),
 smalltalk.SemanticAnalyzerTest);
@@ -438,12 +438,12 @@ smalltalk.method({
 selector: "testNonLocalReturn",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a | a + 1. ^ a";
-ast=_st(smalltalk)._parse_(src);
-_st(self["@analyzer"])._visit_(ast);
-_st(self)._deny_(_st(_st(ast)._scope())._hasNonLocalReturn());
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a | a + 1. ^ a";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
+_st(self["@analyzer"])._visit_($ctx1.locals.ast);
+_st(self)._deny_(_st(_st($ctx1.locals.ast)._scope())._hasNonLocalReturn());
 return self}, self, "testNonLocalReturn", [], smalltalk.SemanticAnalyzerTest)}
 }),
 smalltalk.SemanticAnalyzerTest);
@@ -454,12 +454,12 @@ smalltalk.method({
 selector: "testNonLocalReturn2",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a | a + 1. [ [ ^ a] ]";
-ast=_st(smalltalk)._parse_(src);
-_st(self["@analyzer"])._visit_(ast);
-_st(self)._assert_(_st(_st(ast)._scope())._hasNonLocalReturn());
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a | a + 1. [ [ ^ a] ]";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
+_st(self["@analyzer"])._visit_($ctx1.locals.ast);
+_st(self)._assert_(_st(_st($ctx1.locals.ast)._scope())._hasNonLocalReturn());
 return self}, self, "testNonLocalReturn2", [], smalltalk.SemanticAnalyzerTest)}
 }),
 smalltalk.SemanticAnalyzerTest);
@@ -470,12 +470,12 @@ smalltalk.method({
 selector: "testScope",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a | a + 1. [ | b | b := a ]";
-ast=_st(smalltalk)._parse_(src);
-_st(self["@analyzer"])._visit_(ast);
-_st(self)._deny_(_st(_st(_st(_st(_st(_st(ast)._nodes())._first())._nodes())._last())._scope()).__eq_eq(_st(ast)._scope()));
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a | a + 1. [ | b | b := a ]";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
+_st(self["@analyzer"])._visit_($ctx1.locals.ast);
+_st(self)._deny_(_st(_st(_st(_st(_st(_st($ctx1.locals.ast)._nodes())._first())._nodes())._last())._scope()).__eq_eq(_st($ctx1.locals.ast)._scope()));
 return self}, self, "testScope", [], smalltalk.SemanticAnalyzerTest)}
 }),
 smalltalk.SemanticAnalyzerTest);
@@ -486,12 +486,12 @@ smalltalk.method({
 selector: "testScope2",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a | a + 1. [ [ | b | b := a ] ]";
-ast=_st(smalltalk)._parse_(src);
-_st(self["@analyzer"])._visit_(ast);
-_st(self)._deny_(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st(ast)._nodes())._first())._nodes())._last())._nodes())._first())._nodes())._first())._scope()).__eq_eq(_st(ast)._scope()));
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a | a + 1. [ [ | b | b := a ] ]";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
+_st(self["@analyzer"])._visit_($ctx1.locals.ast);
+_st(self)._deny_(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st($ctx1.locals.ast)._nodes())._first())._nodes())._last())._nodes())._first())._nodes())._first())._scope()).__eq_eq(_st($ctx1.locals.ast)._scope()));
 return self}, self, "testScope2", [], smalltalk.SemanticAnalyzerTest)}
 }),
 smalltalk.SemanticAnalyzerTest);
@@ -502,13 +502,13 @@ smalltalk.method({
 selector: "testScopeLevel",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a | a + 1. [ [ | b | b := a ] ]";
-ast=_st(smalltalk)._parse_(src);
-_st(self["@analyzer"])._visit_(ast);
-_st(self)._assert_(_st(_st(_st(ast)._scope())._scopeLevel()).__eq((1)));
-_st(self)._assert_(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st(ast)._nodes())._first())._nodes())._last())._nodes())._first())._nodes())._first())._scope())._scopeLevel()).__eq((3)));
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a | a + 1. [ [ | b | b := a ] ]";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
+_st(self["@analyzer"])._visit_($ctx1.locals.ast);
+_st(self)._assert_(_st(_st(_st($ctx1.locals.ast)._scope())._scopeLevel()).__eq((1)));
+_st(self)._assert_(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st($ctx1.locals.ast)._nodes())._first())._nodes())._last())._nodes())._first())._nodes())._first())._scope())._scopeLevel()).__eq((3)));
 return self}, self, "testScopeLevel", [], smalltalk.SemanticAnalyzerTest)}
 }),
 smalltalk.SemanticAnalyzerTest);
@@ -519,13 +519,13 @@ smalltalk.method({
 selector: "testUnknownVariables",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a | b + a";
-ast=_st(smalltalk)._parse_(src);
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a | b + a";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
 _st(self)._should_raise_((function(){
-return _st(self["@analyzer"])._visit_(ast);
-}),(smalltalk.UnknownVariableError || UnknownVariableError));
+return smalltalk.withContext(function($ctx2) { 
return _st(self["@analyzer"])._visit_($ctx1.locals.ast);
+})}),(smalltalk.UnknownVariableError || UnknownVariableError));
 return self}, self, "testUnknownVariables", [], smalltalk.SemanticAnalyzerTest)}
 }),
 smalltalk.SemanticAnalyzerTest);
@@ -536,11 +536,11 @@ smalltalk.method({
 selector: "testUnknownVariablesDefinedInJS",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) {  var someVariable = 1 ;
+return smalltalk.withContext(function($ctx1) { 
 var someVariable = 1 ;
 ;
 _st(self)._shouldnt_raise_((function(){
-return _st(smalltalk)._parse_("foo someVariable");
-}),(smalltalk.UnknownVariableError || UnknownVariableError));
+return smalltalk.withContext(function($ctx2) { 
return _st(smalltalk)._parse_("foo someVariable");
+})}),(smalltalk.UnknownVariableError || UnknownVariableError));
 return self}, self, "testUnknownVariablesDefinedInJS", [], smalltalk.SemanticAnalyzerTest)}
 }),
 smalltalk.SemanticAnalyzerTest);
@@ -551,13 +551,13 @@ smalltalk.method({
 selector: "testUnknownVariablesWithScope",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a b | [ c + 1. [ a + 1. d + 1 ]]";
-ast=_st(smalltalk)._parse_(src);
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a b | [ c + 1. [ a + 1. d + 1 ]]";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
 _st(self)._should_raise_((function(){
-return _st(self["@analyzer"])._visit_(ast);
-}),(smalltalk.UnknownVariableError || UnknownVariableError));
+return smalltalk.withContext(function($ctx2) { 
return _st(self["@analyzer"])._visit_($ctx1.locals.ast);
+})}),(smalltalk.UnknownVariableError || UnknownVariableError));
 return self}, self, "testUnknownVariablesWithScope", [], smalltalk.SemanticAnalyzerTest)}
 }),
 smalltalk.SemanticAnalyzerTest);
@@ -568,11 +568,11 @@ smalltalk.method({
 selector: "testVariableShadowing",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a | a + 1";
-ast=_st(smalltalk)._parse_(src);
-_st(self["@analyzer"])._visit_(ast);
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a | a + 1";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
+_st(self["@analyzer"])._visit_($ctx1.locals.ast);
 return self}, self, "testVariableShadowing", [], smalltalk.SemanticAnalyzerTest)}
 }),
 smalltalk.SemanticAnalyzerTest);
@@ -583,13 +583,13 @@ smalltalk.method({
 selector: "testVariableShadowing2",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a | a + 1. [ | a | a := 2 ]";
-ast=_st(smalltalk)._parse_(src);
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a | a + 1. [ | a | a := 2 ]";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
 _st(self)._should_raise_((function(){
-return _st(self["@analyzer"])._visit_(ast);
-}),(smalltalk.ShadowingVariableError || ShadowingVariableError));
+return smalltalk.withContext(function($ctx2) { 
return _st(self["@analyzer"])._visit_($ctx1.locals.ast);
+})}),(smalltalk.ShadowingVariableError || ShadowingVariableError));
 return self}, self, "testVariableShadowing2", [], smalltalk.SemanticAnalyzerTest)}
 }),
 smalltalk.SemanticAnalyzerTest);
@@ -600,11 +600,11 @@ smalltalk.method({
 selector: "testVariableShadowing3",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a | a + 1. [ | b | b := 2 ]";
-ast=_st(smalltalk)._parse_(src);
-_st(self["@analyzer"])._visit_(ast);
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a | a + 1. [ | b | b := 2 ]";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
+_st(self["@analyzer"])._visit_($ctx1.locals.ast);
 return self}, self, "testVariableShadowing3", [], smalltalk.SemanticAnalyzerTest)}
 }),
 smalltalk.SemanticAnalyzerTest);
@@ -615,11 +615,11 @@ smalltalk.method({
 selector: "testVariableShadowing4",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a | a + 1. [ [ [ | b | b := 2 ] ] ]";
-ast=_st(smalltalk)._parse_(src);
-_st(self["@analyzer"])._visit_(ast);
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a | a + 1. [ [ [ | b | b := 2 ] ] ]";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
+_st(self["@analyzer"])._visit_($ctx1.locals.ast);
 return self}, self, "testVariableShadowing4", [], smalltalk.SemanticAnalyzerTest)}
 }),
 smalltalk.SemanticAnalyzerTest);
@@ -630,13 +630,13 @@ smalltalk.method({
 selector: "testVariableShadowing5",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a | a + 1. [ [ [ | a | a := 2 ] ] ]";
-ast=_st(smalltalk)._parse_(src);
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a | a + 1. [ [ [ | a | a := 2 ] ] ]";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
 _st(self)._should_raise_((function(){
-return _st(self["@analyzer"])._visit_(ast);
-}),(smalltalk.ShadowingVariableError || ShadowingVariableError));
+return smalltalk.withContext(function($ctx2) { 
return _st(self["@analyzer"])._visit_($ctx1.locals.ast);
+})}),(smalltalk.ShadowingVariableError || ShadowingVariableError));
 return self}, self, "testVariableShadowing5", [], smalltalk.SemanticAnalyzerTest)}
 }),
 smalltalk.SemanticAnalyzerTest);
@@ -647,15 +647,15 @@ smalltalk.method({
 selector: "testVariablesLookup",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a | a + 1. [ | b | b := a ]";
-ast=_st(smalltalk)._parse_(src);
-_st(self["@analyzer"])._visit_(ast);
-_st(self)._assert_(_st(_st(_st(_st(_st(_st(_st(ast)._nodes())._first())._nodes())._first())._receiver())._binding())._isTempVar());
-_st(self)._assert_(_st(_st(_st(_st(_st(_st(_st(_st(ast)._nodes())._first())._nodes())._first())._receiver())._binding())._scope()).__eq_eq(_st(ast)._scope()));
-_st(self)._assert_(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st(ast)._nodes())._first())._nodes())._last())._nodes())._first())._nodes())._first())._left())._binding())._isTempVar());
-_st(self)._assert_(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st(ast)._nodes())._first())._nodes())._last())._nodes())._first())._nodes())._first())._left())._binding())._scope()).__eq_eq(_st(_st(_st(_st(_st(ast)._nodes())._first())._nodes())._last())._scope()));
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a | a + 1. [ | b | b := a ]";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
+_st(self["@analyzer"])._visit_($ctx1.locals.ast);
+_st(self)._assert_(_st(_st(_st(_st(_st(_st(_st($ctx1.locals.ast)._nodes())._first())._nodes())._first())._receiver())._binding())._isTempVar());
+_st(self)._assert_(_st(_st(_st(_st(_st(_st(_st(_st($ctx1.locals.ast)._nodes())._first())._nodes())._first())._receiver())._binding())._scope()).__eq_eq(_st($ctx1.locals.ast)._scope()));
+_st(self)._assert_(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st($ctx1.locals.ast)._nodes())._first())._nodes())._last())._nodes())._first())._nodes())._first())._left())._binding())._isTempVar());
+_st(self)._assert_(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st($ctx1.locals.ast)._nodes())._first())._nodes())._last())._nodes())._first())._nodes())._first())._left())._binding())._scope()).__eq_eq(_st(_st(_st(_st(_st($ctx1.locals.ast)._nodes())._first())._nodes())._last())._scope()));
 return self}, self, "testVariablesLookup", [], smalltalk.SemanticAnalyzerTest)}
 }),
 smalltalk.SemanticAnalyzerTest);

+ 149 - 149
js/Compiler-Tests.js

@@ -7,7 +7,7 @@ selector: "codeGeneratorClass",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return (smalltalk.CodeGenerator || CodeGenerator);
+return smalltalk.withContext(function($ctx1) { 
return (smalltalk.CodeGenerator || CodeGenerator);
 }, self, "codeGeneratorClass", [], smalltalk.CodeGeneratorTest)},
 args: [],
 source: "codeGeneratorClass\x0a\x09^ CodeGenerator",
@@ -23,7 +23,7 @@ selector: "compiler",
 category: 'factory',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st((smalltalk.Compiler || Compiler))._new();
 _st($2)._codeGeneratorClass_(_st(self)._codeGeneratorClass());
 $3=_st($2)._yourself();
@@ -44,7 +44,7 @@ selector: "setUp",
 category: 'initialization',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@receiver"]=_st(_st(self)._targetClass())._new();
+return smalltalk.withContext(function($ctx1) { 
self["@receiver"]=_st(_st(self)._targetClass())._new();
 return self}, self, "setUp", [], smalltalk.CodeGeneratorTest)},
 args: [],
 source: "setUp\x0a\x09receiver := self targetClass new",
@@ -60,12 +60,12 @@ selector: "should:return:",
 category: 'testing',
 fn: function (aString,anObject){
 var self=this;
-return smalltalk.withContext(function($ctx) { var method;
-var result;
-method=_st(_st(self)._compiler())._install_forClass_category_(aString,_st(self)._targetClass(),"tests");
-result=_st(self["@receiver"])._perform_(_st(method)._selector());
-_st(_st(self)._targetClass())._removeCompiledMethod_(method);
-_st(self)._assert_equals_(anObject,result);
+return smalltalk.withContext(function($ctx1) { 
$ctx1.method=nil;
+$ctx1.result=nil;
+$ctx1.locals.method=_st(_st(self)._compiler())._install_forClass_category_(aString,_st(self)._targetClass(),"tests");
+$ctx1.locals.result=_st(self["@receiver"])._perform_(_st($ctx1.locals.method)._selector());
+_st(_st(self)._targetClass())._removeCompiledMethod_($ctx1.locals.method);
+_st(self)._assert_equals_(anObject,$ctx1.locals.result);
 return self}, self, "should:return:", [aString,anObject], smalltalk.CodeGeneratorTest)},
 args: ["aString", "anObject"],
 source: "should: aString return: anObject\x0a\x09| method result |\x0a\x0a\x09method := self compiler install: aString forClass: self targetClass category: 'tests'.\x0a\x09result := receiver perform: method selector.\x0a\x09self targetClass removeCompiledMethod: method.\x0a\x09self assert: anObject equals: result",
@@ -81,7 +81,7 @@ selector: "targetClass",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return (smalltalk.DoIt || DoIt);
+return smalltalk.withContext(function($ctx1) { 
return (smalltalk.DoIt || DoIt);
 }, self, "targetClass", [], smalltalk.CodeGeneratorTest)},
 args: [],
 source: "targetClass\x0a\x09^ DoIt",
@@ -97,7 +97,7 @@ selector: "tearDown",
 category: 'initialization',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self}, self, "tearDown", [], smalltalk.CodeGeneratorTest)},
+return smalltalk.withContext(function($ctx1) { 
return self}, self, "tearDown", [], smalltalk.CodeGeneratorTest)},
 args: [],
 source: "tearDown\x0a\x09\x22receiver := nil\x22",
 messageSends: [],
@@ -112,7 +112,7 @@ selector: "testAssignment",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo | a | a := true ifTrue: [ 1 ]. ^ a",(1));
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo | a | a := true ifTrue: [ 1 ]. ^ a",(1));
 _st(self)._should_return_("foo | a | a := false ifTrue: [ 1 ]. ^ a",nil);
 _st(self)._should_return_("foo | a | ^ a := true ifTrue: [ 1 ]",(1));
 return self}, self, "testAssignment", [], smalltalk.CodeGeneratorTest)},
@@ -130,7 +130,7 @@ selector: "testBlockReturn",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo ^ #(1 2 3) collect: [ :each | true ifTrue: [ each + 1 ] ]",[(2), (3), (4)]);
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo ^ #(1 2 3) collect: [ :each | true ifTrue: [ each + 1 ] ]",[(2), (3), (4)]);
 _st(self)._should_return_("foo ^ #(1 2 3) collect: [ :each | false ifFalse: [ each + 1 ] ]",[(2), (3), (4)]);
 _st(self)._should_return_("foo ^ #(1 2 3) collect: [ :each | each odd ifTrue: [ each + 1 ] ifFalse: [ each - 1 ] ]",[(2), (1), (4)]);
 return self}, self, "testBlockReturn", [], smalltalk.CodeGeneratorTest)},
@@ -148,7 +148,7 @@ selector: "testCascades",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo ^ Array new add: 3; add: 4; yourself",[(3), (4)]);
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo ^ Array new add: 3; add: 4; yourself",[(3), (4)]);
 return self}, self, "testCascades", [], smalltalk.CodeGeneratorTest)},
 args: [],
 source: "testCascades\x0a\x09\x0a\x09self should: 'foo ^ Array new add: 3; add: 4; yourself' return: #(3 4)",
@@ -164,7 +164,7 @@ selector: "testLiterals",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo ^ 1",(1));
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo ^ 1",(1));
 _st(self)._should_return_("foo ^ 'hello'","hello");
 _st(self)._should_return_("foo ^ #(1 2 3 4)",[(1), (2), (3), (4)]);
 _st(self)._should_return_("foo ^ {1. [:x | x ] value: 2. 3. [4] value}",[(1), (2), (3), (4)]);
@@ -188,7 +188,7 @@ selector: "testLocalReturn",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo ^ 1",(1));
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo ^ 1",(1));
 _st(self)._should_return_("foo ^ 1 + 1",(2));
 _st(self)._should_return_("foo ",self["@receiver"]);
 _st(self)._should_return_("foo self asString",self["@receiver"]);
@@ -208,7 +208,7 @@ selector: "testMessageSends",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo ^ 1 asString","1");
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo ^ 1 asString","1");
 _st(self)._should_return_("foo ^ 1 + 1",(2));
 _st(self)._should_return_("foo ^ 1 + 2 * 3",(9));
 _st(self)._should_return_("foo ^ 1 to: 3",[(1), (2), (3)]);
@@ -228,7 +228,7 @@ selector: "testNestedIfTrue",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo ^ true ifTrue: [ false ifFalse: [ 1 ] ]",(1));
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo ^ true ifTrue: [ false ifFalse: [ 1 ] ]",(1));
 _st(self)._should_return_("foo ^ true ifTrue: [ false ifTrue: [ 1 ] ]",nil);
 _st(self)._should_return_("foo true ifTrue: [ false ifFalse: [ ^ 1 ] ]",(1));
 _st(self)._should_return_("foo true ifTrue: [ false ifTrue: [ ^ 1 ] ]",self["@receiver"]);
@@ -247,7 +247,7 @@ selector: "testNonLocalReturn",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo [ ^ 1 ] value",(1));
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo [ ^ 1 ] value",(1));
 _st(self)._should_return_("foo [ ^ 1 + 1 ] value",(2));
 _st(self)._should_return_("foo | a b | a := 1. b := 2. [ ^ a + b ] value. self halt",(3));
 _st(self)._should_return_("foo [ :x | ^ x + x ] value: 4. ^ 2",(8));
@@ -266,7 +266,7 @@ selector: "testifFalse",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo true ifFalse: [ ^ 1 ]",self["@receiver"]);
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo true ifFalse: [ ^ 1 ]",self["@receiver"]);
 _st(self)._should_return_("foo false ifFalse: [ ^ 2 ]",(2));
 _st(self)._should_return_("foo ^ true ifFalse: [ 1 ]",nil);
 _st(self)._should_return_("foo ^ false ifFalse: [ 2 ]",(2));
@@ -285,7 +285,7 @@ selector: "testifFalseIfTrue",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo true ifFalse: [ ^ 1 ] ifTrue: [ ^ 2 ]",(2));
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo true ifFalse: [ ^ 1 ] ifTrue: [ ^ 2 ]",(2));
 _st(self)._should_return_("foo false ifFalse: [ ^ 2 ] ifTrue: [ ^1 ]",(2));
 _st(self)._should_return_("foo ^ true ifFalse: [ 1 ] ifTrue: [ 2 ]",(2));
 _st(self)._should_return_("foo ^ false ifFalse: [ 2 ] ifTrue: [ 1 ]",(2));
@@ -304,7 +304,7 @@ selector: "testifNil",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo ^ 1 ifNil: [ 2 ]",(1));
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo ^ 1 ifNil: [ 2 ]",(1));
 _st(self)._should_return_("foo ^ nil ifNil: [ 2 ]",(2));
 _st(self)._should_return_("foo 1 ifNil: [ ^ 2 ]",self["@receiver"]);
 _st(self)._should_return_("foo nil ifNil: [ ^ 2 ]",(2));
@@ -323,7 +323,7 @@ selector: "testifNilIfNotNil",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo ^ 1 ifNil: [ 2 ] ifNotNil: [ 3 ]",(3));
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo ^ 1 ifNil: [ 2 ] ifNotNil: [ 3 ]",(3));
 _st(self)._should_return_("foo ^ nil ifNil: [ 2 ] ifNotNil: [ 3 ]",(2));
 _st(self)._should_return_("foo 1 ifNil: [ ^ 2 ] ifNotNil: [ ^3 ]",(3));
 _st(self)._should_return_("foo nil ifNil: [ ^ 2 ] ifNotNil: [ ^3 ]",(2));
@@ -342,7 +342,7 @@ selector: "testifNotNil",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo ^ 1 ifNotNil: [ 2 ]",(2));
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo ^ 1 ifNotNil: [ 2 ]",(2));
 _st(self)._should_return_("foo ^ nil ifNotNil: [ 2 ]",nil);
 _st(self)._should_return_("foo 1 ifNotNil: [ ^ 2 ]",(2));
 _st(self)._should_return_("foo nil ifNotNil: [ ^ 2 ]",self["@receiver"]);
@@ -361,7 +361,7 @@ selector: "testifTrue",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo false ifTrue: [ ^ 1 ]",self["@receiver"]);
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo false ifTrue: [ ^ 1 ]",self["@receiver"]);
 _st(self)._should_return_("foo true ifTrue: [ ^ 2 ]",(2));
 _st(self)._should_return_("foo ^ false ifTrue: [ 1 ]",nil);
 _st(self)._should_return_("foo ^ true ifTrue: [ 2 ]",(2));
@@ -380,7 +380,7 @@ selector: "testifTrueIfFalse",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._should_return_("foo false ifTrue: [ ^ 1 ] ifFalse: [ ^2 ]",(2));
+return smalltalk.withContext(function($ctx1) { 
_st(self)._should_return_("foo false ifTrue: [ ^ 1 ] ifFalse: [ ^2 ]",(2));
 _st(self)._should_return_("foo true ifTrue: [ ^ 1 ] ifFalse: [ ^ 2 ]",(1));
 _st(self)._should_return_("foo ^ false ifTrue: [ 2 ] ifFalse: [ 1 ]",(1));
 _st(self)._should_return_("foo ^ true ifTrue: [ 2 ] ifFalse: [ 1 ]",(2));
@@ -402,7 +402,7 @@ selector: "codeGeneratorClass",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return (smalltalk.InliningCodeGenerator || InliningCodeGenerator);
+return smalltalk.withContext(function($ctx1) { 
return (smalltalk.InliningCodeGenerator || InliningCodeGenerator);
 }, self, "codeGeneratorClass", [], smalltalk.InliningCodeGeneratorTest)},
 args: [],
 source: "codeGeneratorClass\x0a\x09^ InliningCodeGenerator",
@@ -421,14 +421,14 @@ selector: "testClassRefVar",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
-var node;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
+$ctx1.node=nil;
 $1=_st((smalltalk.ClassReferenceNode || ClassReferenceNode))._new();
 _st($1)._value_("Object");
 $2=_st($1)._yourself();
-node=$2;
-_st(_st((smalltalk.SemanticAnalyzer || SemanticAnalyzer))._new())._visit_(node);
-_st(self)._assert_(_st(_st(node)._binding())._isClassRefVar());
+$ctx1.locals.node=$2;
+_st(_st((smalltalk.SemanticAnalyzer || SemanticAnalyzer))._new())._visit_($ctx1.locals.node);
+_st(self)._assert_(_st(_st($ctx1.locals.node)._binding())._isClassRefVar());
 return self}, self, "testClassRefVar", [], smalltalk.ScopeVarTest)},
 args: [],
 source: "testClassRefVar\x0a\x09| node |\x0a\x09node := ClassReferenceNode new\x0a\x09\x09value: 'Object';\x0a\x09\x09yourself.\x0a\x09SemanticAnalyzer new visit: node.\x0a\x09self assert: node binding isClassRefVar",
@@ -444,16 +444,16 @@ selector: "testInstanceVar",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
-var node;
-var scope;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
+$ctx1.node=nil;
+$ctx1.scope=nil;
 $1=_st((smalltalk.VariableNode || VariableNode))._new();
 _st($1)._value_("bzzz");
 $2=_st($1)._yourself();
-node=$2;
-scope=_st((smalltalk.MethodLexicalScope || MethodLexicalScope))._new();
-_st(scope)._addIVar_("bzzz");
-_st(self)._assert_(_st(_st(scope)._bindingFor_(node))._isInstanceVar());
+$ctx1.locals.node=$2;
+$ctx1.locals.scope=_st((smalltalk.MethodLexicalScope || MethodLexicalScope))._new();
+_st($ctx1.locals.scope)._addIVar_("bzzz");
+_st(self)._assert_(_st(_st($ctx1.locals.scope)._bindingFor_($ctx1.locals.node))._isInstanceVar());
 return self}, self, "testInstanceVar", [], smalltalk.ScopeVarTest)},
 args: [],
 source: "testInstanceVar\x0a\x09| node scope |\x0a\x09node := VariableNode new\x0a\x09\x09value: 'bzzz';\x0a\x09\x09yourself.\x0a\x09scope := MethodLexicalScope new.\x0a\x09scope addIVar: 'bzzz'.\x0a\x09self assert: (scope bindingFor: node) isInstanceVar",
@@ -469,18 +469,18 @@ selector: "testPseudoVar",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
-var node;
-var pseudoVars;
-pseudoVars=["self", "super", "true", "false", "nil"];
-_st(pseudoVars)._do_((function(each){
-$1=_st((smalltalk.VariableNode || VariableNode))._new();
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
+$ctx1.node=nil;
+$ctx1.pseudoVars=nil;
+$ctx1.locals.pseudoVars=["self", "super", "true", "false", "nil"];
+_st($ctx1.locals.pseudoVars)._do_((function(each){
+return smalltalk.withContext(function($ctx2) { 
$1=_st((smalltalk.VariableNode || VariableNode))._new();
 _st($1)._value_(each);
 $2=_st($1)._yourself();
-node=$2;
-node;
-return _st(self)._assert_(_st(_st(_st((smalltalk.MethodLexicalScope || MethodLexicalScope))._new())._bindingFor_(node))._isPseudoVar());
-}));
+$ctx1.locals.node=$2;
+$ctx1.locals.node;
+return _st(self)._assert_(_st(_st(_st((smalltalk.MethodLexicalScope || MethodLexicalScope))._new())._bindingFor_($ctx1.locals.node))._isPseudoVar());
+})}));
 return self}, self, "testPseudoVar", [], smalltalk.ScopeVarTest)},
 args: [],
 source: "testPseudoVar\x0a\x09| node pseudoVars |\x0a\x09pseudoVars := #('self' 'super' 'true' 'false' 'nil').\x0a\x09pseudoVars do: [:each |\x0a\x09\x09node := VariableNode new\x0a\x09\x09value: each;\x0a\x09\x09yourself.\x0a\x09\x09self assert: (MethodLexicalScope new bindingFor: node) isPseudoVar ]",
@@ -496,16 +496,16 @@ selector: "testTempVar",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
-var node;
-var scope;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
+$ctx1.node=nil;
+$ctx1.scope=nil;
 $1=_st((smalltalk.VariableNode || VariableNode))._new();
 _st($1)._value_("bzzz");
 $2=_st($1)._yourself();
-node=$2;
-scope=_st((smalltalk.MethodLexicalScope || MethodLexicalScope))._new();
-_st(scope)._addTemp_("bzzz");
-_st(self)._assert_(_st(_st(scope)._bindingFor_(node))._isTempVar());
+$ctx1.locals.node=$2;
+$ctx1.locals.scope=_st((smalltalk.MethodLexicalScope || MethodLexicalScope))._new();
+_st($ctx1.locals.scope)._addTemp_("bzzz");
+_st(self)._assert_(_st(_st($ctx1.locals.scope)._bindingFor_($ctx1.locals.node))._isTempVar());
 return self}, self, "testTempVar", [], smalltalk.ScopeVarTest)},
 args: [],
 source: "testTempVar\x0a\x09| node scope |\x0a\x09node := VariableNode new\x0a\x09\x09value: 'bzzz';\x0a\x09\x09yourself.\x0a\x09scope := MethodLexicalScope new.\x0a\x09scope addTemp: 'bzzz'.\x0a\x09self assert: (scope bindingFor: node) isTempVar",
@@ -521,13 +521,13 @@ selector: "testUnknownVar",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
-var node;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
+$ctx1.node=nil;
 $1=_st((smalltalk.VariableNode || VariableNode))._new();
 _st($1)._value_("bzzz");
 $2=_st($1)._yourself();
-node=$2;
-_st(self)._assert_(_st(_st(_st((smalltalk.MethodLexicalScope || MethodLexicalScope))._new())._bindingFor_(node))._isNil());
+$ctx1.locals.node=$2;
+_st(self)._assert_(_st(_st(_st((smalltalk.MethodLexicalScope || MethodLexicalScope))._new())._bindingFor_($ctx1.locals.node))._isNil());
 return self}, self, "testUnknownVar", [], smalltalk.ScopeVarTest)},
 args: [],
 source: "testUnknownVar\x0a\x09| node |\x0a\x09node := VariableNode new\x0a\x09\x09value: 'bzzz';\x0a\x09\x09yourself.\x0a\x09self assert: (MethodLexicalScope new bindingFor: node) isNil",
@@ -546,7 +546,7 @@ selector: "setUp",
 category: 'running',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@analyzer"]=_st((smalltalk.SemanticAnalyzer || SemanticAnalyzer))._on_((smalltalk.Object || Object));
+return smalltalk.withContext(function($ctx1) { 
self["@analyzer"]=_st((smalltalk.SemanticAnalyzer || SemanticAnalyzer))._on_((smalltalk.Object || Object));
 return self}, self, "setUp", [], smalltalk.SemanticAnalyzerTest)},
 args: [],
 source: "setUp\x0a\x09analyzer := SemanticAnalyzer on: Object",
@@ -562,13 +562,13 @@ selector: "testAssignment",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo self := 1";
-ast=_st(smalltalk)._parse_(src);
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo self := 1";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
 _st(self)._should_raise_((function(){
-return _st(self["@analyzer"])._visit_(ast);
-}),(smalltalk.InvalidAssignmentError || InvalidAssignmentError));
+return smalltalk.withContext(function($ctx2) { 
return _st(self["@analyzer"])._visit_($ctx1.locals.ast);
+})}),(smalltalk.InvalidAssignmentError || InvalidAssignmentError));
 return self}, self, "testAssignment", [], smalltalk.SemanticAnalyzerTest)},
 args: [],
 source: "testAssignment\x0a\x09| src ast |\x0a\x0a\x09src := 'foo self := 1'.\x0a\x09ast := smalltalk parse: src.\x0a\x09self should: [analyzer visit: ast] raise: InvalidAssignmentError",
@@ -584,12 +584,12 @@ selector: "testNonLocalReturn",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a | a + 1. ^ a";
-ast=_st(smalltalk)._parse_(src);
-_st(self["@analyzer"])._visit_(ast);
-_st(self)._deny_(_st(_st(ast)._scope())._hasNonLocalReturn());
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a | a + 1. ^ a";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
+_st(self["@analyzer"])._visit_($ctx1.locals.ast);
+_st(self)._deny_(_st(_st($ctx1.locals.ast)._scope())._hasNonLocalReturn());
 return self}, self, "testNonLocalReturn", [], smalltalk.SemanticAnalyzerTest)},
 args: [],
 source: "testNonLocalReturn\x0a\x09| src ast |\x0a\x0a\x09src := 'foo | a | a + 1. ^ a'.\x0a\x09ast := smalltalk parse: src.\x0a\x09analyzer visit: ast.\x0a\x0a\x09self deny: ast scope hasNonLocalReturn",
@@ -605,12 +605,12 @@ selector: "testNonLocalReturn2",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a | a + 1. [ [ ^ a] ]";
-ast=_st(smalltalk)._parse_(src);
-_st(self["@analyzer"])._visit_(ast);
-_st(self)._assert_(_st(_st(ast)._scope())._hasNonLocalReturn());
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a | a + 1. [ [ ^ a] ]";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
+_st(self["@analyzer"])._visit_($ctx1.locals.ast);
+_st(self)._assert_(_st(_st($ctx1.locals.ast)._scope())._hasNonLocalReturn());
 return self}, self, "testNonLocalReturn2", [], smalltalk.SemanticAnalyzerTest)},
 args: [],
 source: "testNonLocalReturn2\x0a\x09| src ast |\x0a\x0a\x09src := 'foo | a | a + 1. [ [ ^ a] ]'.\x0a\x09ast := smalltalk parse: src.\x0a\x09analyzer visit: ast.\x0a\x0a\x09self assert: ast scope hasNonLocalReturn",
@@ -626,12 +626,12 @@ selector: "testScope",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a | a + 1. [ | b | b := a ]";
-ast=_st(smalltalk)._parse_(src);
-_st(self["@analyzer"])._visit_(ast);
-_st(self)._deny_(_st(_st(_st(_st(_st(_st(ast)._nodes())._first())._nodes())._last())._scope()).__eq_eq(_st(ast)._scope()));
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a | a + 1. [ | b | b := a ]";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
+_st(self["@analyzer"])._visit_($ctx1.locals.ast);
+_st(self)._deny_(_st(_st(_st(_st(_st(_st($ctx1.locals.ast)._nodes())._first())._nodes())._last())._scope()).__eq_eq(_st($ctx1.locals.ast)._scope()));
 return self}, self, "testScope", [], smalltalk.SemanticAnalyzerTest)},
 args: [],
 source: "testScope\x0a\x09| src ast |\x0a\x0a\x09src := 'foo | a | a + 1. [ | b | b := a ]'.\x0a\x09ast := smalltalk parse: src.\x0a\x09analyzer visit: ast.\x0a\x0a\x09self deny: ast nodes first nodes last scope == ast scope.",
@@ -647,12 +647,12 @@ selector: "testScope2",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a | a + 1. [ [ | b | b := a ] ]";
-ast=_st(smalltalk)._parse_(src);
-_st(self["@analyzer"])._visit_(ast);
-_st(self)._deny_(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st(ast)._nodes())._first())._nodes())._last())._nodes())._first())._nodes())._first())._scope()).__eq_eq(_st(ast)._scope()));
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a | a + 1. [ [ | b | b := a ] ]";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
+_st(self["@analyzer"])._visit_($ctx1.locals.ast);
+_st(self)._deny_(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st($ctx1.locals.ast)._nodes())._first())._nodes())._last())._nodes())._first())._nodes())._first())._scope()).__eq_eq(_st($ctx1.locals.ast)._scope()));
 return self}, self, "testScope2", [], smalltalk.SemanticAnalyzerTest)},
 args: [],
 source: "testScope2\x0a\x09| src ast |\x0a\x0a\x09src := 'foo | a | a + 1. [ [ | b | b := a ] ]'.\x0a\x09ast := smalltalk parse: src.\x0a\x09analyzer visit: ast.\x0a\x0a\x09self deny: ast nodes first nodes last nodes first nodes first scope == ast scope.",
@@ -668,13 +668,13 @@ selector: "testScopeLevel",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a | a + 1. [ [ | b | b := a ] ]";
-ast=_st(smalltalk)._parse_(src);
-_st(self["@analyzer"])._visit_(ast);
-_st(self)._assert_(_st(_st(_st(ast)._scope())._scopeLevel()).__eq((1)));
-_st(self)._assert_(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st(ast)._nodes())._first())._nodes())._last())._nodes())._first())._nodes())._first())._scope())._scopeLevel()).__eq((3)));
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a | a + 1. [ [ | b | b := a ] ]";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
+_st(self["@analyzer"])._visit_($ctx1.locals.ast);
+_st(self)._assert_(_st(_st(_st($ctx1.locals.ast)._scope())._scopeLevel()).__eq((1)));
+_st(self)._assert_(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st($ctx1.locals.ast)._nodes())._first())._nodes())._last())._nodes())._first())._nodes())._first())._scope())._scopeLevel()).__eq((3)));
 return self}, self, "testScopeLevel", [], smalltalk.SemanticAnalyzerTest)},
 args: [],
 source: "testScopeLevel\x0a\x09| src ast |\x0a\x0a\x09src := 'foo | a | a + 1. [ [ | b | b := a ] ]'.\x0a\x09ast := smalltalk parse: src.\x0a\x09analyzer visit: ast.\x0a\x0a\x09self assert: ast scope scopeLevel = 1.\x0a\x09self assert: ast nodes first nodes last nodes first nodes first scope scopeLevel = 3",
@@ -690,13 +690,13 @@ selector: "testUnknownVariables",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a | b + a";
-ast=_st(smalltalk)._parse_(src);
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a | b + a";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
 _st(self)._should_raise_((function(){
-return _st(self["@analyzer"])._visit_(ast);
-}),(smalltalk.UnknownVariableError || UnknownVariableError));
+return smalltalk.withContext(function($ctx2) { 
return _st(self["@analyzer"])._visit_($ctx1.locals.ast);
+})}),(smalltalk.UnknownVariableError || UnknownVariableError));
 return self}, self, "testUnknownVariables", [], smalltalk.SemanticAnalyzerTest)},
 args: [],
 source: "testUnknownVariables\x0a\x09| src ast |\x0a\x0a\x09src := 'foo | a | b + a'.\x0a\x09ast := smalltalk parse: src.\x0a\x0a\x09self should: [ analyzer visit: ast ] raise: UnknownVariableError",
@@ -712,11 +712,11 @@ selector: "testUnknownVariablesDefinedInJS",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) {  var someVariable = 1 ;
+return smalltalk.withContext(function($ctx1) { 
 var someVariable = 1 ;
 ;
 _st(self)._shouldnt_raise_((function(){
-return _st(smalltalk)._parse_("foo someVariable");
-}),(smalltalk.UnknownVariableError || UnknownVariableError));
+return smalltalk.withContext(function($ctx2) { 
return _st(smalltalk)._parse_("foo someVariable");
+})}),(smalltalk.UnknownVariableError || UnknownVariableError));
 return self}, self, "testUnknownVariablesDefinedInJS", [], smalltalk.SemanticAnalyzerTest)},
 args: [],
 source: "testUnknownVariablesDefinedInJS\x0a\x0a\x09< var someVariable = 1 >.\x0a\x0a\x09self shouldnt: [ smalltalk parse: 'foo someVariable' ] raise: UnknownVariableError",
@@ -732,13 +732,13 @@ selector: "testUnknownVariablesWithScope",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a b | [ c + 1. [ a + 1. d + 1 ]]";
-ast=_st(smalltalk)._parse_(src);
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a b | [ c + 1. [ a + 1. d + 1 ]]";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
 _st(self)._should_raise_((function(){
-return _st(self["@analyzer"])._visit_(ast);
-}),(smalltalk.UnknownVariableError || UnknownVariableError));
+return smalltalk.withContext(function($ctx2) { 
return _st(self["@analyzer"])._visit_($ctx1.locals.ast);
+})}),(smalltalk.UnknownVariableError || UnknownVariableError));
 return self}, self, "testUnknownVariablesWithScope", [], smalltalk.SemanticAnalyzerTest)},
 args: [],
 source: "testUnknownVariablesWithScope\x0a\x09| src ast |\x0a\x0a\x09src := 'foo | a b | [ c + 1. [ a + 1. d + 1 ]]'.\x0a\x09ast := smalltalk parse: src.\x0a\x09\x0a\x09self should: [ analyzer visit: ast ] raise: UnknownVariableError",
@@ -754,11 +754,11 @@ selector: "testVariableShadowing",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a | a + 1";
-ast=_st(smalltalk)._parse_(src);
-_st(self["@analyzer"])._visit_(ast);
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a | a + 1";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
+_st(self["@analyzer"])._visit_($ctx1.locals.ast);
 return self}, self, "testVariableShadowing", [], smalltalk.SemanticAnalyzerTest)},
 args: [],
 source: "testVariableShadowing\x0a\x09| src ast |\x0a\x09src := 'foo | a | a + 1'.\x0a\x09ast := smalltalk parse: src.\x0a\x09analyzer visit: ast",
@@ -774,13 +774,13 @@ selector: "testVariableShadowing2",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a | a + 1. [ | a | a := 2 ]";
-ast=_st(smalltalk)._parse_(src);
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a | a + 1. [ | a | a := 2 ]";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
 _st(self)._should_raise_((function(){
-return _st(self["@analyzer"])._visit_(ast);
-}),(smalltalk.ShadowingVariableError || ShadowingVariableError));
+return smalltalk.withContext(function($ctx2) { 
return _st(self["@analyzer"])._visit_($ctx1.locals.ast);
+})}),(smalltalk.ShadowingVariableError || ShadowingVariableError));
 return self}, self, "testVariableShadowing2", [], smalltalk.SemanticAnalyzerTest)},
 args: [],
 source: "testVariableShadowing2\x0a\x09| src ast |\x0a\x09src := 'foo | a | a + 1. [ | a | a := 2 ]'.\x0a\x09ast := smalltalk parse: src.\x0a\x09self should: [analyzer visit: ast] raise: ShadowingVariableError",
@@ -796,11 +796,11 @@ selector: "testVariableShadowing3",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a | a + 1. [ | b | b := 2 ]";
-ast=_st(smalltalk)._parse_(src);
-_st(self["@analyzer"])._visit_(ast);
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a | a + 1. [ | b | b := 2 ]";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
+_st(self["@analyzer"])._visit_($ctx1.locals.ast);
 return self}, self, "testVariableShadowing3", [], smalltalk.SemanticAnalyzerTest)},
 args: [],
 source: "testVariableShadowing3\x0a\x09| src ast |\x0a\x09src := 'foo | a | a + 1. [ | b | b := 2 ]'.\x0a\x09ast := smalltalk parse: src.\x0a\x09analyzer visit: ast",
@@ -816,11 +816,11 @@ selector: "testVariableShadowing4",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a | a + 1. [ [ [ | b | b := 2 ] ] ]";
-ast=_st(smalltalk)._parse_(src);
-_st(self["@analyzer"])._visit_(ast);
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a | a + 1. [ [ [ | b | b := 2 ] ] ]";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
+_st(self["@analyzer"])._visit_($ctx1.locals.ast);
 return self}, self, "testVariableShadowing4", [], smalltalk.SemanticAnalyzerTest)},
 args: [],
 source: "testVariableShadowing4\x0a\x09| src ast |\x0a\x09src := 'foo | a | a + 1. [ [ [ | b | b := 2 ] ] ]'.\x0a\x09ast := smalltalk parse: src.\x0a\x09analyzer visit: ast",
@@ -836,13 +836,13 @@ selector: "testVariableShadowing5",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a | a + 1. [ [ [ | a | a := 2 ] ] ]";
-ast=_st(smalltalk)._parse_(src);
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a | a + 1. [ [ [ | a | a := 2 ] ] ]";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
 _st(self)._should_raise_((function(){
-return _st(self["@analyzer"])._visit_(ast);
-}),(smalltalk.ShadowingVariableError || ShadowingVariableError));
+return smalltalk.withContext(function($ctx2) { 
return _st(self["@analyzer"])._visit_($ctx1.locals.ast);
+})}),(smalltalk.ShadowingVariableError || ShadowingVariableError));
 return self}, self, "testVariableShadowing5", [], smalltalk.SemanticAnalyzerTest)},
 args: [],
 source: "testVariableShadowing5\x0a\x09| src ast |\x0a\x09src := 'foo | a | a + 1. [ [ [ | a | a := 2 ] ] ]'.\x0a\x09ast := smalltalk parse: src.\x0a\x09self should: [analyzer visit: ast] raise: ShadowingVariableError",
@@ -858,15 +858,15 @@ selector: "testVariablesLookup",
 category: 'tests',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var src;
-var ast;
-src="foo | a | a + 1. [ | b | b := a ]";
-ast=_st(smalltalk)._parse_(src);
-_st(self["@analyzer"])._visit_(ast);
-_st(self)._assert_(_st(_st(_st(_st(_st(_st(_st(ast)._nodes())._first())._nodes())._first())._receiver())._binding())._isTempVar());
-_st(self)._assert_(_st(_st(_st(_st(_st(_st(_st(_st(ast)._nodes())._first())._nodes())._first())._receiver())._binding())._scope()).__eq_eq(_st(ast)._scope()));
-_st(self)._assert_(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st(ast)._nodes())._first())._nodes())._last())._nodes())._first())._nodes())._first())._left())._binding())._isTempVar());
-_st(self)._assert_(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st(ast)._nodes())._first())._nodes())._last())._nodes())._first())._nodes())._first())._left())._binding())._scope()).__eq_eq(_st(_st(_st(_st(_st(ast)._nodes())._first())._nodes())._last())._scope()));
+return smalltalk.withContext(function($ctx1) { 
$ctx1.src=nil;
+$ctx1.ast=nil;
+$ctx1.locals.src="foo | a | a + 1. [ | b | b := a ]";
+$ctx1.locals.ast=_st(smalltalk)._parse_($ctx1.locals.src);
+_st(self["@analyzer"])._visit_($ctx1.locals.ast);
+_st(self)._assert_(_st(_st(_st(_st(_st(_st(_st($ctx1.locals.ast)._nodes())._first())._nodes())._first())._receiver())._binding())._isTempVar());
+_st(self)._assert_(_st(_st(_st(_st(_st(_st(_st(_st($ctx1.locals.ast)._nodes())._first())._nodes())._first())._receiver())._binding())._scope()).__eq_eq(_st($ctx1.locals.ast)._scope()));
+_st(self)._assert_(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st($ctx1.locals.ast)._nodes())._first())._nodes())._last())._nodes())._first())._nodes())._first())._left())._binding())._isTempVar());
+_st(self)._assert_(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st(_st($ctx1.locals.ast)._nodes())._first())._nodes())._last())._nodes())._first())._nodes())._first())._left())._binding())._scope()).__eq_eq(_st(_st(_st(_st(_st($ctx1.locals.ast)._nodes())._first())._nodes())._last())._scope()));
 return self}, self, "testVariablesLookup", [], smalltalk.SemanticAnalyzerTest)},
 args: [],
 source: "testVariablesLookup\x0a\x09| src ast |\x0a\x0a\x09src := 'foo | a | a + 1. [ | b | b := a ]'.\x0a\x09ast := smalltalk parse: src.\x0a\x09analyzer visit: ast.\x0a\x0a\x09\x22Binding for `a` in the message send\x22\x0a\x09self assert: ast nodes first nodes first receiver binding isTempVar.\x0a\x09self assert: ast nodes first nodes first receiver binding scope == ast scope.\x0a\x0a\x09\x22Binding for `b`\x22\x0a\x09self assert: ast nodes first nodes last nodes first nodes first left binding isTempVar.\x0a\x09self assert: ast nodes first nodes last nodes first nodes first left binding scope == ast nodes first nodes last scope.",

+ 13 - 13
js/Examples.deploy.js

@@ -6,10 +6,10 @@ smalltalk.method({
 selector: "decrease",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@count"]=_st(self["@count"]).__minus((1));
+return smalltalk.withContext(function($ctx1) { 
self["@count"]=_st(self["@count"]).__minus((1));
 _st(self["@header"])._contents_((function(html){
-return _st(html)._with_(_st(self["@count"])._asString());
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(html)._with_(_st(self["@count"])._asString());
+})}));
 return self}, self, "decrease", [], smalltalk.Counter)}
 }),
 smalltalk.Counter);
@@ -20,10 +20,10 @@ smalltalk.method({
 selector: "increase",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@count"]=_st(self["@count"]).__plus((1));
+return smalltalk.withContext(function($ctx1) { 
self["@count"]=_st(self["@count"]).__plus((1));
 _st(self["@header"])._contents_((function(html){
-return _st(html)._with_(_st(self["@count"])._asString());
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(html)._with_(_st(self["@count"])._asString());
+})}));
 return self}, self, "increase", [], smalltalk.Counter)}
 }),
 smalltalk.Counter);
@@ -34,7 +34,7 @@ smalltalk.method({
 selector: "initialize",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { smalltalk.Widget.fn.prototype._initialize.apply(_st(self), []);
+return smalltalk.withContext(function($ctx1) { 
smalltalk.Widget.fn.prototype._initialize.apply(_st(self), []);
 self["@count"]=(0);
 return self}, self, "initialize", [], smalltalk.Counter)}
 }),
@@ -46,7 +46,7 @@ smalltalk.method({
 selector: "renderOn:",
 fn: function (html){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3,$4,$5,$6;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3,$4,$5,$6;
 $1=_st(html)._h1();
 _st($1)._with_(_st(self["@count"])._asString());
 $2=_st($1)._yourself();
@@ -54,13 +54,13 @@ self["@header"]=$2;
 $3=_st(html)._button();
 _st($3)._with_("++");
 $4=_st($3)._onClick_((function(){
-return _st(self)._increase();
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._increase();
+})}));
 $5=_st(html)._button();
 _st($5)._with_("--");
 $6=_st($5)._onClick_((function(){
-return _st(self)._decrease();
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._decrease();
+})}));
 return self}, self, "renderOn:", [html], smalltalk.Counter)}
 }),
 smalltalk.Counter);
@@ -72,7 +72,7 @@ smalltalk.method({
 selector: "tryExample",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._new())._appendToJQuery_(_st("body")._asJQuery());
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._new())._appendToJQuery_(_st("body")._asJQuery());
 return self}, self, "tryExample", [], smalltalk.Counter.klass)}
 }),
 smalltalk.Counter.klass);

+ 13 - 13
js/Examples.js

@@ -8,10 +8,10 @@ selector: "decrease",
 category: 'actions',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@count"]=_st(self["@count"]).__minus((1));
+return smalltalk.withContext(function($ctx1) { 
self["@count"]=_st(self["@count"]).__minus((1));
 _st(self["@header"])._contents_((function(html){
-return _st(html)._with_(_st(self["@count"])._asString());
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(html)._with_(_st(self["@count"])._asString());
+})}));
 return self}, self, "decrease", [], smalltalk.Counter)},
 args: [],
 source: "decrease\x0a    count := count - 1.\x0a    header contents: [:html | html with: count asString]",
@@ -27,10 +27,10 @@ selector: "increase",
 category: 'actions',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@count"]=_st(self["@count"]).__plus((1));
+return smalltalk.withContext(function($ctx1) { 
self["@count"]=_st(self["@count"]).__plus((1));
 _st(self["@header"])._contents_((function(html){
-return _st(html)._with_(_st(self["@count"])._asString());
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(html)._with_(_st(self["@count"])._asString());
+})}));
 return self}, self, "increase", [], smalltalk.Counter)},
 args: [],
 source: "increase\x0a    count := count + 1.\x0a    header contents: [:html | html with: count asString]",
@@ -46,7 +46,7 @@ selector: "initialize",
 category: 'initialization',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { smalltalk.Widget.fn.prototype._initialize.apply(_st(self), []);
+return smalltalk.withContext(function($ctx1) { 
smalltalk.Widget.fn.prototype._initialize.apply(_st(self), []);
 self["@count"]=(0);
 return self}, self, "initialize", [], smalltalk.Counter)},
 args: [],
@@ -63,7 +63,7 @@ selector: "renderOn:",
 category: 'rendering',
 fn: function (html){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3,$4,$5,$6;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3,$4,$5,$6;
 $1=_st(html)._h1();
 _st($1)._with_(_st(self["@count"])._asString());
 $2=_st($1)._yourself();
@@ -71,13 +71,13 @@ self["@header"]=$2;
 $3=_st(html)._button();
 _st($3)._with_("++");
 $4=_st($3)._onClick_((function(){
-return _st(self)._increase();
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._increase();
+})}));
 $5=_st(html)._button();
 _st($5)._with_("--");
 $6=_st($5)._onClick_((function(){
-return _st(self)._decrease();
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._decrease();
+})}));
 return self}, self, "renderOn:", [html], smalltalk.Counter)},
 args: ["html"],
 source: "renderOn: html\x0a    header := html h1 \x0a\x09with: count asString;\x0a\x09yourself.\x0a    html button\x0a\x09with: '++';\x0a\x09onClick: [self increase].\x0a    html button\x0a\x09with: '--';\x0a\x09onClick: [self decrease]",
@@ -94,7 +94,7 @@ selector: "tryExample",
 category: 'example',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._new())._appendToJQuery_(_st("body")._asJQuery());
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._new())._appendToJQuery_(_st("body")._asJQuery());
 return self}, self, "tryExample", [], smalltalk.Counter.klass)},
 args: [],
 source: "tryExample\x0a\x09\x22In order to play with the Counter, just select the\x0a\x09doit below and press the Do it button. Then take a\x0a\x09look in the HTML document above the IDE.\x22\x0a\x0a\x09\x22Counter tryExample\x22\x0a        self new appendToJQuery: 'body' asJQuery",

文件差异内容过多而无法显示
+ 363 - 340
js/IDE.deploy.js


文件差异内容过多而无法显示
+ 363 - 340
js/IDE.js


+ 167 - 167
js/Importer-Exporter.deploy.js

@@ -6,30 +6,30 @@ smalltalk.method({
 selector: "nextChunk",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3;
 var $early={};
 try {
-var char_;
-var result;
-var chunk;
-result=_st("")._writeStream();
+$ctx1.char=nil;
+$ctx1.result=nil;
+$ctx1.chunk=nil;
+$ctx1.locals.result=_st("")._writeStream();
 _st((function(){
-char_=_st(self["@stream"])._next();
-char_;
-return _st(char_)._notNil();
-}))._whileTrue_((function(){
-$1=_st(char_).__eq("!");
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.char=_st(self["@stream"])._next();
+$ctx1.locals.char;
+return _st($ctx1.locals.char)._notNil();
+})}))._whileTrue_((function(){
+return smalltalk.withContext(function($ctx2) { 
$1=_st($ctx1.locals.char).__eq("!");
 if(smalltalk.assert($1)){
 $2=_st(_st(self["@stream"])._peek()).__eq("!");
 if(smalltalk.assert($2)){
 _st(self["@stream"])._next();
 } else {
-$3=_st(_st(result)._contents())._trimBoth();
+$3=_st(_st($ctx1.locals.result)._contents())._trimBoth();
 throw $early=[$3];
 };
 };
-return _st(result)._nextPut_(char_);
-}));
+return _st($ctx1.locals.result)._nextPut_($ctx1.locals.char);
+})}));
 return nil;
 }
 catch(e) {if(e===$early)return e[0]; throw e}
@@ -43,7 +43,7 @@ smalltalk.method({
 selector: "stream:",
 fn: function (aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@stream"]=aStream;
+return smalltalk.withContext(function($ctx1) { 
self["@stream"]=aStream;
 return self}, self, "stream:", [aStream], smalltalk.ChunkParser)}
 }),
 smalltalk.ChunkParser);
@@ -55,7 +55,7 @@ smalltalk.method({
 selector: "on:",
 fn: function (aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._new())._stream_(aStream);
 return $1;
 }, self, "on:", [aStream], smalltalk.ChunkParser.klass)}
@@ -70,7 +70,7 @@ smalltalk.method({
 selector: "classNameFor:",
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st(aClass)._isMetaclass();
 if(smalltalk.assert($2)){
 $1=_st(_st(_st(aClass)._instanceClass())._name()).__comma(".klass");
@@ -93,12 +93,12 @@ smalltalk.method({
 selector: "exportAll",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st((smalltalk.String || String))._streamContents_((function(stream){
-return _st(_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._packages())._do_((function(pkg){
-return _st(stream)._nextPutAll_(_st(self)._exportPackage_(_st(pkg)._name()));
-}));
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._packages())._do_((function(pkg){
+return smalltalk.withContext(function($ctx3) { 
return _st(stream)._nextPutAll_(_st(self)._exportPackage_(_st(pkg)._name()));
+})}));
+})}));
 return $1;
 }, self, "exportAll", [], smalltalk.Exporter)}
 }),
@@ -110,13 +110,13 @@ smalltalk.method({
 selector: "exportClass:",
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st((smalltalk.String || String))._streamContents_((function(stream){
-_st(self)._exportDefinitionOf_on_(aClass,stream);
+return smalltalk.withContext(function($ctx2) { 
_st(self)._exportDefinitionOf_on_(aClass,stream);
 _st(self)._exportMethodsOf_on_(aClass,stream);
 _st(self)._exportMetaDefinitionOf_on_(aClass,stream);
 return _st(self)._exportMethodsOf_on_(_st(aClass)._class(),stream);
-}));
+})}));
 return $1;
 }, self, "exportClass:", [aClass], smalltalk.Exporter)}
 }),
@@ -128,16 +128,16 @@ smalltalk.method({
 selector: "exportDefinitionOf:on:",
 fn: function (aClass,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3,$4;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3,$4;
 _st(aStream)._nextPutAll_("smalltalk.addClass(");
 _st(aStream)._nextPutAll_(_st(_st("'").__comma(_st(self)._classNameFor_(aClass))).__comma("', "));
 _st(aStream)._nextPutAll_(_st("smalltalk.").__comma(_st(self)._classNameFor_(_st(aClass)._superclass())));
 $1=_st(aStream)._nextPutAll_(", [");
 _st(_st(aClass)._instanceVariableNames())._do_separatedBy_((function(each){
-return _st(aStream)._nextPutAll_(_st(_st("'").__comma(each)).__comma("'"));
-}),(function(){
-return _st(aStream)._nextPutAll_(", ");
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(aStream)._nextPutAll_(_st(_st("'").__comma(each)).__comma("'"));
+})}),(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(aStream)._nextPutAll_(", ");
+})}));
 _st(aStream)._nextPutAll_("], '");
 _st(aStream)._nextPutAll_(_st(_st(aClass)._category()).__comma("'"));
 $2=_st(aStream)._nextPutAll_(");");
@@ -161,17 +161,17 @@ smalltalk.method({
 selector: "exportMetaDefinitionOf:on:",
 fn: function (aClass,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 $1=_st(_st(_st(aClass)._class())._instanceVariableNames())._isEmpty();
 if(! smalltalk.assert($1)){
 _st(aStream)._nextPutAll_(_st("smalltalk.").__comma(_st(self)._classNameFor_(_st(aClass)._class())));
 $2=_st(aStream)._nextPutAll_(".iVarNames = [");
 $2;
 _st(_st(_st(aClass)._class())._instanceVariableNames())._do_separatedBy_((function(each){
-return _st(aStream)._nextPutAll_(_st(_st("'").__comma(each)).__comma("'"));
-}),(function(){
-return _st(aStream)._nextPutAll_(",");
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(aStream)._nextPutAll_(_st(_st("'").__comma(each)).__comma("'"));
+})}),(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(aStream)._nextPutAll_(",");
+})}));
 _st(aStream)._nextPutAll_(_st("];").__comma(_st((smalltalk.String || String))._lf()));
 };
 return self}, self, "exportMetaDefinitionOf:on:", [aClass,aStream], smalltalk.Exporter)}
@@ -184,7 +184,7 @@ smalltalk.method({
 selector: "exportMethod:of:on:",
 fn: function (aMethod,aClass,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 _st(aStream)._nextPutAll_("smalltalk.addMethod(");
 _st(aStream)._lf();
 _st(aStream)._nextPutAll_(_st(_st(_st(_st(aMethod)._selector())._asSelector())._asJavascript()).__comma(","));
@@ -221,15 +221,15 @@ smalltalk.method({
 selector: "exportMethodsOf:on:",
 fn: function (aClass,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(_st(_st(_st(aClass)._methodDictionary())._values())._sorted_((function(a,b){
-return _st(_st(a)._selector()).__lt_eq(_st(b)._selector());
-})))._do_((function(each){
-$1=_st(_st(each)._category())._match_("^\x5c*");
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(a)._selector()).__lt_eq(_st(b)._selector());
+})})))._do_((function(each){
+return smalltalk.withContext(function($ctx2) { 
$1=_st(_st(each)._category())._match_("^\x5c*");
 if(! smalltalk.assert($1)){
 return _st(self)._exportMethod_of_on_(each,aClass,aStream);
 };
-}));
+})}));
 _st(aStream)._lf();
 return self}, self, "exportMethodsOf:on:", [aClass,aStream], smalltalk.Exporter)}
 }),
@@ -241,17 +241,17 @@ smalltalk.method({
 selector: "exportPackage:",
 fn: function (packageName){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var package;
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.package=nil;
 $1=_st((smalltalk.String || String))._streamContents_((function(stream){
-package=_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._packageAt_(packageName);
-package;
-_st(self)._exportPackageDefinitionOf_on_(package,stream);
-_st(_st(_st(package)._sortedClasses())._asSet())._do_((function(each){
-return _st(stream)._nextPutAll_(_st(self)._exportClass_(each));
-}));
-return _st(self)._exportPackageExtensionsOf_on_(package,stream);
-}));
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.package_=_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._packageAt_(packageName);
+$ctx1.locals.package_;
+_st(self)._exportPackageDefinitionOf_on_($ctx1.locals.package_,stream);
+_st(_st(_st($ctx1.locals.package_)._sortedClasses())._asSet())._do_((function(each){
+return smalltalk.withContext(function($ctx3) { 
return _st(stream)._nextPutAll_(_st(self)._exportClass_(each));
+})}));
+return _st(self)._exportPackageExtensionsOf_on_($ctx1.locals.package_,stream);
+})}));
 return $1;
 }, self, "exportPackage:", [packageName], smalltalk.Exporter)}
 }),
@@ -261,13 +261,13 @@ smalltalk.addMethod(
 "_exportPackageDefinitionOf_on_",
 smalltalk.method({
 selector: "exportPackageDefinitionOf:on:",
-fn: function (package,aStream){
+fn: function (package_,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(aStream)._nextPutAll_("smalltalk.addPackage(");
-$1=_st(aStream)._nextPutAll_(_st(_st(_st(_st("'").__comma(_st(package)._name())).__comma("', ")).__comma(_st(package)._propertiesAsJSON())).__comma(");"));
+$1=_st(aStream)._nextPutAll_(_st(_st(_st(_st("'").__comma(_st(package_)._name())).__comma("', ")).__comma(_st(package_)._propertiesAsJSON())).__comma(");"));
 _st(aStream)._lf();
-return self}, self, "exportPackageDefinitionOf:on:", [package,aStream], smalltalk.Exporter)}
+return self}, self, "exportPackageDefinitionOf:on:", [package_,aStream], smalltalk.Exporter)}
 }),
 smalltalk.Exporter);
 
@@ -275,24 +275,24 @@ smalltalk.addMethod(
 "_exportPackageExtensionsOf_on_",
 smalltalk.method({
 selector: "exportPackageExtensionsOf:on:",
-fn: function (package,aStream){
+fn: function (package_,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var name;
-name=_st(package)._name();
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.name=nil;
+$ctx1.locals.name=_st(package_)._name();
 _st(_st((smalltalk.Package || Package))._sortedClasses_(_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._classes()))._do_((function(each){
-return _st([each,_st(each)._class()])._do_((function(aClass){
-return _st(_st(_st(_st(aClass)._methodDictionary())._values())._sorted_((function(a,b){
-return _st(_st(a)._selector()).__lt_eq(_st(b)._selector());
-})))._do_((function(method){
-$1=_st(_st(method)._category())._match_(_st("^\x5c*").__comma(name));
+return smalltalk.withContext(function($ctx2) { 
return _st([each,_st(each)._class()])._do_((function(aClass){
+return smalltalk.withContext(function($ctx3) { 
return _st(_st(_st(_st(aClass)._methodDictionary())._values())._sorted_((function(a,b){
+return smalltalk.withContext(function($ctx4) { 
return _st(_st(a)._selector()).__lt_eq(_st(b)._selector());
+})})))._do_((function(method){
+return smalltalk.withContext(function($ctx4) { 
$1=_st(_st(method)._category())._match_(_st("^\x5c*").__comma($ctx1.locals.name));
 if(smalltalk.assert($1)){
 return _st(self)._exportMethod_of_on_(method,aClass,aStream);
 };
-}));
-}));
-}));
-return self}, self, "exportPackageExtensionsOf:on:", [package,aStream], smalltalk.Exporter)}
+})}));
+})}));
+})}));
+return self}, self, "exportPackageExtensionsOf:on:", [package_,aStream], smalltalk.Exporter)}
 }),
 smalltalk.Exporter);
 
@@ -305,7 +305,7 @@ smalltalk.method({
 selector: "chunkEscape:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(aString)._replace_with_("!","!!"))._trimBoth();
 return $1;
 }, self, "chunkEscape:", [aString], smalltalk.ChunkExporter)}
@@ -318,7 +318,7 @@ smalltalk.method({
 selector: "classNameFor:",
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st(aClass)._isMetaclass();
 if(smalltalk.assert($2)){
 $1=_st(_st(_st(aClass)._instanceClass())._name()).__comma(" class");
@@ -341,16 +341,16 @@ smalltalk.method({
 selector: "exportDefinitionOf:on:",
 fn: function (aClass,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3,$4;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3,$4;
 _st(aStream)._nextPutAll_(_st(self)._classNameFor_(_st(aClass)._superclass()));
 _st(aStream)._nextPutAll_(_st(" subclass: #").__comma(_st(self)._classNameFor_(aClass)));
 _st(aStream)._lf();
 $1=_st(aStream)._nextPutAll_("\x09instanceVariableNames: '");
 _st(_st(aClass)._instanceVariableNames())._do_separatedBy_((function(each){
-return _st(aStream)._nextPutAll_(each);
-}),(function(){
-return _st(aStream)._nextPutAll_(" ");
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(aStream)._nextPutAll_(each);
+})}),(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(aStream)._nextPutAll_(" ");
+})}));
 _st(aStream)._nextPutAll_("'");
 _st(aStream)._lf();
 _st(aStream)._nextPutAll_(_st(_st("\x09package: '").__comma(_st(aClass)._category())).__comma("'!"));
@@ -374,17 +374,17 @@ smalltalk.method({
 selector: "exportMetaDefinitionOf:on:",
 fn: function (aClass,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3;
 $1=_st(_st(_st(aClass)._class())._instanceVariableNames())._isEmpty();
 if(! smalltalk.assert($1)){
 _st(aStream)._nextPutAll_(_st(self)._classNameFor_(_st(aClass)._class()));
 $2=_st(aStream)._nextPutAll_(" instanceVariableNames: '");
 $2;
 _st(_st(_st(aClass)._class())._instanceVariableNames())._do_separatedBy_((function(each){
-return _st(aStream)._nextPutAll_(each);
-}),(function(){
-return _st(aStream)._nextPutAll_(" ");
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(aStream)._nextPutAll_(each);
+})}),(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(aStream)._nextPutAll_(" ");
+})}));
 _st(aStream)._nextPutAll_("'!");
 _st(aStream)._lf();
 $3=_st(aStream)._lf();
@@ -400,7 +400,7 @@ smalltalk.method({
 selector: "exportMethod:of:on:",
 fn: function (aMethod,aClass,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(aStream)._lf();
 _st(aStream)._lf();
 _st(aStream)._nextPutAll_(_st(self)._chunkEscape_(_st(aMethod)._source()));
@@ -416,14 +416,14 @@ smalltalk.method({
 selector: "exportMethods:category:of:on:",
 fn: function (methods,category,aClass,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 _st(aStream)._nextPutAll_(_st("!").__comma(_st(self)._classNameFor_(aClass)));
 $1=_st(aStream)._nextPutAll_(_st(_st(" methodsFor: '").__comma(category)).__comma("'!"));
 _st(_st(methods)._sorted_((function(a,b){
-return _st(_st(a)._selector()).__lt_eq(_st(b)._selector());
-})))._do_((function(each){
-return _st(self)._exportMethod_of_on_(each,aClass,aStream);
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(a)._selector()).__lt_eq(_st(b)._selector());
+})})))._do_((function(each){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._exportMethod_of_on_(each,aClass,aStream);
+})}));
 _st(aStream)._nextPutAll_(" !");
 _st(aStream)._lf();
 $2=_st(aStream)._lf();
@@ -437,23 +437,23 @@ smalltalk.method({
 selector: "exportMethodsOf:on:",
 fn: function (aClass,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var map;
-map=_st((smalltalk.Dictionary || Dictionary))._new();
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.map=nil;
+$ctx1.locals.map=_st((smalltalk.Dictionary || Dictionary))._new();
 _st(aClass)._protocolsDo_((function(category,methods){
-$1=_st(category)._match_("^\x5c*");
+return smalltalk.withContext(function($ctx2) { 
$1=_st(category)._match_("^\x5c*");
 if(! smalltalk.assert($1)){
-return _st(map)._at_put_(category,methods);
+return _st($ctx1.locals.map)._at_put_(category,methods);
 };
-}));
-_st(_st(_st(map)._keys())._sorted_((function(a,b){
-return _st(a).__lt_eq(b);
-})))._do_((function(category){
-var methods;
-methods=_st(map)._at_(category);
-methods;
-return _st(self)._exportMethods_category_of_on_(methods,category,aClass,aStream);
-}));
+})}));
+_st(_st(_st($ctx1.locals.map)._keys())._sorted_((function(a,b){
+return smalltalk.withContext(function($ctx2) { 
return _st(a).__lt_eq(b);
+})})))._do_((function(category){
+return smalltalk.withContext(function($ctx2) { 
$ctx2.methods=nil;
+$ctx2.locals.methods=_st($ctx1.locals.map)._at_(category);
+$ctx2.locals.methods;
+return _st(self)._exportMethods_category_of_on_($ctx2.locals.methods,category,aClass,aStream);
+})}));
 return self}, self, "exportMethodsOf:on:", [aClass,aStream], smalltalk.ChunkExporter)}
 }),
 smalltalk.ChunkExporter);
@@ -462,12 +462,12 @@ smalltalk.addMethod(
 "_exportPackageDefinitionOf_on_",
 smalltalk.method({
 selector: "exportPackageDefinitionOf:on:",
-fn: function (package,aStream){
+fn: function (package_,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-_st(aStream)._nextPutAll_(_st(_st(_st(_st("Smalltalk current createPackage: '").__comma(_st(package)._name())).__comma("' properties: ")).__comma(_st(_st(package)._properties())._storeString())).__comma("!"));
+return smalltalk.withContext(function($ctx1) { 
var $1;
+_st(aStream)._nextPutAll_(_st(_st(_st(_st("Smalltalk current createPackage: '").__comma(_st(package_)._name())).__comma("' properties: ")).__comma(_st(_st(package_)._properties())._storeString())).__comma("!"));
 $1=_st(aStream)._lf();
-return self}, self, "exportPackageDefinitionOf:on:", [package,aStream], smalltalk.ChunkExporter)}
+return self}, self, "exportPackageDefinitionOf:on:", [package_,aStream], smalltalk.ChunkExporter)}
 }),
 smalltalk.ChunkExporter);
 
@@ -475,33 +475,33 @@ smalltalk.addMethod(
 "_exportPackageExtensionsOf_on_",
 smalltalk.method({
 selector: "exportPackageExtensionsOf:on:",
-fn: function (package,aStream){
+fn: function (package_,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var name;
-var map;
-name=_st(package)._name();
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.name=nil;
+$ctx1.map=nil;
+$ctx1.locals.name=_st(package_)._name();
 _st(_st((smalltalk.Package || Package))._sortedClasses_(_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._classes()))._do_((function(each){
-return _st([each,_st(each)._class()])._do_((function(aClass){
-map=_st((smalltalk.Dictionary || Dictionary))._new();
-map;
+return smalltalk.withContext(function($ctx2) { 
return _st([each,_st(each)._class()])._do_((function(aClass){
+return smalltalk.withContext(function($ctx3) { 
$ctx1.locals.map=_st((smalltalk.Dictionary || Dictionary))._new();
+$ctx1.locals.map;
 _st(aClass)._protocolsDo_((function(category,methods){
-$1=_st(category)._match_(_st("^\x5c*").__comma(name));
+return smalltalk.withContext(function($ctx4) { 
$1=_st(category)._match_(_st("^\x5c*").__comma($ctx1.locals.name));
 if(smalltalk.assert($1)){
-return _st(map)._at_put_(category,methods);
+return _st($ctx1.locals.map)._at_put_(category,methods);
 };
-}));
-return _st(_st(_st(map)._keys())._sorted_((function(a,b){
-return _st(a).__lt_eq(b);
-})))._do_((function(category){
-var methods;
-methods=_st(map)._at_(category);
-methods;
-return _st(self)._exportMethods_category_of_on_(methods,category,aClass,aStream);
-}));
-}));
-}));
-return self}, self, "exportPackageExtensionsOf:on:", [package,aStream], smalltalk.ChunkExporter)}
+})}));
+return _st(_st(_st($ctx1.locals.map)._keys())._sorted_((function(a,b){
+return smalltalk.withContext(function($ctx4) { 
return _st(a).__lt_eq(b);
+})})))._do_((function(category){
+return smalltalk.withContext(function($ctx4) { 
$ctx4.methods=nil;
+$ctx4.locals.methods=_st($ctx1.locals.map)._at_(category);
+$ctx4.locals.methods;
+return _st(self)._exportMethods_category_of_on_($ctx4.locals.methods,category,aClass,aStream);
+})}));
+})}));
+})}));
+return self}, self, "exportPackageExtensionsOf:on:", [package_,aStream], smalltalk.ChunkExporter)}
 }),
 smalltalk.ChunkExporter);
 
@@ -514,16 +514,16 @@ smalltalk.method({
 selector: "exportDefinitionOf:on:",
 fn: function (aClass,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 _st(aStream)._nextPutAll_("smalltalk.addClass(");
 _st(aStream)._nextPutAll_(_st(_st("'").__comma(_st(self)._classNameFor_(aClass))).__comma("', "));
 _st(aStream)._nextPutAll_(_st("smalltalk.").__comma(_st(self)._classNameFor_(_st(aClass)._superclass())));
 $1=_st(aStream)._nextPutAll_(", [");
 _st(_st(aClass)._instanceVariableNames())._do_separatedBy_((function(each){
-return _st(aStream)._nextPutAll_(_st(_st("'").__comma(each)).__comma("'"));
-}),(function(){
-return _st(aStream)._nextPutAll_(", ");
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(aStream)._nextPutAll_(_st(_st("'").__comma(each)).__comma("'"));
+})}),(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(aStream)._nextPutAll_(", ");
+})}));
 _st(aStream)._nextPutAll_("], '");
 _st(aStream)._nextPutAll_(_st(_st(aClass)._category()).__comma("'"));
 $2=_st(aStream)._nextPutAll_(");");
@@ -538,7 +538,7 @@ smalltalk.method({
 selector: "exportMethod:of:on:",
 fn: function (aMethod,aClass,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(aStream)._nextPutAll_("smalltalk.addMethod(");
 _st(aStream)._lf();
 _st(aStream)._nextPutAll_(_st(_st(_st(_st(aMethod)._selector())._asSelector())._asJavascript()).__comma(","));
@@ -568,32 +568,32 @@ smalltalk.method({
 selector: "import:",
 fn: function (aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var chunk;
-var result;
-var parser;
-var lastEmpty;
-parser=_st((smalltalk.ChunkParser || ChunkParser))._on_(aStream);
-lastEmpty=false;
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.chunk=nil;
+$ctx1.result=nil;
+$ctx1.parser=nil;
+$ctx1.lastEmpty=nil;
+$ctx1.locals.parser=_st((smalltalk.ChunkParser || ChunkParser))._on_(aStream);
+$ctx1.locals.lastEmpty=false;
 _st((function(){
-chunk=_st(parser)._nextChunk();
-chunk;
-return _st(chunk)._isNil();
-}))._whileFalse_((function(){
-$1=_st(chunk)._isEmpty();
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.chunk=_st($ctx1.locals.parser)._nextChunk();
+$ctx1.locals.chunk;
+return _st($ctx1.locals.chunk)._isNil();
+})}))._whileFalse_((function(){
+return smalltalk.withContext(function($ctx2) { 
$1=_st($ctx1.locals.chunk)._isEmpty();
 if(smalltalk.assert($1)){
-lastEmpty=true;
-return lastEmpty;
+$ctx1.locals.lastEmpty=true;
+return $ctx1.locals.lastEmpty;
 } else {
-result=_st(_st((smalltalk.Compiler || Compiler))._new())._evaluateExpression_(chunk);
-result;
-if(smalltalk.assert(lastEmpty)){
-lastEmpty=false;
-lastEmpty;
-return _st(result)._scanFrom_(parser);
+$ctx1.locals.result=_st(_st((smalltalk.Compiler || Compiler))._new())._evaluateExpression_($ctx1.locals.chunk);
+$ctx1.locals.result;
+if(smalltalk.assert($ctx1.locals.lastEmpty)){
+$ctx1.locals.lastEmpty=false;
+$ctx1.locals.lastEmpty;
+return _st($ctx1.locals.result)._scanFrom_($ctx1.locals.parser);
 };
 };
-}));
+})}));
 return self}, self, "import:", [aStream], smalltalk.Importer)}
 }),
 smalltalk.Importer);
@@ -607,12 +607,12 @@ smalltalk.method({
 selector: "initializePackageNamed:prefix:",
 fn: function (packageName,aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 _st(_st(_st((smalltalk.Package || Package))._named_(packageName))._classes())._do_((function(each){
-smalltalk.init(each);
+return smalltalk.withContext(function($ctx2) { 
smalltalk.init(each);
 ;
 return _st(each)._initialize();
-}));
+})}));
 $1=_st((smalltalk.Package || Package))._named_(packageName);
 _st($1)._commitPathJs_(_st(_st("/").__comma(aString)).__comma("/js"));
 $2=_st($1)._commitPathSt_(_st(_st("/").__comma(aString)).__comma("/st"));
@@ -626,17 +626,17 @@ smalltalk.method({
 selector: "loadPackage:prefix:",
 fn: function (packageName,aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var url;
-url=_st(_st(_st(_st("/").__comma(aString)).__comma("/js/")).__comma(packageName)).__comma(".js");
-_st(jQuery)._ajax_options_(url,smalltalk.HashedCollection._fromPairs_([_st("type").__minus_gt("GET"),_st("dataType").__minus_gt("script"),_st("complete").__minus_gt((function(jqXHR,textStatus){
-$1=_st(_st(jqXHR)._readyState()).__eq((4));
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.url=nil;
+$ctx1.locals.url=_st(_st(_st(_st("/").__comma(aString)).__comma("/js/")).__comma(packageName)).__comma(".js");
+_st(jQuery)._ajax_options_($ctx1.locals.url,smalltalk.HashedCollection._fromPairs_([_st("type").__minus_gt("GET"),_st("dataType").__minus_gt("script"),_st("complete").__minus_gt((function(jqXHR,textStatus){
+return smalltalk.withContext(function($ctx2) { 
$1=_st(_st(jqXHR)._readyState()).__eq((4));
 if(smalltalk.assert($1)){
 return _st(self)._initializePackageNamed_prefix_(packageName,aString);
 };
-})),_st("error").__minus_gt((function(){
-return _st(window)._alert_(_st("Could not load package at:  ").__comma(url));
-}))]));
+})})),_st("error").__minus_gt((function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(window)._alert_(_st("Could not load package at:  ").__comma($ctx1.locals.url));
+})}))]));
 return self}, self, "loadPackage:prefix:", [packageName,aString], smalltalk.PackageLoader)}
 }),
 smalltalk.PackageLoader);
@@ -647,9 +647,9 @@ smalltalk.method({
 selector: "loadPackages:prefix:",
 fn: function (aCollection,aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(aCollection)._do_((function(each){
-return _st(self)._loadPackage_prefix_(each,aString);
-}));
+return smalltalk.withContext(function($ctx1) { 
_st(aCollection)._do_((function(each){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._loadPackage_prefix_(each,aString);
+})}));
 return self}, self, "loadPackages:prefix:", [aCollection,aString], smalltalk.PackageLoader)}
 }),
 smalltalk.PackageLoader);
@@ -661,7 +661,7 @@ smalltalk.method({
 selector: "loadPackages:prefix:",
 fn: function (aCollection,aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._new())._loadPackages_prefix_(aCollection,aString);
 return $1;
 }, self, "loadPackages:prefix:", [aCollection,aString], smalltalk.PackageLoader.klass)}

+ 167 - 167
js/Importer-Exporter.js

@@ -7,30 +7,30 @@ selector: "nextChunk",
 category: 'reading',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3;
 var $early={};
 try {
-var char_;
-var result;
-var chunk;
-result=_st("")._writeStream();
+$ctx1.char=nil;
+$ctx1.result=nil;
+$ctx1.chunk=nil;
+$ctx1.locals.result=_st("")._writeStream();
 _st((function(){
-char_=_st(self["@stream"])._next();
-char_;
-return _st(char_)._notNil();
-}))._whileTrue_((function(){
-$1=_st(char_).__eq("!");
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.char=_st(self["@stream"])._next();
+$ctx1.locals.char;
+return _st($ctx1.locals.char)._notNil();
+})}))._whileTrue_((function(){
+return smalltalk.withContext(function($ctx2) { 
$1=_st($ctx1.locals.char).__eq("!");
 if(smalltalk.assert($1)){
 $2=_st(_st(self["@stream"])._peek()).__eq("!");
 if(smalltalk.assert($2)){
 _st(self["@stream"])._next();
 } else {
-$3=_st(_st(result)._contents())._trimBoth();
+$3=_st(_st($ctx1.locals.result)._contents())._trimBoth();
 throw $early=[$3];
 };
 };
-return _st(result)._nextPut_(char_);
-}));
+return _st($ctx1.locals.result)._nextPut_($ctx1.locals.char);
+})}));
 return nil;
 }
 catch(e) {if(e===$early)return e[0]; throw e}
@@ -49,7 +49,7 @@ selector: "stream:",
 category: 'accessing',
 fn: function (aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@stream"]=aStream;
+return smalltalk.withContext(function($ctx1) { 
self["@stream"]=aStream;
 return self}, self, "stream:", [aStream], smalltalk.ChunkParser)},
 args: ["aStream"],
 source: "stream: aStream\x0a\x09stream := aStream",
@@ -66,7 +66,7 @@ selector: "on:",
 category: 'not yet classified',
 fn: function (aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._new())._stream_(aStream);
 return $1;
 }, self, "on:", [aStream], smalltalk.ChunkParser.klass)},
@@ -86,7 +86,7 @@ selector: "classNameFor:",
 category: 'private',
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st(aClass)._isMetaclass();
 if(smalltalk.assert($2)){
 $1=_st(_st(_st(aClass)._instanceClass())._name()).__comma(".klass");
@@ -114,12 +114,12 @@ selector: "exportAll",
 category: 'fileOut',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st((smalltalk.String || String))._streamContents_((function(stream){
-return _st(_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._packages())._do_((function(pkg){
-return _st(stream)._nextPutAll_(_st(self)._exportPackage_(_st(pkg)._name()));
-}));
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._packages())._do_((function(pkg){
+return smalltalk.withContext(function($ctx3) { 
return _st(stream)._nextPutAll_(_st(self)._exportPackage_(_st(pkg)._name()));
+})}));
+})}));
 return $1;
 }, self, "exportAll", [], smalltalk.Exporter)},
 args: [],
@@ -136,13 +136,13 @@ selector: "exportClass:",
 category: 'fileOut',
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st((smalltalk.String || String))._streamContents_((function(stream){
-_st(self)._exportDefinitionOf_on_(aClass,stream);
+return smalltalk.withContext(function($ctx2) { 
_st(self)._exportDefinitionOf_on_(aClass,stream);
 _st(self)._exportMethodsOf_on_(aClass,stream);
 _st(self)._exportMetaDefinitionOf_on_(aClass,stream);
 return _st(self)._exportMethodsOf_on_(_st(aClass)._class(),stream);
-}));
+})}));
 return $1;
 }, self, "exportClass:", [aClass], smalltalk.Exporter)},
 args: ["aClass"],
@@ -159,16 +159,16 @@ selector: "exportDefinitionOf:on:",
 category: 'private',
 fn: function (aClass,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3,$4;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3,$4;
 _st(aStream)._nextPutAll_("smalltalk.addClass(");
 _st(aStream)._nextPutAll_(_st(_st("'").__comma(_st(self)._classNameFor_(aClass))).__comma("', "));
 _st(aStream)._nextPutAll_(_st("smalltalk.").__comma(_st(self)._classNameFor_(_st(aClass)._superclass())));
 $1=_st(aStream)._nextPutAll_(", [");
 _st(_st(aClass)._instanceVariableNames())._do_separatedBy_((function(each){
-return _st(aStream)._nextPutAll_(_st(_st("'").__comma(each)).__comma("'"));
-}),(function(){
-return _st(aStream)._nextPutAll_(", ");
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(aStream)._nextPutAll_(_st(_st("'").__comma(each)).__comma("'"));
+})}),(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(aStream)._nextPutAll_(", ");
+})}));
 _st(aStream)._nextPutAll_("], '");
 _st(aStream)._nextPutAll_(_st(_st(aClass)._category()).__comma("'"));
 $2=_st(aStream)._nextPutAll_(");");
@@ -197,17 +197,17 @@ selector: "exportMetaDefinitionOf:on:",
 category: 'private',
 fn: function (aClass,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 $1=_st(_st(_st(aClass)._class())._instanceVariableNames())._isEmpty();
 if(! smalltalk.assert($1)){
 _st(aStream)._nextPutAll_(_st("smalltalk.").__comma(_st(self)._classNameFor_(_st(aClass)._class())));
 $2=_st(aStream)._nextPutAll_(".iVarNames = [");
 $2;
 _st(_st(_st(aClass)._class())._instanceVariableNames())._do_separatedBy_((function(each){
-return _st(aStream)._nextPutAll_(_st(_st("'").__comma(each)).__comma("'"));
-}),(function(){
-return _st(aStream)._nextPutAll_(",");
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(aStream)._nextPutAll_(_st(_st("'").__comma(each)).__comma("'"));
+})}),(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(aStream)._nextPutAll_(",");
+})}));
 _st(aStream)._nextPutAll_(_st("];").__comma(_st((smalltalk.String || String))._lf()));
 };
 return self}, self, "exportMetaDefinitionOf:on:", [aClass,aStream], smalltalk.Exporter)},
@@ -225,7 +225,7 @@ selector: "exportMethod:of:on:",
 category: 'private',
 fn: function (aMethod,aClass,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 _st(aStream)._nextPutAll_("smalltalk.addMethod(");
 _st(aStream)._lf();
 _st(aStream)._nextPutAll_(_st(_st(_st(_st(aMethod)._selector())._asSelector())._asJavascript()).__comma(","));
@@ -267,15 +267,15 @@ selector: "exportMethodsOf:on:",
 category: 'private',
 fn: function (aClass,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(_st(_st(_st(aClass)._methodDictionary())._values())._sorted_((function(a,b){
-return _st(_st(a)._selector()).__lt_eq(_st(b)._selector());
-})))._do_((function(each){
-$1=_st(_st(each)._category())._match_("^\x5c*");
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(a)._selector()).__lt_eq(_st(b)._selector());
+})})))._do_((function(each){
+return smalltalk.withContext(function($ctx2) { 
$1=_st(_st(each)._category())._match_("^\x5c*");
 if(! smalltalk.assert($1)){
 return _st(self)._exportMethod_of_on_(each,aClass,aStream);
 };
-}));
+})}));
 _st(aStream)._lf();
 return self}, self, "exportMethodsOf:on:", [aClass,aStream], smalltalk.Exporter)},
 args: ["aClass", "aStream"],
@@ -292,17 +292,17 @@ selector: "exportPackage:",
 category: 'fileOut',
 fn: function (packageName){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var package;
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.package=nil;
 $1=_st((smalltalk.String || String))._streamContents_((function(stream){
-package=_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._packageAt_(packageName);
-package;
-_st(self)._exportPackageDefinitionOf_on_(package,stream);
-_st(_st(_st(package)._sortedClasses())._asSet())._do_((function(each){
-return _st(stream)._nextPutAll_(_st(self)._exportClass_(each));
-}));
-return _st(self)._exportPackageExtensionsOf_on_(package,stream);
-}));
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.package_=_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._packageAt_(packageName);
+$ctx1.locals.package_;
+_st(self)._exportPackageDefinitionOf_on_($ctx1.locals.package_,stream);
+_st(_st(_st($ctx1.locals.package_)._sortedClasses())._asSet())._do_((function(each){
+return smalltalk.withContext(function($ctx3) { 
return _st(stream)._nextPutAll_(_st(self)._exportClass_(each));
+})}));
+return _st(self)._exportPackageExtensionsOf_on_($ctx1.locals.package_,stream);
+})}));
 return $1;
 }, self, "exportPackage:", [packageName], smalltalk.Exporter)},
 args: ["packageName"],
@@ -317,13 +317,13 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "exportPackageDefinitionOf:on:",
 category: 'private',
-fn: function (package,aStream){
+fn: function (package_,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(aStream)._nextPutAll_("smalltalk.addPackage(");
-$1=_st(aStream)._nextPutAll_(_st(_st(_st(_st("'").__comma(_st(package)._name())).__comma("', ")).__comma(_st(package)._propertiesAsJSON())).__comma(");"));
+$1=_st(aStream)._nextPutAll_(_st(_st(_st(_st("'").__comma(_st(package_)._name())).__comma("', ")).__comma(_st(package_)._propertiesAsJSON())).__comma(");"));
 _st(aStream)._lf();
-return self}, self, "exportPackageDefinitionOf:on:", [package,aStream], smalltalk.Exporter)},
+return self}, self, "exportPackageDefinitionOf:on:", [package_,aStream], smalltalk.Exporter)},
 args: ["package", "aStream"],
 source: "exportPackageDefinitionOf: package on: aStream\x0a\x09aStream \x0a\x09    nextPutAll: 'smalltalk.addPackage(';\x0a\x09    nextPutAll: '''', package name, ''', ', package propertiesAsJSON , ');'.\x0a\x09aStream lf",
 messageSends: ["nextPutAll:", ",", "propertiesAsJSON", "name", "lf"],
@@ -336,24 +336,24 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "exportPackageExtensionsOf:on:",
 category: 'private',
-fn: function (package,aStream){
+fn: function (package_,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var name;
-name=_st(package)._name();
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.name=nil;
+$ctx1.locals.name=_st(package_)._name();
 _st(_st((smalltalk.Package || Package))._sortedClasses_(_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._classes()))._do_((function(each){
-return _st([each,_st(each)._class()])._do_((function(aClass){
-return _st(_st(_st(_st(aClass)._methodDictionary())._values())._sorted_((function(a,b){
-return _st(_st(a)._selector()).__lt_eq(_st(b)._selector());
-})))._do_((function(method){
-$1=_st(_st(method)._category())._match_(_st("^\x5c*").__comma(name));
+return smalltalk.withContext(function($ctx2) { 
return _st([each,_st(each)._class()])._do_((function(aClass){
+return smalltalk.withContext(function($ctx3) { 
return _st(_st(_st(_st(aClass)._methodDictionary())._values())._sorted_((function(a,b){
+return smalltalk.withContext(function($ctx4) { 
return _st(_st(a)._selector()).__lt_eq(_st(b)._selector());
+})})))._do_((function(method){
+return smalltalk.withContext(function($ctx4) { 
$1=_st(_st(method)._category())._match_(_st("^\x5c*").__comma($ctx1.locals.name));
 if(smalltalk.assert($1)){
 return _st(self)._exportMethod_of_on_(method,aClass,aStream);
 };
-}));
-}));
-}));
-return self}, self, "exportPackageExtensionsOf:on:", [package,aStream], smalltalk.Exporter)},
+})}));
+})}));
+})}));
+return self}, self, "exportPackageExtensionsOf:on:", [package_,aStream], smalltalk.Exporter)},
 args: ["package", "aStream"],
 source: "exportPackageExtensionsOf: package on: aStream\x0a\x09\x22Issue #143: sort classes and methods alphabetically\x22\x0a\x0a\x09| name |\x0a\x09name := package name.\x0a\x09(Package sortedClasses: Smalltalk current classes) do: [:each |\x0a\x09\x09{each. each class} do: [:aClass | \x0a\x09\x09\x09((aClass methodDictionary values) sorted: [:a :b | a selector <= b selector]) do: [:method |\x0a\x09\x09\x09\x09(method category match: '^\x5c*', name) ifTrue: [\x0a\x09\x09\x09\x09\x09self exportMethod: method of: aClass on: aStream ]]]]",
 messageSends: ["name", "do:", "ifTrue:", "exportMethod:of:on:", "match:", ",", "category", "sorted:", "<=", "selector", "values", "methodDictionary", "class", "sortedClasses:", "classes", "current"],
@@ -371,7 +371,7 @@ selector: "chunkEscape:",
 category: 'not yet classified',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(aString)._replace_with_("!","!!"))._trimBoth();
 return $1;
 }, self, "chunkEscape:", [aString], smalltalk.ChunkExporter)},
@@ -389,7 +389,7 @@ selector: "classNameFor:",
 category: 'not yet classified',
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st(aClass)._isMetaclass();
 if(smalltalk.assert($2)){
 $1=_st(_st(_st(aClass)._instanceClass())._name()).__comma(" class");
@@ -417,16 +417,16 @@ selector: "exportDefinitionOf:on:",
 category: 'not yet classified',
 fn: function (aClass,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3,$4;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3,$4;
 _st(aStream)._nextPutAll_(_st(self)._classNameFor_(_st(aClass)._superclass()));
 _st(aStream)._nextPutAll_(_st(" subclass: #").__comma(_st(self)._classNameFor_(aClass)));
 _st(aStream)._lf();
 $1=_st(aStream)._nextPutAll_("\x09instanceVariableNames: '");
 _st(_st(aClass)._instanceVariableNames())._do_separatedBy_((function(each){
-return _st(aStream)._nextPutAll_(each);
-}),(function(){
-return _st(aStream)._nextPutAll_(" ");
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(aStream)._nextPutAll_(each);
+})}),(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(aStream)._nextPutAll_(" ");
+})}));
 _st(aStream)._nextPutAll_("'");
 _st(aStream)._lf();
 _st(aStream)._nextPutAll_(_st(_st("\x09package: '").__comma(_st(aClass)._category())).__comma("'!"));
@@ -455,17 +455,17 @@ selector: "exportMetaDefinitionOf:on:",
 category: 'not yet classified',
 fn: function (aClass,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3;
 $1=_st(_st(_st(aClass)._class())._instanceVariableNames())._isEmpty();
 if(! smalltalk.assert($1)){
 _st(aStream)._nextPutAll_(_st(self)._classNameFor_(_st(aClass)._class()));
 $2=_st(aStream)._nextPutAll_(" instanceVariableNames: '");
 $2;
 _st(_st(_st(aClass)._class())._instanceVariableNames())._do_separatedBy_((function(each){
-return _st(aStream)._nextPutAll_(each);
-}),(function(){
-return _st(aStream)._nextPutAll_(" ");
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(aStream)._nextPutAll_(each);
+})}),(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(aStream)._nextPutAll_(" ");
+})}));
 _st(aStream)._nextPutAll_("'!");
 _st(aStream)._lf();
 $3=_st(aStream)._lf();
@@ -486,7 +486,7 @@ selector: "exportMethod:of:on:",
 category: 'not yet classified',
 fn: function (aMethod,aClass,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(aStream)._lf();
 _st(aStream)._lf();
 _st(aStream)._nextPutAll_(_st(self)._chunkEscape_(_st(aMethod)._source()));
@@ -507,14 +507,14 @@ selector: "exportMethods:category:of:on:",
 category: 'not yet classified',
 fn: function (methods,category,aClass,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 _st(aStream)._nextPutAll_(_st("!").__comma(_st(self)._classNameFor_(aClass)));
 $1=_st(aStream)._nextPutAll_(_st(_st(" methodsFor: '").__comma(category)).__comma("'!"));
 _st(_st(methods)._sorted_((function(a,b){
-return _st(_st(a)._selector()).__lt_eq(_st(b)._selector());
-})))._do_((function(each){
-return _st(self)._exportMethod_of_on_(each,aClass,aStream);
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(a)._selector()).__lt_eq(_st(b)._selector());
+})})))._do_((function(each){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._exportMethod_of_on_(each,aClass,aStream);
+})}));
 _st(aStream)._nextPutAll_(" !");
 _st(aStream)._lf();
 $2=_st(aStream)._lf();
@@ -533,23 +533,23 @@ selector: "exportMethodsOf:on:",
 category: 'not yet classified',
 fn: function (aClass,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var map;
-map=_st((smalltalk.Dictionary || Dictionary))._new();
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.map=nil;
+$ctx1.locals.map=_st((smalltalk.Dictionary || Dictionary))._new();
 _st(aClass)._protocolsDo_((function(category,methods){
-$1=_st(category)._match_("^\x5c*");
+return smalltalk.withContext(function($ctx2) { 
$1=_st(category)._match_("^\x5c*");
 if(! smalltalk.assert($1)){
-return _st(map)._at_put_(category,methods);
+return _st($ctx1.locals.map)._at_put_(category,methods);
 };
-}));
-_st(_st(_st(map)._keys())._sorted_((function(a,b){
-return _st(a).__lt_eq(b);
-})))._do_((function(category){
-var methods;
-methods=_st(map)._at_(category);
-methods;
-return _st(self)._exportMethods_category_of_on_(methods,category,aClass,aStream);
-}));
+})}));
+_st(_st(_st($ctx1.locals.map)._keys())._sorted_((function(a,b){
+return smalltalk.withContext(function($ctx2) { 
return _st(a).__lt_eq(b);
+})})))._do_((function(category){
+return smalltalk.withContext(function($ctx2) { 
$ctx2.methods=nil;
+$ctx2.locals.methods=_st($ctx1.locals.map)._at_(category);
+$ctx2.locals.methods;
+return _st(self)._exportMethods_category_of_on_($ctx2.locals.methods,category,aClass,aStream);
+})}));
 return self}, self, "exportMethodsOf:on:", [aClass,aStream], smalltalk.ChunkExporter)},
 args: ["aClass", "aStream"],
 source: "exportMethodsOf: aClass on: aStream\x0a\x09\x22Issue #143: sort protocol alphabetically\x22\x0a\x0a\x09| map |\x0a\x09map := Dictionary new.\x0a\x09aClass protocolsDo: [:category :methods | \x0a\x09\x09(category match: '^\x5c*') ifFalse: [ map at: category put: methods ]].\x0a\x09(map keys sorted: [:a :b | a <= b ]) do: [:category | | methods |\x0a\x09\x09methods := map at: category.\x0a\x09\x09self\x0a\x09\x09\x09exportMethods: methods\x0a\x09\x09\x09category: category\x0a\x09\x09\x09of: aClass\x0a\x09\x09\x09on: aStream ]",
@@ -563,12 +563,12 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "exportPackageDefinitionOf:on:",
 category: 'not yet classified',
-fn: function (package,aStream){
+fn: function (package_,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-_st(aStream)._nextPutAll_(_st(_st(_st(_st("Smalltalk current createPackage: '").__comma(_st(package)._name())).__comma("' properties: ")).__comma(_st(_st(package)._properties())._storeString())).__comma("!"));
+return smalltalk.withContext(function($ctx1) { 
var $1;
+_st(aStream)._nextPutAll_(_st(_st(_st(_st("Smalltalk current createPackage: '").__comma(_st(package_)._name())).__comma("' properties: ")).__comma(_st(_st(package_)._properties())._storeString())).__comma("!"));
 $1=_st(aStream)._lf();
-return self}, self, "exportPackageDefinitionOf:on:", [package,aStream], smalltalk.ChunkExporter)},
+return self}, self, "exportPackageDefinitionOf:on:", [package_,aStream], smalltalk.ChunkExporter)},
 args: ["package", "aStream"],
 source: "exportPackageDefinitionOf: package on: aStream\x0a\x09\x22Chunk format.\x22\x0a\x0a\x09aStream \x0a\x09    nextPutAll: 'Smalltalk current createPackage: ''', package name,\x0a\x09\x09''' properties: ', package properties storeString, '!'; lf.",
 messageSends: ["nextPutAll:", ",", "storeString", "properties", "name", "lf"],
@@ -581,33 +581,33 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "exportPackageExtensionsOf:on:",
 category: 'not yet classified',
-fn: function (package,aStream){
+fn: function (package_,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var name;
-var map;
-name=_st(package)._name();
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.name=nil;
+$ctx1.map=nil;
+$ctx1.locals.name=_st(package_)._name();
 _st(_st((smalltalk.Package || Package))._sortedClasses_(_st(_st((smalltalk.Smalltalk || Smalltalk))._current())._classes()))._do_((function(each){
-return _st([each,_st(each)._class()])._do_((function(aClass){
-map=_st((smalltalk.Dictionary || Dictionary))._new();
-map;
+return smalltalk.withContext(function($ctx2) { 
return _st([each,_st(each)._class()])._do_((function(aClass){
+return smalltalk.withContext(function($ctx3) { 
$ctx1.locals.map=_st((smalltalk.Dictionary || Dictionary))._new();
+$ctx1.locals.map;
 _st(aClass)._protocolsDo_((function(category,methods){
-$1=_st(category)._match_(_st("^\x5c*").__comma(name));
+return smalltalk.withContext(function($ctx4) { 
$1=_st(category)._match_(_st("^\x5c*").__comma($ctx1.locals.name));
 if(smalltalk.assert($1)){
-return _st(map)._at_put_(category,methods);
+return _st($ctx1.locals.map)._at_put_(category,methods);
 };
-}));
-return _st(_st(_st(map)._keys())._sorted_((function(a,b){
-return _st(a).__lt_eq(b);
-})))._do_((function(category){
-var methods;
-methods=_st(map)._at_(category);
-methods;
-return _st(self)._exportMethods_category_of_on_(methods,category,aClass,aStream);
-}));
-}));
-}));
-return self}, self, "exportPackageExtensionsOf:on:", [package,aStream], smalltalk.ChunkExporter)},
+})}));
+return _st(_st(_st($ctx1.locals.map)._keys())._sorted_((function(a,b){
+return smalltalk.withContext(function($ctx4) { 
return _st(a).__lt_eq(b);
+})})))._do_((function(category){
+return smalltalk.withContext(function($ctx4) { 
$ctx4.methods=nil;
+$ctx4.locals.methods=_st($ctx1.locals.map)._at_(category);
+$ctx4.locals.methods;
+return _st(self)._exportMethods_category_of_on_($ctx4.locals.methods,category,aClass,aStream);
+})}));
+})}));
+})}));
+return self}, self, "exportPackageExtensionsOf:on:", [package_,aStream], smalltalk.ChunkExporter)},
 args: ["package", "aStream"],
 source: "exportPackageExtensionsOf: package on: aStream\x0a\x09\x22We need to override this one too since we need to group\x0a\x09all methods in a given protocol under a leading methodsFor: chunk\x0a\x09for that class.\x22\x0a\x0a\x09\x22Issue #143: sort protocol alphabetically\x22\x0a\x0a\x09| name map |\x0a\x09name := package name.\x0a\x09(Package sortedClasses: Smalltalk current classes) do: [:each |\x0a\x09\x09{each. each class} do: [:aClass |\x0a\x09\x09\x09map := Dictionary new.\x0a\x09\x09\x09aClass protocolsDo: [:category :methods | \x0a\x09\x09\x09\x09(category match: '^\x5c*', name) ifTrue: [ map at: category put: methods ]].\x0a\x09\x09\x09(map keys sorted: [:a :b | a <= b ]) do: [:category | | methods |\x0a\x09\x09\x09\x09methods := map at: category.\x09\x0a\x09\x09\x09\x09self exportMethods: methods category: category of: aClass on: aStream ]]]",
 messageSends: ["name", "do:", "new", "protocolsDo:", "ifTrue:", "at:put:", "match:", ",", "at:", "exportMethods:category:of:on:", "sorted:", "<=", "keys", "class", "sortedClasses:", "classes", "current"],
@@ -625,16 +625,16 @@ selector: "exportDefinitionOf:on:",
 category: 'private',
 fn: function (aClass,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 _st(aStream)._nextPutAll_("smalltalk.addClass(");
 _st(aStream)._nextPutAll_(_st(_st("'").__comma(_st(self)._classNameFor_(aClass))).__comma("', "));
 _st(aStream)._nextPutAll_(_st("smalltalk.").__comma(_st(self)._classNameFor_(_st(aClass)._superclass())));
 $1=_st(aStream)._nextPutAll_(", [");
 _st(_st(aClass)._instanceVariableNames())._do_separatedBy_((function(each){
-return _st(aStream)._nextPutAll_(_st(_st("'").__comma(each)).__comma("'"));
-}),(function(){
-return _st(aStream)._nextPutAll_(", ");
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(aStream)._nextPutAll_(_st(_st("'").__comma(each)).__comma("'"));
+})}),(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(aStream)._nextPutAll_(", ");
+})}));
 _st(aStream)._nextPutAll_("], '");
 _st(aStream)._nextPutAll_(_st(_st(aClass)._category()).__comma("'"));
 $2=_st(aStream)._nextPutAll_(");");
@@ -654,7 +654,7 @@ selector: "exportMethod:of:on:",
 category: 'private',
 fn: function (aMethod,aClass,aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(aStream)._nextPutAll_("smalltalk.addMethod(");
 _st(aStream)._lf();
 _st(aStream)._nextPutAll_(_st(_st(_st(_st(aMethod)._selector())._asSelector())._asJavascript()).__comma(","));
@@ -689,32 +689,32 @@ selector: "import:",
 category: 'fileIn',
 fn: function (aStream){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var chunk;
-var result;
-var parser;
-var lastEmpty;
-parser=_st((smalltalk.ChunkParser || ChunkParser))._on_(aStream);
-lastEmpty=false;
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.chunk=nil;
+$ctx1.result=nil;
+$ctx1.parser=nil;
+$ctx1.lastEmpty=nil;
+$ctx1.locals.parser=_st((smalltalk.ChunkParser || ChunkParser))._on_(aStream);
+$ctx1.locals.lastEmpty=false;
 _st((function(){
-chunk=_st(parser)._nextChunk();
-chunk;
-return _st(chunk)._isNil();
-}))._whileFalse_((function(){
-$1=_st(chunk)._isEmpty();
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.chunk=_st($ctx1.locals.parser)._nextChunk();
+$ctx1.locals.chunk;
+return _st($ctx1.locals.chunk)._isNil();
+})}))._whileFalse_((function(){
+return smalltalk.withContext(function($ctx2) { 
$1=_st($ctx1.locals.chunk)._isEmpty();
 if(smalltalk.assert($1)){
-lastEmpty=true;
-return lastEmpty;
+$ctx1.locals.lastEmpty=true;
+return $ctx1.locals.lastEmpty;
 } else {
-result=_st(_st((smalltalk.Compiler || Compiler))._new())._evaluateExpression_(chunk);
-result;
-if(smalltalk.assert(lastEmpty)){
-lastEmpty=false;
-lastEmpty;
-return _st(result)._scanFrom_(parser);
+$ctx1.locals.result=_st(_st((smalltalk.Compiler || Compiler))._new())._evaluateExpression_($ctx1.locals.chunk);
+$ctx1.locals.result;
+if(smalltalk.assert($ctx1.locals.lastEmpty)){
+$ctx1.locals.lastEmpty=false;
+$ctx1.locals.lastEmpty;
+return _st($ctx1.locals.result)._scanFrom_($ctx1.locals.parser);
 };
 };
-}));
+})}));
 return self}, self, "import:", [aStream], smalltalk.Importer)},
 args: ["aStream"],
 source: "import: aStream\x0a    | chunk result parser lastEmpty |\x0a    parser := ChunkParser on: aStream.\x0a    lastEmpty := false.\x0a    [chunk := parser nextChunk.\x0a     chunk isNil] whileFalse: [\x0a        chunk isEmpty\x0a       \x09\x09ifTrue: [lastEmpty := true]\x0a       \x09\x09ifFalse: [\x0a        \x09\x09result := Compiler new evaluateExpression: chunk.\x0a        \x09\x09lastEmpty \x0a            \x09\x09\x09ifTrue: [\x0a                                  \x09lastEmpty := false.\x0a                                  \x09result scanFrom: parser]]]",
@@ -733,12 +733,12 @@ selector: "initializePackageNamed:prefix:",
 category: 'not yet classified',
 fn: function (packageName,aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 _st(_st(_st((smalltalk.Package || Package))._named_(packageName))._classes())._do_((function(each){
-smalltalk.init(each);
+return smalltalk.withContext(function($ctx2) { 
smalltalk.init(each);
 ;
 return _st(each)._initialize();
-}));
+})}));
 $1=_st((smalltalk.Package || Package))._named_(packageName);
 _st($1)._commitPathJs_(_st(_st("/").__comma(aString)).__comma("/js"));
 $2=_st($1)._commitPathSt_(_st(_st("/").__comma(aString)).__comma("/st"));
@@ -757,17 +757,17 @@ selector: "loadPackage:prefix:",
 category: 'not yet classified',
 fn: function (packageName,aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var url;
-url=_st(_st(_st(_st("/").__comma(aString)).__comma("/js/")).__comma(packageName)).__comma(".js");
-_st(jQuery)._ajax_options_(url,smalltalk.HashedCollection._fromPairs_([_st("type").__minus_gt("GET"),_st("dataType").__minus_gt("script"),_st("complete").__minus_gt((function(jqXHR,textStatus){
-$1=_st(_st(jqXHR)._readyState()).__eq((4));
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.url=nil;
+$ctx1.locals.url=_st(_st(_st(_st("/").__comma(aString)).__comma("/js/")).__comma(packageName)).__comma(".js");
+_st(jQuery)._ajax_options_($ctx1.locals.url,smalltalk.HashedCollection._fromPairs_([_st("type").__minus_gt("GET"),_st("dataType").__minus_gt("script"),_st("complete").__minus_gt((function(jqXHR,textStatus){
+return smalltalk.withContext(function($ctx2) { 
$1=_st(_st(jqXHR)._readyState()).__eq((4));
 if(smalltalk.assert($1)){
 return _st(self)._initializePackageNamed_prefix_(packageName,aString);
 };
-})),_st("error").__minus_gt((function(){
-return _st(window)._alert_(_st("Could not load package at:  ").__comma(url));
-}))]));
+})})),_st("error").__minus_gt((function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(window)._alert_(_st("Could not load package at:  ").__comma($ctx1.locals.url));
+})}))]));
 return self}, self, "loadPackage:prefix:", [packageName,aString], smalltalk.PackageLoader)},
 args: ["packageName", "aString"],
 source: "loadPackage: packageName prefix: aString\x09\x0a\x09| url |\x0a    url := '/', aString, '/js/', packageName, '.js'.\x0a\x09jQuery \x0a\x09\x09ajax: url\x0a        options: #{\x0a\x09\x09\x09'type' -> 'GET'.\x0a\x09\x09\x09'dataType' -> 'script'.\x0a    \x09\x09'complete' -> [ :jqXHR :textStatus | \x0a\x09\x09\x09\x09jqXHR readyState = 4 \x0a                \x09ifTrue: [ self initializePackageNamed: packageName prefix: aString ] ].\x0a\x09\x09\x09'error' -> [ window alert: 'Could not load package at:  ', url ]\x0a\x09\x09}",
@@ -783,9 +783,9 @@ selector: "loadPackages:prefix:",
 category: 'not yet classified',
 fn: function (aCollection,aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(aCollection)._do_((function(each){
-return _st(self)._loadPackage_prefix_(each,aString);
-}));
+return smalltalk.withContext(function($ctx1) { 
_st(aCollection)._do_((function(each){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._loadPackage_prefix_(each,aString);
+})}));
 return self}, self, "loadPackages:prefix:", [aCollection,aString], smalltalk.PackageLoader)},
 args: ["aCollection", "aString"],
 source: "loadPackages: aCollection prefix: aString\x0a\x09aCollection do: [ :each |\x0a    \x09self loadPackage: each prefix: aString ]",
@@ -802,7 +802,7 @@ selector: "loadPackages:prefix:",
 category: 'not yet classified',
 fn: function (aCollection,aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._new())._loadPackages_prefix_(aCollection,aString);
 return $1;
 }, self, "loadPackages:prefix:", [aCollection,aString], smalltalk.PackageLoader.klass)},

+ 17 - 17
js/Kernel-Announcements.deploy.js

@@ -6,7 +6,7 @@ smalltalk.method({
 selector: "announcementClass",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@announcementClass"];
+return smalltalk.withContext(function($ctx1) { 
return self["@announcementClass"];
 }, self, "announcementClass", [], smalltalk.AnnouncementSubscription)}
 }),
 smalltalk.AnnouncementSubscription);
@@ -17,7 +17,7 @@ smalltalk.method({
 selector: "announcementClass:",
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@announcementClass"]=aClass;
+return smalltalk.withContext(function($ctx1) { 
self["@announcementClass"]=aClass;
 return self}, self, "announcementClass:", [aClass], smalltalk.AnnouncementSubscription)}
 }),
 smalltalk.AnnouncementSubscription);
@@ -28,7 +28,7 @@ smalltalk.method({
 selector: "block",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@block"];
+return smalltalk.withContext(function($ctx1) { 
return self["@block"];
 }, self, "block", [], smalltalk.AnnouncementSubscription)}
 }),
 smalltalk.AnnouncementSubscription);
@@ -39,7 +39,7 @@ smalltalk.method({
 selector: "block:",
 fn: function (aBlock){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@block"]=aBlock;
+return smalltalk.withContext(function($ctx1) { 
self["@block"]=aBlock;
 return self}, self, "block:", [aBlock], smalltalk.AnnouncementSubscription)}
 }),
 smalltalk.AnnouncementSubscription);
@@ -50,7 +50,7 @@ smalltalk.method({
 selector: "deliver:",
 fn: function (anAnnouncement){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._handlesAnnouncement_(anAnnouncement);
 if(smalltalk.assert($1)){
 _st(_st(self)._block())._value_(anAnnouncement);
@@ -65,7 +65,7 @@ smalltalk.method({
 selector: "handlesAnnouncement:",
 fn: function (anAnnouncement){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(anAnnouncement)._isKindOf_(_st(self)._announcementClass());
 return $1;
 }, self, "handlesAnnouncement:", [anAnnouncement], smalltalk.AnnouncementSubscription)}
@@ -81,9 +81,9 @@ smalltalk.method({
 selector: "announce:",
 fn: function (anAnnouncement){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self["@subscriptions"])._do_((function(each){
-return _st(each)._deliver_(anAnnouncement);
-}));
+return smalltalk.withContext(function($ctx1) { 
_st(self["@subscriptions"])._do_((function(each){
+return smalltalk.withContext(function($ctx2) { 
return _st(each)._deliver_(anAnnouncement);
+})}));
 return self}, self, "announce:", [anAnnouncement], smalltalk.Announcer)}
 }),
 smalltalk.Announcer);
@@ -94,7 +94,7 @@ smalltalk.method({
 selector: "initialize",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { smalltalk.Object.fn.prototype._initialize.apply(_st(self), []);
+return smalltalk.withContext(function($ctx1) { 
smalltalk.Object.fn.prototype._initialize.apply(_st(self), []);
 self["@subscriptions"]=_st((smalltalk.Array || Array))._new();
 return self}, self, "initialize", [], smalltalk.Announcer)}
 }),
@@ -106,7 +106,7 @@ smalltalk.method({
 selector: "on:do:",
 fn: function (aClass,aBlock){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 $1=_st((smalltalk.AnnouncementSubscription || AnnouncementSubscription))._new();
 _st($1)._block_(aBlock);
 _st($1)._announcementClass_(aClass);
@@ -127,7 +127,7 @@ smalltalk.method({
 selector: "current",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@current"]) == nil || $receiver == undefined){
 self["@current"]=smalltalk.Announcer.klass.fn.prototype._new.apply(_st(self), []);
 $1=self["@current"];
@@ -145,7 +145,7 @@ smalltalk.method({
 selector: "new",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._shouldNotImplement();
+return smalltalk.withContext(function($ctx1) { 
_st(self)._shouldNotImplement();
 return self}, self, "new", [], smalltalk.SystemAnnouncer.klass)}
 }),
 smalltalk.SystemAnnouncer.klass);
@@ -158,7 +158,7 @@ smalltalk.method({
 selector: "theClass",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@theClass"];
+return smalltalk.withContext(function($ctx1) { 
return self["@theClass"];
 }, self, "theClass", [], smalltalk.SystemAnnouncement)}
 }),
 smalltalk.SystemAnnouncement);
@@ -169,7 +169,7 @@ smalltalk.method({
 selector: "theClass:",
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@theClass"]=aClass;
+return smalltalk.withContext(function($ctx1) { 
self["@theClass"]=aClass;
 return self}, self, "theClass:", [aClass], smalltalk.SystemAnnouncement)}
 }),
 smalltalk.SystemAnnouncement);
@@ -198,7 +198,7 @@ smalltalk.method({
 selector: "method",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@method"];
+return smalltalk.withContext(function($ctx1) { 
return self["@method"];
 }, self, "method", [], smalltalk.MethodAnnouncement)}
 }),
 smalltalk.MethodAnnouncement);
@@ -209,7 +209,7 @@ smalltalk.method({
 selector: "method:",
 fn: function (aCompiledMethod){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@method"]=aCompiledMethod;
+return smalltalk.withContext(function($ctx1) { 
self["@method"]=aCompiledMethod;
 return self}, self, "method:", [aCompiledMethod], smalltalk.MethodAnnouncement)}
 }),
 smalltalk.MethodAnnouncement);

+ 17 - 17
js/Kernel-Announcements.js

@@ -7,7 +7,7 @@ selector: "announcementClass",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@announcementClass"];
+return smalltalk.withContext(function($ctx1) { 
return self["@announcementClass"];
 }, self, "announcementClass", [], smalltalk.AnnouncementSubscription)},
 args: [],
 source: "announcementClass\x0a\x09^announcementClass",
@@ -23,7 +23,7 @@ selector: "announcementClass:",
 category: 'accessing',
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@announcementClass"]=aClass;
+return smalltalk.withContext(function($ctx1) { 
self["@announcementClass"]=aClass;
 return self}, self, "announcementClass:", [aClass], smalltalk.AnnouncementSubscription)},
 args: ["aClass"],
 source: "announcementClass: aClass\x0a\x09announcementClass := aClass",
@@ -39,7 +39,7 @@ selector: "block",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@block"];
+return smalltalk.withContext(function($ctx1) { 
return self["@block"];
 }, self, "block", [], smalltalk.AnnouncementSubscription)},
 args: [],
 source: "block\x0a\x09^block",
@@ -55,7 +55,7 @@ selector: "block:",
 category: 'accessing',
 fn: function (aBlock){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@block"]=aBlock;
+return smalltalk.withContext(function($ctx1) { 
self["@block"]=aBlock;
 return self}, self, "block:", [aBlock], smalltalk.AnnouncementSubscription)},
 args: ["aBlock"],
 source: "block: aBlock\x0a\x09block := aBlock",
@@ -71,7 +71,7 @@ selector: "deliver:",
 category: 'announcing',
 fn: function (anAnnouncement){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._handlesAnnouncement_(anAnnouncement);
 if(smalltalk.assert($1)){
 _st(_st(self)._block())._value_(anAnnouncement);
@@ -91,7 +91,7 @@ selector: "handlesAnnouncement:",
 category: 'announcing',
 fn: function (anAnnouncement){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(anAnnouncement)._isKindOf_(_st(self)._announcementClass());
 return $1;
 }, self, "handlesAnnouncement:", [anAnnouncement], smalltalk.AnnouncementSubscription)},
@@ -112,9 +112,9 @@ selector: "announce:",
 category: 'announcing',
 fn: function (anAnnouncement){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self["@subscriptions"])._do_((function(each){
-return _st(each)._deliver_(anAnnouncement);
-}));
+return smalltalk.withContext(function($ctx1) { 
_st(self["@subscriptions"])._do_((function(each){
+return smalltalk.withContext(function($ctx2) { 
return _st(each)._deliver_(anAnnouncement);
+})}));
 return self}, self, "announce:", [anAnnouncement], smalltalk.Announcer)},
 args: ["anAnnouncement"],
 source: "announce: anAnnouncement\x0a\x09subscriptions do: [:each |\x0a\x09\x09each deliver: anAnnouncement]",
@@ -130,7 +130,7 @@ selector: "initialize",
 category: 'initialization',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { smalltalk.Object.fn.prototype._initialize.apply(_st(self), []);
+return smalltalk.withContext(function($ctx1) { 
smalltalk.Object.fn.prototype._initialize.apply(_st(self), []);
 self["@subscriptions"]=_st((smalltalk.Array || Array))._new();
 return self}, self, "initialize", [], smalltalk.Announcer)},
 args: [],
@@ -147,7 +147,7 @@ selector: "on:do:",
 category: 'subscribing',
 fn: function (aClass,aBlock){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 $1=_st((smalltalk.AnnouncementSubscription || AnnouncementSubscription))._new();
 _st($1)._block_(aBlock);
 _st($1)._announcementClass_(aClass);
@@ -174,7 +174,7 @@ selector: "current",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@current"]) == nil || $receiver == undefined){
 self["@current"]=smalltalk.Announcer.klass.fn.prototype._new.apply(_st(self), []);
 $1=self["@current"];
@@ -197,7 +197,7 @@ selector: "new",
 category: 'instance creation',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._shouldNotImplement();
+return smalltalk.withContext(function($ctx1) { 
_st(self)._shouldNotImplement();
 return self}, self, "new", [], smalltalk.SystemAnnouncer.klass)},
 args: [],
 source: "new\x0a\x09self shouldNotImplement",
@@ -216,7 +216,7 @@ selector: "theClass",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@theClass"];
+return smalltalk.withContext(function($ctx1) { 
return self["@theClass"];
 }, self, "theClass", [], smalltalk.SystemAnnouncement)},
 args: [],
 source: "theClass\x0a\x09^ theClass",
@@ -232,7 +232,7 @@ selector: "theClass:",
 category: 'accessing',
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@theClass"]=aClass;
+return smalltalk.withContext(function($ctx1) { 
self["@theClass"]=aClass;
 return self}, self, "theClass:", [aClass], smalltalk.SystemAnnouncement)},
 args: ["aClass"],
 source: "theClass: aClass\x0a\x09theClass := aClass",
@@ -271,7 +271,7 @@ selector: "method",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@method"];
+return smalltalk.withContext(function($ctx1) { 
return self["@method"];
 }, self, "method", [], smalltalk.MethodAnnouncement)},
 args: [],
 source: "method\x0a\x09^ method",
@@ -287,7 +287,7 @@ selector: "method:",
 category: 'accessing',
 fn: function (aCompiledMethod){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@method"]=aCompiledMethod;
+return smalltalk.withContext(function($ctx1) { 
self["@method"]=aCompiledMethod;
 return self}, self, "method:", [aCompiledMethod], smalltalk.MethodAnnouncement)},
 args: ["aCompiledMethod"],
 source: "method: aCompiledMethod\x0a\x09method := aCompiledMethod",

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

@@ -6,7 +6,7 @@ smalltalk.method({
 selector: "addCompiledMethod:",
 fn: function (aMethod){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self);
 ;
 $1=_st((smalltalk.MethodAdded || MethodAdded))._new();
@@ -24,16 +24,16 @@ smalltalk.method({
 selector: "allInstanceVariableNames",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var result;
-result=_st(_st(self)._instanceVariableNames())._copy();
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.result=nil;
+$ctx1.locals.result=_st(_st(self)._instanceVariableNames())._copy();
 $1=_st(self)._superclass();
 if(($receiver = $1) == nil || $receiver == undefined){
 $1;
 } else {
-_st(result)._addAll_(_st(_st(self)._superclass())._allInstanceVariableNames());
+_st($ctx1.locals.result)._addAll_(_st(_st(self)._superclass())._allInstanceVariableNames());
 };
-return result;
+return $ctx1.locals.result;
 }, self, "allInstanceVariableNames", [], smalltalk.Behavior)}
 }),
 smalltalk.Behavior);
@@ -44,12 +44,12 @@ smalltalk.method({
 selector: "allSubclasses",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var result;
-result=_st(self)._subclasses();
+return smalltalk.withContext(function($ctx1) { 
$ctx1.result=nil;
+$ctx1.locals.result=_st(self)._subclasses();
 _st(_st(self)._subclasses())._do_((function(each){
-return _st(result)._addAll_(_st(each)._allSubclasses());
-}));
-return result;
+return smalltalk.withContext(function($ctx2) { 
return _st($ctx1.locals.result)._addAll_(_st(each)._allSubclasses());
+})}));
+return $ctx1.locals.result;
 }, self, "allSubclasses", [], smalltalk.Behavior)}
 }),
 smalltalk.Behavior);
@@ -60,7 +60,7 @@ smalltalk.method({
 selector: "allSuperclasses",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$3,$4,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$3,$4,$2;
 $1=_st(self)._superclass();
 if(($receiver = $1) == nil || $receiver == undefined){
 return [];
@@ -82,7 +82,7 @@ smalltalk.method({
 selector: "basicNew",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return new self.fn();
+return smalltalk.withContext(function($ctx1) { 
return new self.fn();
 ;
 return self}, self, "basicNew", [], smalltalk.Behavior)}
 }),
@@ -94,12 +94,12 @@ smalltalk.method({
 selector: "canUnderstand:",
 fn: function (aSelector){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(_st(_st(self)._methodDictionary())._keys())._includes_(_st(aSelector)._asString()))._or_((function(){
-return _st(_st(_st(self)._superclass())._notNil())._and_((function(){
-return _st(_st(self)._superclass())._canUnderstand_(aSelector);
-}));
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(_st(self)._superclass())._notNil())._and_((function(){
+return smalltalk.withContext(function($ctx3) { 
return _st(_st(self)._superclass())._canUnderstand_(aSelector);
+})}));
+})}));
 return $1;
 }, self, "canUnderstand:", [aSelector], smalltalk.Behavior)}
 }),
@@ -111,7 +111,7 @@ smalltalk.method({
 selector: "comment",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$1;
 $2=_st(self)._basicAt_("comment");
 if(($receiver = $2) == nil || $receiver == undefined){
 $1="";
@@ -129,7 +129,7 @@ smalltalk.method({
 selector: "comment:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 _st(self)._basicAt_put_("comment",aString);
 $1=_st((smalltalk.ClassCommentChanged || ClassCommentChanged))._new();
 _st($1)._theClass_(self);
@@ -145,7 +145,7 @@ smalltalk.method({
 selector: "commentStamp",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st((smalltalk.ClassCommentReader || ClassCommentReader))._new();
 _st($2)._class_(self);
 $3=_st($2)._yourself();
@@ -161,7 +161,7 @@ smalltalk.method({
 selector: "commentStamp:prior:",
 fn: function (aStamp,prior){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._commentStamp();
 return $1;
 }, self, "commentStamp:prior:", [aStamp,prior], smalltalk.Behavior)}
@@ -174,7 +174,7 @@ smalltalk.method({
 selector: "compile:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._compile_category_(aString,"");
+return smalltalk.withContext(function($ctx1) { 
_st(self)._compile_category_(aString,"");
 return self}, self, "compile:", [aString], smalltalk.Behavior)}
 }),
 smalltalk.Behavior);
@@ -185,7 +185,7 @@ smalltalk.method({
 selector: "compile:category:",
 fn: function (aString,anotherString){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st((smalltalk.Compiler || Compiler))._new())._install_forClass_category_(aString,self,anotherString);
+return smalltalk.withContext(function($ctx1) { 
_st(_st((smalltalk.Compiler || Compiler))._new())._install_forClass_category_(aString,self,anotherString);
 return self}, self, "compile:category:", [aString,anotherString], smalltalk.Behavior)}
 }),
 smalltalk.Behavior);
@@ -196,7 +196,7 @@ smalltalk.method({
 selector: "definition",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return "";
+return smalltalk.withContext(function($ctx1) { 
return "";
 }, self, "definition", [], smalltalk.Behavior)}
 }),
 smalltalk.Behavior);
@@ -207,7 +207,7 @@ smalltalk.method({
 selector: "inheritsFrom:",
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(aClass)._allSubclasses())._includes_(self);
 return $1;
 }, self, "inheritsFrom:", [aClass], smalltalk.Behavior)}
@@ -220,7 +220,7 @@ smalltalk.method({
 selector: "instanceVariableNames",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self.iVarNames;
+return smalltalk.withContext(function($ctx1) { 
return self.iVarNames;
 ;
 return self}, self, "instanceVariableNames", [], smalltalk.Behavior)}
 }),
@@ -232,7 +232,7 @@ smalltalk.method({
 selector: "methodAt:",
 fn: function (aSymbol){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._methodDictionary())._at_(_st(aSymbol)._asString());
 return $1;
 }, self, "methodAt:", [aSymbol], smalltalk.Behavior)}
@@ -245,7 +245,7 @@ smalltalk.method({
 selector: "methodDictionary",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var dict = smalltalk.HashedCollection._new();
+return smalltalk.withContext(function($ctx1) { 
var dict = smalltalk.HashedCollection._new();
 	var methods = self.methods;
 	for(var i in methods) {
 		if(methods[i].selector) {
@@ -264,7 +264,7 @@ smalltalk.method({
 selector: "methods",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._methodDictionary())._values();
 return $1;
 }, self, "methods", [], smalltalk.Behavior)}
@@ -277,7 +277,7 @@ smalltalk.method({
 selector: "methodsFor:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st((smalltalk.ClassCategoryReader || ClassCategoryReader))._new();
 _st($2)._class_category_(self,aString);
 $3=_st($2)._yourself();
@@ -293,7 +293,7 @@ smalltalk.method({
 selector: "methodsFor:stamp:",
 fn: function (aString,aStamp){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._methodsFor_(aString);
 return $1;
 }, self, "methodsFor:stamp:", [aString,aStamp], smalltalk.Behavior)}
@@ -306,10 +306,10 @@ smalltalk.method({
 selector: "methodsInProtocol:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(_st(self)._methodDictionary())._values())._select_((function(each){
-return _st(_st(each)._protocol()).__eq(aString);
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(each)._protocol()).__eq(aString);
+})}));
 return $1;
 }, self, "methodsInProtocol:", [aString], smalltalk.Behavior)}
 }),
@@ -321,7 +321,7 @@ smalltalk.method({
 selector: "name",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self.className || nil;
+return smalltalk.withContext(function($ctx1) { 
return self.className || nil;
 ;
 return self}, self, "name", [], smalltalk.Behavior)}
 }),
@@ -333,7 +333,7 @@ smalltalk.method({
 selector: "new",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._basicNew())._initialize();
 return $1;
 }, self, "new", [], smalltalk.Behavior)}
@@ -346,7 +346,7 @@ smalltalk.method({
 selector: "organization",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._basicAt_("organization");
 return $1;
 }, self, "organization", [], smalltalk.Behavior)}
@@ -359,7 +359,7 @@ smalltalk.method({
 selector: "protocols",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(_st(self)._organization())._elements())._sorted();
 return $1;
 }, self, "protocols", [], smalltalk.Behavior)}
@@ -372,16 +372,16 @@ smalltalk.method({
 selector: "protocolsDo:",
 fn: function (aBlock){
 var self=this;
-return smalltalk.withContext(function($ctx) { var methodsByCategory;
-methodsByCategory=_st((smalltalk.HashedCollection || HashedCollection))._new();
+return smalltalk.withContext(function($ctx1) { 
$ctx1.methodsByCategory=nil;
+$ctx1.locals.methodsByCategory=_st((smalltalk.HashedCollection || HashedCollection))._new();
 _st(_st(_st(self)._methodDictionary())._values())._do_((function(m){
-return _st(_st(methodsByCategory)._at_ifAbsentPut_(_st(m)._category(),(function(){
-return _st((smalltalk.Array || Array))._new();
-})))._add_(m);
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(_st($ctx1.locals.methodsByCategory)._at_ifAbsentPut_(_st(m)._category(),(function(){
+return smalltalk.withContext(function($ctx3) { 
return _st((smalltalk.Array || Array))._new();
+})})))._add_(m);
+})}));
 _st(_st(self)._protocols())._do_((function(category){
-return _st(aBlock)._value_value_(category,_st(methodsByCategory)._at_(category));
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(aBlock)._value_value_(category,_st($ctx1.locals.methodsByCategory)._at_(category));
+})}));
 return self}, self, "protocolsDo:", [aBlock], smalltalk.Behavior)}
 }),
 smalltalk.Behavior);
@@ -392,7 +392,7 @@ smalltalk.method({
 selector: "prototype",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self.fn.prototype;
+return smalltalk.withContext(function($ctx1) { 
return self.fn.prototype;
 ;
 return self}, self, "prototype", [], smalltalk.Behavior)}
 }),
@@ -404,7 +404,7 @@ smalltalk.method({
 selector: "removeCompiledMethod:",
 fn: function (aMethod){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 
     	smalltalk.removeMethod(aMethod)
 		smalltalk.init(self);
@@ -425,7 +425,7 @@ smalltalk.method({
 selector: "selectors",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._methodDictionary())._keys();
 return $1;
 }, self, "selectors", [], smalltalk.Behavior)}
@@ -438,7 +438,7 @@ smalltalk.method({
 selector: "subclasses",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return smalltalk.subclasses(self);
+return smalltalk.withContext(function($ctx1) { 
return smalltalk.subclasses(self);
 ;
 return self}, self, "subclasses", [], smalltalk.Behavior)}
 }),
@@ -450,7 +450,7 @@ smalltalk.method({
 selector: "superclass",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self.superclass || nil;
+return smalltalk.withContext(function($ctx1) { 
return self.superclass || nil;
 ;
 return self}, self, "superclass", [], smalltalk.Behavior)}
 }),
@@ -462,7 +462,7 @@ smalltalk.method({
 selector: "theMetaClass",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._class();
 return $1;
 }, self, "theMetaClass", [], smalltalk.Behavior)}
@@ -475,7 +475,7 @@ smalltalk.method({
 selector: "theNonMetaClass",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self;
+return smalltalk.withContext(function($ctx1) { 
return self;
 }, self, "theNonMetaClass", [], smalltalk.Behavior)}
 }),
 smalltalk.Behavior);
@@ -486,7 +486,7 @@ smalltalk.method({
 selector: "withAllSubclasses",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st((smalltalk.Array || Array))._with_(self);
 _st($2)._addAll_(_st(self)._allSubclasses());
 $3=_st($2)._yourself();
@@ -505,7 +505,7 @@ smalltalk.method({
 selector: "asJavascript",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st("smalltalk.").__comma(_st(self)._name());
 return $1;
 }, self, "asJavascript", [], smalltalk.Class)}
@@ -518,7 +518,7 @@ smalltalk.method({
 selector: "category",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$1;
 $2=_st(self)._package();
 if(($receiver = $2) == nil || $receiver == undefined){
 $1="Unclassified";
@@ -536,25 +536,25 @@ smalltalk.method({
 selector: "definition",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $1=_st((smalltalk.String || String))._streamContents_((function(stream){
-_st(stream)._nextPutAll_(_st(_st(self)._superclass())._asString());
+return smalltalk.withContext(function($ctx2) { 
_st(stream)._nextPutAll_(_st(_st(self)._superclass())._asString());
 _st(stream)._nextPutAll_(" subclass: #");
 _st(stream)._nextPutAll_(_st(self)._name());
 _st(stream)._nextPutAll_(_st(_st((smalltalk.String || String))._lf()).__comma(_st((smalltalk.String || String))._tab()));
 $2=_st(stream)._nextPutAll_("instanceVariableNames: '");
 $2;
 _st(_st(self)._instanceVariableNames())._do_separatedBy_((function(each){
-return _st(stream)._nextPutAll_(each);
-}),(function(){
-return _st(stream)._nextPutAll_(" ");
-}));
+return smalltalk.withContext(function($ctx3) { 
return _st(stream)._nextPutAll_(each);
+})}),(function(){
+return smalltalk.withContext(function($ctx3) { 
return _st(stream)._nextPutAll_(" ");
+})}));
 _st(stream)._nextPutAll_(_st(_st("'").__comma(_st((smalltalk.String || String))._lf())).__comma(_st((smalltalk.String || String))._tab()));
 _st(stream)._nextPutAll_("package: '");
 _st(stream)._nextPutAll_(_st(self)._category());
 $3=_st(stream)._nextPutAll_("'");
 return $3;
-}));
+})}));
 return $1;
 }, self, "definition", [], smalltalk.Class)}
 }),
@@ -566,7 +566,7 @@ smalltalk.method({
 selector: "isClass",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isClass", [], smalltalk.Class)}
 }),
 smalltalk.Class);
@@ -577,7 +577,7 @@ smalltalk.method({
 selector: "package",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self.pkg;
+return smalltalk.withContext(function($ctx1) { 
return self.pkg;
 ;
 return self}, self, "package", [], smalltalk.Class)}
 }),
@@ -589,7 +589,7 @@ smalltalk.method({
 selector: "package:",
 fn: function (aPackage){
 var self=this;
-return smalltalk.withContext(function($ctx) { self.pkg = aPackage;
+return smalltalk.withContext(function($ctx1) { 
self.pkg = aPackage;
 ;
 return self}, self, "package:", [aPackage], smalltalk.Class)}
 }),
@@ -601,7 +601,7 @@ smalltalk.method({
 selector: "printString",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._name();
 return $1;
 }, self, "printString", [], smalltalk.Class)}
@@ -614,7 +614,7 @@ smalltalk.method({
 selector: "rename:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st((smalltalk.ClassBuilder || ClassBuilder))._new())._renameClass_to_(self,aString);
+return smalltalk.withContext(function($ctx1) { 
_st(_st((smalltalk.ClassBuilder || ClassBuilder))._new())._renameClass_to_(self,aString);
 return self}, self, "rename:", [aString], smalltalk.Class)}
 }),
 smalltalk.Class);
@@ -625,7 +625,7 @@ smalltalk.method({
 selector: "subclass:instanceVariableNames:",
 fn: function (aString,anotherString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._subclass_instanceVariableNames_package_(aString,anotherString,nil);
 return $1;
 }, self, "subclass:instanceVariableNames:", [aString,anotherString], smalltalk.Class)}
@@ -638,7 +638,7 @@ smalltalk.method({
 selector: "subclass:instanceVariableNames:category:",
 fn: function (aString,aString2,aString3){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(self)._deprecatedAPI();
 $1=_st(self)._subclass_instanceVariableNames_package_(aString,aString2,aString3);
 return $1;
@@ -652,7 +652,7 @@ smalltalk.method({
 selector: "subclass:instanceVariableNames:classVariableNames:poolDictionaries:category:",
 fn: function (aString,aString2,classVars,pools,aString3){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._subclass_instanceVariableNames_package_(aString,aString2,aString3);
 return $1;
 }, self, "subclass:instanceVariableNames:classVariableNames:poolDictionaries:category:", [aString,aString2,classVars,pools,aString3], smalltalk.Class)}
@@ -665,7 +665,7 @@ smalltalk.method({
 selector: "subclass:instanceVariableNames:package:",
 fn: function (aString,aString2,aString3){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st((smalltalk.ClassBuilder || ClassBuilder))._new())._superclass_subclass_instanceVariableNames_package_(self,_st(aString)._asString(),aString2,aString3);
 return $1;
 }, self, "subclass:instanceVariableNames:package:", [aString,aString2,aString3], smalltalk.Class)}
@@ -681,7 +681,7 @@ smalltalk.method({
 selector: "asJavascript",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st("smalltalk.").__comma(_st(_st(self)._instanceClass())._name())).__comma(".klass");
 return $1;
 }, self, "asJavascript", [], smalltalk.Metaclass)}
@@ -694,19 +694,19 @@ smalltalk.method({
 selector: "definition",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$1;
 $1=_st((smalltalk.String || String))._streamContents_((function(stream){
-_st(stream)._nextPutAll_(_st(self)._asString());
+return smalltalk.withContext(function($ctx2) { 
_st(stream)._nextPutAll_(_st(self)._asString());
 _st(stream)._nextPutAll_(" class ");
 $2=_st(stream)._nextPutAll_("instanceVariableNames: '");
 $2;
 _st(_st(self)._instanceVariableNames())._do_separatedBy_((function(each){
-return _st(stream)._nextPutAll_(each);
-}),(function(){
-return _st(stream)._nextPutAll_(" ");
-}));
+return smalltalk.withContext(function($ctx3) { 
return _st(stream)._nextPutAll_(each);
+})}),(function(){
+return smalltalk.withContext(function($ctx3) { 
return _st(stream)._nextPutAll_(" ");
+})}));
 return _st(stream)._nextPutAll_("'");
-}));
+})}));
 return $1;
 }, self, "definition", [], smalltalk.Metaclass)}
 }),
@@ -718,7 +718,7 @@ smalltalk.method({
 selector: "instanceClass",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self.instanceClass;
+return smalltalk.withContext(function($ctx1) { 
return self.instanceClass;
 ;
 return self}, self, "instanceClass", [], smalltalk.Metaclass)}
 }),
@@ -730,7 +730,7 @@ smalltalk.method({
 selector: "instanceVariableNames:",
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st((smalltalk.ClassBuilder || ClassBuilder))._new())._class_instanceVariableNames_(self,aCollection);
+return smalltalk.withContext(function($ctx1) { 
_st(_st((smalltalk.ClassBuilder || ClassBuilder))._new())._class_instanceVariableNames_(self,aCollection);
 return self}, self, "instanceVariableNames:", [aCollection], smalltalk.Metaclass)}
 }),
 smalltalk.Metaclass);
@@ -741,7 +741,7 @@ smalltalk.method({
 selector: "isMetaclass",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isMetaclass", [], smalltalk.Metaclass)}
 }),
 smalltalk.Metaclass);
@@ -752,7 +752,7 @@ smalltalk.method({
 selector: "printString",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(_st(self)._instanceClass())._name()).__comma(" class");
 return $1;
 }, self, "printString", [], smalltalk.Metaclass)}
@@ -765,7 +765,7 @@ smalltalk.method({
 selector: "theMetaClass",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self;
+return smalltalk.withContext(function($ctx1) { 
return self;
 }, self, "theMetaClass", [], smalltalk.Metaclass)}
 }),
 smalltalk.Metaclass);
@@ -776,7 +776,7 @@ smalltalk.method({
 selector: "theNonMetaClass",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._instanceClass();
 return $1;
 }, self, "theNonMetaClass", [], smalltalk.Metaclass)}
@@ -792,7 +792,7 @@ smalltalk.method({
 selector: "addSubclassOf:named:instanceVariableNames:",
 fn: function (aClass,aString,aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { smalltalk.addClass(aString, aClass, aCollection);
+return smalltalk.withContext(function($ctx1) { 
smalltalk.addClass(aString, aClass, aCollection);
 	    return smalltalk[aString];
 ;
 return self}, self, "addSubclassOf:named:instanceVariableNames:", [aClass,aString,aCollection], smalltalk.ClassBuilder)}
@@ -805,7 +805,7 @@ smalltalk.method({
 selector: "addSubclassOf:named:instanceVariableNames:package:",
 fn: function (aClass,aString,aCollection,packageName){
 var self=this;
-return smalltalk.withContext(function($ctx) { smalltalk.addClass(aString, aClass, aCollection, packageName);
+return smalltalk.withContext(function($ctx1) { 
smalltalk.addClass(aString, aClass, aCollection, packageName);
 	    return smalltalk[aString];
 ;
 return self}, self, "addSubclassOf:named:instanceVariableNames:package:", [aClass,aString,aCollection,packageName], smalltalk.ClassBuilder)}
@@ -818,7 +818,7 @@ smalltalk.method({
 selector: "class:instanceVariableNames:",
 fn: function (aClass,aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3;
 $1=_st(aClass)._isMetaclass();
 if(! smalltalk.assert($1)){
 _st(self)._error_(_st(_st(aClass)._name()).__comma(" is not a metaclass"));
@@ -839,17 +839,17 @@ smalltalk.method({
 selector: "copyClass:named:",
 fn: function (aClass,aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var newClass;
-newClass=_st(self)._addSubclassOf_named_instanceVariableNames_package_(_st(aClass)._superclass(),aString,_st(aClass)._instanceVariableNames(),_st(_st(aClass)._package())._name());
-_st(self)._setupClass_(newClass);
+return smalltalk.withContext(function($ctx1) { 
$ctx1.newClass=nil;
+$ctx1.locals.newClass=_st(self)._addSubclassOf_named_instanceVariableNames_package_(_st(aClass)._superclass(),aString,_st(aClass)._instanceVariableNames(),_st(_st(aClass)._package())._name());
+_st(self)._setupClass_($ctx1.locals.newClass);
 _st(_st(_st(aClass)._methodDictionary())._values())._do_((function(each){
-return _st(_st((smalltalk.Compiler || Compiler))._new())._install_forClass_category_(_st(each)._source(),newClass,_st(each)._category());
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(_st((smalltalk.Compiler || Compiler))._new())._install_forClass_category_(_st(each)._source(),$ctx1.locals.newClass,_st(each)._category());
+})}));
 _st(_st(_st(_st(aClass)._class())._methodDictionary())._values())._do_((function(each){
-return _st(_st((smalltalk.Compiler || Compiler))._new())._install_forClass_category_(_st(each)._source(),_st(newClass)._class(),_st(each)._category());
-}));
-_st(self)._setupClass_(newClass);
-return newClass;
+return smalltalk.withContext(function($ctx2) { 
return _st(_st((smalltalk.Compiler || Compiler))._new())._install_forClass_category_(_st(each)._source(),_st($ctx1.locals.newClass)._class(),_st(each)._category());
+})}));
+_st(self)._setupClass_($ctx1.locals.newClass);
+return $ctx1.locals.newClass;
 }, self, "copyClass:named:", [aClass,aString], smalltalk.ClassBuilder)}
 }),
 smalltalk.ClassBuilder);
@@ -860,10 +860,10 @@ smalltalk.method({
 selector: "instanceVariableNamesFor:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(aString)._tokenize_(" "))._reject_((function(each){
-return _st(each)._isEmpty();
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(each)._isEmpty();
+})}));
 return $1;
 }, self, "instanceVariableNamesFor:", [aString], smalltalk.ClassBuilder)}
 }),
@@ -875,7 +875,7 @@ smalltalk.method({
 selector: "renameClass:to:",
 fn: function (aClass,aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 
 		smalltalk[aString] = aClass;
 		delete smalltalk[aClass.className];
@@ -896,7 +896,7 @@ smalltalk.method({
 selector: "setupClass:",
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { smalltalk.init(aClass);;
+return smalltalk.withContext(function($ctx1) { 
smalltalk.init(aClass);;
 ;
 return self}, self, "setupClass:", [aClass], smalltalk.ClassBuilder)}
 }),
@@ -908,7 +908,7 @@ smalltalk.method({
 selector: "superclass:subclass:",
 fn: function (aClass,aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._superclass_subclass_instanceVariableNames_package_(aClass,aString,"",nil);
 return $1;
 }, self, "superclass:subclass:", [aClass,aString], smalltalk.ClassBuilder)}
@@ -921,20 +921,20 @@ smalltalk.method({
 selector: "superclass:subclass:instanceVariableNames:package:",
 fn: function (aClass,aString,aString2,aString3){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3;
-var newClass;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3;
+$ctx1.newClass=nil;
 if(($receiver = aString3) == nil || $receiver == undefined){
 $1="unclassified";
 } else {
 $1=aString3;
 };
-newClass=_st(self)._addSubclassOf_named_instanceVariableNames_package_(aClass,aString,_st(self)._instanceVariableNamesFor_(aString2),$1);
-_st(self)._setupClass_(newClass);
+$ctx1.locals.newClass=_st(self)._addSubclassOf_named_instanceVariableNames_package_(aClass,aString,_st(self)._instanceVariableNamesFor_(aString2),$1);
+_st(self)._setupClass_($ctx1.locals.newClass);
 $2=_st((smalltalk.ClassAdded || ClassAdded))._new();
-_st($2)._theClass_(newClass);
+_st($2)._theClass_($ctx1.locals.newClass);
 $3=_st($2)._yourself();
 _st(_st((smalltalk.SystemAnnouncer || SystemAnnouncer))._current())._announce_($3);
-return newClass;
+return $ctx1.locals.newClass;
 }, self, "superclass:subclass:instanceVariableNames:package:", [aClass,aString,aString2,aString3], smalltalk.ClassBuilder)}
 }),
 smalltalk.ClassBuilder);
@@ -948,7 +948,7 @@ smalltalk.method({
 selector: "class:category:",
 fn: function (aClass,aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@class"]=aClass;
+return smalltalk.withContext(function($ctx1) { 
self["@class"]=aClass;
 self["@category"]=aString;
 return self}, self, "class:category:", [aClass,aString], smalltalk.ClassCategoryReader)}
 }),
@@ -960,7 +960,7 @@ smalltalk.method({
 selector: "compileMethod:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st((smalltalk.Compiler || Compiler))._new())._install_forClass_category_(aString,self["@class"],self["@category"]);
+return smalltalk.withContext(function($ctx1) { 
_st(_st((smalltalk.Compiler || Compiler))._new())._install_forClass_category_(aString,self["@class"],self["@category"]);
 return self}, self, "compileMethod:", [aString], smalltalk.ClassCategoryReader)}
 }),
 smalltalk.ClassCategoryReader);
@@ -971,7 +971,7 @@ smalltalk.method({
 selector: "initialize",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { smalltalk.Object.fn.prototype._initialize.apply(_st(self), []);
+return smalltalk.withContext(function($ctx1) { 
smalltalk.Object.fn.prototype._initialize.apply(_st(self), []);
 self["@chunkParser"]=_st((smalltalk.ChunkParser || ChunkParser))._new();
 return self}, self, "initialize", [], smalltalk.ClassCategoryReader)}
 }),
@@ -983,14 +983,14 @@ smalltalk.method({
 selector: "scanFrom:",
 fn: function (aChunkParser){
 var self=this;
-return smalltalk.withContext(function($ctx) { var chunk;
+return smalltalk.withContext(function($ctx1) { 
$ctx1.chunk=nil;
 _st((function(){
-chunk=_st(aChunkParser)._nextChunk();
-chunk;
-return _st(chunk)._isEmpty();
-}))._whileFalse_((function(){
-return _st(self)._compileMethod_(chunk);
-}));
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.chunk=_st(aChunkParser)._nextChunk();
+$ctx1.locals.chunk;
+return _st($ctx1.locals.chunk)._isEmpty();
+})}))._whileFalse_((function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._compileMethod_($ctx1.locals.chunk);
+})}));
 _st(_st((smalltalk.Compiler || Compiler))._new())._setupClass_(self["@class"]);
 return self}, self, "scanFrom:", [aChunkParser], smalltalk.ClassCategoryReader)}
 }),
@@ -1005,7 +1005,7 @@ smalltalk.method({
 selector: "class:",
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@class"]=aClass;
+return smalltalk.withContext(function($ctx1) { 
self["@class"]=aClass;
 return self}, self, "class:", [aClass], smalltalk.ClassCommentReader)}
 }),
 smalltalk.ClassCommentReader);
@@ -1016,7 +1016,7 @@ smalltalk.method({
 selector: "initialize",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { smalltalk.Object.fn.prototype._initialize.apply(_st(self), []);
+return smalltalk.withContext(function($ctx1) { 
smalltalk.Object.fn.prototype._initialize.apply(_st(self), []);
 self["@chunkParser"]=_st((smalltalk.ChunkParser || ChunkParser))._new();
 return self}, self, "initialize", [], smalltalk.ClassCommentReader)}
 }),
@@ -1028,12 +1028,12 @@ smalltalk.method({
 selector: "scanFrom:",
 fn: function (aChunkParser){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var chunk;
-chunk=_st(aChunkParser)._nextChunk();
-$1=_st(chunk)._isEmpty();
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.chunk=nil;
+$ctx1.locals.chunk=_st(aChunkParser)._nextChunk();
+$1=_st($ctx1.locals.chunk)._isEmpty();
 if(! smalltalk.assert($1)){
-_st(self)._setComment_(chunk);
+_st(self)._setComment_($ctx1.locals.chunk);
 };
 return self}, self, "scanFrom:", [aChunkParser], smalltalk.ClassCommentReader)}
 }),
@@ -1045,7 +1045,7 @@ smalltalk.method({
 selector: "setComment:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self["@class"])._comment_(aString);
+return smalltalk.withContext(function($ctx1) { 
_st(self["@class"])._comment_(aString);
 return self}, self, "setComment:", [aString], smalltalk.ClassCommentReader)}
 }),
 smalltalk.ClassCommentReader);
@@ -1059,22 +1059,22 @@ smalltalk.method({
 selector: "getNodesFrom:",
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var children;
-var others;
-children=[];
-others=[];
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.children=nil;
+$ctx1.others=nil;
+$ctx1.locals.children=[];
+$ctx1.locals.others=[];
 _st(aCollection)._do_((function(each){
-$1=_st(_st(each)._superclass()).__eq(_st(self)._theClass());
+return smalltalk.withContext(function($ctx2) { 
$1=_st(_st(each)._superclass()).__eq(_st(self)._theClass());
 if(smalltalk.assert($1)){
-return _st(children)._add_(each);
+return _st($ctx1.locals.children)._add_(each);
 } else {
-return _st(others)._add_(each);
+return _st($ctx1.locals.others)._add_(each);
 };
-}));
-self["@nodes"]=_st(children)._collect_((function(each){
-return _st((smalltalk.ClassSorterNode || ClassSorterNode))._on_classes_level_(each,others,_st(_st(self)._level()).__plus((1)));
-}));
+})}));
+self["@nodes"]=_st($ctx1.locals.children)._collect_((function(each){
+return smalltalk.withContext(function($ctx2) { 
return _st((smalltalk.ClassSorterNode || ClassSorterNode))._on_classes_level_(each,$ctx1.locals.others,_st(_st(self)._level()).__plus((1)));
+})}));
 return self}, self, "getNodesFrom:", [aCollection], smalltalk.ClassSorterNode)}
 }),
 smalltalk.ClassSorterNode);
@@ -1085,7 +1085,7 @@ smalltalk.method({
 selector: "level",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@level"];
+return smalltalk.withContext(function($ctx1) { 
return self["@level"];
 }, self, "level", [], smalltalk.ClassSorterNode)}
 }),
 smalltalk.ClassSorterNode);
@@ -1096,7 +1096,7 @@ smalltalk.method({
 selector: "level:",
 fn: function (anInteger){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@level"]=anInteger;
+return smalltalk.withContext(function($ctx1) { 
self["@level"]=anInteger;
 return self}, self, "level:", [anInteger], smalltalk.ClassSorterNode)}
 }),
 smalltalk.ClassSorterNode);
@@ -1107,7 +1107,7 @@ smalltalk.method({
 selector: "nodes",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@nodes"];
+return smalltalk.withContext(function($ctx1) { 
return self["@nodes"];
 }, self, "nodes", [], smalltalk.ClassSorterNode)}
 }),
 smalltalk.ClassSorterNode);
@@ -1118,7 +1118,7 @@ smalltalk.method({
 selector: "theClass",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@theClass"];
+return smalltalk.withContext(function($ctx1) { 
return self["@theClass"];
 }, self, "theClass", [], smalltalk.ClassSorterNode)}
 }),
 smalltalk.ClassSorterNode);
@@ -1129,7 +1129,7 @@ smalltalk.method({
 selector: "theClass:",
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@theClass"]=aClass;
+return smalltalk.withContext(function($ctx1) { 
self["@theClass"]=aClass;
 return self}, self, "theClass:", [aClass], smalltalk.ClassSorterNode)}
 }),
 smalltalk.ClassSorterNode);
@@ -1140,12 +1140,12 @@ smalltalk.method({
 selector: "traverseClassesWith:",
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(aCollection)._add_(_st(self)._theClass());
+return smalltalk.withContext(function($ctx1) { 
_st(aCollection)._add_(_st(self)._theClass());
 _st(_st(_st(self)._nodes())._sorted_((function(a,b){
-return _st(_st(_st(a)._theClass())._name()).__lt_eq(_st(_st(b)._theClass())._name());
-})))._do_((function(aNode){
-return _st(aNode)._traverseClassesWith_(aCollection);
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(_st(a)._theClass())._name()).__lt_eq(_st(_st(b)._theClass())._name());
+})})))._do_((function(aNode){
+return smalltalk.withContext(function($ctx2) { 
return _st(aNode)._traverseClassesWith_(aCollection);
+})}));
 return self}, self, "traverseClassesWith:", [aCollection], smalltalk.ClassSorterNode)}
 }),
 smalltalk.ClassSorterNode);
@@ -1157,7 +1157,7 @@ smalltalk.method({
 selector: "on:classes:level:",
 fn: function (aClass,aCollection,anInteger){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st(self)._new();
 _st($2)._theClass_(aClass);
 _st($2)._level_(anInteger);

+ 152 - 152
js/Kernel-Classes.js

@@ -8,7 +8,7 @@ selector: "addCompiledMethod:",
 category: 'compiling',
 fn: function (aMethod){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 smalltalk.addMethod(aMethod.selector._asSelector(), aMethod, self);
 ;
 $1=_st((smalltalk.MethodAdded || MethodAdded))._new();
@@ -31,16 +31,16 @@ selector: "allInstanceVariableNames",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var result;
-result=_st(_st(self)._instanceVariableNames())._copy();
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.result=nil;
+$ctx1.locals.result=_st(_st(self)._instanceVariableNames())._copy();
 $1=_st(self)._superclass();
 if(($receiver = $1) == nil || $receiver == undefined){
 $1;
 } else {
-_st(result)._addAll_(_st(_st(self)._superclass())._allInstanceVariableNames());
+_st($ctx1.locals.result)._addAll_(_st(_st(self)._superclass())._allInstanceVariableNames());
 };
-return result;
+return $ctx1.locals.result;
 }, self, "allInstanceVariableNames", [], smalltalk.Behavior)},
 args: [],
 source: "allInstanceVariableNames\x0a\x09| result |\x0a\x09result := self instanceVariableNames copy.\x0a\x09self superclass ifNotNil: [\x0a\x09    result addAll: self superclass allInstanceVariableNames].\x0a\x09^result",
@@ -56,12 +56,12 @@ selector: "allSubclasses",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var result;
-result=_st(self)._subclasses();
+return smalltalk.withContext(function($ctx1) { 
$ctx1.result=nil;
+$ctx1.locals.result=_st(self)._subclasses();
 _st(_st(self)._subclasses())._do_((function(each){
-return _st(result)._addAll_(_st(each)._allSubclasses());
-}));
-return result;
+return smalltalk.withContext(function($ctx2) { 
return _st($ctx1.locals.result)._addAll_(_st(each)._allSubclasses());
+})}));
+return $ctx1.locals.result;
 }, self, "allSubclasses", [], smalltalk.Behavior)},
 args: [],
 source: "allSubclasses\x0a\x09| result |\x0a\x09result := self subclasses.\x0a\x09self subclasses do: [:each |\x0a\x09    result addAll: each allSubclasses].\x0a\x09^result",
@@ -77,7 +77,7 @@ selector: "allSuperclasses",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$3,$4,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$3,$4,$2;
 $1=_st(self)._superclass();
 if(($receiver = $1) == nil || $receiver == undefined){
 return [];
@@ -104,7 +104,7 @@ selector: "basicNew",
 category: 'instance creation',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return new self.fn();
+return smalltalk.withContext(function($ctx1) { 
return new self.fn();
 ;
 return self}, self, "basicNew", [], smalltalk.Behavior)},
 args: [],
@@ -121,12 +121,12 @@ selector: "canUnderstand:",
 category: 'testing',
 fn: function (aSelector){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(_st(_st(self)._methodDictionary())._keys())._includes_(_st(aSelector)._asString()))._or_((function(){
-return _st(_st(_st(self)._superclass())._notNil())._and_((function(){
-return _st(_st(self)._superclass())._canUnderstand_(aSelector);
-}));
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(_st(self)._superclass())._notNil())._and_((function(){
+return smalltalk.withContext(function($ctx3) { 
return _st(_st(self)._superclass())._canUnderstand_(aSelector);
+})}));
+})}));
 return $1;
 }, self, "canUnderstand:", [aSelector], smalltalk.Behavior)},
 args: ["aSelector"],
@@ -143,7 +143,7 @@ selector: "comment",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$1;
 $2=_st(self)._basicAt_("comment");
 if(($receiver = $2) == nil || $receiver == undefined){
 $1="";
@@ -166,7 +166,7 @@ selector: "comment:",
 category: 'accessing',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 _st(self)._basicAt_put_("comment",aString);
 $1=_st((smalltalk.ClassCommentChanged || ClassCommentChanged))._new();
 _st($1)._theClass_(self);
@@ -187,7 +187,7 @@ selector: "commentStamp",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st((smalltalk.ClassCommentReader || ClassCommentReader))._new();
 _st($2)._class_(self);
 $3=_st($2)._yourself();
@@ -208,7 +208,7 @@ selector: "commentStamp:prior:",
 category: 'accessing',
 fn: function (aStamp,prior){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._commentStamp();
 return $1;
 }, self, "commentStamp:prior:", [aStamp,prior], smalltalk.Behavior)},
@@ -226,7 +226,7 @@ selector: "compile:",
 category: 'compiling',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._compile_category_(aString,"");
+return smalltalk.withContext(function($ctx1) { 
_st(self)._compile_category_(aString,"");
 return self}, self, "compile:", [aString], smalltalk.Behavior)},
 args: ["aString"],
 source: "compile: aString\x0a\x09self compile: aString category: ''",
@@ -242,7 +242,7 @@ selector: "compile:category:",
 category: 'compiling',
 fn: function (aString,anotherString){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st((smalltalk.Compiler || Compiler))._new())._install_forClass_category_(aString,self,anotherString);
+return smalltalk.withContext(function($ctx1) { 
_st(_st((smalltalk.Compiler || Compiler))._new())._install_forClass_category_(aString,self,anotherString);
 return self}, self, "compile:category:", [aString,anotherString], smalltalk.Behavior)},
 args: ["aString", "anotherString"],
 source: "compile: aString category: anotherString\x0a\x09Compiler new\x0a\x09\x09install: aString \x0a        forClass: self \x0a        category: anotherString",
@@ -258,7 +258,7 @@ selector: "definition",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return "";
+return smalltalk.withContext(function($ctx1) { 
return "";
 }, self, "definition", [], smalltalk.Behavior)},
 args: [],
 source: "definition\x0a\x09^ ''",
@@ -274,7 +274,7 @@ selector: "inheritsFrom:",
 category: 'testing',
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(aClass)._allSubclasses())._includes_(self);
 return $1;
 }, self, "inheritsFrom:", [aClass], smalltalk.Behavior)},
@@ -292,7 +292,7 @@ selector: "instanceVariableNames",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self.iVarNames;
+return smalltalk.withContext(function($ctx1) { 
return self.iVarNames;
 ;
 return self}, self, "instanceVariableNames", [], smalltalk.Behavior)},
 args: [],
@@ -309,7 +309,7 @@ selector: "methodAt:",
 category: 'accessing',
 fn: function (aSymbol){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._methodDictionary())._at_(_st(aSymbol)._asString());
 return $1;
 }, self, "methodAt:", [aSymbol], smalltalk.Behavior)},
@@ -327,7 +327,7 @@ selector: "methodDictionary",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var dict = smalltalk.HashedCollection._new();
+return smalltalk.withContext(function($ctx1) { 
var dict = smalltalk.HashedCollection._new();
 	var methods = self.methods;
 	for(var i in methods) {
 		if(methods[i].selector) {
@@ -351,7 +351,7 @@ selector: "methods",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._methodDictionary())._values();
 return $1;
 }, self, "methods", [], smalltalk.Behavior)},
@@ -369,7 +369,7 @@ selector: "methodsFor:",
 category: 'accessing',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st((smalltalk.ClassCategoryReader || ClassCategoryReader))._new();
 _st($2)._class_category_(self,aString);
 $3=_st($2)._yourself();
@@ -390,7 +390,7 @@ selector: "methodsFor:stamp:",
 category: 'accessing',
 fn: function (aString,aStamp){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._methodsFor_(aString);
 return $1;
 }, self, "methodsFor:stamp:", [aString,aStamp], smalltalk.Behavior)},
@@ -408,10 +408,10 @@ selector: "methodsInProtocol:",
 category: 'accessing',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(_st(self)._methodDictionary())._values())._select_((function(each){
-return _st(_st(each)._protocol()).__eq(aString);
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(each)._protocol()).__eq(aString);
+})}));
 return $1;
 }, self, "methodsInProtocol:", [aString], smalltalk.Behavior)},
 args: ["aString"],
@@ -428,7 +428,7 @@ selector: "name",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self.className || nil;
+return smalltalk.withContext(function($ctx1) { 
return self.className || nil;
 ;
 return self}, self, "name", [], smalltalk.Behavior)},
 args: [],
@@ -445,7 +445,7 @@ selector: "new",
 category: 'instance creation',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._basicNew())._initialize();
 return $1;
 }, self, "new", [], smalltalk.Behavior)},
@@ -463,7 +463,7 @@ selector: "organization",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._basicAt_("organization");
 return $1;
 }, self, "organization", [], smalltalk.Behavior)},
@@ -481,7 +481,7 @@ selector: "protocols",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(_st(self)._organization())._elements())._sorted();
 return $1;
 }, self, "protocols", [], smalltalk.Behavior)},
@@ -499,16 +499,16 @@ selector: "protocolsDo:",
 category: 'accessing',
 fn: function (aBlock){
 var self=this;
-return smalltalk.withContext(function($ctx) { var methodsByCategory;
-methodsByCategory=_st((smalltalk.HashedCollection || HashedCollection))._new();
+return smalltalk.withContext(function($ctx1) { 
$ctx1.methodsByCategory=nil;
+$ctx1.locals.methodsByCategory=_st((smalltalk.HashedCollection || HashedCollection))._new();
 _st(_st(_st(self)._methodDictionary())._values())._do_((function(m){
-return _st(_st(methodsByCategory)._at_ifAbsentPut_(_st(m)._category(),(function(){
-return _st((smalltalk.Array || Array))._new();
-})))._add_(m);
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(_st($ctx1.locals.methodsByCategory)._at_ifAbsentPut_(_st(m)._category(),(function(){
+return smalltalk.withContext(function($ctx3) { 
return _st((smalltalk.Array || Array))._new();
+})})))._add_(m);
+})}));
 _st(_st(self)._protocols())._do_((function(category){
-return _st(aBlock)._value_value_(category,_st(methodsByCategory)._at_(category));
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(aBlock)._value_value_(category,_st($ctx1.locals.methodsByCategory)._at_(category));
+})}));
 return self}, self, "protocolsDo:", [aBlock], smalltalk.Behavior)},
 args: ["aBlock"],
 source: "protocolsDo: aBlock\x0a\x09\x22Execute aBlock for each method category with\x0a\x09its collection of methods in the sort order of category name.\x22\x0a\x0a\x09| methodsByCategory |\x0a\x09methodsByCategory := HashedCollection new.\x0a\x09self methodDictionary values do: [:m |\x0a\x09\x09(methodsByCategory at: m category ifAbsentPut: [Array new])\x0a \x09\x09\x09add: m]. \x0a\x09self protocols do: [:category |\x0a\x09\x09aBlock value: category value: (methodsByCategory at: category)]",
@@ -524,7 +524,7 @@ selector: "prototype",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self.fn.prototype;
+return smalltalk.withContext(function($ctx1) { 
return self.fn.prototype;
 ;
 return self}, self, "prototype", [], smalltalk.Behavior)},
 args: [],
@@ -541,7 +541,7 @@ selector: "removeCompiledMethod:",
 category: 'compiling',
 fn: function (aMethod){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 
     	smalltalk.removeMethod(aMethod)
 		smalltalk.init(self);
@@ -567,7 +567,7 @@ selector: "selectors",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._methodDictionary())._keys();
 return $1;
 }, self, "selectors", [], smalltalk.Behavior)},
@@ -585,7 +585,7 @@ selector: "subclasses",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return smalltalk.subclasses(self);
+return smalltalk.withContext(function($ctx1) { 
return smalltalk.subclasses(self);
 ;
 return self}, self, "subclasses", [], smalltalk.Behavior)},
 args: [],
@@ -602,7 +602,7 @@ selector: "superclass",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self.superclass || nil;
+return smalltalk.withContext(function($ctx1) { 
return self.superclass || nil;
 ;
 return self}, self, "superclass", [], smalltalk.Behavior)},
 args: [],
@@ -619,7 +619,7 @@ selector: "theMetaClass",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._class();
 return $1;
 }, self, "theMetaClass", [], smalltalk.Behavior)},
@@ -637,7 +637,7 @@ selector: "theNonMetaClass",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self;
+return smalltalk.withContext(function($ctx1) { 
return self;
 }, self, "theNonMetaClass", [], smalltalk.Behavior)},
 args: [],
 source: "theNonMetaClass\x0a\x09^ self",
@@ -653,7 +653,7 @@ selector: "withAllSubclasses",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st((smalltalk.Array || Array))._with_(self);
 _st($2)._addAll_(_st(self)._allSubclasses());
 $3=_st($2)._yourself();
@@ -678,7 +678,7 @@ selector: "asJavascript",
 category: 'converting',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st("smalltalk.").__comma(_st(self)._name());
 return $1;
 }, self, "asJavascript", [], smalltalk.Class)},
@@ -696,7 +696,7 @@ selector: "category",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$1;
 $2=_st(self)._package();
 if(($receiver = $2) == nil || $receiver == undefined){
 $1="Unclassified";
@@ -719,25 +719,25 @@ selector: "definition",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $1=_st((smalltalk.String || String))._streamContents_((function(stream){
-_st(stream)._nextPutAll_(_st(_st(self)._superclass())._asString());
+return smalltalk.withContext(function($ctx2) { 
_st(stream)._nextPutAll_(_st(_st(self)._superclass())._asString());
 _st(stream)._nextPutAll_(" subclass: #");
 _st(stream)._nextPutAll_(_st(self)._name());
 _st(stream)._nextPutAll_(_st(_st((smalltalk.String || String))._lf()).__comma(_st((smalltalk.String || String))._tab()));
 $2=_st(stream)._nextPutAll_("instanceVariableNames: '");
 $2;
 _st(_st(self)._instanceVariableNames())._do_separatedBy_((function(each){
-return _st(stream)._nextPutAll_(each);
-}),(function(){
-return _st(stream)._nextPutAll_(" ");
-}));
+return smalltalk.withContext(function($ctx3) { 
return _st(stream)._nextPutAll_(each);
+})}),(function(){
+return smalltalk.withContext(function($ctx3) { 
return _st(stream)._nextPutAll_(" ");
+})}));
 _st(stream)._nextPutAll_(_st(_st("'").__comma(_st((smalltalk.String || String))._lf())).__comma(_st((smalltalk.String || String))._tab()));
 _st(stream)._nextPutAll_("package: '");
 _st(stream)._nextPutAll_(_st(self)._category());
 $3=_st(stream)._nextPutAll_("'");
 return $3;
-}));
+})}));
 return $1;
 }, self, "definition", [], smalltalk.Class)},
 args: [],
@@ -754,7 +754,7 @@ selector: "isClass",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isClass", [], smalltalk.Class)},
 args: [],
 source: "isClass\x0a\x09^true",
@@ -770,7 +770,7 @@ selector: "package",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self.pkg;
+return smalltalk.withContext(function($ctx1) { 
return self.pkg;
 ;
 return self}, self, "package", [], smalltalk.Class)},
 args: [],
@@ -787,7 +787,7 @@ selector: "package:",
 category: 'accessing',
 fn: function (aPackage){
 var self=this;
-return smalltalk.withContext(function($ctx) { self.pkg = aPackage;
+return smalltalk.withContext(function($ctx1) { 
self.pkg = aPackage;
 ;
 return self}, self, "package:", [aPackage], smalltalk.Class)},
 args: ["aPackage"],
@@ -804,7 +804,7 @@ selector: "printString",
 category: 'printing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._name();
 return $1;
 }, self, "printString", [], smalltalk.Class)},
@@ -822,7 +822,7 @@ selector: "rename:",
 category: 'accessing',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st((smalltalk.ClassBuilder || ClassBuilder))._new())._renameClass_to_(self,aString);
+return smalltalk.withContext(function($ctx1) { 
_st(_st((smalltalk.ClassBuilder || ClassBuilder))._new())._renameClass_to_(self,aString);
 return self}, self, "rename:", [aString], smalltalk.Class)},
 args: ["aString"],
 source: "rename: aString\x0a\x09ClassBuilder new renameClass: self to: aString",
@@ -838,7 +838,7 @@ selector: "subclass:instanceVariableNames:",
 category: 'class creation',
 fn: function (aString,anotherString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._subclass_instanceVariableNames_package_(aString,anotherString,nil);
 return $1;
 }, self, "subclass:instanceVariableNames:", [aString,anotherString], smalltalk.Class)},
@@ -856,7 +856,7 @@ selector: "subclass:instanceVariableNames:category:",
 category: 'class creation',
 fn: function (aString,aString2,aString3){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 _st(self)._deprecatedAPI();
 $1=_st(self)._subclass_instanceVariableNames_package_(aString,aString2,aString3);
 return $1;
@@ -875,7 +875,7 @@ selector: "subclass:instanceVariableNames:classVariableNames:poolDictionaries:ca
 category: 'class creation',
 fn: function (aString,aString2,classVars,pools,aString3){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._subclass_instanceVariableNames_package_(aString,aString2,aString3);
 return $1;
 }, self, "subclass:instanceVariableNames:classVariableNames:poolDictionaries:category:", [aString,aString2,classVars,pools,aString3], smalltalk.Class)},
@@ -893,7 +893,7 @@ selector: "subclass:instanceVariableNames:package:",
 category: 'class creation',
 fn: function (aString,aString2,aString3){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st((smalltalk.ClassBuilder || ClassBuilder))._new())._superclass_subclass_instanceVariableNames_package_(self,_st(aString)._asString(),aString2,aString3);
 return $1;
 }, self, "subclass:instanceVariableNames:package:", [aString,aString2,aString3], smalltalk.Class)},
@@ -915,7 +915,7 @@ selector: "asJavascript",
 category: 'converting',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st("smalltalk.").__comma(_st(_st(self)._instanceClass())._name())).__comma(".klass");
 return $1;
 }, self, "asJavascript", [], smalltalk.Metaclass)},
@@ -933,19 +933,19 @@ selector: "definition",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$1;
 $1=_st((smalltalk.String || String))._streamContents_((function(stream){
-_st(stream)._nextPutAll_(_st(self)._asString());
+return smalltalk.withContext(function($ctx2) { 
_st(stream)._nextPutAll_(_st(self)._asString());
 _st(stream)._nextPutAll_(" class ");
 $2=_st(stream)._nextPutAll_("instanceVariableNames: '");
 $2;
 _st(_st(self)._instanceVariableNames())._do_separatedBy_((function(each){
-return _st(stream)._nextPutAll_(each);
-}),(function(){
-return _st(stream)._nextPutAll_(" ");
-}));
+return smalltalk.withContext(function($ctx3) { 
return _st(stream)._nextPutAll_(each);
+})}),(function(){
+return smalltalk.withContext(function($ctx3) { 
return _st(stream)._nextPutAll_(" ");
+})}));
 return _st(stream)._nextPutAll_("'");
-}));
+})}));
 return $1;
 }, self, "definition", [], smalltalk.Metaclass)},
 args: [],
@@ -962,7 +962,7 @@ selector: "instanceClass",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self.instanceClass;
+return smalltalk.withContext(function($ctx1) { 
return self.instanceClass;
 ;
 return self}, self, "instanceClass", [], smalltalk.Metaclass)},
 args: [],
@@ -979,7 +979,7 @@ selector: "instanceVariableNames:",
 category: 'accessing',
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st((smalltalk.ClassBuilder || ClassBuilder))._new())._class_instanceVariableNames_(self,aCollection);
+return smalltalk.withContext(function($ctx1) { 
_st(_st((smalltalk.ClassBuilder || ClassBuilder))._new())._class_instanceVariableNames_(self,aCollection);
 return self}, self, "instanceVariableNames:", [aCollection], smalltalk.Metaclass)},
 args: ["aCollection"],
 source: "instanceVariableNames: aCollection\x0a\x09ClassBuilder new\x0a\x09    class: self instanceVariableNames: aCollection",
@@ -995,7 +995,7 @@ selector: "isMetaclass",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return true;
+return smalltalk.withContext(function($ctx1) { 
return true;
 }, self, "isMetaclass", [], smalltalk.Metaclass)},
 args: [],
 source: "isMetaclass\x0a\x09^true",
@@ -1011,7 +1011,7 @@ selector: "printString",
 category: 'printing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(_st(self)._instanceClass())._name()).__comma(" class");
 return $1;
 }, self, "printString", [], smalltalk.Metaclass)},
@@ -1029,7 +1029,7 @@ selector: "theMetaClass",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self;
+return smalltalk.withContext(function($ctx1) { 
return self;
 }, self, "theMetaClass", [], smalltalk.Metaclass)},
 args: [],
 source: "theMetaClass\x0a\x09^ self",
@@ -1045,7 +1045,7 @@ selector: "theNonMetaClass",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._instanceClass();
 return $1;
 }, self, "theNonMetaClass", [], smalltalk.Metaclass)},
@@ -1067,7 +1067,7 @@ selector: "addSubclassOf:named:instanceVariableNames:",
 category: 'private',
 fn: function (aClass,aString,aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { smalltalk.addClass(aString, aClass, aCollection);
+return smalltalk.withContext(function($ctx1) { 
smalltalk.addClass(aString, aClass, aCollection);
 	    return smalltalk[aString];
 ;
 return self}, self, "addSubclassOf:named:instanceVariableNames:", [aClass,aString,aCollection], smalltalk.ClassBuilder)},
@@ -1085,7 +1085,7 @@ selector: "addSubclassOf:named:instanceVariableNames:package:",
 category: 'private',
 fn: function (aClass,aString,aCollection,packageName){
 var self=this;
-return smalltalk.withContext(function($ctx) { smalltalk.addClass(aString, aClass, aCollection, packageName);
+return smalltalk.withContext(function($ctx1) { 
smalltalk.addClass(aString, aClass, aCollection, packageName);
 	    return smalltalk[aString];
 ;
 return self}, self, "addSubclassOf:named:instanceVariableNames:package:", [aClass,aString,aCollection,packageName], smalltalk.ClassBuilder)},
@@ -1103,7 +1103,7 @@ selector: "class:instanceVariableNames:",
 category: 'class creation',
 fn: function (aClass,aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3;
 $1=_st(aClass)._isMetaclass();
 if(! smalltalk.assert($1)){
 _st(self)._error_(_st(_st(aClass)._name()).__comma(" is not a metaclass"));
@@ -1129,17 +1129,17 @@ selector: "copyClass:named:",
 category: 'private',
 fn: function (aClass,aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var newClass;
-newClass=_st(self)._addSubclassOf_named_instanceVariableNames_package_(_st(aClass)._superclass(),aString,_st(aClass)._instanceVariableNames(),_st(_st(aClass)._package())._name());
-_st(self)._setupClass_(newClass);
+return smalltalk.withContext(function($ctx1) { 
$ctx1.newClass=nil;
+$ctx1.locals.newClass=_st(self)._addSubclassOf_named_instanceVariableNames_package_(_st(aClass)._superclass(),aString,_st(aClass)._instanceVariableNames(),_st(_st(aClass)._package())._name());
+_st(self)._setupClass_($ctx1.locals.newClass);
 _st(_st(_st(aClass)._methodDictionary())._values())._do_((function(each){
-return _st(_st((smalltalk.Compiler || Compiler))._new())._install_forClass_category_(_st(each)._source(),newClass,_st(each)._category());
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(_st((smalltalk.Compiler || Compiler))._new())._install_forClass_category_(_st(each)._source(),$ctx1.locals.newClass,_st(each)._category());
+})}));
 _st(_st(_st(_st(aClass)._class())._methodDictionary())._values())._do_((function(each){
-return _st(_st((smalltalk.Compiler || Compiler))._new())._install_forClass_category_(_st(each)._source(),_st(newClass)._class(),_st(each)._category());
-}));
-_st(self)._setupClass_(newClass);
-return newClass;
+return smalltalk.withContext(function($ctx2) { 
return _st(_st((smalltalk.Compiler || Compiler))._new())._install_forClass_category_(_st(each)._source(),_st($ctx1.locals.newClass)._class(),_st(each)._category());
+})}));
+_st(self)._setupClass_($ctx1.locals.newClass);
+return $ctx1.locals.newClass;
 }, self, "copyClass:named:", [aClass,aString], smalltalk.ClassBuilder)},
 args: ["aClass", "aString"],
 source: "copyClass: aClass named: aString\x0a\x09| newClass |\x0a\x0a\x09newClass := self \x0a\x09\x09addSubclassOf: aClass superclass\x0a\x09\x09named: aString \x0a\x09\x09instanceVariableNames: aClass instanceVariableNames \x0a\x09\x09package: aClass package name.\x0a\x0a\x09self setupClass: newClass.\x0a\x0a\x09aClass methodDictionary values do: [:each |\x0a\x09\x09Compiler new install: each source forClass: newClass category: each category].\x0a\x0a\x09aClass class methodDictionary values do: [:each |\x0a\x09\x09Compiler new install: each source forClass: newClass class category: each category].\x0a\x0a\x09self setupClass: newClass.\x0a\x09^newClass",
@@ -1155,10 +1155,10 @@ selector: "instanceVariableNamesFor:",
 category: 'private',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(aString)._tokenize_(" "))._reject_((function(each){
-return _st(each)._isEmpty();
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(each)._isEmpty();
+})}));
 return $1;
 }, self, "instanceVariableNamesFor:", [aString], smalltalk.ClassBuilder)},
 args: ["aString"],
@@ -1175,7 +1175,7 @@ selector: "renameClass:to:",
 category: 'class creation',
 fn: function (aClass,aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 
 		smalltalk[aString] = aClass;
 		delete smalltalk[aClass.className];
@@ -1201,7 +1201,7 @@ selector: "setupClass:",
 category: 'private',
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { smalltalk.init(aClass);;
+return smalltalk.withContext(function($ctx1) { 
smalltalk.init(aClass);;
 ;
 return self}, self, "setupClass:", [aClass], smalltalk.ClassBuilder)},
 args: ["aClass"],
@@ -1218,7 +1218,7 @@ selector: "superclass:subclass:",
 category: 'class creation',
 fn: function (aClass,aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(self)._superclass_subclass_instanceVariableNames_package_(aClass,aString,"",nil);
 return $1;
 }, self, "superclass:subclass:", [aClass,aString], smalltalk.ClassBuilder)},
@@ -1236,20 +1236,20 @@ selector: "superclass:subclass:instanceVariableNames:package:",
 category: 'class creation',
 fn: function (aClass,aString,aString2,aString3){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1,$2,$3;
-var newClass;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2,$3;
+$ctx1.newClass=nil;
 if(($receiver = aString3) == nil || $receiver == undefined){
 $1="unclassified";
 } else {
 $1=aString3;
 };
-newClass=_st(self)._addSubclassOf_named_instanceVariableNames_package_(aClass,aString,_st(self)._instanceVariableNamesFor_(aString2),$1);
-_st(self)._setupClass_(newClass);
+$ctx1.locals.newClass=_st(self)._addSubclassOf_named_instanceVariableNames_package_(aClass,aString,_st(self)._instanceVariableNamesFor_(aString2),$1);
+_st(self)._setupClass_($ctx1.locals.newClass);
 $2=_st((smalltalk.ClassAdded || ClassAdded))._new();
-_st($2)._theClass_(newClass);
+_st($2)._theClass_($ctx1.locals.newClass);
 $3=_st($2)._yourself();
 _st(_st((smalltalk.SystemAnnouncer || SystemAnnouncer))._current())._announce_($3);
-return newClass;
+return $ctx1.locals.newClass;
 }, self, "superclass:subclass:instanceVariableNames:package:", [aClass,aString,aString2,aString3], smalltalk.ClassBuilder)},
 args: ["aClass", "aString", "aString2", "aString3"],
 source: "superclass: aClass subclass: aString instanceVariableNames: aString2 package: aString3\x0a\x09| newClass |\x0a\x09\x0a    newClass := self addSubclassOf: aClass\x0a\x09\x09named: aString instanceVariableNames: (self instanceVariableNamesFor: aString2)\x0a\x09\x09package: (aString3 ifNil: ['unclassified']).\x0a\x09self setupClass: newClass.\x0a    \x0a    SystemAnnouncer current \x0a    \x09announce: (ClassAdded new\x0a        \x09theClass: newClass;\x0a            yourself).\x0a    \x0a\x09^newClass",
@@ -1269,7 +1269,7 @@ selector: "class:category:",
 category: 'accessing',
 fn: function (aClass,aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@class"]=aClass;
+return smalltalk.withContext(function($ctx1) { 
self["@class"]=aClass;
 self["@category"]=aString;
 return self}, self, "class:category:", [aClass,aString], smalltalk.ClassCategoryReader)},
 args: ["aClass", "aString"],
@@ -1286,7 +1286,7 @@ selector: "compileMethod:",
 category: 'private',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st((smalltalk.Compiler || Compiler))._new())._install_forClass_category_(aString,self["@class"],self["@category"]);
+return smalltalk.withContext(function($ctx1) { 
_st(_st((smalltalk.Compiler || Compiler))._new())._install_forClass_category_(aString,self["@class"],self["@category"]);
 return self}, self, "compileMethod:", [aString], smalltalk.ClassCategoryReader)},
 args: ["aString"],
 source: "compileMethod: aString\x0a\x09Compiler new install: aString forClass: class category: category",
@@ -1302,7 +1302,7 @@ selector: "initialize",
 category: 'initialization',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { smalltalk.Object.fn.prototype._initialize.apply(_st(self), []);
+return smalltalk.withContext(function($ctx1) { 
smalltalk.Object.fn.prototype._initialize.apply(_st(self), []);
 self["@chunkParser"]=_st((smalltalk.ChunkParser || ChunkParser))._new();
 return self}, self, "initialize", [], smalltalk.ClassCategoryReader)},
 args: [],
@@ -1319,14 +1319,14 @@ selector: "scanFrom:",
 category: 'fileIn',
 fn: function (aChunkParser){
 var self=this;
-return smalltalk.withContext(function($ctx) { var chunk;
+return smalltalk.withContext(function($ctx1) { 
$ctx1.chunk=nil;
 _st((function(){
-chunk=_st(aChunkParser)._nextChunk();
-chunk;
-return _st(chunk)._isEmpty();
-}))._whileFalse_((function(){
-return _st(self)._compileMethod_(chunk);
-}));
+return smalltalk.withContext(function($ctx2) { 
$ctx1.locals.chunk=_st(aChunkParser)._nextChunk();
+$ctx1.locals.chunk;
+return _st($ctx1.locals.chunk)._isEmpty();
+})}))._whileFalse_((function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._compileMethod_($ctx1.locals.chunk);
+})}));
 _st(_st((smalltalk.Compiler || Compiler))._new())._setupClass_(self["@class"]);
 return self}, self, "scanFrom:", [aChunkParser], smalltalk.ClassCategoryReader)},
 args: ["aChunkParser"],
@@ -1347,7 +1347,7 @@ selector: "class:",
 category: 'accessing',
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@class"]=aClass;
+return smalltalk.withContext(function($ctx1) { 
self["@class"]=aClass;
 return self}, self, "class:", [aClass], smalltalk.ClassCommentReader)},
 args: ["aClass"],
 source: "class: aClass\x0a\x09class := aClass",
@@ -1363,7 +1363,7 @@ selector: "initialize",
 category: 'initialization',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { smalltalk.Object.fn.prototype._initialize.apply(_st(self), []);
+return smalltalk.withContext(function($ctx1) { 
smalltalk.Object.fn.prototype._initialize.apply(_st(self), []);
 self["@chunkParser"]=_st((smalltalk.ChunkParser || ChunkParser))._new();
 return self}, self, "initialize", [], smalltalk.ClassCommentReader)},
 args: [],
@@ -1380,12 +1380,12 @@ selector: "scanFrom:",
 category: 'fileIn',
 fn: function (aChunkParser){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var chunk;
-chunk=_st(aChunkParser)._nextChunk();
-$1=_st(chunk)._isEmpty();
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.chunk=nil;
+$ctx1.locals.chunk=_st(aChunkParser)._nextChunk();
+$1=_st($ctx1.locals.chunk)._isEmpty();
 if(! smalltalk.assert($1)){
-_st(self)._setComment_(chunk);
+_st(self)._setComment_($ctx1.locals.chunk);
 };
 return self}, self, "scanFrom:", [aChunkParser], smalltalk.ClassCommentReader)},
 args: ["aChunkParser"],
@@ -1402,7 +1402,7 @@ selector: "setComment:",
 category: 'private',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self["@class"])._comment_(aString);
+return smalltalk.withContext(function($ctx1) { 
_st(self["@class"])._comment_(aString);
 return self}, self, "setComment:", [aString], smalltalk.ClassCommentReader)},
 args: ["aString"],
 source: "setComment: aString\x0a    class comment: aString",
@@ -1421,22 +1421,22 @@ selector: "getNodesFrom:",
 category: 'accessing',
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
-var children;
-var others;
-children=[];
-others=[];
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.children=nil;
+$ctx1.others=nil;
+$ctx1.locals.children=[];
+$ctx1.locals.others=[];
 _st(aCollection)._do_((function(each){
-$1=_st(_st(each)._superclass()).__eq(_st(self)._theClass());
+return smalltalk.withContext(function($ctx2) { 
$1=_st(_st(each)._superclass()).__eq(_st(self)._theClass());
 if(smalltalk.assert($1)){
-return _st(children)._add_(each);
+return _st($ctx1.locals.children)._add_(each);
 } else {
-return _st(others)._add_(each);
+return _st($ctx1.locals.others)._add_(each);
 };
-}));
-self["@nodes"]=_st(children)._collect_((function(each){
-return _st((smalltalk.ClassSorterNode || ClassSorterNode))._on_classes_level_(each,others,_st(_st(self)._level()).__plus((1)));
-}));
+})}));
+self["@nodes"]=_st($ctx1.locals.children)._collect_((function(each){
+return smalltalk.withContext(function($ctx2) { 
return _st((smalltalk.ClassSorterNode || ClassSorterNode))._on_classes_level_(each,$ctx1.locals.others,_st(_st(self)._level()).__plus((1)));
+})}));
 return self}, self, "getNodesFrom:", [aCollection], smalltalk.ClassSorterNode)},
 args: ["aCollection"],
 source: "getNodesFrom: aCollection\x0a\x09| children others |\x0a\x09children := #().\x0a\x09others := #().\x0a\x09aCollection do: [:each |\x0a\x09\x09(each superclass = self theClass)\x0a\x09\x09\x09ifTrue: [children add: each]\x0a\x09\x09\x09ifFalse: [others add: each]].\x0a\x09nodes:= children collect: [:each |\x0a\x09\x09ClassSorterNode on: each classes: others level: self level + 1]",
@@ -1452,7 +1452,7 @@ selector: "level",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@level"];
+return smalltalk.withContext(function($ctx1) { 
return self["@level"];
 }, self, "level", [], smalltalk.ClassSorterNode)},
 args: [],
 source: "level\x0a\x09^level",
@@ -1468,7 +1468,7 @@ selector: "level:",
 category: 'accessing',
 fn: function (anInteger){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@level"]=anInteger;
+return smalltalk.withContext(function($ctx1) { 
self["@level"]=anInteger;
 return self}, self, "level:", [anInteger], smalltalk.ClassSorterNode)},
 args: ["anInteger"],
 source: "level: anInteger\x0a\x09level := anInteger",
@@ -1484,7 +1484,7 @@ selector: "nodes",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@nodes"];
+return smalltalk.withContext(function($ctx1) { 
return self["@nodes"];
 }, self, "nodes", [], smalltalk.ClassSorterNode)},
 args: [],
 source: "nodes\x0a\x09^nodes",
@@ -1500,7 +1500,7 @@ selector: "theClass",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@theClass"];
+return smalltalk.withContext(function($ctx1) { 
return self["@theClass"];
 }, self, "theClass", [], smalltalk.ClassSorterNode)},
 args: [],
 source: "theClass\x0a\x09^theClass",
@@ -1516,7 +1516,7 @@ selector: "theClass:",
 category: 'accessing',
 fn: function (aClass){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@theClass"]=aClass;
+return smalltalk.withContext(function($ctx1) { 
self["@theClass"]=aClass;
 return self}, self, "theClass:", [aClass], smalltalk.ClassSorterNode)},
 args: ["aClass"],
 source: "theClass: aClass\x0a\x09theClass := aClass",
@@ -1532,12 +1532,12 @@ selector: "traverseClassesWith:",
 category: 'visiting',
 fn: function (aCollection){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(aCollection)._add_(_st(self)._theClass());
+return smalltalk.withContext(function($ctx1) { 
_st(aCollection)._add_(_st(self)._theClass());
 _st(_st(_st(self)._nodes())._sorted_((function(a,b){
-return _st(_st(_st(a)._theClass())._name()).__lt_eq(_st(_st(b)._theClass())._name());
-})))._do_((function(aNode){
-return _st(aNode)._traverseClassesWith_(aCollection);
-}));
+return smalltalk.withContext(function($ctx2) { 
return _st(_st(_st(a)._theClass())._name()).__lt_eq(_st(_st(b)._theClass())._name());
+})})))._do_((function(aNode){
+return smalltalk.withContext(function($ctx2) { 
return _st(aNode)._traverseClassesWith_(aCollection);
+})}));
 return self}, self, "traverseClassesWith:", [aCollection], smalltalk.ClassSorterNode)},
 args: ["aCollection"],
 source: "traverseClassesWith: aCollection\x0a\x09\x22sort classes alphabetically Issue #143\x22\x0a\x0a\x09aCollection add: self theClass.\x0a\x09(self nodes sorted: [:a :b | a theClass name <= b theClass name ]) do: [:aNode |\x0a\x09\x09aNode traverseClassesWith: aCollection ].",
@@ -1554,7 +1554,7 @@ selector: "on:classes:level:",
 category: 'instance creation',
 fn: function (aClass,aCollection,anInteger){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $2,$3,$1;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
 $2=_st(self)._new();
 _st($2)._theClass_(aClass);
 _st($2)._level_(anInteger);

文件差异内容过多而无法显示
+ 195 - 195
js/Kernel-Collections.deploy.js


文件差异内容过多而无法显示
+ 195 - 195
js/Kernel-Collections.js


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

@@ -6,7 +6,7 @@ smalltalk.method({
 selector: "context",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self.context;
+return smalltalk.withContext(function($ctx1) { 
return self.context;
 ;
 return self}, self, "context", [], smalltalk.Error)}
 }),
@@ -18,7 +18,7 @@ smalltalk.method({
 selector: "isSmalltalkError",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self.smalltalkError === true;
+return smalltalk.withContext(function($ctx1) { 
return self.smalltalkError === true;
 ;
 return self}, self, "isSmalltalkError", [], smalltalk.Error)}
 }),
@@ -30,7 +30,7 @@ smalltalk.method({
 selector: "jsStack",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self.stack;
+return smalltalk.withContext(function($ctx1) { 
return self.stack;
 ;
 return self}, self, "jsStack", [], smalltalk.Error)}
 }),
@@ -42,7 +42,7 @@ smalltalk.method({
 selector: "messageText",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@messageText"];
+return smalltalk.withContext(function($ctx1) { 
return self["@messageText"];
 }, self, "messageText", [], smalltalk.Error)}
 }),
 smalltalk.Error);
@@ -53,7 +53,7 @@ smalltalk.method({
 selector: "messageText:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@messageText"]=aString;
+return smalltalk.withContext(function($ctx1) { 
self["@messageText"]=aString;
 return self}, self, "messageText:", [aString], smalltalk.Error)}
 }),
 smalltalk.Error);
@@ -64,7 +64,7 @@ smalltalk.method({
 selector: "signal",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { self.context = smalltalk.getThisContext(); self.smalltalkError = true; throw(self);
+return smalltalk.withContext(function($ctx1) { 
self.context = smalltalk.getThisContext(); self.smalltalkError = true; throw(self);
 ;
 return self}, self, "signal", [], smalltalk.Error)}
 }),
@@ -76,7 +76,7 @@ smalltalk.method({
 selector: "signal:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._messageText_(aString);
+return smalltalk.withContext(function($ctx1) { 
_st(self)._messageText_(aString);
 _st(self)._signal();
 return self}, self, "signal:", [aString], smalltalk.Error)}
 }),
@@ -89,7 +89,7 @@ smalltalk.method({
 selector: "signal",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._new())._signal();
 return $1;
 }, self, "signal", [], smalltalk.Error.klass)}
@@ -102,7 +102,7 @@ smalltalk.method({
 selector: "signal:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._new())._signal_(aString);
 return $1;
 }, self, "signal:", [aString], smalltalk.Error.klass)}
@@ -117,7 +117,7 @@ smalltalk.method({
 selector: "message",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@message"];
+return smalltalk.withContext(function($ctx1) { 
return self["@message"];
 }, self, "message", [], smalltalk.MessageNotUnderstood)}
 }),
 smalltalk.MessageNotUnderstood);
@@ -128,7 +128,7 @@ smalltalk.method({
 selector: "message:",
 fn: function (aMessage){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@message"]=aMessage;
+return smalltalk.withContext(function($ctx1) { 
self["@message"]=aMessage;
 return self}, self, "message:", [aMessage], smalltalk.MessageNotUnderstood)}
 }),
 smalltalk.MessageNotUnderstood);
@@ -139,7 +139,7 @@ smalltalk.method({
 selector: "messageText",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(_st(_st(self)._receiver())._asString()).__comma(" does not understand #")).__comma(_st(_st(self)._message())._selector());
 return $1;
 }, self, "messageText", [], smalltalk.MessageNotUnderstood)}
@@ -152,7 +152,7 @@ smalltalk.method({
 selector: "receiver",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@receiver"];
+return smalltalk.withContext(function($ctx1) { 
return self["@receiver"];
 }, self, "receiver", [], smalltalk.MessageNotUnderstood)}
 }),
 smalltalk.MessageNotUnderstood);
@@ -163,7 +163,7 @@ smalltalk.method({
 selector: "receiver:",
 fn: function (anObject){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@receiver"]=anObject;
+return smalltalk.withContext(function($ctx1) { 
self["@receiver"]=anObject;
 return self}, self, "receiver:", [anObject], smalltalk.MessageNotUnderstood)}
 }),
 smalltalk.MessageNotUnderstood);
@@ -177,7 +177,7 @@ smalltalk.method({
 selector: "object",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@object"];
+return smalltalk.withContext(function($ctx1) { 
return self["@object"];
 }, self, "object", [], smalltalk.NonBooleanReceiver)}
 }),
 smalltalk.NonBooleanReceiver);
@@ -188,7 +188,7 @@ smalltalk.method({
 selector: "object:",
 fn: function (anObject){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@object"]=anObject;
+return smalltalk.withContext(function($ctx1) { 
self["@object"]=anObject;
 return self}, self, "object:", [anObject], smalltalk.NonBooleanReceiver)}
 }),
 smalltalk.NonBooleanReceiver);
@@ -202,7 +202,7 @@ smalltalk.method({
 selector: "handleError:",
 fn: function (anError){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(anError)._context();
 if(($receiver = $1) == nil || $receiver == undefined){
 $1;
@@ -220,7 +220,7 @@ smalltalk.method({
 selector: "log:",
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(console)._log_(aString);
+return smalltalk.withContext(function($ctx1) { 
_st(console)._log_(aString);
 return self}, self, "log:", [aString], smalltalk.ErrorHandler)}
 }),
 smalltalk.ErrorHandler);
@@ -231,7 +231,7 @@ smalltalk.method({
 selector: "logContext:",
 fn: function (aContext){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aContext)._home();
 if(($receiver = $1) == nil || $receiver == undefined){
 $1;
@@ -249,7 +249,7 @@ smalltalk.method({
 selector: "logError:",
 fn: function (anError){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._log_(_st(anError)._messageText());
+return smalltalk.withContext(function($ctx1) { 
_st(self)._log_(_st(anError)._messageText());
 return self}, self, "logError:", [anError], smalltalk.ErrorHandler)}
 }),
 smalltalk.ErrorHandler);
@@ -260,7 +260,7 @@ smalltalk.method({
 selector: "logErrorContext:",
 fn: function (aContext){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = aContext) == nil || $receiver == undefined){
 aContext;
 } else {
@@ -283,7 +283,7 @@ smalltalk.method({
 selector: "current",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@current"]) == nil || $receiver == undefined){
 self["@current"]=_st(self)._new();
 $1=self["@current"];
@@ -301,7 +301,7 @@ smalltalk.method({
 selector: "initialize",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._register();
+return smalltalk.withContext(function($ctx1) { 
_st(self)._register();
 return self}, self, "initialize", [], smalltalk.ErrorHandler.klass)}
 }),
 smalltalk.ErrorHandler.klass);
@@ -312,7 +312,7 @@ smalltalk.method({
 selector: "register",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st((smalltalk.ErrorHandler || ErrorHandler))._setCurrent_(_st(self)._new());
+return smalltalk.withContext(function($ctx1) { 
_st((smalltalk.ErrorHandler || ErrorHandler))._setCurrent_(_st(self)._new());
 return self}, self, "register", [], smalltalk.ErrorHandler.klass)}
 }),
 smalltalk.ErrorHandler.klass);
@@ -323,7 +323,7 @@ smalltalk.method({
 selector: "setCurrent:",
 fn: function (anHandler){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@current"]=anHandler;
+return smalltalk.withContext(function($ctx1) { 
self["@current"]=anHandler;
 return self}, self, "setCurrent:", [anHandler], smalltalk.ErrorHandler.klass)}
 }),
 smalltalk.ErrorHandler.klass);

+ 25 - 25
js/Kernel-Exceptions.js

@@ -7,7 +7,7 @@ selector: "context",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self.context;
+return smalltalk.withContext(function($ctx1) { 
return self.context;
 ;
 return self}, self, "context", [], smalltalk.Error)},
 args: [],
@@ -24,7 +24,7 @@ selector: "isSmalltalkError",
 category: 'testing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self.smalltalkError === true;
+return smalltalk.withContext(function($ctx1) { 
return self.smalltalkError === true;
 ;
 return self}, self, "isSmalltalkError", [], smalltalk.Error)},
 args: [],
@@ -41,7 +41,7 @@ selector: "jsStack",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self.stack;
+return smalltalk.withContext(function($ctx1) { 
return self.stack;
 ;
 return self}, self, "jsStack", [], smalltalk.Error)},
 args: [],
@@ -58,7 +58,7 @@ selector: "messageText",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@messageText"];
+return smalltalk.withContext(function($ctx1) { 
return self["@messageText"];
 }, self, "messageText", [], smalltalk.Error)},
 args: [],
 source: "messageText\x0a\x09^messageText",
@@ -74,7 +74,7 @@ selector: "messageText:",
 category: 'accessing',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@messageText"]=aString;
+return smalltalk.withContext(function($ctx1) { 
self["@messageText"]=aString;
 return self}, self, "messageText:", [aString], smalltalk.Error)},
 args: ["aString"],
 source: "messageText: aString\x0a\x09messageText := aString",
@@ -90,7 +90,7 @@ selector: "signal",
 category: 'signaling',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { self.context = smalltalk.getThisContext(); self.smalltalkError = true; throw(self);
+return smalltalk.withContext(function($ctx1) { 
self.context = smalltalk.getThisContext(); self.smalltalkError = true; throw(self);
 ;
 return self}, self, "signal", [], smalltalk.Error)},
 args: [],
@@ -107,7 +107,7 @@ selector: "signal:",
 category: 'signaling',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._messageText_(aString);
+return smalltalk.withContext(function($ctx1) { 
_st(self)._messageText_(aString);
 _st(self)._signal();
 return self}, self, "signal:", [aString], smalltalk.Error)},
 args: ["aString"],
@@ -125,7 +125,7 @@ selector: "signal",
 category: 'instance creation',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._new())._signal();
 return $1;
 }, self, "signal", [], smalltalk.Error.klass)},
@@ -143,7 +143,7 @@ selector: "signal:",
 category: 'instance creation',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(self)._new())._signal_(aString);
 return $1;
 }, self, "signal:", [aString], smalltalk.Error.klass)},
@@ -163,7 +163,7 @@ selector: "message",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@message"];
+return smalltalk.withContext(function($ctx1) { 
return self["@message"];
 }, self, "message", [], smalltalk.MessageNotUnderstood)},
 args: [],
 source: "message\x0a\x09^message",
@@ -179,7 +179,7 @@ selector: "message:",
 category: 'accessing',
 fn: function (aMessage){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@message"]=aMessage;
+return smalltalk.withContext(function($ctx1) { 
self["@message"]=aMessage;
 return self}, self, "message:", [aMessage], smalltalk.MessageNotUnderstood)},
 args: ["aMessage"],
 source: "message: aMessage\x0a\x09message := aMessage",
@@ -195,7 +195,7 @@ selector: "messageText",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(_st(_st(_st(self)._receiver())._asString()).__comma(" does not understand #")).__comma(_st(_st(self)._message())._selector());
 return $1;
 }, self, "messageText", [], smalltalk.MessageNotUnderstood)},
@@ -213,7 +213,7 @@ selector: "receiver",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@receiver"];
+return smalltalk.withContext(function($ctx1) { 
return self["@receiver"];
 }, self, "receiver", [], smalltalk.MessageNotUnderstood)},
 args: [],
 source: "receiver\x0a\x09^receiver",
@@ -229,7 +229,7 @@ selector: "receiver:",
 category: 'accessing',
 fn: function (anObject){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@receiver"]=anObject;
+return smalltalk.withContext(function($ctx1) { 
self["@receiver"]=anObject;
 return self}, self, "receiver:", [anObject], smalltalk.MessageNotUnderstood)},
 args: ["anObject"],
 source: "receiver: anObject\x0a\x09receiver := anObject",
@@ -248,7 +248,7 @@ selector: "object",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@object"];
+return smalltalk.withContext(function($ctx1) { 
return self["@object"];
 }, self, "object", [], smalltalk.NonBooleanReceiver)},
 args: [],
 source: "object\x0a\x09^ object",
@@ -264,7 +264,7 @@ selector: "object:",
 category: 'accessing',
 fn: function (anObject){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@object"]=anObject;
+return smalltalk.withContext(function($ctx1) { 
self["@object"]=anObject;
 return self}, self, "object:", [anObject], smalltalk.NonBooleanReceiver)},
 args: ["anObject"],
 source: "object: anObject\x0a\x09object := anObject",
@@ -283,7 +283,7 @@ selector: "handleError:",
 category: 'error handling',
 fn: function (anError){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(anError)._context();
 if(($receiver = $1) == nil || $receiver == undefined){
 $1;
@@ -306,7 +306,7 @@ selector: "log:",
 category: 'private',
 fn: function (aString){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(console)._log_(aString);
+return smalltalk.withContext(function($ctx1) { 
_st(console)._log_(aString);
 return self}, self, "log:", [aString], smalltalk.ErrorHandler)},
 args: ["aString"],
 source: "log: aString\x0a\x09console log: aString",
@@ -322,7 +322,7 @@ selector: "logContext:",
 category: 'private',
 fn: function (aContext){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 $1=_st(aContext)._home();
 if(($receiver = $1) == nil || $receiver == undefined){
 $1;
@@ -345,7 +345,7 @@ selector: "logError:",
 category: 'private',
 fn: function (anError){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._log_(_st(anError)._messageText());
+return smalltalk.withContext(function($ctx1) { 
_st(self)._log_(_st(anError)._messageText());
 return self}, self, "logError:", [anError], smalltalk.ErrorHandler)},
 args: ["anError"],
 source: "logError: anError\x0a\x09self log: anError messageText",
@@ -361,7 +361,7 @@ selector: "logErrorContext:",
 category: 'private',
 fn: function (aContext){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = aContext) == nil || $receiver == undefined){
 aContext;
 } else {
@@ -389,7 +389,7 @@ selector: "current",
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { var $1;
+return smalltalk.withContext(function($ctx1) { 
var $1;
 if(($receiver = self["@current"]) == nil || $receiver == undefined){
 self["@current"]=_st(self)._new();
 $1=self["@current"];
@@ -412,7 +412,7 @@ selector: "initialize",
 category: 'initialization',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._register();
+return smalltalk.withContext(function($ctx1) { 
_st(self)._register();
 return self}, self, "initialize", [], smalltalk.ErrorHandler.klass)},
 args: [],
 source: "initialize\x0a\x09self register",
@@ -428,7 +428,7 @@ selector: "register",
 category: 'initialization',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st((smalltalk.ErrorHandler || ErrorHandler))._setCurrent_(_st(self)._new());
+return smalltalk.withContext(function($ctx1) { 
_st((smalltalk.ErrorHandler || ErrorHandler))._setCurrent_(_st(self)._new());
 return self}, self, "register", [], smalltalk.ErrorHandler.klass)},
 args: [],
 source: "register\x0a\x09ErrorHandler setCurrent: self new",
@@ -444,7 +444,7 @@ selector: "setCurrent:",
 category: 'accessing',
 fn: function (anHandler){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@current"]=anHandler;
+return smalltalk.withContext(function($ctx1) { 
self["@current"]=anHandler;
 return self}, self, "setCurrent:", [anHandler], smalltalk.ErrorHandler.klass)},
 args: ["anHandler"],
 source: "setCurrent: anHandler\x0a\x09current := anHandler",

文件差异内容过多而无法显示
+ 317 - 301
js/Kernel-Methods.deploy.js


文件差异内容过多而无法显示
+ 320 - 299
js/Kernel-Methods.js


文件差异内容过多而无法显示
+ 319 - 322
js/Kernel-Objects.deploy.js


文件差异内容过多而无法显示
+ 319 - 322
js/Kernel-Objects.js


文件差异内容过多而无法显示
+ 336 - 336
js/Kernel-Tests.deploy.js


文件差异内容过多而无法显示
+ 336 - 336
js/Kernel-Tests.js


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

@@ -6,7 +6,7 @@ smalltalk.method({
 selector: "clear",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self}, self, "clear", [], smalltalk.ConsoleTranscript)}
+return smalltalk.withContext(function($ctx1) { 
return self}, self, "clear", [], smalltalk.ConsoleTranscript)}
 }),
 smalltalk.ConsoleTranscript);
 
@@ -16,7 +16,7 @@ smalltalk.method({
 selector: "cr",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self}, self, "cr", [], smalltalk.ConsoleTranscript)}
+return smalltalk.withContext(function($ctx1) { 
return self}, self, "cr", [], smalltalk.ConsoleTranscript)}
 }),
 smalltalk.ConsoleTranscript);
 
@@ -26,7 +26,7 @@ smalltalk.method({
 selector: "open",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self}, self, "open", [], smalltalk.ConsoleTranscript)}
+return smalltalk.withContext(function($ctx1) { 
return self}, self, "open", [], smalltalk.ConsoleTranscript)}
 }),
 smalltalk.ConsoleTranscript);
 
@@ -36,7 +36,7 @@ smalltalk.method({
 selector: "show:",
 fn: function (anObject){
 var self=this;
-return smalltalk.withContext(function($ctx) { console.log(String(string._asString()));
+return smalltalk.withContext(function($ctx1) { 
console.log(String(string._asString()));
 ;
 return self}, self, "show:", [anObject], smalltalk.ConsoleTranscript)}
 }),
@@ -49,7 +49,7 @@ smalltalk.method({
 selector: "initialize",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st((smalltalk.Transcript || Transcript))._register_(_st(self)._new());
+return smalltalk.withContext(function($ctx1) { 
_st((smalltalk.Transcript || Transcript))._register_(_st(self)._new());
 return self}, self, "initialize", [], smalltalk.ConsoleTranscript.klass)}
 }),
 smalltalk.ConsoleTranscript.klass);
@@ -64,7 +64,7 @@ smalltalk.method({
 selector: "clear",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._current())._clear();
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._current())._clear();
 return self}, self, "clear", [], smalltalk.Transcript.klass)}
 }),
 smalltalk.Transcript.klass);
@@ -75,7 +75,7 @@ smalltalk.method({
 selector: "cr",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._current())._show_(_st((smalltalk.String || String))._cr());
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._current())._show_(_st((smalltalk.String || String))._cr());
 return self}, self, "cr", [], smalltalk.Transcript.klass)}
 }),
 smalltalk.Transcript.klass);
@@ -86,7 +86,7 @@ smalltalk.method({
 selector: "current",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@current"];
+return smalltalk.withContext(function($ctx1) { 
return self["@current"];
 }, self, "current", [], smalltalk.Transcript.klass)}
 }),
 smalltalk.Transcript.klass);
@@ -97,7 +97,7 @@ smalltalk.method({
 selector: "new",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._shouldNotImplement();
+return smalltalk.withContext(function($ctx1) { 
_st(self)._shouldNotImplement();
 return self}, self, "new", [], smalltalk.Transcript.klass)}
 }),
 smalltalk.Transcript.klass);
@@ -108,7 +108,7 @@ smalltalk.method({
 selector: "open",
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._current())._open();
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._current())._open();
 return self}, self, "open", [], smalltalk.Transcript.klass)}
 }),
 smalltalk.Transcript.klass);
@@ -119,7 +119,7 @@ smalltalk.method({
 selector: "register:",
 fn: function (aTranscript){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@current"]=aTranscript;
+return smalltalk.withContext(function($ctx1) { 
self["@current"]=aTranscript;
 return self}, self, "register:", [aTranscript], smalltalk.Transcript.klass)}
 }),
 smalltalk.Transcript.klass);
@@ -130,7 +130,7 @@ smalltalk.method({
 selector: "show:",
 fn: function (anObject){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._current())._show_(anObject);
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._current())._show_(anObject);
 return self}, self, "show:", [anObject], smalltalk.Transcript.klass)}
 }),
 smalltalk.Transcript.klass);

+ 12 - 12
js/Kernel-Transcript.js

@@ -7,7 +7,7 @@ selector: "clear",
 category: 'printing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self}, self, "clear", [], smalltalk.ConsoleTranscript)},
+return smalltalk.withContext(function($ctx1) { 
return self}, self, "clear", [], smalltalk.ConsoleTranscript)},
 args: [],
 source: "clear\x0a\x09\x22no op\x22",
 messageSends: [],
@@ -22,7 +22,7 @@ selector: "cr",
 category: 'printing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self}, self, "cr", [], smalltalk.ConsoleTranscript)},
+return smalltalk.withContext(function($ctx1) { 
return self}, self, "cr", [], smalltalk.ConsoleTranscript)},
 args: [],
 source: "cr\x0a\x09\x22no op\x22",
 messageSends: [],
@@ -37,7 +37,7 @@ selector: "open",
 category: 'actions',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self}, self, "open", [], smalltalk.ConsoleTranscript)},
+return smalltalk.withContext(function($ctx1) { 
return self}, self, "open", [], smalltalk.ConsoleTranscript)},
 args: [],
 source: "open",
 messageSends: [],
@@ -52,7 +52,7 @@ selector: "show:",
 category: 'printing',
 fn: function (anObject){
 var self=this;
-return smalltalk.withContext(function($ctx) { console.log(String(string._asString()));
+return smalltalk.withContext(function($ctx1) { 
console.log(String(string._asString()));
 ;
 return self}, self, "show:", [anObject], smalltalk.ConsoleTranscript)},
 args: ["anObject"],
@@ -70,7 +70,7 @@ selector: "initialize",
 category: 'initialization',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st((smalltalk.Transcript || Transcript))._register_(_st(self)._new());
+return smalltalk.withContext(function($ctx1) { 
_st((smalltalk.Transcript || Transcript))._register_(_st(self)._new());
 return self}, self, "initialize", [], smalltalk.ConsoleTranscript.klass)},
 args: [],
 source: "initialize\x0a\x09Transcript register: self new",
@@ -90,7 +90,7 @@ selector: "clear",
 category: 'printing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._current())._clear();
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._current())._clear();
 return self}, self, "clear", [], smalltalk.Transcript.klass)},
 args: [],
 source: "clear\x0a    self current clear",
@@ -106,7 +106,7 @@ selector: "cr",
 category: 'printing',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._current())._show_(_st((smalltalk.String || String))._cr());
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._current())._show_(_st((smalltalk.String || String))._cr());
 return self}, self, "cr", [], smalltalk.Transcript.klass)},
 args: [],
 source: "cr\x0a    self current show: String cr",
@@ -122,7 +122,7 @@ selector: "current",
 category: 'instance creation',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { return self["@current"];
+return smalltalk.withContext(function($ctx1) { 
return self["@current"];
 }, self, "current", [], smalltalk.Transcript.klass)},
 args: [],
 source: "current\x0a    ^current",
@@ -138,7 +138,7 @@ selector: "new",
 category: 'instance creation',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(self)._shouldNotImplement();
+return smalltalk.withContext(function($ctx1) { 
_st(self)._shouldNotImplement();
 return self}, self, "new", [], smalltalk.Transcript.klass)},
 args: [],
 source: "new\x0a    self shouldNotImplement",
@@ -154,7 +154,7 @@ selector: "open",
 category: 'instance creation',
 fn: function (){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._current())._open();
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._current())._open();
 return self}, self, "open", [], smalltalk.Transcript.klass)},
 args: [],
 source: "open\x0a    self current open",
@@ -170,7 +170,7 @@ selector: "register:",
 category: 'instance creation',
 fn: function (aTranscript){
 var self=this;
-return smalltalk.withContext(function($ctx) { self["@current"]=aTranscript;
+return smalltalk.withContext(function($ctx1) { 
self["@current"]=aTranscript;
 return self}, self, "register:", [aTranscript], smalltalk.Transcript.klass)},
 args: ["aTranscript"],
 source: "register: aTranscript\x0a\x09current := aTranscript",
@@ -186,7 +186,7 @@ selector: "show:",
 category: 'printing',
 fn: function (anObject){
 var self=this;
-return smalltalk.withContext(function($ctx) { _st(_st(self)._current())._show_(anObject);
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._current())._show_(anObject);
 return self}, self, "show:", [anObject], smalltalk.Transcript.klass)},
 args: ["anObject"],
 source: "show: anObject\x0a    self current show: anObject",

+ 234 - 235
js/SUnit.deploy.js

@@ -6,8 +6,8 @@ smalltalk.method({
 selector: "result",
 fn: function (){
 var self=this;
-return self["@result"];
-}
+return smalltalk.withContext(function($ctx1) { 
return self["@result"];
+}, self, "result", [], smalltalk.ResultAnnouncement)}
 }),
 smalltalk.ResultAnnouncement);
 
@@ -17,8 +17,8 @@ smalltalk.method({
 selector: "result:",
 fn: function (aTestResult){
 var self=this;
-self["@result"]=aTestResult;
-return self}
+return smalltalk.withContext(function($ctx1) { 
self["@result"]=aTestResult;
+return self}, self, "result:", [aTestResult], smalltalk.ResultAnnouncement)}
 }),
 smalltalk.ResultAnnouncement);
 
@@ -29,11 +29,10 @@ smalltalk.addMethod(
 "_assert_",
 smalltalk.method({
 selector: "assert:",
-fn: function (aBoolean) {
-    var self = this;
-    smalltalk.send(self, "_assert_description_", [aBoolean, "Assertion failed"]);
-    return self;
-}
+fn: function (aBoolean){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(self)._assert_description_(aBoolean,"Assertion failed");
+return self}, self, "assert:", [aBoolean], smalltalk.TestCase)}
 }),
 smalltalk.TestCase);
 
@@ -41,13 +40,12 @@ smalltalk.addMethod(
 "_assert_description_",
 smalltalk.method({
 selector: "assert:description:",
-fn: function (aBoolean, aString) {
-    var self = this;
-    if (!smalltalk.assert(aBoolean)) {
-        smalltalk.send(self, "_signalFailure_", [aString]);
-    }
-    return self;
-}
+fn: function (aBoolean,aString){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
if(! smalltalk.assert(aBoolean)){
+_st(self)._signalFailure_(aString);
+};
+return self}, self, "assert:description:", [aBoolean,aString], smalltalk.TestCase)}
 }),
 smalltalk.TestCase);
 
@@ -55,12 +53,12 @@ smalltalk.addMethod(
 "_assert_equals_",
 smalltalk.method({
 selector: "assert:equals:",
-fn: function (expected, actual) {
-    var self = this;
-    var $1;
-    $1 = smalltalk.send(self, "_assert_description_", [smalltalk.send(expected, "__eq", [actual]), smalltalk.send(smalltalk.send(smalltalk.send("Expected: ", "__comma", [smalltalk.send(expected, "_asString", [])]), "__comma", [" but was: "]), "__comma", [smalltalk.send(actual, "_asString", [])])]);
-    return $1;
-}
+fn: function (expected,actual){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$1=_st(self)._assert_description_(_st(expected).__eq(actual),_st(_st(_st("Expected: ").__comma(_st(expected)._asString())).__comma(" but was: ")).__comma(_st(actual)._asString()));
+return $1;
+}, self, "assert:equals:", [expected,actual], smalltalk.TestCase)}
 }),
 smalltalk.TestCase);
 
@@ -68,11 +66,10 @@ smalltalk.addMethod(
 "_deny_",
 smalltalk.method({
 selector: "deny:",
-fn: function (aBoolean) {
-    var self = this;
-    smalltalk.send(self, "_assert_", [smalltalk.send(aBoolean, "_not", [])]);
-    return self;
-}
+fn: function (aBoolean){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(self)._assert_(_st(aBoolean)._not());
+return self}, self, "deny:", [aBoolean], smalltalk.TestCase)}
 }),
 smalltalk.TestCase);
 
@@ -82,8 +79,8 @@ smalltalk.method({
 selector: "performTest",
 fn: function (){
 var self=this;
-smalltalk.send(self,"_perform_",[smalltalk.send(self,"_selector",[])]);
-return self}
+return smalltalk.withContext(function($ctx1) { 
_st(self)._perform_(_st(self)._selector());
+return self}, self, "performTest", [], smalltalk.TestCase)}
 }),
 smalltalk.TestCase);
 
@@ -93,13 +90,13 @@ smalltalk.method({
 selector: "runCase",
 fn: function (){
 var self=this;
-smalltalk.send((function(){
-smalltalk.send(self,"_setUp",[]);
-return smalltalk.send(self,"_performTest",[]);
-}),"_ensure_",[(function(){
-return smalltalk.send(self,"_tearDown",[]);
-})]);
-return self}
+return smalltalk.withContext(function($ctx1) { 
_st((function(){
+return smalltalk.withContext(function($ctx2) { 
_st(self)._setUp();
+return _st(self)._performTest();
+})}))._ensure_((function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._tearDown();
+})}));
+return self}, self, "runCase", [], smalltalk.TestCase)}
 }),
 smalltalk.TestCase);
 
@@ -107,10 +104,10 @@ smalltalk.addMethod(
 "_selector",
 smalltalk.method({
 selector: "selector",
-fn: function () {
-    var self = this;
-    return self['@testSelector'];
-}
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
return self["@testSelector"];
+}, self, "selector", [], smalltalk.TestCase)}
 }),
 smalltalk.TestCase);
 
@@ -118,11 +115,10 @@ smalltalk.addMethod(
 "_setTestSelector_",
 smalltalk.method({
 selector: "setTestSelector:",
-fn: function (aSelector) {
-    var self = this;
-    self['@testSelector'] = aSelector;
-    return self;
-}
+fn: function (aSelector){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
self["@testSelector"]=aSelector;
+return self}, self, "setTestSelector:", [aSelector], smalltalk.TestCase)}
 }),
 smalltalk.TestCase);
 
@@ -130,10 +126,9 @@ smalltalk.addMethod(
 "_setUp",
 smalltalk.method({
 selector: "setUp",
-fn: function () {
-    var self = this;
-    return self;
-}
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
return self}, self, "setUp", [], smalltalk.TestCase)}
 }),
 smalltalk.TestCase);
 
@@ -141,11 +136,10 @@ smalltalk.addMethod(
 "_should_",
 smalltalk.method({
 selector: "should:",
-fn: function (aBlock) {
-    var self = this;
-    smalltalk.send(self, "_assert_", [smalltalk.send(aBlock, "_value", [])]);
-    return self;
-}
+fn: function (aBlock){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(self)._assert_(_st(aBlock)._value());
+return self}, self, "should:", [aBlock], smalltalk.TestCase)}
 }),
 smalltalk.TestCase);
 
@@ -153,11 +147,15 @@ smalltalk.addMethod(
 "_should_raise_",
 smalltalk.method({
 selector: "should:raise:",
-fn: function (aBlock, anExceptionClass) {
-    var self = this;
-    smalltalk.send(self, "_assert_", [smalltalk.send(function () {smalltalk.send(aBlock, "_value", []);return false;}, "_on_do_", [anExceptionClass, function (ex) {return true;}])]);
-    return self;
-}
+fn: function (aBlock,anExceptionClass){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(self)._assert_(_st((function(){
+return smalltalk.withContext(function($ctx2) { 
_st(aBlock)._value();
+return false;
+})}))._on_do_(anExceptionClass,(function(ex){
+return smalltalk.withContext(function($ctx2) { 
return true;
+})})));
+return self}, self, "should:raise:", [aBlock,anExceptionClass], smalltalk.TestCase)}
 }),
 smalltalk.TestCase);
 
@@ -165,11 +163,15 @@ smalltalk.addMethod(
 "_shouldnt_raise_",
 smalltalk.method({
 selector: "shouldnt:raise:",
-fn: function (aBlock, anExceptionClass) {
-    var self = this;
-    smalltalk.send(self, "_assert_", [smalltalk.send(function () {smalltalk.send(aBlock, "_value", []);return true;}, "_on_do_", [anExceptionClass, function (ex) {return false;}])]);
-    return self;
-}
+fn: function (aBlock,anExceptionClass){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(self)._assert_(_st((function(){
+return smalltalk.withContext(function($ctx2) { 
_st(aBlock)._value();
+return true;
+})}))._on_do_(anExceptionClass,(function(ex){
+return smalltalk.withContext(function($ctx2) { 
return false;
+})})));
+return self}, self, "shouldnt:raise:", [aBlock,anExceptionClass], smalltalk.TestCase)}
 }),
 smalltalk.TestCase);
 
@@ -177,14 +179,13 @@ smalltalk.addMethod(
 "_signalFailure_",
 smalltalk.method({
 selector: "signalFailure:",
-fn: function (aString) {
-    var self = this;
-    var $1, $2;
-    $1 = smalltalk.send(smalltalk.TestFailure || TestFailure, "_new", []);
-    smalltalk.send($1, "_messageText_", [aString]);
-    $2 = smalltalk.send($1, "_signal", []);
-    return self;
-}
+fn: function (aString){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
+$1=_st((smalltalk.TestFailure || TestFailure))._new();
+_st($1)._messageText_(aString);
+$2=_st($1)._signal();
+return self}, self, "signalFailure:", [aString], smalltalk.TestCase)}
 }),
 smalltalk.TestCase);
 
@@ -192,10 +193,9 @@ smalltalk.addMethod(
 "_tearDown",
 smalltalk.method({
 selector: "tearDown",
-fn: function () {
-    var self = this;
-    return self;
-}
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
return self}, self, "tearDown", [], smalltalk.TestCase)}
 }),
 smalltalk.TestCase);
 
@@ -204,17 +204,17 @@ smalltalk.addMethod(
 "_allTestSelectors",
 smalltalk.method({
 selector: "allTestSelectors",
-fn: function () {
-    var self = this;
-    var $1;
-    var selectors;
-    selectors = smalltalk.send(self, "_testSelectors", []);
-    $1 = smalltalk.send(self, "_shouldInheritSelectors", []);
-    if (smalltalk.assert($1)) {
-        smalltalk.send(selectors, "_addAll_", [smalltalk.send(smalltalk.send(self, "_superclass", []), "_allTestSelectors", [])]);
-    }
-    return selectors;
-}
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.selectors=nil;
+$ctx1.locals.selectors=_st(self)._testSelectors();
+$1=_st(self)._shouldInheritSelectors();
+if(smalltalk.assert($1)){
+_st($ctx1.locals.selectors)._addAll_(_st(_st(self)._superclass())._allTestSelectors());
+};
+return $ctx1.locals.selectors;
+}, self, "allTestSelectors", [], smalltalk.TestCase.klass)}
 }),
 smalltalk.TestCase.klass);
 
@@ -222,12 +222,14 @@ smalltalk.addMethod(
 "_buildSuite",
 smalltalk.method({
 selector: "buildSuite",
-fn: function () {
-    var self = this;
-    var $1;
-    $1 = smalltalk.send(smalltalk.send(self, "_allTestSelectors", []), "_collect_", [function (each) {return smalltalk.send(self, "_selector_", [each]);}]);
-    return $1;
-}
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$1=_st(_st(self)._allTestSelectors())._collect_((function(each){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._selector_(each);
+})}));
+return $1;
+}, self, "buildSuite", [], smalltalk.TestCase.klass)}
 }),
 smalltalk.TestCase.klass);
 
@@ -235,12 +237,12 @@ smalltalk.addMethod(
 "_isAbstract",
 smalltalk.method({
 selector: "isAbstract",
-fn: function () {
-    var self = this;
-    var $1;
-    $1 = smalltalk.send(smalltalk.send(self, "_name", []), "__eq", ["TestCase"]);
-    return $1;
-}
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$1=_st(_st(self)._name()).__eq("TestCase");
+return $1;
+}, self, "isAbstract", [], smalltalk.TestCase.klass)}
 }),
 smalltalk.TestCase.klass);
 
@@ -248,10 +250,10 @@ smalltalk.addMethod(
 "_lookupHierarchyRoot",
 smalltalk.method({
 selector: "lookupHierarchyRoot",
-fn: function () {
-    var self = this;
-    return smalltalk.TestCase || TestCase;
-}
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
return (smalltalk.TestCase || TestCase);
+}, self, "lookupHierarchyRoot", [], smalltalk.TestCase.klass)}
 }),
 smalltalk.TestCase.klass);
 
@@ -259,15 +261,15 @@ smalltalk.addMethod(
 "_selector_",
 smalltalk.method({
 selector: "selector:",
-fn: function (aSelector) {
-    var self = this;
-    var $2, $3, $1;
-    $2 = smalltalk.send(self, "_new", []);
-    smalltalk.send($2, "_setTestSelector_", [aSelector]);
-    $3 = smalltalk.send($2, "_yourself", []);
-    $1 = $3;
-    return $1;
-}
+fn: function (aSelector){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
+$2=_st(self)._new();
+_st($2)._setTestSelector_(aSelector);
+$3=_st($2)._yourself();
+$1=$3;
+return $1;
+}, self, "selector:", [aSelector], smalltalk.TestCase.klass)}
 }),
 smalltalk.TestCase.klass);
 
@@ -275,12 +277,12 @@ smalltalk.addMethod(
 "_shouldInheritSelectors",
 smalltalk.method({
 selector: "shouldInheritSelectors",
-fn: function () {
-    var self = this;
-    var $1;
-    $1 = smalltalk.send(self, "_~_eq", [smalltalk.send(self, "_lookupHierarchyRoot", [])]);
-    return $1;
-}
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$1=_st(self).__tild_eq(_st(self)._lookupHierarchyRoot());
+return $1;
+}, self, "shouldInheritSelectors", [], smalltalk.TestCase.klass)}
 }),
 smalltalk.TestCase.klass);
 
@@ -288,12 +290,14 @@ smalltalk.addMethod(
 "_testSelectors",
 smalltalk.method({
 selector: "testSelectors",
-fn: function () {
-    var self = this;
-    var $1;
-    $1 = smalltalk.send(smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_keys", []), "_select_", [function (each) {return smalltalk.send(each, "_match_", ["^test"]);}]);
-    return $1;
-}
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$1=_st(_st(_st(self)._methodDictionary())._keys())._select_((function(each){
+return smalltalk.withContext(function($ctx2) { 
return _st(each)._match_("^test");
+})}));
+return $1;
+}, self, "testSelectors", [], smalltalk.TestCase.klass)}
 }),
 smalltalk.TestCase.klass);
 
@@ -306,11 +310,10 @@ smalltalk.addMethod(
 "_addError_",
 smalltalk.method({
 selector: "addError:",
-fn: function (anError) {
-    var self = this;
-    smalltalk.send(smalltalk.send(self, "_errors", []), "_add_", [anError]);
-    return self;
-}
+fn: function (anError){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._errors())._add_(anError);
+return self}, self, "addError:", [anError], smalltalk.TestResult)}
 }),
 smalltalk.TestResult);
 
@@ -318,11 +321,10 @@ smalltalk.addMethod(
 "_addFailure_",
 smalltalk.method({
 selector: "addFailure:",
-fn: function (aFailure) {
-    var self = this;
-    smalltalk.send(smalltalk.send(self, "_failures", []), "_add_", [aFailure]);
-    return self;
-}
+fn: function (aFailure){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._failures())._add_(aFailure);
+return self}, self, "addFailure:", [aFailure], smalltalk.TestResult)}
 }),
 smalltalk.TestResult);
 
@@ -330,10 +332,10 @@ smalltalk.addMethod(
 "_errors",
 smalltalk.method({
 selector: "errors",
-fn: function () {
-    var self = this;
-    return self['@errors'];
-}
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
return self["@errors"];
+}, self, "errors", [], smalltalk.TestResult)}
 }),
 smalltalk.TestResult);
 
@@ -341,10 +343,10 @@ smalltalk.addMethod(
 "_failures",
 smalltalk.method({
 selector: "failures",
-fn: function () {
-    var self = this;
-    return self['@failures'];
-}
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
return self["@failures"];
+}, self, "failures", [], smalltalk.TestResult)}
 }),
 smalltalk.TestResult);
 
@@ -352,11 +354,10 @@ smalltalk.addMethod(
 "_increaseRuns",
 smalltalk.method({
 selector: "increaseRuns",
-fn: function () {
-    var self = this;
-    self['@runs'] = smalltalk.send(self['@runs'], "__plus", [1]);
-    return self;
-}
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
self["@runs"]=_st(self["@runs"]).__plus((1));
+return self}, self, "increaseRuns", [], smalltalk.TestResult)}
 }),
 smalltalk.TestResult);
 
@@ -364,16 +365,15 @@ smalltalk.addMethod(
 "_initialize",
 smalltalk.method({
 selector: "initialize",
-fn: function () {
-    var self = this;
-    smalltalk.send(self, "_initialize", [], smalltalk.Object);
-    self['@timestamp'] = smalltalk.send(smalltalk.Date || Date, "_now", []);
-    self['@runs'] = 0;
-    self['@errors'] = smalltalk.send(smalltalk.Array || Array, "_new", []);
-    self['@failures'] = smalltalk.send(smalltalk.Array || Array, "_new", []);
-    self['@total'] = 0;
-    return self;
-}
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
smalltalk.Object.fn.prototype._initialize.apply(_st(self), []);
+self["@timestamp"]=_st((smalltalk.Date || Date))._now();
+self["@runs"]=(0);
+self["@errors"]=_st((smalltalk.Array || Array))._new();
+self["@failures"]=_st((smalltalk.Array || Array))._new();
+self["@total"]=(0);
+return self}, self, "initialize", [], smalltalk.TestResult)}
 }),
 smalltalk.TestResult);
 
@@ -383,13 +383,13 @@ smalltalk.method({
 selector: "nextRunDo:",
 fn: function (aBlock){
 var self=this;
-var $2,$1;
-$2=smalltalk.send(smalltalk.send(self,"_runs",[]),"__eq_eq",[smalltalk.send(self,"_total",[])]);
+return smalltalk.withContext(function($ctx1) { 
var $2,$1;
+$2=_st(_st(self)._runs()).__eq_eq(_st(self)._total());
 if(! smalltalk.assert($2)){
-$1=smalltalk.send(aBlock,"_value_",[smalltalk.send(smalltalk.send(self,"_runs",[]),"__plus",[(1)])]);
+$1=_st(aBlock)._value_(_st(_st(self)._runs()).__plus((1)));
 };
 return $1;
-}
+}, self, "nextRunDo:", [aBlock], smalltalk.TestResult)}
 }),
 smalltalk.TestResult);
 
@@ -399,17 +399,17 @@ smalltalk.method({
 selector: "runCase:",
 fn: function (aTestCase){
 var self=this;
-smalltalk.send((function(){
-return smalltalk.send((function(){
-smalltalk.send(self,"_increaseRuns",[]);
-return smalltalk.send(aTestCase,"_runCase",[]);
-}),"_on_do_",[(smalltalk.TestFailure || TestFailure),(function(ex){
-return smalltalk.send(self,"_addFailure_",[aTestCase]);
-})]);
-}),"_on_do_",[(smalltalk.Error || Error),(function(ex){
-return smalltalk.send(self,"_addError_",[aTestCase]);
-})]);
-return self}
+return smalltalk.withContext(function($ctx1) { 
_st((function(){
+return smalltalk.withContext(function($ctx2) { 
return _st((function(){
+return smalltalk.withContext(function($ctx3) { 
_st(self)._increaseRuns();
+return _st(aTestCase)._runCase();
+})}))._on_do_((smalltalk.TestFailure || TestFailure),(function(ex){
+return smalltalk.withContext(function($ctx3) { 
return _st(self)._addFailure_(aTestCase);
+})}));
+})}))._on_do_((smalltalk.Error || Error),(function(ex){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._addError_(aTestCase);
+})}));
+return self}, self, "runCase:", [aTestCase], smalltalk.TestResult)}
 }),
 smalltalk.TestResult);
 
@@ -417,10 +417,10 @@ smalltalk.addMethod(
 "_runs",
 smalltalk.method({
 selector: "runs",
-fn: function () {
-    var self = this;
-    return self['@runs'];
-}
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
return self["@runs"];
+}, self, "runs", [], smalltalk.TestResult)}
 }),
 smalltalk.TestResult);
 
@@ -428,22 +428,22 @@ smalltalk.addMethod(
 "_status",
 smalltalk.method({
 selector: "status",
-fn: function () {
-    var self = this;
-    var $2, $3, $1;
-    $2 = smalltalk.send(smalltalk.send(self, "_errors", []), "_isEmpty", []);
-    if (smalltalk.assert($2)) {
-        $3 = smalltalk.send(smalltalk.send(self, "_failures", []), "_isEmpty", []);
-        if (smalltalk.assert($3)) {
-            $1 = "success";
-        } else {
-            $1 = "failure";
-        }
-    } else {
-        $1 = "error";
-    }
-    return $1;
-}
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
+$2=_st(_st(self)._errors())._isEmpty();
+if(smalltalk.assert($2)){
+$3=_st(_st(self)._failures())._isEmpty();
+if(smalltalk.assert($3)){
+$1="success";
+} else {
+$1="failure";
+};
+} else {
+$1="error";
+};
+return $1;
+}, self, "status", [], smalltalk.TestResult)}
 }),
 smalltalk.TestResult);
 
@@ -451,10 +451,10 @@ smalltalk.addMethod(
 "_timestamp",
 smalltalk.method({
 selector: "timestamp",
-fn: function () {
-    var self = this;
-    return self['@timestamp'];
-}
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
return self["@timestamp"];
+}, self, "timestamp", [], smalltalk.TestResult)}
 }),
 smalltalk.TestResult);
 
@@ -462,10 +462,10 @@ smalltalk.addMethod(
 "_total",
 smalltalk.method({
 selector: "total",
-fn: function () {
-    var self = this;
-    return self['@total'];
-}
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
return self["@total"];
+}, self, "total", [], smalltalk.TestResult)}
 }),
 smalltalk.TestResult);
 
@@ -473,11 +473,10 @@ smalltalk.addMethod(
 "_total_",
 smalltalk.method({
 selector: "total:",
-fn: function (aNumber) {
-    var self = this;
-    self['@total'] = aNumber;
-    return self;
-}
+fn: function (aNumber){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
self["@total"]=aNumber;
+return self}, self, "total:", [aNumber], smalltalk.TestResult)}
 }),
 smalltalk.TestResult);
 
@@ -490,8 +489,8 @@ smalltalk.method({
 selector: "announcer",
 fn: function (){
 var self=this;
-return self["@announcer"];
-}
+return smalltalk.withContext(function($ctx1) { 
return self["@announcer"];
+}, self, "announcer", [], smalltalk.TestSuiteRunner)}
 }),
 smalltalk.TestSuiteRunner);
 
@@ -501,10 +500,10 @@ smalltalk.method({
 selector: "initialize",
 fn: function (){
 var self=this;
-smalltalk.send(self,"_initialize",[],smalltalk.Object);
-self["@announcer"]=smalltalk.send((smalltalk.Announcer || Announcer),"_new",[]);
-self["@result"]=smalltalk.send((smalltalk.TestResult || TestResult),"_new",[]);
-return self}
+return smalltalk.withContext(function($ctx1) { 
smalltalk.Object.fn.prototype._initialize.apply(_st(self), []);
+self["@announcer"]=_st((smalltalk.Announcer || Announcer))._new();
+self["@result"]=_st((smalltalk.TestResult || TestResult))._new();
+return self}, self, "initialize", [], smalltalk.TestSuiteRunner)}
 }),
 smalltalk.TestSuiteRunner);
 
@@ -514,8 +513,8 @@ smalltalk.method({
 selector: "result",
 fn: function (){
 var self=this;
-return self["@result"];
-}
+return smalltalk.withContext(function($ctx1) { 
return self["@result"];
+}, self, "result", [], smalltalk.TestSuiteRunner)}
 }),
 smalltalk.TestSuiteRunner);
 
@@ -525,21 +524,21 @@ smalltalk.method({
 selector: "run",
 fn: function (){
 var self=this;
-var worker;
-smalltalk.send(self["@result"],"_total_",[smalltalk.send(self["@suite"],"_size",[])]);
-smalltalk.send(self["@announcer"],"_announce_",[smalltalk.send(smalltalk.send((smalltalk.ResultAnnouncement || ResultAnnouncement),"_new",[]),"_result_",[self["@result"]])]);
-worker=(function(){
-return smalltalk.send(self["@result"],"_nextRunDo_",[(function(index){
-return smalltalk.send((function(){
-return smalltalk.send(self["@result"],"_runCase_",[smalltalk.send(self["@suite"],"_at_",[index])]);
-}),"_ensure_",[(function(){
-smalltalk.send(worker,"_fork",[]);
-return smalltalk.send(self["@announcer"],"_announce_",[smalltalk.send(smalltalk.send((smalltalk.ResultAnnouncement || ResultAnnouncement),"_new",[]),"_result_",[self["@result"]])]);
-})]);
-})]);
-});
-smalltalk.send(worker,"_fork",[]);
-return self}
+return smalltalk.withContext(function($ctx1) { 
$ctx1.worker=nil;
+_st(self["@result"])._total_(_st(self["@suite"])._size());
+_st(self["@announcer"])._announce_(_st(_st((smalltalk.ResultAnnouncement || ResultAnnouncement))._new())._result_(self["@result"]));
+$ctx1.locals.worker=(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(self["@result"])._nextRunDo_((function(index){
+return smalltalk.withContext(function($ctx3) { 
return _st((function(){
+return smalltalk.withContext(function($ctx4) { 
return _st(self["@result"])._runCase_(_st(self["@suite"])._at_(index));
+})}))._ensure_((function(){
+return smalltalk.withContext(function($ctx4) { 
_st($ctx1.locals.worker)._fork();
+return _st(self["@announcer"])._announce_(_st(_st((smalltalk.ResultAnnouncement || ResultAnnouncement))._new())._result_(self["@result"]));
+})}));
+})}));
+})});
+_st($ctx1.locals.worker)._fork();
+return self}, self, "run", [], smalltalk.TestSuiteRunner)}
 }),
 smalltalk.TestSuiteRunner);
 
@@ -549,8 +548,8 @@ smalltalk.method({
 selector: "suite:",
 fn: function (aCollection){
 var self=this;
-self["@suite"]=aCollection;
-return self}
+return smalltalk.withContext(function($ctx1) { 
self["@suite"]=aCollection;
+return self}, self, "suite:", [aCollection], smalltalk.TestSuiteRunner)}
 }),
 smalltalk.TestSuiteRunner);
 
@@ -561,8 +560,8 @@ smalltalk.method({
 selector: "new",
 fn: function (){
 var self=this;
-smalltalk.send(self,"_shouldNotImplement",[]);
-return self}
+return smalltalk.withContext(function($ctx1) { 
_st(self)._shouldNotImplement();
+return self}, self, "new", [], smalltalk.TestSuiteRunner.klass)}
 }),
 smalltalk.TestSuiteRunner.klass);
 
@@ -572,10 +571,10 @@ smalltalk.method({
 selector: "on:",
 fn: function (aCollection){
 var self=this;
-var $1;
-$1=smalltalk.send(smalltalk.send(self,"_new",[],smalltalk.Object.klass),"_suite_",[aCollection]);
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$1=_st(smalltalk.Object.klass.fn.prototype._new.apply(_st(self), []))._suite_(aCollection);
 return $1;
-}
+}, self, "on:", [aCollection], smalltalk.TestSuiteRunner.klass)}
 }),
 smalltalk.TestSuiteRunner.klass);
 

+ 234 - 235
js/SUnit.js

@@ -7,8 +7,8 @@ selector: "result",
 category: 'accessing',
 fn: function (){
 var self=this;
-return self["@result"];
-},
+return smalltalk.withContext(function($ctx1) { 
return self["@result"];
+}, self, "result", [], smalltalk.ResultAnnouncement)},
 args: [],
 source: "result\x0a\x09^result",
 messageSends: [],
@@ -23,8 +23,8 @@ selector: "result:",
 category: 'accessing',
 fn: function (aTestResult){
 var self=this;
-self["@result"]=aTestResult;
-return self},
+return smalltalk.withContext(function($ctx1) { 
self["@result"]=aTestResult;
+return self}, self, "result:", [aTestResult], smalltalk.ResultAnnouncement)},
 args: ["aTestResult"],
 source: "result: aTestResult\x0a\x09result := aTestResult",
 messageSends: [],
@@ -40,11 +40,10 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "assert:",
 category: 'testing',
-fn: function (aBoolean) {
-    var self = this;
-    smalltalk.send(self, "_assert_description_", [aBoolean, "Assertion failed"]);
-    return self;
-},
+fn: function (aBoolean){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(self)._assert_description_(aBoolean,"Assertion failed");
+return self}, self, "assert:", [aBoolean], smalltalk.TestCase)},
 args: ["aBoolean"],
 source: "assert: aBoolean\x0a\x09self assert: aBoolean description: 'Assertion failed'",
 messageSends: ["assert:description:"],
@@ -57,13 +56,12 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "assert:description:",
 category: 'testing',
-fn: function (aBoolean, aString) {
-    var self = this;
-    if (!smalltalk.assert(aBoolean)) {
-        smalltalk.send(self, "_signalFailure_", [aString]);
-    }
-    return self;
-},
+fn: function (aBoolean,aString){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
if(! smalltalk.assert(aBoolean)){
+_st(self)._signalFailure_(aString);
+};
+return self}, self, "assert:description:", [aBoolean,aString], smalltalk.TestCase)},
 args: ["aBoolean", "aString"],
 source: "assert: aBoolean description: aString\x0a\x09aBoolean ifFalse: [self signalFailure: aString]",
 messageSends: ["ifFalse:", "signalFailure:"],
@@ -76,12 +74,12 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "assert:equals:",
 category: 'testing',
-fn: function (expected, actual) {
-    var self = this;
-    var $1;
-    $1 = smalltalk.send(self, "_assert_description_", [smalltalk.send(expected, "__eq", [actual]), smalltalk.send(smalltalk.send(smalltalk.send("Expected: ", "__comma", [smalltalk.send(expected, "_asString", [])]), "__comma", [" but was: "]), "__comma", [smalltalk.send(actual, "_asString", [])])]);
-    return $1;
-},
+fn: function (expected,actual){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$1=_st(self)._assert_description_(_st(expected).__eq(actual),_st(_st(_st("Expected: ").__comma(_st(expected)._asString())).__comma(" but was: ")).__comma(_st(actual)._asString()));
+return $1;
+}, self, "assert:equals:", [expected,actual], smalltalk.TestCase)},
 args: ["expected", "actual"],
 source: "assert: expected equals: actual\x0a\x09^ self assert: (expected = actual) description: 'Expected: ', expected asString, ' but was: ', actual asString",
 messageSends: ["assert:description:", "=", ",", "asString"],
@@ -94,11 +92,10 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "deny:",
 category: 'testing',
-fn: function (aBoolean) {
-    var self = this;
-    smalltalk.send(self, "_assert_", [smalltalk.send(aBoolean, "_not", [])]);
-    return self;
-},
+fn: function (aBoolean){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(self)._assert_(_st(aBoolean)._not());
+return self}, self, "deny:", [aBoolean], smalltalk.TestCase)},
 args: ["aBoolean"],
 source: "deny: aBoolean\x0a\x09self assert: aBoolean not",
 messageSends: ["assert:", "not"],
@@ -113,8 +110,8 @@ selector: "performTest",
 category: 'running',
 fn: function (){
 var self=this;
-smalltalk.send(self,"_perform_",[smalltalk.send(self,"_selector",[])]);
-return self},
+return smalltalk.withContext(function($ctx1) { 
_st(self)._perform_(_st(self)._selector());
+return self}, self, "performTest", [], smalltalk.TestCase)},
 args: [],
 source: "performTest\x0a\x09self perform: self selector\x0a",
 messageSends: ["perform:", "selector"],
@@ -129,13 +126,13 @@ selector: "runCase",
 category: 'running',
 fn: function (){
 var self=this;
-smalltalk.send((function(){
-smalltalk.send(self,"_setUp",[]);
-return smalltalk.send(self,"_performTest",[]);
-}),"_ensure_",[(function(){
-return smalltalk.send(self,"_tearDown",[]);
-})]);
-return self},
+return smalltalk.withContext(function($ctx1) { 
_st((function(){
+return smalltalk.withContext(function($ctx2) { 
_st(self)._setUp();
+return _st(self)._performTest();
+})}))._ensure_((function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._tearDown();
+})}));
+return self}, self, "runCase", [], smalltalk.TestCase)},
 args: [],
 source: "runCase\x0a\x09[\x09self setUp.\x0a\x09\x09self performTest ] ensure: [\x0a\x09\x09self tearDown.\x0a\x09\x09\x22self cleanUpInstanceVariables\x22 ]\x0a",
 messageSends: ["ensure:", "tearDown", "setUp", "performTest"],
@@ -148,10 +145,10 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "selector",
 category: 'accessing',
-fn: function () {
-    var self = this;
-    return self['@testSelector'];
-},
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
return self["@testSelector"];
+}, self, "selector", [], smalltalk.TestCase)},
 args: [],
 source: "selector\x0a\x09^testSelector",
 messageSends: [],
@@ -164,11 +161,10 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "setTestSelector:",
 category: 'accessing',
-fn: function (aSelector) {
-    var self = this;
-    self['@testSelector'] = aSelector;
-    return self;
-},
+fn: function (aSelector){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
self["@testSelector"]=aSelector;
+return self}, self, "setTestSelector:", [aSelector], smalltalk.TestCase)},
 args: ["aSelector"],
 source: "setTestSelector: aSelector\x0a\x09testSelector := aSelector",
 messageSends: [],
@@ -181,10 +177,9 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "setUp",
 category: 'running',
-fn: function () {
-    var self = this;
-    return self;
-},
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
return self}, self, "setUp", [], smalltalk.TestCase)},
 args: [],
 source: "setUp",
 messageSends: [],
@@ -197,11 +192,10 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "should:",
 category: 'testing',
-fn: function (aBlock) {
-    var self = this;
-    smalltalk.send(self, "_assert_", [smalltalk.send(aBlock, "_value", [])]);
-    return self;
-},
+fn: function (aBlock){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(self)._assert_(_st(aBlock)._value());
+return self}, self, "should:", [aBlock], smalltalk.TestCase)},
 args: ["aBlock"],
 source: "should: aBlock\x0a\x09self assert: aBlock value",
 messageSends: ["assert:", "value"],
@@ -214,11 +208,15 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "should:raise:",
 category: 'testing',
-fn: function (aBlock, anExceptionClass) {
-    var self = this;
-    smalltalk.send(self, "_assert_", [smalltalk.send(function () {smalltalk.send(aBlock, "_value", []);return false;}, "_on_do_", [anExceptionClass, function (ex) {return true;}])]);
-    return self;
-},
+fn: function (aBlock,anExceptionClass){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(self)._assert_(_st((function(){
+return smalltalk.withContext(function($ctx2) { 
_st(aBlock)._value();
+return false;
+})}))._on_do_(anExceptionClass,(function(ex){
+return smalltalk.withContext(function($ctx2) { 
return true;
+})})));
+return self}, self, "should:raise:", [aBlock,anExceptionClass], smalltalk.TestCase)},
 args: ["aBlock", "anExceptionClass"],
 source: "should: aBlock raise: anExceptionClass\x0a\x09self assert: ([aBlock value. false] \x0a\x09\x09on: anExceptionClass \x0a\x09\x09do: [:ex | true])",
 messageSends: ["assert:", "on:do:", "value"],
@@ -231,11 +229,15 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "shouldnt:raise:",
 category: 'testing',
-fn: function (aBlock, anExceptionClass) {
-    var self = this;
-    smalltalk.send(self, "_assert_", [smalltalk.send(function () {smalltalk.send(aBlock, "_value", []);return true;}, "_on_do_", [anExceptionClass, function (ex) {return false;}])]);
-    return self;
-},
+fn: function (aBlock,anExceptionClass){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(self)._assert_(_st((function(){
+return smalltalk.withContext(function($ctx2) { 
_st(aBlock)._value();
+return true;
+})}))._on_do_(anExceptionClass,(function(ex){
+return smalltalk.withContext(function($ctx2) { 
return false;
+})})));
+return self}, self, "shouldnt:raise:", [aBlock,anExceptionClass], smalltalk.TestCase)},
 args: ["aBlock", "anExceptionClass"],
 source: "shouldnt: aBlock raise: anExceptionClass\x0a\x09self assert: ([aBlock value. true] \x0a\x09\x09on: anExceptionClass \x0a\x09\x09do: [:ex | false])",
 messageSends: ["assert:", "on:do:", "value"],
@@ -248,14 +250,13 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "signalFailure:",
 category: 'private',
-fn: function (aString) {
-    var self = this;
-    var $1, $2;
-    $1 = smalltalk.send(smalltalk.TestFailure || TestFailure, "_new", []);
-    smalltalk.send($1, "_messageText_", [aString]);
-    $2 = smalltalk.send($1, "_signal", []);
-    return self;
-},
+fn: function (aString){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
var $1,$2;
+$1=_st((smalltalk.TestFailure || TestFailure))._new();
+_st($1)._messageText_(aString);
+$2=_st($1)._signal();
+return self}, self, "signalFailure:", [aString], smalltalk.TestCase)},
 args: ["aString"],
 source: "signalFailure: aString\x0a\x09TestFailure new\x0a\x09\x09messageText: aString;\x0a\x09\x09signal",
 messageSends: ["messageText:", "new", "signal"],
@@ -268,10 +269,9 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "tearDown",
 category: 'running',
-fn: function () {
-    var self = this;
-    return self;
-},
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
return self}, self, "tearDown", [], smalltalk.TestCase)},
 args: [],
 source: "tearDown",
 messageSends: [],
@@ -285,17 +285,17 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "allTestSelectors",
 category: 'accessing',
-fn: function () {
-    var self = this;
-    var $1;
-    var selectors;
-    selectors = smalltalk.send(self, "_testSelectors", []);
-    $1 = smalltalk.send(self, "_shouldInheritSelectors", []);
-    if (smalltalk.assert($1)) {
-        smalltalk.send(selectors, "_addAll_", [smalltalk.send(smalltalk.send(self, "_superclass", []), "_allTestSelectors", [])]);
-    }
-    return selectors;
-},
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$ctx1.selectors=nil;
+$ctx1.locals.selectors=_st(self)._testSelectors();
+$1=_st(self)._shouldInheritSelectors();
+if(smalltalk.assert($1)){
+_st($ctx1.locals.selectors)._addAll_(_st(_st(self)._superclass())._allTestSelectors());
+};
+return $ctx1.locals.selectors;
+}, self, "allTestSelectors", [], smalltalk.TestCase.klass)},
 args: [],
 source: "allTestSelectors\x0a\x09| selectors |\x0a\x09selectors := self testSelectors.\x0a\x09self shouldInheritSelectors ifTrue: [\x0a\x09\x09selectors addAll: self superclass allTestSelectors].\x0a\x09^selectors",
 messageSends: ["testSelectors", "ifTrue:", "addAll:", "allTestSelectors", "superclass", "shouldInheritSelectors"],
@@ -308,12 +308,14 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "buildSuite",
 category: 'accessing',
-fn: function () {
-    var self = this;
-    var $1;
-    $1 = smalltalk.send(smalltalk.send(self, "_allTestSelectors", []), "_collect_", [function (each) {return smalltalk.send(self, "_selector_", [each]);}]);
-    return $1;
-},
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$1=_st(_st(self)._allTestSelectors())._collect_((function(each){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._selector_(each);
+})}));
+return $1;
+}, self, "buildSuite", [], smalltalk.TestCase.klass)},
 args: [],
 source: "buildSuite\x0a\x09^self allTestSelectors collect: [:each | self selector: each]",
 messageSends: ["collect:", "selector:", "allTestSelectors"],
@@ -326,12 +328,12 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "isAbstract",
 category: 'testing',
-fn: function () {
-    var self = this;
-    var $1;
-    $1 = smalltalk.send(smalltalk.send(self, "_name", []), "__eq", ["TestCase"]);
-    return $1;
-},
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$1=_st(_st(self)._name()).__eq("TestCase");
+return $1;
+}, self, "isAbstract", [], smalltalk.TestCase.klass)},
 args: [],
 source: "isAbstract\x0a\x09^ self name = 'TestCase'",
 messageSends: ["=", "name"],
@@ -344,10 +346,10 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "lookupHierarchyRoot",
 category: 'accessing',
-fn: function () {
-    var self = this;
-    return smalltalk.TestCase || TestCase;
-},
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
return (smalltalk.TestCase || TestCase);
+}, self, "lookupHierarchyRoot", [], smalltalk.TestCase.klass)},
 args: [],
 source: "lookupHierarchyRoot\x0a\x09^TestCase",
 messageSends: [],
@@ -360,15 +362,15 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "selector:",
 category: 'accessing',
-fn: function (aSelector) {
-    var self = this;
-    var $2, $3, $1;
-    $2 = smalltalk.send(self, "_new", []);
-    smalltalk.send($2, "_setTestSelector_", [aSelector]);
-    $3 = smalltalk.send($2, "_yourself", []);
-    $1 = $3;
-    return $1;
-},
+fn: function (aSelector){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
+$2=_st(self)._new();
+_st($2)._setTestSelector_(aSelector);
+$3=_st($2)._yourself();
+$1=$3;
+return $1;
+}, self, "selector:", [aSelector], smalltalk.TestCase.klass)},
 args: ["aSelector"],
 source: "selector: aSelector\x0a\x09^self new\x0a\x09\x09setTestSelector: aSelector;\x0a\x09\x09yourself",
 messageSends: ["setTestSelector:", "new", "yourself"],
@@ -381,12 +383,12 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "shouldInheritSelectors",
 category: 'testing',
-fn: function () {
-    var self = this;
-    var $1;
-    $1 = smalltalk.send(self, "_~_eq", [smalltalk.send(self, "_lookupHierarchyRoot", [])]);
-    return $1;
-},
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$1=_st(self).__tild_eq(_st(self)._lookupHierarchyRoot());
+return $1;
+}, self, "shouldInheritSelectors", [], smalltalk.TestCase.klass)},
 args: [],
 source: "shouldInheritSelectors\x0a\x09^self ~= self lookupHierarchyRoot",
 messageSends: ["~=", "lookupHierarchyRoot"],
@@ -399,12 +401,14 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "testSelectors",
 category: 'accessing',
-fn: function () {
-    var self = this;
-    var $1;
-    $1 = smalltalk.send(smalltalk.send(smalltalk.send(self, "_methodDictionary", []), "_keys", []), "_select_", [function (each) {return smalltalk.send(each, "_match_", ["^test"]);}]);
-    return $1;
-},
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$1=_st(_st(_st(self)._methodDictionary())._keys())._select_((function(each){
+return smalltalk.withContext(function($ctx2) { 
return _st(each)._match_("^test");
+})}));
+return $1;
+}, self, "testSelectors", [], smalltalk.TestCase.klass)},
 args: [],
 source: "testSelectors\x0a\x09^self methodDictionary keys select: [:each | each match: '^test']",
 messageSends: ["select:", "match:", "keys", "methodDictionary"],
@@ -422,11 +426,10 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "addError:",
 category: 'accessing',
-fn: function (anError) {
-    var self = this;
-    smalltalk.send(smalltalk.send(self, "_errors", []), "_add_", [anError]);
-    return self;
-},
+fn: function (anError){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._errors())._add_(anError);
+return self}, self, "addError:", [anError], smalltalk.TestResult)},
 args: ["anError"],
 source: "addError: anError\x0a\x09self errors add: anError",
 messageSends: ["add:", "errors"],
@@ -439,11 +442,10 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "addFailure:",
 category: 'accessing',
-fn: function (aFailure) {
-    var self = this;
-    smalltalk.send(smalltalk.send(self, "_failures", []), "_add_", [aFailure]);
-    return self;
-},
+fn: function (aFailure){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._failures())._add_(aFailure);
+return self}, self, "addFailure:", [aFailure], smalltalk.TestResult)},
 args: ["aFailure"],
 source: "addFailure: aFailure\x0a\x09self failures add: aFailure",
 messageSends: ["add:", "failures"],
@@ -456,10 +458,10 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "errors",
 category: 'accessing',
-fn: function () {
-    var self = this;
-    return self['@errors'];
-},
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
return self["@errors"];
+}, self, "errors", [], smalltalk.TestResult)},
 args: [],
 source: "errors\x0a\x09^errors",
 messageSends: [],
@@ -472,10 +474,10 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "failures",
 category: 'accessing',
-fn: function () {
-    var self = this;
-    return self['@failures'];
-},
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
return self["@failures"];
+}, self, "failures", [], smalltalk.TestResult)},
 args: [],
 source: "failures\x0a\x09^failures",
 messageSends: [],
@@ -488,11 +490,10 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "increaseRuns",
 category: 'accessing',
-fn: function () {
-    var self = this;
-    self['@runs'] = smalltalk.send(self['@runs'], "__plus", [1]);
-    return self;
-},
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
self["@runs"]=_st(self["@runs"]).__plus((1));
+return self}, self, "increaseRuns", [], smalltalk.TestResult)},
 args: [],
 source: "increaseRuns\x0a\x09runs := runs + 1",
 messageSends: ["+"],
@@ -505,16 +506,15 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "initialize",
 category: 'initialization',
-fn: function () {
-    var self = this;
-    smalltalk.send(self, "_initialize", [], smalltalk.Object);
-    self['@timestamp'] = smalltalk.send(smalltalk.Date || Date, "_now", []);
-    self['@runs'] = 0;
-    self['@errors'] = smalltalk.send(smalltalk.Array || Array, "_new", []);
-    self['@failures'] = smalltalk.send(smalltalk.Array || Array, "_new", []);
-    self['@total'] = 0;
-    return self;
-},
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
smalltalk.Object.fn.prototype._initialize.apply(_st(self), []);
+self["@timestamp"]=_st((smalltalk.Date || Date))._now();
+self["@runs"]=(0);
+self["@errors"]=_st((smalltalk.Array || Array))._new();
+self["@failures"]=_st((smalltalk.Array || Array))._new();
+self["@total"]=(0);
+return self}, self, "initialize", [], smalltalk.TestResult)},
 args: [],
 source: "initialize\x0a\x09super initialize.\x0a\x09timestamp := Date now.\x0a\x09runs := 0.\x0a\x09errors := Array new.\x0a\x09failures := Array new.\x0a\x09total := 0",
 messageSends: ["initialize", "now", "new"],
@@ -529,13 +529,13 @@ selector: "nextRunDo:",
 category: 'running',
 fn: function (aBlock){
 var self=this;
-var $2,$1;
-$2=smalltalk.send(smalltalk.send(self,"_runs",[]),"__eq_eq",[smalltalk.send(self,"_total",[])]);
+return smalltalk.withContext(function($ctx1) { 
var $2,$1;
+$2=_st(_st(self)._runs()).__eq_eq(_st(self)._total());
 if(! smalltalk.assert($2)){
-$1=smalltalk.send(aBlock,"_value_",[smalltalk.send(smalltalk.send(self,"_runs",[]),"__plus",[(1)])]);
+$1=_st(aBlock)._value_(_st(_st(self)._runs()).__plus((1)));
 };
 return $1;
-},
+}, self, "nextRunDo:", [aBlock], smalltalk.TestResult)},
 args: ["aBlock"],
 source: "nextRunDo: aBlock\x0a\x22Runs aBlock with index of next run\x0aor does nothing if no more runs\x22\x0a^self runs == self total\x0a\x09ifFalse: [ aBlock value: self runs + 1 ]",
 messageSends: ["ifFalse:", "value:", "+", "runs", "==", "total"],
@@ -550,17 +550,17 @@ selector: "runCase:",
 category: 'running',
 fn: function (aTestCase){
 var self=this;
-smalltalk.send((function(){
-return smalltalk.send((function(){
-smalltalk.send(self,"_increaseRuns",[]);
-return smalltalk.send(aTestCase,"_runCase",[]);
-}),"_on_do_",[(smalltalk.TestFailure || TestFailure),(function(ex){
-return smalltalk.send(self,"_addFailure_",[aTestCase]);
-})]);
-}),"_on_do_",[(smalltalk.Error || Error),(function(ex){
-return smalltalk.send(self,"_addError_",[aTestCase]);
-})]);
-return self},
+return smalltalk.withContext(function($ctx1) { 
_st((function(){
+return smalltalk.withContext(function($ctx2) { 
return _st((function(){
+return smalltalk.withContext(function($ctx3) { 
_st(self)._increaseRuns();
+return _st(aTestCase)._runCase();
+})}))._on_do_((smalltalk.TestFailure || TestFailure),(function(ex){
+return smalltalk.withContext(function($ctx3) { 
return _st(self)._addFailure_(aTestCase);
+})}));
+})}))._on_do_((smalltalk.Error || Error),(function(ex){
+return smalltalk.withContext(function($ctx2) { 
return _st(self)._addError_(aTestCase);
+})}));
+return self}, self, "runCase:", [aTestCase], smalltalk.TestResult)},
 args: ["aTestCase"],
 source: "runCase: aTestCase\x0a\x09[[\x09self increaseRuns.\x0a    \x09aTestCase runCase]\x0a\x09on: TestFailure do: [:ex | self addFailure: aTestCase]]\x0a\x09on: Error do: [:ex | self addError: aTestCase]\x0a",
 messageSends: ["on:do:", "addError:", "addFailure:", "increaseRuns", "runCase"],
@@ -573,10 +573,10 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "runs",
 category: 'accessing',
-fn: function () {
-    var self = this;
-    return self['@runs'];
-},
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
return self["@runs"];
+}, self, "runs", [], smalltalk.TestResult)},
 args: [],
 source: "runs\x0a\x09^runs",
 messageSends: [],
@@ -589,22 +589,22 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "status",
 category: 'accessing',
-fn: function () {
-    var self = this;
-    var $2, $3, $1;
-    $2 = smalltalk.send(smalltalk.send(self, "_errors", []), "_isEmpty", []);
-    if (smalltalk.assert($2)) {
-        $3 = smalltalk.send(smalltalk.send(self, "_failures", []), "_isEmpty", []);
-        if (smalltalk.assert($3)) {
-            $1 = "success";
-        } else {
-            $1 = "failure";
-        }
-    } else {
-        $1 = "error";
-    }
-    return $1;
-},
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
var $2,$3,$1;
+$2=_st(_st(self)._errors())._isEmpty();
+if(smalltalk.assert($2)){
+$3=_st(_st(self)._failures())._isEmpty();
+if(smalltalk.assert($3)){
+$1="success";
+} else {
+$1="failure";
+};
+} else {
+$1="error";
+};
+return $1;
+}, self, "status", [], smalltalk.TestResult)},
 args: [],
 source: "status\x0a\x09^self errors isEmpty \x0a\x09\x09ifTrue: [\x0a\x09\x09\x09self failures isEmpty \x0a\x09\x09\x09\x09ifTrue: ['success']\x0a\x09\x09\x09\x09ifFalse: ['failure']]\x0a\x09\x09ifFalse: ['error']",
 messageSends: ["ifTrue:ifFalse:", "isEmpty", "failures", "errors"],
@@ -617,10 +617,10 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "timestamp",
 category: 'accessing',
-fn: function () {
-    var self = this;
-    return self['@timestamp'];
-},
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
return self["@timestamp"];
+}, self, "timestamp", [], smalltalk.TestResult)},
 args: [],
 source: "timestamp\x0a\x09^timestamp",
 messageSends: [],
@@ -633,10 +633,10 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "total",
 category: 'accessing',
-fn: function () {
-    var self = this;
-    return self['@total'];
-},
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
return self["@total"];
+}, self, "total", [], smalltalk.TestResult)},
 args: [],
 source: "total\x0a\x09^total",
 messageSends: [],
@@ -649,11 +649,10 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "total:",
 category: 'accessing',
-fn: function (aNumber) {
-    var self = this;
-    self['@total'] = aNumber;
-    return self;
-},
+fn: function (aNumber){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
self["@total"]=aNumber;
+return self}, self, "total:", [aNumber], smalltalk.TestResult)},
 args: ["aNumber"],
 source: "total: aNumber\x0a\x09total := aNumber",
 messageSends: [],
@@ -671,8 +670,8 @@ selector: "announcer",
 category: 'accessing',
 fn: function (){
 var self=this;
-return self["@announcer"];
-},
+return smalltalk.withContext(function($ctx1) { 
return self["@announcer"];
+}, self, "announcer", [], smalltalk.TestSuiteRunner)},
 args: [],
 source: "announcer\x0a\x09^announcer",
 messageSends: [],
@@ -687,10 +686,10 @@ selector: "initialize",
 category: 'initialization',
 fn: function (){
 var self=this;
-smalltalk.send(self,"_initialize",[],smalltalk.Object);
-self["@announcer"]=smalltalk.send((smalltalk.Announcer || Announcer),"_new",[]);
-self["@result"]=smalltalk.send((smalltalk.TestResult || TestResult),"_new",[]);
-return self},
+return smalltalk.withContext(function($ctx1) { 
smalltalk.Object.fn.prototype._initialize.apply(_st(self), []);
+self["@announcer"]=_st((smalltalk.Announcer || Announcer))._new();
+self["@result"]=_st((smalltalk.TestResult || TestResult))._new();
+return self}, self, "initialize", [], smalltalk.TestSuiteRunner)},
 args: [],
 source: "initialize\x0a\x09super initialize.\x0a\x09announcer := Announcer new.\x0a    result := TestResult new",
 messageSends: ["initialize", "new"],
@@ -705,8 +704,8 @@ selector: "result",
 category: 'accessing',
 fn: function (){
 var self=this;
-return self["@result"];
-},
+return smalltalk.withContext(function($ctx1) { 
return self["@result"];
+}, self, "result", [], smalltalk.TestSuiteRunner)},
 args: [],
 source: "result\x0a\x09^result",
 messageSends: [],
@@ -721,21 +720,21 @@ selector: "run",
 category: 'actions',
 fn: function (){
 var self=this;
-var worker;
-smalltalk.send(self["@result"],"_total_",[smalltalk.send(self["@suite"],"_size",[])]);
-smalltalk.send(self["@announcer"],"_announce_",[smalltalk.send(smalltalk.send((smalltalk.ResultAnnouncement || ResultAnnouncement),"_new",[]),"_result_",[self["@result"]])]);
-worker=(function(){
-return smalltalk.send(self["@result"],"_nextRunDo_",[(function(index){
-return smalltalk.send((function(){
-return smalltalk.send(self["@result"],"_runCase_",[smalltalk.send(self["@suite"],"_at_",[index])]);
-}),"_ensure_",[(function(){
-smalltalk.send(worker,"_fork",[]);
-return smalltalk.send(self["@announcer"],"_announce_",[smalltalk.send(smalltalk.send((smalltalk.ResultAnnouncement || ResultAnnouncement),"_new",[]),"_result_",[self["@result"]])]);
-})]);
-})]);
-});
-smalltalk.send(worker,"_fork",[]);
-return self},
+return smalltalk.withContext(function($ctx1) { 
$ctx1.worker=nil;
+_st(self["@result"])._total_(_st(self["@suite"])._size());
+_st(self["@announcer"])._announce_(_st(_st((smalltalk.ResultAnnouncement || ResultAnnouncement))._new())._result_(self["@result"]));
+$ctx1.locals.worker=(function(){
+return smalltalk.withContext(function($ctx2) { 
return _st(self["@result"])._nextRunDo_((function(index){
+return smalltalk.withContext(function($ctx3) { 
return _st((function(){
+return smalltalk.withContext(function($ctx4) { 
return _st(self["@result"])._runCase_(_st(self["@suite"])._at_(index));
+})}))._ensure_((function(){
+return smalltalk.withContext(function($ctx4) { 
_st($ctx1.locals.worker)._fork();
+return _st(self["@announcer"])._announce_(_st(_st((smalltalk.ResultAnnouncement || ResultAnnouncement))._new())._result_(self["@result"]));
+})}));
+})}));
+})});
+_st($ctx1.locals.worker)._fork();
+return self}, self, "run", [], smalltalk.TestSuiteRunner)},
 args: [],
 source: "run\x0a\x09| worker |\x0a\x09result total: suite size.\x0a    announcer announce: (ResultAnnouncement new result: result).\x0a    worker := [ result nextRunDo: [ :index |\x0a\x09\x09[ result runCase: (suite at: index) ]\x0a\x09\x09ensure: [ worker fork.\x0a        \x09announcer announce: (ResultAnnouncement new result: result) ]]].\x0a\x09worker fork",
 messageSends: ["total:", "size", "announce:", "result:", "new", "nextRunDo:", "ensure:", "fork", "runCase:", "at:"],
@@ -750,8 +749,8 @@ selector: "suite:",
 category: 'accessing',
 fn: function (aCollection){
 var self=this;
-self["@suite"]=aCollection;
-return self},
+return smalltalk.withContext(function($ctx1) { 
self["@suite"]=aCollection;
+return self}, self, "suite:", [aCollection], smalltalk.TestSuiteRunner)},
 args: ["aCollection"],
 source: "suite: aCollection\x0a\x09suite := aCollection",
 messageSends: [],
@@ -767,8 +766,8 @@ selector: "new",
 category: 'instance creation',
 fn: function (){
 var self=this;
-smalltalk.send(self,"_shouldNotImplement",[]);
-return self},
+return smalltalk.withContext(function($ctx1) { 
_st(self)._shouldNotImplement();
+return self}, self, "new", [], smalltalk.TestSuiteRunner.klass)},
 args: [],
 source: "new\x0a\x09self shouldNotImplement",
 messageSends: ["shouldNotImplement"],
@@ -783,10 +782,10 @@ selector: "on:",
 category: 'instance creation',
 fn: function (aCollection){
 var self=this;
-var $1;
-$1=smalltalk.send(smalltalk.send(self,"_new",[],smalltalk.Object.klass),"_suite_",[aCollection]);
+return smalltalk.withContext(function($ctx1) { 
var $1;
+$1=_st(smalltalk.Object.klass.fn.prototype._new.apply(_st(self), []))._suite_(aCollection);
 return $1;
-},
+}, self, "on:", [aCollection], smalltalk.TestSuiteRunner.klass)},
 args: ["aCollection"],
 source: "on: aCollection\x0a\x09^super new suite: aCollection",
 messageSends: ["suite:", "new"],

+ 1 - 1
js/parser.js

@@ -1809,7 +1809,7 @@ smalltalk.parser = (function(){
           result0 = null;
         }
         if (result0 !== null) {
-          result0 = (function(offset, line, column, bin) {return bin.join("").replace(/\\/g, '\\\\')})(pos0.offset, pos0.line, pos0.column, result0);
+          result0 = (function(offset, line, column, bin) {return bin.join("")})(pos0.offset, pos0.line, pos0.column, result0);
         }
         if (result0 === null) {
           pos = clone(pos0);

+ 1 - 1
js/parser.pegjs

@@ -61,7 +61,7 @@ reference      = variable / classReference
 
 keywordPair    = key:keyword ws arg:binarySend ws {return {key:key, arg: arg}}
 
-binarySelector = bin:[\\+*/=><,@%~|&-]+ {return bin.join("").replace(/\\/g, '\\\\')}
+binarySelector = bin:[\\+*/=><,@%~|&-]+ {return bin.join("")}
 unarySelector  = identifier
 
 keywordPattern = pairs:(ws key:keyword ws arg:identifier {return {key:key, arg: arg}})+ {

+ 2 - 22
st/Compiler-IR.st

@@ -924,26 +924,6 @@ visitIRSend: anIRSend
 			self stream nextPutAll: '])' ]
 !
 
-visitIRSendOld: anIRSend
-	self stream nextPutAll: 'smalltalk.send('.
-	self visit: anIRSend instructions first.
-	self stream nextPutAll:  ',"', anIRSend selector asSelector, '",['.
-	anIRSend instructions allButFirst
-		do: [ :each | self visit: each ]
-		separatedBy: [ self stream nextPutAll: ',' ].
-	self stream nextPutAll: ']'.
-	"anIRSend index > 1 
-		ifTrue: [
-			anIRSend classSend 
-				ifNil: [ self stream nextPutAll: ',undefined' ]
-				ifNotNil: [ self stream nextPutAll: ',', anIRSend classSend asJavascript ].
-			self stream nextPutAll: ',', anIRSend index asString ]
-		ifFalse: ["
-			anIRSend classSend ifNotNil: [  
-				self stream nextPutAll: ',', anIRSend classSend asJavascript ]"]".
-	self stream nextPutAll: ')'
-!
-
 visitIRSequence: anIRSequence
 	self stream nextPutSequenceWith: [
 		anIRSequence instructions do: [ :each |
@@ -952,7 +932,7 @@ visitIRSequence: anIRSequence
 
 visitIRTempDeclaration: anIRTempDeclaration
 	self stream 
-    	nextPutAll: anIRTempDeclaration scope alias, '.', anIRTempDeclaration name, '=nil;'; 
+    	nextPutAll: anIRTempDeclaration scope alias, '.locals.', anIRTempDeclaration name, '=nil;'; 
         lf
 !
 
@@ -1033,7 +1013,7 @@ nextPutContextFor: aMethod during: aBlock
     	nextPutAll: '}, self, ';
         nextPutAll: aMethod selector asJavascript, ', ['.
     aMethod arguments 
-    	do: [ :each | self nextPutAll: each ]
+    	do: [ :each | self nextPutAll: each asVariableName ]
       	separatedBy: [ self nextPutAll: ','  ].
     self nextPutAll: '], ';
         nextPutAll: aMethod theClass asJavascript;

+ 25 - 17
st/Compiler-Interpreter.st

@@ -22,10 +22,6 @@ initialize
 
 !ASTInterpreter methodsFor: 'interpreting'!
 
-blockValue: anASTBlockClosure
-	^ self interpret: anASTBlockClosure astNode nodes first
-!
-
 interpret: aNode
 	shouldReturn := false.
     ^ self interpretNode: aNode
@@ -36,8 +32,12 @@ interpretNode: aNode
     ^ self visit: aNode
 !
 
-send: aSelector to: anObject arguments: aCollection
-	^ anObject perform: aSelector withArguments: aCollection
+messageFromSendNode: aSendNode
+	^ Message new
+    	selector: aSendNode selector;
+        arguments: (aSendNode arguments collect: [ :each |
+        	self interpretNode: each ]);
+        yourself
 ! !
 
 !ASTInterpreter methodsFor: 'visiting'!
@@ -47,14 +47,22 @@ visitBlockNode: aNode
 !
 
 visitCascadeNode: aNode
+	"TODO: Handle super sends"
+	| receiver |
+    
+    receiver := self interpretNode: aNode receiver.
 
     aNode nodes allButLast
     	do: [ :each | 
-        	each receiver: aNode receiver.
-			self interpretNode: each ].
-            
-	aNode nodes last receiver: aNode receiver.
-    ^ self interpretNode: aNode nodes last
+        	(self messageFromSendNode: each)
+            	sendTo: receiver ].
+
+    ^ (self messageFromSendNode: aNode nodes last)
+            	sendTo: receiver
+!
+
+visitClassReferenceNode: aNode
+	^ Smalltalk current at: aNode value
 !
 
 visitJSStatementNode: aNode
@@ -68,13 +76,9 @@ visitReturnNode: aNode
 
 visitSendNode: aNode
 	"TODO: Handle super sends"
-	| receiver arguments |
-    
-    receiver := self interpretNode: aNode receiver.
-    arguments := aNode arguments collect: [ :each |
-		self interpretNode: each ].
     
-    ^ self send: aNode selector to: receiver arguments: arguments
+    ^ (self messageFromSendNode: aNode)
+    	sendTo: (self interpretNode: aNode receiver)
 !
 
 visitSequenceNode: aNode
@@ -124,5 +128,9 @@ testBlockLiteral
 	self assert: (self interpret: 'foo ^ true ifTrue: [ 1 ] ifFalse: [ 2 ]') equals: 1.
     self assert: (self interpret: 'foo true ifTrue: [ ^ 1 ] ifFalse: [ 2 ]') equals: 1.
     self assert: (self interpret: 'foo ^ false ifTrue: [ 1 ] ifFalse: [ 2 ]') equals: 2
+!
+
+testCascade
+	self assert: (self interpret: 'foo ^ OrderedCollection new add: 2; add: 3; yourself') equals: (OrderedCollection with: 2 with: 3)
 ! !
 

+ 16 - 4
st/Compiler-Semantic.st

@@ -11,6 +11,10 @@ Each context (method/closure) get a fresh scope that inherits from its outer sco
 
 !LexicalScope methodsFor: 'accessing'!
 
+alias
+	^ '$ctx', self scopeLevel asString
+!
+
 allVariableNames
 	^ self args keys, self temps keys
 !
@@ -70,9 +74,10 @@ pseudoVars
 !
 
 scopeLevel
-	^ (self outerScope 
-		ifNil: [ 0 ]
-		ifNotNil: [ self outerScope scopeLevel ]) + 1
+	self outerScope ifNil: [ ^ 1 ].
+	self isInlined ifTrue: [ ^ self outerScope scopeLevel ].
+    
+	^ self outerScope scopeLevel + 1
 !
 
 temps
@@ -102,7 +107,8 @@ isBlockScope
 !
 
 isInlined
-	^ self instruction isInlined
+	^ self instruction notNil and: [
+      	self instruction isInlined ]
 !
 
 isMethodScope
@@ -351,6 +357,12 @@ ScopeVar subclass: #TempVar
 !TempVar commentStamp!
 I am an temporary variable of a method or block.!
 
+!TempVar methodsFor: 'accessing'!
+
+alias
+	^ self scope alias, '.locals.', super alias
+! !
+
 !TempVar methodsFor: 'testing'!
 
 isTempVar

+ 1 - 1
st/IDE.st

@@ -1340,7 +1340,7 @@ label
 !
 
 method
-	^selectedContext method
+	^selectedContext receiver class methodAt: selectedContext selector
 !
 
 receiver

+ 1 - 5
st/Kernel-Methods.st

@@ -300,7 +300,7 @@ printString
 !
 
 sendTo: anObject
-	^ Smalltalk current send: self selector to: anObject arguments: self arguments
+	^ anObject perform: self selector withArguments: self arguments
 ! !
 
 !Message class methodsFor: 'instance creation'!
@@ -336,10 +336,6 @@ locals
 	<return self.locals>
 !
 
-method
-	<return self.method()>
-!
-
 pc
 	<return self.pc>
 !

+ 4 - 0
st/Kernel-Objects.st

@@ -841,6 +841,10 @@ identityHash
 	<return self % aNumber>
 !
 
+\\ aNumber
+	<return self % aNumber>
+!
+
 abs
 	^ <Math.abs(self);>
 !

部分文件因为文件数量过多而无法显示