2
0
Prechádzať zdrojové kódy

- Adds Node >> isReferenced to avoid unneeded aliasing
- Better implementation of VariableNode >> isImmutable
- Adds IRASTTranslator >> visitOrAlias: and also alias inside BlockSequenceNode,
fixing issue #704

- Recompiles all JS files

Nicolas Petton 10 rokov pred
rodič
commit
7211ee8408

+ 41 - 43
js/Benchfib.js

@@ -29,19 +29,18 @@ category: '*Benchfib',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$5,$4,$7,$6,$3,$1;
-$2=self.__lt((2));
-if(smalltalk.assert($2)){
+var $4,$3,$6,$5,$2,$1;
+if(smalltalk.assert(self.__lt((2)))){
 $1=(1);
 } else {
-$5=self.__minus((1));
+$4=self.__minus((1));
 $ctx1.sendIdx["-"]=1;
-$4=_st($5)._benchFib();
+$3=_st($4)._benchFib();
 $ctx1.sendIdx["benchFib"]=1;
-$7=self.__minus((2));
-$6=_st($7)._benchFib();
-$3=_st($4).__plus($6);
-$1=_st($3).__plus((1));
+$6=self.__minus((2));
+$5=_st($6)._benchFib();
+$2=_st($3).__plus($5);
+$1=_st($2).__plus((1));
 $ctx1.sendIdx["+"]=1;
 };
 return $1;
@@ -62,9 +61,9 @@ var self=this;
 var size,flags,prime,k,count;
 function $Array(){return smalltalk.Array||(typeof Array=="undefined"?nil:Array)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1,$3;
+var $1;
 size=(8190);
-$1=(1)._to_do_(self,(function(iter){
+(1)._to_do_(self,(function(iter){
 return smalltalk.withContext(function($ctx2) {
 count=(0);
 count;
@@ -76,8 +75,7 @@ return _st(flags)._add_(true);
 }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)})}));
 return (1)._to_do_(size,(function(i){
 return smalltalk.withContext(function($ctx3) {
-$2=_st(flags)._at_(i);
-if(smalltalk.assert($2)){
+if(smalltalk.assert(_st(flags)._at_(i))){
 prime=_st(i).__plus((1));
 $ctx3.sendIdx["+"]=1;
 prime;
@@ -100,8 +98,8 @@ return count;
 }, function($ctx3) {$ctx3.fillBlock({i:i},$ctx2,3)})}));
 }, function($ctx2) {$ctx2.fillBlock({iter:iter},$ctx1,1)})}));
 $ctx1.sendIdx["to:do:"]=1;
-$3=count;
-return $3;
+$1=count;
+return $1;
 }, function($ctx1) {$ctx1.fill(self,"benchmark",{size:size,flags:flags,prime:prime,k:k,count:count},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\x09| size flags prime k count |\x0a\x09size := 8190.\x0a\x091 to: self do:\x0a\x09\x09[:iter |\x0a\x09\x09count := 0.\x0a\x09\x09flags := Array new.\x0a\x09\x09size timesRepeat: [ flags add: true].\x0a\x09\x091 to: size do:\x0a\x09\x09\x09[:i | (flags at: i) ifTrue:\x0a\x09\x09\x09\x09[prime := i+1.\x0a\x09\x09\x09\x09k := i + prime.\x0a\x09\x09\x09\x09[k <= size] whileTrue:\x0a\x09\x09\x09\x09\x09[flags at: k put: false.\x0a\x09\x09\x09\x09\x09k := k + prime].\x0a\x09\x09\x09\x09count := count + 1]]].\x0a\x09^ count",
@@ -175,9 +173,9 @@ var self=this;
 var t1,t2,r,n1,n2;
 function $Date(){return smalltalk.Date||(typeof Date=="undefined"?nil:Date)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$9,$8,$7,$6,$5,$12,$11,$10,$4,$3;
+var $7,$6,$5,$4,$3,$10,$9,$8,$2,$1;
 n1=(1);
-$1=_st((function(){
+_st((function(){
 return smalltalk.withContext(function($ctx2) {
 t1=_st($Date())._millisecondsToRun_((function(){
 return smalltalk.withContext(function($ctx3) {
@@ -195,7 +193,7 @@ return n1;
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)})}));
 $ctx1.sendIdx["whileTrue:"]=1;
 n2=(28);
-$2=_st((function(){
+_st((function(){
 return smalltalk.withContext(function($ctx2) {
 t2=_st($Date())._millisecondsToRun_((function(){
 return smalltalk.withContext(function($ctx3) {
@@ -209,23 +207,23 @@ return smalltalk.withContext(function($ctx2) {
 n2=_st(n2).__plus((1));
 return n2;
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,6)})}));
-$9=_st(n1).__star((500000));
+$7=_st(n1).__star((500000));
 $ctx1.sendIdx["*"]=3;
-$8=_st($9).__star((1000));
+$6=_st($7).__star((1000));
 $ctx1.sendIdx["*"]=2;
-$7=_st($8).__slash(t1);
+$5=_st($6).__slash(t1);
 $ctx1.sendIdx["/"]=1;
-$6=_st($7)._printString();
+$4=_st($5)._printString();
 $ctx1.sendIdx["printString"]=1;
-$5=_st($6).__comma(" bytecodes/sec; ");
-$12=_st(r).__star((1000));
-$11=_st($12).__slash(t2);
-$10=_st($11)._printString();
-$4=_st($5).__comma($10);
+$3=_st($4).__comma(" bytecodes/sec; ");
+$10=_st(r).__star((1000));
+$9=_st($10).__slash(t2);
+$8=_st($9)._printString();
+$2=_st($3).__comma($8);
 $ctx1.sendIdx[","]=2;
-$3=_st($4).__comma(" sends/sec");
+$1=_st($2).__comma(" sends/sec");
 $ctx1.sendIdx[","]=1;
-return $3;
+return $1;
 }, function($ctx1) {$ctx1.fill(self,"jstinyBenchmarks",{t1:t1,t2:t2,r:r,n1:n1,n2:n2},smalltalk.Number)})},
 args: [],
 source: "jstinyBenchmarks\x0a\x09\x220 jstinyBenchmarks\x22\x0a\x0a\x09| t1 t2 r n1 n2 |\x0a\x09n1 := 1.\x0a\x09[t1 := Date millisecondsToRun: [n1 jsbenchmark].\x0a\x09t1 < 1000] whileTrue:[n1 := n1 * 2]. \x22Note: #benchmark's runtime is about O(n)\x22\x0a\x0a\x09n2 := 28.\x0a\x09[t2 := Date millisecondsToRun: [r := n2 jsbenchFib].\x0a\x09t2 < 1000] whileTrue:[n2 := n2 + 1].\x0a\x09\x22Note: #jsbenchFib's runtime is about O(k^n),\x0a\x09\x09where k is the golden number = (1 + 5 sqrt) / 2 = 1.618....\x22\x0a\x0a\x09^ ((n1 * 500000 * 1000) / t1) printString, ' bytecodes/sec; ',\x0a\x09\x09((r * 1000) / t2) printString, ' sends/sec'",
@@ -243,9 +241,9 @@ var self=this;
 var t1,t2,r,n1,n2;
 function $Date(){return smalltalk.Date||(typeof Date=="undefined"?nil:Date)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$9,$8,$7,$6,$5,$12,$11,$10,$4,$3;
+var $7,$6,$5,$4,$3,$10,$9,$8,$2,$1;
 n1=(1);
-$1=_st((function(){
+_st((function(){
 return smalltalk.withContext(function($ctx2) {
 t1=_st($Date())._millisecondsToRun_((function(){
 return smalltalk.withContext(function($ctx3) {
@@ -263,7 +261,7 @@ return n1;
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)})}));
 $ctx1.sendIdx["whileTrue:"]=1;
 n2=(16);
-$2=_st((function(){
+_st((function(){
 return smalltalk.withContext(function($ctx2) {
 t2=_st($Date())._millisecondsToRun_((function(){
 return smalltalk.withContext(function($ctx3) {
@@ -277,23 +275,23 @@ return smalltalk.withContext(function($ctx2) {
 n2=_st(n2).__plus((1));
 return n2;
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,6)})}));
-$9=_st(n1).__star((500000));
+$7=_st(n1).__star((500000));
 $ctx1.sendIdx["*"]=3;
-$8=_st($9).__star((1000));
+$6=_st($7).__star((1000));
 $ctx1.sendIdx["*"]=2;
-$7=_st($8).__slash(t1);
+$5=_st($6).__slash(t1);
 $ctx1.sendIdx["/"]=1;
-$6=_st($7)._printString();
+$4=_st($5)._printString();
 $ctx1.sendIdx["printString"]=1;
-$5=_st($6).__comma(" bytecodes/sec; ");
-$12=_st(r).__star((1000));
-$11=_st($12).__slash(t2);
-$10=_st($11)._printString();
-$4=_st($5).__comma($10);
+$3=_st($4).__comma(" bytecodes/sec; ");
+$10=_st(r).__star((1000));
+$9=_st($10).__slash(t2);
+$8=_st($9)._printString();
+$2=_st($3).__comma($8);
 $ctx1.sendIdx[","]=2;
-$3=_st($4).__comma(" sends/sec");
+$1=_st($2).__comma(" sends/sec");
 $ctx1.sendIdx[","]=1;
-return $3;
+return $1;
 }, function($ctx1) {$ctx1.fill(self,"tinyBenchmarks",{t1:t1,t2:t2,r:r,n1:n1,n2:n2},smalltalk.Number)})},
 args: [],
 source: "tinyBenchmarks\x0a\x09\x22Report the results of running the two tiny Squeak benchmarks.\x0a\x09ar 9/10/1999: Adjusted to run at least 1 sec to get more stable results\x22\x0a\x09\x220 tinyBenchmarks\x22\x0a\x09\x22On a 292 MHz G3 Mac: 22727272 bytecodes/sec; 984169 sends/sec\x22\x0a\x09\x22On a 400 MHz PII/Win98: 18028169 bytecodes/sec; 1081272 sends/sec\x22\x0a\x09| t1 t2 r n1 n2 |\x0a\x09n1 := 1.\x0a\x09[t1 := Date millisecondsToRun: [n1 benchmark].\x0a\x09t1 < 1000] whileTrue:[n1 := n1 * 2]. \x22Note: #benchmark's runtime is about O(n)\x22\x0a\x0a\x09n2 := 16.\x0a\x09[t2 := Date millisecondsToRun: [r := n2 benchFib].\x0a\x09t2 < 1000] whileTrue:[n2 := n2 + 1].\x0a\x09\x22Note: #benchFib's runtime is about O(k^n),\x0a\x09\x09where k is the golden number = (1 + 5 sqrt) / 2 = 1.618....\x22\x0a\x0a\x09^ ((n1 * 500000 * 1000) / t1) printString, ' bytecodes/sec; ',\x0a\x09\x09((r * 1000) / t2) printString, ' sends/sec'",

+ 27 - 43
js/Canvas.js

@@ -627,7 +627,7 @@ fn: function (aString){
 var self=this;
 var result;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$4,$3,$1,$5,$6;
+var $2,$4,$3,$1,$5;
 $2="<span />"._asJQuery();
 $4="&".__comma(aString);
 $ctx1.sendIdx[","]=2;
@@ -635,10 +635,9 @@ $3=_st($4).__comma(";");
 $ctx1.sendIdx[","]=1;
 $1=_st($2)._html_($3);
 result=_st($1)._text();
-$5=_st(_st(result)._size()).__eq((1));
-if(! smalltalk.assert($5)){
-$6="Not an HTML entity: ".__comma(aString);
-self._error_($6);
+if(! smalltalk.assert(_st(_st(result)._size()).__eq((1)))){
+$5="Not an HTML entity: ".__comma(aString);
+self._error_($5);
 };
 self._with_(result);
 return self}, function($ctx1) {$ctx1.fill(self,"entity:",{aString:aString,result:result},smalltalk.HTMLCanvas)})},
@@ -1125,14 +1124,12 @@ fn: function (){
 var self=this;
 function $TagBrush(){return smalltalk.TagBrush||(typeof TagBrush=="undefined"?nil:TagBrush)}
 return smalltalk.withContext(function($ctx1) { 
-var $1;
 smalltalk.HTMLCanvas.superclass.fn.prototype._initialize.apply(_st(self), []);
-$1=self["@root"];
-if(($receiver = $1) == nil || $receiver == null){
+if(($receiver = self["@root"]) == nil || $receiver == null){
 self["@root"]=_st($TagBrush())._fromString_canvas_("div",self);
 self["@root"];
 } else {
-$1;
+self["@root"];
 };
 return self}, function($ctx1) {$ctx1.fill(self,"initialize",{},smalltalk.HTMLCanvas)})},
 args: [],
@@ -1707,19 +1704,18 @@ var self=this;
 var clone,caret;
 function $TagBrush(){return smalltalk.TagBrush||(typeof TagBrush=="undefined"?nil:TagBrush)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3;
+var $1,$2;
 clone=_st(_st(anElement)._asJQuery())._clone();
 $1=_st($TagBrush())._fromJQuery_canvas_(clone,self);
 $ctx1.sendIdx["fromJQuery:canvas:"]=1;
 self._with_($1);
 caret=_st(clone)._find_("[data-snippet=\x22*\x22]");
-$2=_st(_st(caret)._toArray())._isEmpty();
-if(smalltalk.assert($2)){
+if(smalltalk.assert(_st(_st(caret)._toArray())._isEmpty())){
 caret=clone;
 caret;
 };
-$3=_st($TagBrush())._fromJQuery_canvas_(_st(caret)._removeAttr_("data-snippet"),self);
-return $3;
+$2=_st($TagBrush())._fromJQuery_canvas_(_st(caret)._removeAttr_("data-snippet"),self);
+return $2;
 }, function($ctx1) {$ctx1.fill(self,"snippet:",{anElement:anElement,clone:clone,caret:caret},smalltalk.HTMLCanvas)})},
 args: ["anElement"],
 source: "snippet: anElement\x0a\x09\x22Adds clone of anElement, finds [data-snippet=\x22\x22*\x22\x22] subelement\x0a\x09and returns TagBrush as if that subelement was just added.\x0a\x09\x0a\x09Rarely needed to use directly, use `html foo` dynamically installed method\x0a\x09for a snippet named foo.\x22\x0a\x09\x0a\x09| clone caret |\x0a\x09\x0a\x09clone := anElement asJQuery clone.\x0a\x09self with: (TagBrush fromJQuery: clone canvas: self).\x0a\x09caret := clone find: '[data-snippet=\x22*\x22]'.\x0a\x09caret toArray isEmpty ifTrue: [ caret := clone ].\x0a\x09^TagBrush fromJQuery: (caret removeAttr: 'data-snippet') canvas: self",
@@ -2337,12 +2333,9 @@ fn: function (element){
 var self=this;
 var name;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
 name=_st(element)._attr_("data-snippet");
-$1=_st(name).__eq("*");
-if(! smalltalk.assert($1)){
-$2=_st("^\x5c*"._asRegexp())._test_(name);
-if(smalltalk.assert($2)){
+if(! smalltalk.assert(_st(name).__eq("*"))){
+if(smalltalk.assert(_st("^\x5c*"._asRegexp())._test_(name))){
 name=_st(name)._allButFirst();
 name;
 _st(element)._attr_put_("data-snippet","*");
@@ -2422,13 +2415,12 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@snippets"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@snippets"]) == nil || $receiver == null){
 self["@snippets"]=smalltalk.HashedCollection._from_([]);
 $1=self["@snippets"];
 } else {
-$1=$2;
+$1=self["@snippets"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"snippets",{},smalltalk.HTMLSnippet)})},
@@ -2484,16 +2476,15 @@ category: 'initialization',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3;
-$1=self["@current"];
-if(($receiver = $1) == nil || $receiver == null){
-$2=smalltalk.HTMLSnippet.klass.superclass.fn.prototype._new.apply(_st(self), []);
-_st($2)._initializeFromJQuery_(_st(document)._asJQuery());
-$3=_st($2)._yourself();
-self["@current"]=$3;
+var $1,$2;
+if(($receiver = self["@current"]) == nil || $receiver == null){
+$1=smalltalk.HTMLSnippet.klass.superclass.fn.prototype._new.apply(_st(self), []);
+_st($1)._initializeFromJQuery_(_st(document)._asJQuery());
+$2=_st($1)._yourself();
+self["@current"]=$2;
 self["@current"];
 } else {
-$1;
+self["@current"];
 };
 return self}, function($ctx1) {$ctx1.fill(self,"ensureCurrent",{},smalltalk.HTMLSnippet.klass)})},
 args: [],
@@ -2510,10 +2501,8 @@ category: 'initialization',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
 smalltalk.HTMLSnippet.klass.superclass.fn.prototype._initialize.apply(_st(self), []);
-$1=self._isDOMAvailable();
-if(smalltalk.assert($1)){
+if(smalltalk.assert(self._isDOMAvailable())){
 self._ensureCurrent();
 };
 return self}, function($ctx1) {$ctx1.fill(self,"initialize",{},smalltalk.HTMLSnippet.klass)})},
@@ -2598,10 +2587,8 @@ category: 'adding',
 fn: function (aTagBrush){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
 self._appendChild_(_st(aTagBrush)._element());
-$1=aTagBrush;
-return $1;
+return aTagBrush;
 }, function($ctx1) {$ctx1.fill(self,"addBrush:",{aTagBrush:aTagBrush},smalltalk.TagBrush)})},
 args: ["aTagBrush"],
 source: "addBrush: aTagBrush\x0a\x09self appendChild: aTagBrush element.\x0a\x09^aTagBrush",
@@ -2666,12 +2653,11 @@ fn: function (aBlock){
 var self=this;
 var root;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
 root=_st(self["@canvas"])._root();
-$1=_st(self["@canvas"])._root_(self);
+_st(self["@canvas"])._root_(self);
 $ctx1.sendIdx["root:"]=1;
 _st(aBlock)._value_(self["@canvas"]);
-$2=_st(self["@canvas"])._root_(root);
+_st(self["@canvas"])._root_(root);
 return self}, function($ctx1) {$ctx1.fill(self,"appendBlock:",{aBlock:aBlock,root:root},smalltalk.TagBrush)})},
 args: ["aBlock"],
 source: "appendBlock: aBlock\x0a\x09| root |\x0a\x09root := canvas root.\x0a\x09canvas root: self.\x0a\x09aBlock value: canvas.\x0a\x09canvas root: root",
@@ -3780,9 +3766,7 @@ fn: function (aString){
 var self=this;
 function $HTMLCanvas(){return smalltalk.HTMLCanvas||(typeof HTMLCanvas=="undefined"?nil:HTMLCanvas)}
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=_st($HTMLCanvas())._isMSIE();
-if(smalltalk.assert($1)){
+if(smalltalk.assert(_st($HTMLCanvas())._isMSIE())){
 _st(_st(self._element())._styleSheet())._cssText_(aString);
 } else {
 smalltalk.StyleTag.superclass.fn.prototype._with_.apply(_st(self), [aString]);

+ 169 - 75
js/Compiler-AST.js

@@ -113,7 +113,7 @@ return smalltalk.withContext(function($ctx1) {
 return false;
 }, function($ctx1) {$ctx1.fill(self,"isImmutable",{},smalltalk.Node)})},
 args: [],
-source: "isImmutable\x0a\x09^false",
+source: "isImmutable\x0a\x09^ false",
 messageSends: [],
 referencedClasses: []
 }),
@@ -169,6 +169,32 @@ referencedClasses: []
 }),
 smalltalk.Node);
 
+smalltalk.addMethod(
+smalltalk.method({
+selector: "isReferenced",
+category: 'testing',
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
+var $4,$3,$5,$2,$1;
+$4=self._parent();
+$ctx1.sendIdx["parent"]=1;
+$3=_st($4)._isSequenceNode();
+$2=_st($3)._or_((function(){
+return smalltalk.withContext(function($ctx2) {
+$5=self._parent();
+return _st($5)._isAssignmentNode();
+}, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
+$1=_st($2)._not();
+return $1;
+}, function($ctx1) {$ctx1.fill(self,"isReferenced",{},smalltalk.Node)})},
+args: [],
+source: "isReferenced\x0a\x09\x22Answer true if the receiver is referenced by other nodes.\x0a\x09Do not take sequences or assignments into account\x22\x0a\x09\x0a\x09^ (self parent isSequenceNode or: [\x0a\x09\x09self parent isAssignmentNode ]) not",
+messageSends: ["not", "or:", "isSequenceNode", "parent", "isAssignmentNode"],
+referencedClasses: []
+}),
+smalltalk.Node);
+
 smalltalk.addMethod(
 smalltalk.method({
 selector: "isReturnNode",
@@ -201,6 +227,22 @@ referencedClasses: []
 }),
 smalltalk.Node);
 
+smalltalk.addMethod(
+smalltalk.method({
+selector: "isSequenceNode",
+category: 'testing',
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
+return false;
+}, function($ctx1) {$ctx1.fill(self,"isSequenceNode",{},smalltalk.Node)})},
+args: [],
+source: "isSequenceNode\x0a\x09^ false",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Node);
+
 smalltalk.addMethod(
 smalltalk.method({
 selector: "isValueNode",
@@ -217,6 +259,22 @@ referencedClasses: []
 }),
 smalltalk.Node);
 
+smalltalk.addMethod(
+smalltalk.method({
+selector: "isVariableNode",
+category: 'testing',
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
+return false;
+}, function($ctx1) {$ctx1.fill(self,"isVariableNode",{},smalltalk.Node)})},
+args: [],
+source: "isVariableNode\x0a\x09^ false",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Node);
+
 smalltalk.addMethod(
 smalltalk.method({
 selector: "method",
@@ -224,10 +282,9 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self._parent();
-if(($receiver = $2) == nil || $receiver == null){
-$1=$2;
+var $1;
+if(($receiver = self._parent()) == nil || $receiver == null){
+$1=self._parent();
 } else {
 var node;
 node=$receiver;
@@ -276,10 +333,9 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self._parent();
-if(($receiver = $2) == nil || $receiver == null){
-$1=$2;
+var $1;
+if(($receiver = self._parent()) == nil || $receiver == null){
+$1=self._parent();
 } else {
 var node;
 node=$receiver;
@@ -334,13 +390,12 @@ fn: function (){
 var self=this;
 function $Array(){return smalltalk.Array||(typeof Array=="undefined"?nil:Array)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@nodes"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@nodes"]) == nil || $receiver == null){
 self["@nodes"]=_st($Array())._new();
 $1=self["@nodes"];
 } else {
-$1=$2;
+$1=self["@nodes"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"nodes",{},smalltalk.Node)})},
@@ -412,19 +467,17 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$1;
-$2=self["@position"];
-if(($receiver = $2) == nil || $receiver == null){
-$3=self._parent();
-if(($receiver = $3) == nil || $receiver == null){
-$1=$3;
+var $1;
+if(($receiver = self["@position"]) == nil || $receiver == null){
+if(($receiver = self._parent()) == nil || $receiver == null){
+$1=self._parent();
 } else {
 var node;
 node=$receiver;
 $1=_st(node)._position();
 };
 } else {
-$1=$2;
+$1=self["@position"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"position",{},smalltalk.Node)})},
@@ -478,12 +531,11 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@shouldBeAliased"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@shouldBeAliased"]) == nil || $receiver == null){
 $1=false;
 } else {
-$1=$2;
+$1=self["@shouldBeAliased"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"shouldBeAliased",{},smalltalk.Node)})},
@@ -517,12 +569,11 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@shouldBeInlined"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@shouldBeInlined"]) == nil || $receiver == null){
 $1=false;
 } else {
-$1=$2;
+$1=self["@shouldBeInlined"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"shouldBeInlined",{},smalltalk.Node)})},
@@ -802,13 +853,12 @@ fn: function (){
 var self=this;
 function $Array(){return smalltalk.Array||(typeof Array=="undefined"?nil:Array)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@parameters"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@parameters"]) == nil || $receiver == null){
 self["@parameters"]=_st($Array())._new();
 $1=self["@parameters"];
 } else {
-$1=$2;
+$1=self["@parameters"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"parameters",{},smalltalk.BlockNode)})},
@@ -1051,12 +1101,11 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@source"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@source"]) == nil || $receiver == null){
 $1="";
 } else {
-$1=$2;
+$1=self["@source"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"source",{},smalltalk.JSStatementNode)})},
@@ -1112,12 +1161,11 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@arguments"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@arguments"]) == nil || $receiver == null){
 $1=[];
 } else {
-$1=$2;
+$1=self["@arguments"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"arguments",{},smalltalk.MethodNode)})},
@@ -1530,13 +1578,12 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@arguments"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@arguments"]) == nil || $receiver == null){
 self["@arguments"]=[];
 $1=self["@arguments"];
 } else {
-$1=$2;
+$1=self["@arguments"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"arguments",{},smalltalk.SendNode)})},
@@ -1676,7 +1723,7 @@ fn: function (){
 var self=this;
 function $Array(){return smalltalk.Array||(typeof Array=="undefined"?nil:Array)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$3,$2,$6,$7,$5,$8,$9,$10,$4;
+var $1,$3,$2,$6,$5,$7,$8,$9,$4;
 $1=self._receiver();
 $ctx1.sendIdx["receiver"]=1;
 if(($receiver = $1) == nil || $receiver == null){
@@ -1687,14 +1734,13 @@ return $2;
 } else {
 $1;
 };
-$6=$Array();
-$7=self._receiver();
-$5=_st($6)._with_($7);
-$8=$5;
-$9=self._arguments();
-_st($8)._addAll_($9);
-$10=_st($5)._yourself();
-$4=$10;
+$6=self._receiver();
+$5=_st($Array())._with_($6);
+$7=$5;
+$8=self._arguments();
+_st($7)._addAll_($8);
+$9=_st($5)._yourself();
+$4=$9;
 return $4;
 }, function($ctx1) {$ctx1.fill(self,"nodes",{},smalltalk.SendNode)})},
 args: [],
@@ -1729,10 +1775,8 @@ category: 'accessing',
 fn: function (aNode){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
 self["@receiver"]=aNode;
-$1=_st(aNode)._isNode();
-if(smalltalk.assert($1)){
+if(smalltalk.assert(_st(aNode)._isNode())){
 _st(aNode)._parent_(self);
 };
 return self}, function($ctx1) {$ctx1.fill(self,"receiver:",{aNode:aNode},smalltalk.SendNode)})},
@@ -1787,13 +1831,16 @@ return smalltalk.withContext(function($ctx1) {
 var $1;
 $1=_st(smalltalk.SendNode.superclass.fn.prototype._shouldBeAliased.apply(_st(self), []))._or_((function(){
 return smalltalk.withContext(function($ctx2) {
-return _st(_st(_st(_st(self._method())._sendIndexes())._at_(self._selector()))._size()).__gt((1));
+return _st(_st(_st(_st(_st(self._method())._sendIndexes())._at_(self._selector()))._size()).__gt((1)))._and_((function(){
+return smalltalk.withContext(function($ctx3) {
+return self._isReferenced();
+}, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)})}));
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"shouldBeAliased",{},smalltalk.SendNode)})},
 args: [],
-source: "shouldBeAliased\x0a\x09^ super shouldBeAliased or: [\x0a\x09\x09(self method sendIndexes at: self selector) size > 1 ]",
-messageSends: ["or:", "shouldBeAliased", ">", "size", "at:", "sendIndexes", "method", "selector"],
+source: "shouldBeAliased\x0a\x09^ super shouldBeAliased or: [\x0a\x09\x09(self method sendIndexes at: self selector) size > 1 and: [\x0a\x09\x09\x09self isReferenced ] ]",
+messageSends: ["or:", "shouldBeAliased", "and:", ">", "size", "at:", "sendIndexes", "method", "selector", "isReferenced"],
 referencedClasses: []
 }),
 smalltalk.SendNode);
@@ -1821,12 +1868,11 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@superSend"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@superSend"]) == nil || $receiver == null){
 $1=false;
 } else {
-$1=$2;
+$1=self["@superSend"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"superSend",{},smalltalk.SendNode)})},
@@ -1912,7 +1958,7 @@ smalltalk.SequenceNode);
 smalltalk.addMethod(
 smalltalk.method({
 selector: "asBlockSequenceNode",
-category: 'testing',
+category: 'converting',
 fn: function (){
 var self=this;
 function $BlockSequenceNode(){return smalltalk.BlockSequenceNode||(typeof BlockSequenceNode=="undefined"?nil:BlockSequenceNode)}
@@ -1933,6 +1979,22 @@ referencedClasses: ["BlockSequenceNode"]
 }),
 smalltalk.SequenceNode);
 
+smalltalk.addMethod(
+smalltalk.method({
+selector: "isSequenceNode",
+category: 'testing',
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
+return true;
+}, function($ctx1) {$ctx1.fill(self,"isSequenceNode",{},smalltalk.SequenceNode)})},
+args: [],
+source: "isSequenceNode\x0a\x09^ true",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.SequenceNode);
+
 smalltalk.addMethod(
 smalltalk.method({
 selector: "scope",
@@ -1974,12 +2036,11 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@temps"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@temps"]) == nil || $receiver == null){
 $1=[];
 } else {
-$1=$2;
+$1=self["@temps"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"temps",{},smalltalk.SequenceNode)})},
@@ -2202,12 +2263,11 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@assigned"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@assigned"]) == nil || $receiver == null){
 $1=false;
 } else {
-$1=$2;
+$1=self["@assigned"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"assigned",{},smalltalk.VariableNode)})},
@@ -2285,6 +2345,24 @@ referencedClasses: []
 }),
 smalltalk.VariableNode);
 
+smalltalk.addMethod(
+smalltalk.method({
+selector: "isArgument",
+category: 'testing',
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
+var $1;
+$1=_st(self._binding())._isArgVar();
+return $1;
+}, function($ctx1) {$ctx1.fill(self,"isArgument",{},smalltalk.VariableNode)})},
+args: [],
+source: "isArgument\x0a\x09^ self binding isArgVar",
+messageSends: ["isArgVar", "binding"],
+referencedClasses: []
+}),
+smalltalk.VariableNode);
+
 smalltalk.addMethod(
 smalltalk.method({
 selector: "isImmutable",
@@ -2293,12 +2371,28 @@ fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
 var $1;
-$1=_st(self._binding())._isPseudoVar();
+$1=_st(self._binding())._isImmutable();
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"isImmutable",{},smalltalk.VariableNode)})},
 args: [],
-source: "isImmutable\x0a\x09^ self binding isPseudoVar",
-messageSends: ["isPseudoVar", "binding"],
+source: "isImmutable\x0a\x09^ self binding isImmutable",
+messageSends: ["isImmutable", "binding"],
+referencedClasses: []
+}),
+smalltalk.VariableNode);
+
+smalltalk.addMethod(
+smalltalk.method({
+selector: "isVariableNode",
+category: 'testing',
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
+return true;
+}, function($ctx1) {$ctx1.fill(self,"isVariableNode",{},smalltalk.VariableNode)})},
+args: [],
+source: "isVariableNode\x0a\x09^ true",
+messageSends: [],
 referencedClasses: []
 }),
 smalltalk.VariableNode);

+ 25 - 33
js/Compiler-Core.js

@@ -11,15 +11,13 @@ category: 'accessing',
 fn: function (aClass){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$4,$1;
-$2=_st(aClass)._isMetaclass();
-if(smalltalk.assert($2)){
-$3=_st(_st(aClass)._instanceClass())._name();
+var $2,$1;
+if(smalltalk.assert(_st(aClass)._isMetaclass())){
+$2=_st(_st(aClass)._instanceClass())._name();
 $ctx1.sendIdx["name"]=1;
-$1=_st($3).__comma(".klass");
+$1=_st($2).__comma(".klass");
 } else {
-$4=_st(aClass)._isNil();
-if(smalltalk.assert($4)){
+if(smalltalk.assert(_st(aClass)._isNil())){
 $1="nil";
 } else {
 $1=_st(aClass)._name();
@@ -111,9 +109,8 @@ fn: function (aString){
 var self=this;
 function $Smalltalk(){return smalltalk.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=_st(_st(_st($Smalltalk())._current())._reservedWords())._includes_(aString);
-if(smalltalk.assert($2)){
+var $1;
+if(smalltalk.assert(_st(_st(_st($Smalltalk())._current())._reservedWords())._includes_(aString))){
 $1=_st(aString).__comma("_");
 } else {
 $1=aString;
@@ -134,12 +131,11 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@source"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@source"]) == nil || $receiver == null){
 $1="";
 } else {
-$1=$2;
+$1=self["@source"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"source",{},smalltalk.AbstractCodeGenerator)})},
@@ -178,17 +174,17 @@ fn: function (aNode){
 var self=this;
 var ir,stream;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$3,$4,$2;
-$1=_st(self._semanticAnalyzer())._visit_(aNode);
+var $2,$3,$1;
+_st(self._semanticAnalyzer())._visit_(aNode);
 $ctx1.sendIdx["visit:"]=1;
 ir=_st(self._translator())._visit_(aNode);
 $ctx1.sendIdx["visit:"]=2;
-$3=self._irTranslator();
-_st($3)._currentClass_(self._currentClass());
-_st($3)._visit_(ir);
-$4=_st($3)._contents();
-$2=$4;
-return $2;
+$2=self._irTranslator();
+_st($2)._currentClass_(self._currentClass());
+_st($2)._visit_(ir);
+$3=_st($2)._contents();
+$1=$3;
+return $1;
 }, function($ctx1) {$ctx1.fill(self,"compileNode:",{aNode:aNode,ir:ir,stream:stream},smalltalk.CodeGenerator)})},
 args: ["aNode"],
 source: "compileNode: aNode\x0a\x09| ir stream |\x0a\x09self semanticAnalyzer visit: aNode.\x0a\x09ir := self translator visit: aNode.\x0a\x09^ self irTranslator\x0a\x09\x09currentClass: self currentClass;\x0a\x09\x09visit: ir;\x0a\x09\x09contents",
@@ -270,12 +266,11 @@ fn: function (){
 var self=this;
 function $InliningCodeGenerator(){return smalltalk.InliningCodeGenerator||(typeof InliningCodeGenerator=="undefined"?nil:InliningCodeGenerator)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@codeGeneratorClass"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@codeGeneratorClass"]) == nil || $receiver == null){
 $1=$InliningCodeGenerator();
 } else {
-$1=$2;
+$1=self["@codeGeneratorClass"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"codeGeneratorClass",{},smalltalk.Compiler)})},
@@ -574,13 +569,11 @@ category: 'compiling',
 fn: function (aClass){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
 _st(_st(_st(aClass)._methodDictionary())._values())._do_displayingProgress_((function(each){
 return smalltalk.withContext(function($ctx2) {
 return self._install_forClass_category_(_st(each)._source(),aClass,_st(each)._category());
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)})}),"Recompiling ".__comma(_st(aClass)._name()));
-$1=_st(aClass)._isMetaclass();
-if(! smalltalk.assert($1)){
+if(! smalltalk.assert(_st(aClass)._isMetaclass())){
 self._recompile_(_st(aClass)._class());
 };
 return self}, function($ctx1) {$ctx1.fill(self,"recompile:",{aClass:aClass},smalltalk.Compiler)})},
@@ -618,12 +611,11 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@source"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@source"]) == nil || $receiver == null){
 $1="";
 } else {
-$1=$2;
+$1=self["@source"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"source",{},smalltalk.Compiler)})},

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 266 - 270
js/Compiler-IR.js


+ 123 - 138
js/Compiler-Inlining.js

@@ -472,9 +472,8 @@ category: 'visiting',
 fn: function (anIRAssignment){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self._shouldInlineAssignment_(anIRAssignment);
-if(smalltalk.assert($2)){
+var $1;
+if(smalltalk.assert(self._shouldInlineAssignment_(anIRAssignment))){
 $1=_st(self._assignmentInliner())._inlineAssignment_(anIRAssignment);
 } else {
 $1=smalltalk.IRInliner.superclass.fn.prototype._visitIRAssignment_.apply(_st(self), [anIRAssignment]);
@@ -513,9 +512,8 @@ category: 'visiting',
 fn: function (anIRReturn){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self._shouldInlineReturn_(anIRReturn);
-if(smalltalk.assert($2)){
+var $1;
+if(smalltalk.assert(self._shouldInlineReturn_(anIRReturn))){
 $1=_st(self._returnInliner())._inlineReturn_(anIRReturn);
 } else {
 $1=smalltalk.IRInliner.superclass.fn.prototype._visitIRReturn_.apply(_st(self), [anIRReturn]);
@@ -536,9 +534,8 @@ category: 'visiting',
 fn: function (anIRSend){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self._shouldInlineSend_(anIRSend);
-if(smalltalk.assert($2)){
+var $1;
+if(smalltalk.assert(self._shouldInlineSend_(anIRSend))){
 $1=_st(self._sendInliner())._inlineSend_(anIRSend);
 } else {
 $1=smalltalk.IRInliner.superclass.fn.prototype._visitIRSend_.apply(_st(self), [anIRSend]);
@@ -909,24 +906,23 @@ function $IRInlinedIfNilIfNotNil(){return smalltalk.IRInlinedIfNilIfNotNil||(typ
 function $IRClosure(){return smalltalk.IRClosure||(typeof IRClosure=="undefined"?nil:IRClosure)}
 function $IRBlockSequence(){return smalltalk.IRBlockSequence||(typeof IRBlockSequence=="undefined"?nil:IRBlockSequence)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$5,$6,$8,$9,$7,$10,$4,$1;
+var $2,$4,$5,$7,$8,$6,$9,$3,$1;
 $2=_st($IRInlinedIfNilIfNotNil())._new();
 $ctx1.sendIdx["new"]=1;
-$3=anIRInstruction;
-$5=_st($IRClosure())._new();
+$4=_st($IRClosure())._new();
 $ctx1.sendIdx["new"]=2;
-_st($5)._scope_(_st(_st(anIRInstruction)._scope())._copy());
-$6=$5;
-$8=_st($IRBlockSequence())._new();
-_st($8)._add_(_st(_st(self._send())._instructions())._first());
-$9=_st($8)._yourself();
+_st($4)._scope_(_st(_st(anIRInstruction)._scope())._copy());
+$5=$4;
+$7=_st($IRBlockSequence())._new();
+_st($7)._add_(_st(_st(self._send())._instructions())._first());
+$8=_st($7)._yourself();
 $ctx1.sendIdx["yourself"]=1;
-$7=$9;
-_st($6)._add_($7);
+$6=$8;
+_st($5)._add_($6);
 $ctx1.sendIdx["add:"]=1;
-$10=_st($5)._yourself();
-$4=$10;
-$1=self._inlinedSend_with_with_($2,$3,$4);
+$9=_st($4)._yourself();
+$3=$9;
+$1=self._inlinedSend_with_with_($2,anIRInstruction,$3);
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"ifNil:",{anIRInstruction:anIRInstruction},smalltalk.IRSendInliner)})},
 args: ["anIRInstruction"],
@@ -1060,81 +1056,81 @@ function $IRAssignment(){return smalltalk.IRAssignment||(typeof IRAssignment=="u
 function $IRVariable(){return smalltalk.IRVariable||(typeof IRVariable=="undefined"?nil:IRVariable)}
 function $AliasVar(){return smalltalk.AliasVar||(typeof AliasVar=="undefined"?nil:AliasVar)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$1,$4,$6,$8,$9,$7,$10,$12,$13,$15,$17,$18,$19,$20,$16,$14,$21,$23,$25,$26,$27,$28,$24,$22,$29,$11,$5,$30,$32,$31,$35,$34,$36,$33,$37,$40,$39,$38,$41,$42,$43;
+var $1,$2,$3,$5,$6,$4,$7,$9,$10,$12,$14,$15,$16,$17,$13,$11,$18,$20,$22,$23,$24,$25,$21,$19,$26,$8,$28,$27,$31,$30,$32,$29,$33,$36,$35,$34,$37,$38,$39;
 inlinedClosure=self._inlinedClosure();
-$2=inlinedClosure;
-$3=_st(anIRClosure)._scope();
+$1=inlinedClosure;
+$2=_st(anIRClosure)._scope();
 $ctx1.sendIdx["scope"]=1;
-$1=_st($2)._scope_($3);
+_st($1)._scope_($2);
 $ctx1.sendIdx["scope:"]=1;
-$4=_st(_st(anIRClosure)._tempDeclarations())._do_((function(each){
+_st(_st(anIRClosure)._tempDeclarations())._do_((function(each){
 return smalltalk.withContext(function($ctx2) {
 return _st(inlinedClosure)._add_(each);
 $ctx2.sendIdx["add:"]=1;
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)})}));
 $ctx1.sendIdx["do:"]=1;
 sequence=self._inlinedSequence();
-$5=_st(_st(anIRClosure)._arguments())._do_((function(each){
+_st(_st(anIRClosure)._arguments())._do_((function(each){
 return smalltalk.withContext(function($ctx2) {
-$6=inlinedClosure;
-$8=_st($IRTempDeclaration())._new();
+$3=inlinedClosure;
+$5=_st($IRTempDeclaration())._new();
 $ctx2.sendIdx["new"]=1;
-_st($8)._name_(each);
+_st($5)._name_(each);
 $ctx2.sendIdx["name:"]=1;
-$9=_st($8)._yourself();
+$6=_st($5)._yourself();
 $ctx2.sendIdx["yourself"]=1;
-$7=$9;
-_st($6)._add_($7);
+$4=$6;
+_st($3)._add_($4);
 $ctx2.sendIdx["add:"]=2;
-$10=sequence;
-$12=_st($IRAssignment())._new();
+$7=sequence;
+$9=_st($IRAssignment())._new();
 $ctx2.sendIdx["new"]=2;
-$13=$12;
-$15=_st($IRVariable())._new();
+$10=$9;
+$12=_st($IRVariable())._new();
 $ctx2.sendIdx["new"]=3;
-$17=_st($AliasVar())._new();
+$14=_st($AliasVar())._new();
 $ctx2.sendIdx["new"]=4;
-$18=$17;
-$19=_st(inlinedClosure)._scope();
+$15=$14;
+$16=_st(inlinedClosure)._scope();
 $ctx2.sendIdx["scope"]=2;
-_st($18)._scope_($19);
+_st($15)._scope_($16);
 $ctx2.sendIdx["scope:"]=2;
-_st($17)._name_(each);
+_st($14)._name_(each);
 $ctx2.sendIdx["name:"]=2;
-$20=_st($17)._yourself();
+$17=_st($14)._yourself();
 $ctx2.sendIdx["yourself"]=2;
-$16=$20;
-$14=_st($15)._variable_($16);
+$13=$17;
+$11=_st($12)._variable_($13);
 $ctx2.sendIdx["variable:"]=1;
-_st($13)._add_($14);
+_st($10)._add_($11);
 $ctx2.sendIdx["add:"]=4;
-$21=$12;
-$23=_st($IRVariable())._new();
+$18=$9;
+$20=_st($IRVariable())._new();
 $ctx2.sendIdx["new"]=5;
-$25=_st($AliasVar())._new();
-$26=$25;
-$27=_st(inlinedClosure)._scope();
-_st($26)._scope_($27);
-_st($25)._name_("$receiver");
-$28=_st($25)._yourself();
+$22=_st($AliasVar())._new();
+$23=$22;
+$24=_st(inlinedClosure)._scope();
+_st($23)._scope_($24);
+_st($22)._name_("$receiver");
+$25=_st($22)._yourself();
 $ctx2.sendIdx["yourself"]=3;
-$24=$28;
-$22=_st($23)._variable_($24);
-_st($21)._add_($22);
+$21=$25;
+$19=_st($20)._variable_($21);
+_st($18)._add_($19);
 $ctx2.sendIdx["add:"]=5;
-$29=_st($12)._yourself();
-$11=$29;
-return _st($10)._add_($11);
+$26=_st($9)._yourself();
+$8=$26;
+return _st($7)._add_($8);
 $ctx2.sendIdx["add:"]=3;
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)})}));
 $ctx1.sendIdx["do:"]=2;
-$30=_st(inlinedClosure)._add_(sequence);
+_st(inlinedClosure)._add_(sequence);
 $ctx1.sendIdx["add:"]=6;
-$32=_st(anIRClosure)._instructions();
+$28=_st(anIRClosure)._instructions();
 $ctx1.sendIdx["instructions"]=2;
-$31=_st($32)._last();
+$27=_st($28)._last();
 $ctx1.sendIdx["last"]=1;
-statements=_st($31)._instructions();
+statements=_st($27)._instructions();
 $ctx1.sendIdx["instructions"]=1;
 _st(statements)._ifNotEmpty_((function(){
 return smalltalk.withContext(function($ctx2) {
@@ -1143,31 +1139,31 @@ return smalltalk.withContext(function($ctx3) {
 return _st(sequence)._add_(each);
 $ctx3.sendIdx["add:"]=7;
 }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,4)})}));
-$35=_st(statements)._last();
+$31=_st(statements)._last();
 $ctx2.sendIdx["last"]=2;
-$34=_st($35)._isReturn();
-$33=_st($34)._and_((function(){
+$30=_st($31)._isReturn();
+$29=_st($30)._and_((function(){
 return smalltalk.withContext(function($ctx3) {
-$36=_st(statements)._last();
+$32=_st(statements)._last();
 $ctx3.sendIdx["last"]=3;
-return _st($36)._isBlockReturn();
+return _st($32)._isBlockReturn();
 }, function($ctx3) {$ctx3.fillBlock({},$ctx2,5)})}));
-if(smalltalk.assert($33)){
-$37=sequence;
-$40=_st(statements)._last();
+if(smalltalk.assert($29)){
+$33=sequence;
+$36=_st(statements)._last();
 $ctx2.sendIdx["last"]=4;
-$39=_st($40)._instructions();
-$38=_st($39)._first();
-return _st($37)._add_($38);
+$35=_st($36)._instructions();
+$34=_st($35)._first();
+return _st($33)._add_($34);
 $ctx2.sendIdx["add:"]=8;
 } else {
-$41=sequence;
-$42=_st(statements)._last();
-return _st($41)._add_($42);
+$37=sequence;
+$38=_st(statements)._last();
+return _st($37)._add_($38);
 };
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)})}));
-$43=inlinedClosure;
-return $43;
+$39=inlinedClosure;
+return $39;
 }, function($ctx1) {$ctx1.fill(self,"inlineClosure:",{anIRClosure:anIRClosure,inlinedClosure:inlinedClosure,sequence:sequence,statements:statements},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 tempDeclarations do: [ :each |\x0a\x09\x09\x09inlinedClosure add: each ].\x0a\x0a\x09\x22Add a block sequence\x22\x0a\x09sequence := self inlinedSequence.\x0a\x0a\x09\x22Map the closure arguments to the receiver of the message send\x22\x0a\x09anIRClosure arguments do: [ :each |\x0a\x09\x09inlinedClosure add: (IRTempDeclaration new name: each; yourself).\x0a\x09\x09sequence add: (IRAssignment new\x0a\x09\x09\x09add: (IRVariable new variable: (AliasVar new scope: inlinedClosure scope; name: each; yourself));\x0a\x09\x09\x09add: (IRVariable new variable: (AliasVar new scope: inlinedClosure scope; name: '$receiver'; yourself));\x0a\x09\x09\x09yourself) ].\x0a\x09\x09\x09\x0a\x09\x22To ensure the correct order of the closure instructions: first the temps then the sequence\x22\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",
@@ -1228,30 +1224,25 @@ fn: function (inlinedSend,anIRInstruction){
 var self=this;
 var inlinedClosure;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1,$4,$3,$5,$6,$9,$8,$7,$10,$11,$12;
-$2=_st(anIRInstruction)._isClosure();
-if(! smalltalk.assert($2)){
-$1=self._inliningError_("Message argument should be a block");
+var $3,$2,$1,$4,$5;
+if(! smalltalk.assert(_st(anIRInstruction)._isClosure())){
+self._inliningError_("Message argument should be a block");
 $ctx1.sendIdx["inliningError:"]=1;
 };
-$4=_st(_st(_st(anIRInstruction)._arguments())._size()).__eq((0));
-if(! smalltalk.assert($4)){
-$3=self._inliningError_("Inlined block should have zero argument");
+if(! smalltalk.assert(_st(_st(_st(anIRInstruction)._arguments())._size()).__eq((0)))){
+self._inliningError_("Inlined block should have zero argument");
 };
 inlinedClosure=_st(self._translator())._visit_(self._inlineClosure_(anIRInstruction));
-$5=inlinedSend;
-$6=$5;
-$9=self._send();
+$3=self._send();
 $ctx1.sendIdx["send"]=1;
-$8=_st($9)._instructions();
-$7=_st($8)._first();
-_st($6)._add_($7);
+$2=_st($3)._instructions();
+$1=_st($2)._first();
+_st(inlinedSend)._add_($1);
 $ctx1.sendIdx["add:"]=1;
-$10=_st($5)._add_(inlinedClosure);
-$11=self._send();
-_st($11)._replaceWith_(inlinedSend);
-$12=inlinedSend;
-return $12;
+$4=_st(inlinedSend)._add_(inlinedClosure);
+$5=self._send();
+_st($5)._replaceWith_(inlinedSend);
+return inlinedSend;
 }, function($ctx1) {$ctx1.fill(self,"inlinedSend:with:",{inlinedSend:inlinedSend,anIRInstruction:anIRInstruction,inlinedClosure:inlinedClosure},smalltalk.IRSendInliner)})},
 args: ["inlinedSend", "anIRInstruction"],
 source: "inlinedSend: inlinedSend with: anIRInstruction\x0a\x09| inlinedClosure |\x0a\x0a\x09anIRInstruction isClosure ifFalse: [ self inliningError: 'Message argument should be a block' ].\x0a\x09anIRInstruction arguments size = 0 ifFalse: [ self inliningError: 'Inlined block should have zero argument' ].\x0a\x0a\x09inlinedClosure := self translator visit: (self inlineClosure: anIRInstruction).\x0a\x0a\x09inlinedSend\x0a\x09\x09add: self send instructions first;\x0a\x09\x09add: inlinedClosure.\x0a\x0a\x09self send replaceWith: inlinedSend.\x0a\x0a\x09^ inlinedSend",
@@ -1268,41 +1259,38 @@ fn: function (inlinedSend,anIRInstruction,anotherIRInstruction){
 var self=this;
 var inlinedClosure1,inlinedClosure2;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1,$4,$3,$5,$6,$7,$8,$9,$10,$13,$12,$11,$14,$15,$16;
-$2=_st(anIRInstruction)._isClosure();
+var $1,$2,$3,$4,$5,$6,$9,$8,$7,$10,$11;
+$1=_st(anIRInstruction)._isClosure();
 $ctx1.sendIdx["isClosure"]=1;
-if(! smalltalk.assert($2)){
-$1=self._inliningError_("Message argument should be a block");
+if(! smalltalk.assert($1)){
+self._inliningError_("Message argument should be a block");
 $ctx1.sendIdx["inliningError:"]=1;
 };
-$4=_st(anotherIRInstruction)._isClosure();
-if(! smalltalk.assert($4)){
-$3=self._inliningError_("Message argument should be a block");
+$2=_st(anotherIRInstruction)._isClosure();
+if(! smalltalk.assert($2)){
+self._inliningError_("Message argument should be a block");
 };
-$5=self._translator();
+$3=self._translator();
 $ctx1.sendIdx["translator"]=1;
-$6=self._inlineClosure_(anIRInstruction);
+$4=self._inlineClosure_(anIRInstruction);
 $ctx1.sendIdx["inlineClosure:"]=1;
-inlinedClosure1=_st($5)._visit_($6);
+inlinedClosure1=_st($3)._visit_($4);
 $ctx1.sendIdx["visit:"]=1;
-$7=self._translator();
-$8=self._inlineClosure_(anotherIRInstruction);
-inlinedClosure2=_st($7)._visit_($8);
-$9=inlinedSend;
-$10=$9;
-$13=self._send();
+$5=self._translator();
+$6=self._inlineClosure_(anotherIRInstruction);
+inlinedClosure2=_st($5)._visit_($6);
+$9=self._send();
 $ctx1.sendIdx["send"]=1;
-$12=_st($13)._instructions();
-$11=_st($12)._first();
-_st($10)._add_($11);
+$8=_st($9)._instructions();
+$7=_st($8)._first();
+_st(inlinedSend)._add_($7);
 $ctx1.sendIdx["add:"]=1;
-_st($9)._add_(inlinedClosure1);
+_st(inlinedSend)._add_(inlinedClosure1);
 $ctx1.sendIdx["add:"]=2;
-$14=_st($9)._add_(inlinedClosure2);
-$15=self._send();
-_st($15)._replaceWith_(inlinedSend);
-$16=inlinedSend;
-return $16;
+$10=_st(inlinedSend)._add_(inlinedClosure2);
+$11=self._send();
+_st($11)._replaceWith_(inlinedSend);
+return inlinedSend;
 }, function($ctx1) {$ctx1.fill(self,"inlinedSend:with:with:",{inlinedSend:inlinedSend,anIRInstruction:anIRInstruction,anotherIRInstruction:anotherIRInstruction,inlinedClosure1:inlinedClosure1,inlinedClosure2:inlinedClosure2},smalltalk.IRSendInliner)})},
 args: ["inlinedSend", "anIRInstruction", "anotherIRInstruction"],
 source: "inlinedSend: inlinedSend with: anIRInstruction with: anotherIRInstruction\x0a\x09| inlinedClosure1 inlinedClosure2 |\x0a\x0a\x09anIRInstruction isClosure ifFalse: [ self inliningError: 'Message argument should be a block' ].\x0a\x09anotherIRInstruction isClosure ifFalse: [ self inliningError: 'Message argument should be a block' ].\x0a\x0a\x09inlinedClosure1 := self translator visit: (self inlineClosure: anIRInstruction).\x0a\x09inlinedClosure2 := self translator visit: (self inlineClosure: anotherIRInstruction).\x0a\x0a\x09inlinedSend\x0a\x09\x09add: self send instructions first;\x0a\x09\x09add: inlinedClosure1;\x0a\x09\x09add: inlinedClosure2.\x0a\x0a\x09self send replaceWith: inlinedSend.\x0a\x09^ inlinedSend",
@@ -1441,17 +1429,14 @@ category: 'accessing',
 fn: function (anIRInstruction){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1,$3;
 var $early={};
 try {
-$2=_st(self._inlinedSelectors())._includes_(_st(anIRInstruction)._selector());
-if(! smalltalk.assert($2)){
+if(! smalltalk.assert(_st(self._inlinedSelectors())._includes_(_st(anIRInstruction)._selector()))){
 return false;
 };
 _st(_st(_st(anIRInstruction)._instructions())._allButFirst())._do_((function(each){
 return smalltalk.withContext(function($ctx2) {
-$3=_st(each)._isClosure();
-if(! smalltalk.assert($3)){
+if(! smalltalk.assert(_st(each)._isClosure())){
 throw $early=[false];
 };
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)})}));
@@ -1694,19 +1679,19 @@ fn: function (aNode){
 var self=this;
 var ir,stream;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$4,$5,$3;
-$1=_st(self._semanticAnalyzer())._visit_(aNode);
+var $2,$3,$1;
+_st(self._semanticAnalyzer())._visit_(aNode);
 $ctx1.sendIdx["visit:"]=1;
 ir=_st(self._translator())._visit_(aNode);
 $ctx1.sendIdx["visit:"]=2;
-$2=_st(self._inliner())._visit_(ir);
+_st(self._inliner())._visit_(ir);
 $ctx1.sendIdx["visit:"]=3;
-$4=self._irTranslator();
-_st($4)._currentClass_(self._currentClass());
-_st($4)._visit_(ir);
-$5=_st($4)._contents();
-$3=$5;
-return $3;
+$2=self._irTranslator();
+_st($2)._currentClass_(self._currentClass());
+_st($2)._visit_(ir);
+$3=_st($2)._contents();
+$1=$3;
+return $1;
 }, function($ctx1) {$ctx1.fill(self,"compileNode:",{aNode:aNode,ir:ir,stream:stream},smalltalk.InliningCodeGenerator)})},
 args: ["aNode"],
 source: "compileNode: aNode\x0a\x09| ir stream |\x0a\x0a\x09self semanticAnalyzer visit: aNode.\x0a\x09ir := self translator visit: aNode.\x0a\x09self inliner visit: ir.\x0a\x0a\x09^ self irTranslator\x0a\x09\x09currentClass: self currentClass;\x0a\x09\x09visit: ir;\x0a\x09\x09contents",

+ 142 - 171
js/Compiler-Interpreter.js

@@ -268,27 +268,24 @@ category: 'interpreting',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$3,$2,$4,$5;
-$1=self._isBlockContext();
-if(smalltalk.assert($1)){
-$3=self._outerContext();
-if(($receiver = $3) == nil || $receiver == null){
-$2=$3;
+var $1,$2;
+if(smalltalk.assert(self._isBlockContext())){
+if(($receiver = self._outerContext()) == nil || $receiver == null){
+$1=self._outerContext();
 } else {
 var context;
 context=$receiver;
-$2=_st(context)._ast();
+$1=_st(context)._ast();
 };
-return $2;
+return $1;
 };
-$4=self["@ast"];
-if(($receiver = $4) == nil || $receiver == null){
+if(($receiver = self["@ast"]) == nil || $receiver == null){
 self._initializeAST();
 } else {
-$4;
+self["@ast"];
 };
-$5=self["@ast"];
-return $5;
+$2=self["@ast"];
+return $2;
 }, function($ctx1) {$ctx1.fill(self,"ast",{},smalltalk.AIContext)})},
 args: [],
 source: "ast\x0a\x09self isBlockContext ifTrue: [ \x0a\x09\x09^ self outerContext ifNotNil: [ :context | context ast ] ].\x0a\x0a\x09ast ifNil: [ self initializeAST ].\x0a\x09^ ast",
@@ -304,12 +301,11 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@index"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@index"]) == nil || $receiver == null){
 $1=(0);
 } else {
-$1=$2;
+$1=self["@index"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"index",{},smalltalk.AIContext)})},
@@ -344,14 +340,13 @@ fn: function (){
 var self=this;
 function $SemanticAnalyzer(){return smalltalk.SemanticAnalyzer||(typeof SemanticAnalyzer=="undefined"?nil:SemanticAnalyzer)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$3,$5,$4,$2;
+var $1,$4,$3,$2;
 $1=self._method();
 $ctx1.sendIdx["method"]=1;
 self["@ast"]=_st($1)._ast();
-$3=$SemanticAnalyzer();
-$5=self._method();
-$4=_st($5)._methodClass();
-$2=_st($3)._on_($4);
+$4=self._method();
+$3=_st($4)._methodClass();
+$2=_st($SemanticAnalyzer())._on_($3);
 _st($2)._visit_(self["@ast"]);
 return self}, function($ctx1) {$ctx1.fill(self,"initializeAST",{},smalltalk.AIContext)})},
 args: [],
@@ -368,33 +363,32 @@ category: 'initialization',
 fn: function (aMethodContext){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$3,$4,$6,$7,$5,$8,$9,$2;
+var $1,$2,$4,$5,$3,$6,$7;
 self._index_(_st(aMethodContext)._index());
 self._sendIndexes_(_st(aMethodContext)._sendIndexes());
 self._receiver_(_st(aMethodContext)._receiver());
 $1=self._selector_(_st(aMethodContext)._selector());
-$3=_st(aMethodContext)._outerContext();
+$2=_st(aMethodContext)._outerContext();
 $ctx1.sendIdx["outerContext"]=1;
-if(($receiver = $3) == nil || $receiver == null){
-$2=$3;
+if(($receiver = $2) == nil || $receiver == null){
+$2;
 } else {
 var outer;
 outer=$receiver;
-$4=_st(outer)._methodContext();
-if(($receiver = $4) == nil || $receiver == null){
-$4;
+if(($receiver = _st(outer)._methodContext()) == nil || $receiver == null){
+_st(outer)._methodContext();
 } else {
-$6=self._class();
-$7=_st(aMethodContext)._outerContext();
-$5=_st($6)._fromMethodContext_($7);
-self._outerContext_($5);
+$4=self._class();
+$5=_st(aMethodContext)._outerContext();
+$3=_st($4)._fromMethodContext_($5);
+self._outerContext_($3);
 };
-$8=_st(aMethodContext)._locals();
+$6=_st(aMethodContext)._locals();
 $ctx1.sendIdx["locals"]=1;
-$2=_st($8)._keysAndValuesDo_((function(key,value){
+_st($6)._keysAndValuesDo_((function(key,value){
 return smalltalk.withContext(function($ctx2) {
-$9=self._locals();
-return _st($9)._at_put_(key,value);
+$7=self._locals();
+return _st($7)._at_put_(key,value);
 }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1,3)})}));
 };
 return self}, function($ctx1) {$ctx1.fill(self,"initializeFromMethodContext:",{aMethodContext:aMethodContext},smalltalk.AIContext)})},
@@ -497,15 +491,14 @@ category: 'interpreting',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
-$1=self["@interpreter"];
-if(($receiver = $1) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@interpreter"]) == nil || $receiver == null){
 self._initializeInterpreter();
 } else {
-$1;
+self["@interpreter"];
 };
-$2=self["@interpreter"];
-return $2;
+$1=self["@interpreter"];
+return $1;
 }, function($ctx1) {$ctx1.fill(self,"interpreter",{},smalltalk.AIContext)})},
 args: [],
 source: "interpreter\x0a\x09interpreter ifNil: [ self initializeInterpreter ].\x0a\x09^ interpreter",
@@ -537,12 +530,11 @@ category: 'accessing',
 fn: function (aString){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
+var $1;
 $1=_st(self._locals())._at_ifAbsent_(aString,(function(){
 return smalltalk.withContext(function($ctx2) {
-$2=self._outerContext();
-if(($receiver = $2) == nil || $receiver == null){
-return $2;
+if(($receiver = self._outerContext()) == nil || $receiver == null){
+return self._outerContext();
 } else {
 var context;
 context=$receiver;
@@ -565,11 +557,10 @@ category: 'accessing',
 fn: function (aString,aBlock){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
+var $1;
 $1=_st(self._locals())._at_ifAbsent_(aString,(function(){
 return smalltalk.withContext(function($ctx2) {
-$2=self._outerContext();
-if(($receiver = $2) == nil || $receiver == null){
+if(($receiver = self._outerContext()) == nil || $receiver == null){
 return _st(aBlock)._value();
 } else {
 var context;
@@ -609,15 +600,14 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
-$1=self["@locals"];
-if(($receiver = $1) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@locals"]) == nil || $receiver == null){
 self._initializeLocals();
 } else {
-$1;
+self["@locals"];
 };
-$2=self["@locals"];
-return $2;
+$1=self["@locals"];
+return $1;
 }, function($ctx1) {$ctx1.fill(self,"locals",{},smalltalk.AIContext)})},
 args: [],
 source: "locals\x0a\x09locals ifNil: [ self initializeLocals ].\x0a\x09\x0a\x09^ locals",
@@ -809,12 +799,11 @@ fn: function (){
 var self=this;
 function $Dictionary(){return smalltalk.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@sendIndexes"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@sendIndexes"]) == nil || $receiver == null){
 $1=_st($Dictionary())._new();
 } else {
-$1=$2;
+$1=self["@sendIndexes"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"sendIndexes",{},smalltalk.AIContext)})},
@@ -850,7 +839,7 @@ var self=this;
 var currentNode;
 function $ASTPCNodeVisitor(){return smalltalk.ASTPCNodeVisitor||(typeof ASTPCNodeVisitor=="undefined"?nil:ASTPCNodeVisitor)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$4,$3,$5,$8,$7,$6,$10,$12,$11,$9;
+var $1,$2,$4,$3,$5,$8,$7,$6,$10,$9;
 $1=_st($ASTPCNodeVisitor())._new();
 $2=$1;
 $4=self._innerContext();
@@ -871,10 +860,9 @@ return smalltalk.withContext(function($ctx2) {
 return _st(anInterpreter)._push_(each);
 $ctx2.sendIdx["push:"]=1;
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)})}));
-$10=anInterpreter;
-$12=self._innerContext();
-$11=_st($12)._receiver();
-$9=_st($10)._push_($11);
+$10=self._innerContext();
+$9=_st($10)._receiver();
+_st(anInterpreter)._push_($9);
 return self}, function($ctx1) {$ctx1.fill(self,"setupInterpreter:",{anInterpreter:anInterpreter,currentNode:currentNode},smalltalk.AIContext)})},
 args: ["anInterpreter"],
 source: "setupInterpreter: anInterpreter\x0a\x09| currentNode |\x0a\x09\x0a\x09\x22Retrieve the current node\x22\x0a\x09currentNode := ASTPCNodeVisitor new\x0a\x09\x09\x09selector: self innerContext selector;\x0a\x09\x09\x09context: self;\x0a\x09\x09\x09visit: self ast;\x0a\x09\x09\x09currentNode.\x0a\x09\x0a\x09anInterpreter node: currentNode.\x0a\x0a\x09\x22Push the send args and receiver to the interpreter stack\x22\x09\x0a\x09self innerContext arguments reversed do: [ :each | \x0a\x09\x09anInterpreter push: each ].\x0a\x09\x09\x0a\x09anInterpreter push: (self innerContext receiver)",
@@ -991,9 +979,7 @@ fn: function (){
 var self=this;
 function $ASTInterpreter(){return smalltalk.ASTInterpreter||(typeof ASTInterpreter=="undefined"?nil:ASTInterpreter)}
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=$ASTInterpreter();
-return $1;
+return $ASTInterpreter();
 }, function($ctx1) {$ctx1.fill(self,"defaultInterpreterClass",{},smalltalk.ASTDebugger)})},
 args: [],
 source: "defaultInterpreterClass\x0a\x09^ ASTInterpreter",
@@ -1051,13 +1037,12 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@interpreter"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@interpreter"]) == nil || $receiver == null){
 self["@interpreter"]=_st(self._defaultInterpreterClass())._new();
 $1=self["@interpreter"];
 } else {
-$1=$2;
+$1=self["@interpreter"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"interpreter",{},smalltalk.ASTDebugger)})},
@@ -1216,19 +1201,18 @@ category: 'private',
 fn: function (aNode,anObject){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$3,$2,$4,$5,$6;
-$1=_st(_st(aNode)._binding())._isInstanceVar();
-if(smalltalk.assert($1)){
-$3=self._context();
+var $2,$1,$3,$4,$5;
+if(smalltalk.assert(_st(_st(aNode)._binding())._isInstanceVar())){
+$2=self._context();
 $ctx1.sendIdx["context"]=1;
-$2=_st($3)._receiver();
-$4=_st(aNode)._value();
+$1=_st($2)._receiver();
+$3=_st(aNode)._value();
 $ctx1.sendIdx["value"]=1;
-_st($2)._instVarAt_put_($4,anObject);
+_st($1)._instVarAt_put_($3,anObject);
 } else {
-$5=self._context();
-$6=_st(aNode)._value();
-_st($5)._localAt_put_($6,anObject);
+$4=self._context();
+$5=_st(aNode)._value();
+_st($4)._localAt_put_($5,anObject);
 };
 return self}, function($ctx1) {$ctx1.fill(self,"assign:to:",{aNode:aNode,anObject:anObject},smalltalk.ASTInterpreter)})},
 args: ["aNode", "anObject"],
@@ -1303,7 +1287,7 @@ var source,function_;
 function $String(){return smalltalk.String||(typeof String=="undefined"?nil:String)}
 function $Compiler(){return smalltalk.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
 return smalltalk.withContext(function($ctx1) { 
-var $3,$2,$1,$4,$5,$7,$10,$9,$8,$6;
+var $3,$2,$1,$4,$6,$9,$8,$7,$5;
 source=_st($String())._streamContents_((function(str){
 return smalltalk.withContext(function($ctx2) {
 _st(str)._nextPutAll_("(function(");
@@ -1322,21 +1306,20 @@ return smalltalk.withContext(function($ctx3) {
 return _st(str)._nextPutAll_(",");
 $ctx3.sendIdx["nextPutAll:"]=3;
 }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)})}));
-$4=str;
-_st($4)._nextPutAll_("){ return (function() {");
+_st(str)._nextPutAll_("){ return (function() {");
 $ctx2.sendIdx["nextPutAll:"]=4;
-_st($4)._nextPutAll_(aString);
+_st(str)._nextPutAll_(aString);
 $ctx2.sendIdx["nextPutAll:"]=5;
-$5=_st($4)._nextPutAll_("})() })");
-return $5;
+$4=_st(str)._nextPutAll_("})() })");
+return $4;
 }, function($ctx2) {$ctx2.fillBlock({str:str},$ctx1,1)})}));
 function_=_st(_st($Compiler())._new())._eval_(source);
-$7=function_;
-$10=self._context();
-$9=_st($10)._locals();
-$8=_st($9)._values();
-$6=_st($7)._valueWithPossibleArguments_($8);
-return $6;
+$6=function_;
+$9=self._context();
+$8=_st($9)._locals();
+$7=_st($8)._values();
+$5=_st($6)._valueWithPossibleArguments_($7);
+return $5;
 }, function($ctx1) {$ctx1.fill(self,"eval:",{aString:aString,source:source,function_:function_},smalltalk.ASTInterpreter)})},
 args: ["aString"],
 source: "eval: aString\x0a\x09\x22Evaluate aString as JS source inside an JS function.\x0a\x09aString is not sandboxed.\x22\x0a\x09\x0a\x09| source function |\x0a\x09\x0a\x09source := String streamContents: [ :str |\x0a\x09\x09str nextPutAll: '(function('.\x0a\x09\x09self context locals keys\x0a\x09\x09\x09do: [ :each | str nextPutAll: each ]\x0a\x09\x09\x09separatedBy: [ str nextPutAll: ',' ].\x0a\x09\x09str\x0a\x09\x09\x09nextPutAll: '){ return (function() {';\x0a\x09\x09\x09nextPutAll: aString;\x0a\x09\x09\x09nextPutAll: '})() })' ].\x0a\x09\x09\x09\x0a\x09function := Compiler new eval: source.\x0a\x09\x0a\x09^ function valueWithPossibleArguments: self context locals values",
@@ -1352,12 +1335,11 @@ category: 'testing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@returned"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@returned"]) == nil || $receiver == null){
 $1=false;
 } else {
-$1=$2;
+$1=self["@returned"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"hasReturned",{},smalltalk.ASTInterpreter)})},
@@ -1608,9 +1590,8 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self._hasReturned();
-if(smalltalk.assert($2)){
+var $1;
+if(smalltalk.assert(self._hasReturned())){
 $1=self._returnValue();
 } else {
 $1=_st(self._context())._receiver();
@@ -1666,35 +1647,34 @@ fn: function (aMessage,anObject,aBoolean){
 var self=this;
 var method;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$4,$3,$5,$8,$7,$6,$9,$10;
+var $1,$3,$2,$4,$7,$6,$5,$8,$9;
 var $early={};
 try {
-$1=aBoolean;
-if(! smalltalk.assert($1)){
-$2=_st(aMessage)._sendTo_(anObject);
-return $2;
+if(! smalltalk.assert(aBoolean)){
+$1=_st(aMessage)._sendTo_(anObject);
+return $1;
 };
-$4=_st(anObject)._class();
+$3=_st(anObject)._class();
 $ctx1.sendIdx["class"]=1;
-$3=_st($4)._superclass();
+$2=_st($3)._superclass();
 $ctx1.sendIdx["superclass"]=1;
-if(($receiver = $3) == nil || $receiver == null){
-$5=self._messageNotUnderstood_receiver_(aMessage,anObject);
+if(($receiver = $2) == nil || $receiver == null){
+$4=self._messageNotUnderstood_receiver_(aMessage,anObject);
 $ctx1.sendIdx["messageNotUnderstood:receiver:"]=1;
-return $5;
+return $4;
 } else {
-$3;
+$2;
 };
-$8=_st(anObject)._class();
-$7=_st($8)._superclass();
-$6=_st($7)._methodDictionary();
-method=_st($6)._at_ifAbsent_(_st(aMessage)._selector(),(function(){
+$7=_st(anObject)._class();
+$6=_st($7)._superclass();
+$5=_st($6)._methodDictionary();
+method=_st($5)._at_ifAbsent_(_st(aMessage)._selector(),(function(){
 return smalltalk.withContext(function($ctx2) {
-$9=self._messageNotUnderstood_receiver_(aMessage,anObject);
-throw $early=[$9];
+$8=self._messageNotUnderstood_receiver_(aMessage,anObject);
+throw $early=[$8];
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)})}));
-$10=_st(method)._sendTo_arguments_(anObject,_st(aMessage)._arguments());
-return $10;
+$9=_st(method)._sendTo_arguments_(anObject,_st(aMessage)._arguments());
+return $9;
 }
 catch(e) {if(e===$early)return e[0]; throw e}
 }, function($ctx1) {$ctx1.fill(self,"sendMessage:to:superSend:",{aMessage:aMessage,anObject:anObject,aBoolean:aBoolean,method:method},smalltalk.ASTInterpreter)})},
@@ -1755,13 +1735,12 @@ fn: function (){
 var self=this;
 function $OrderedCollection(){return smalltalk.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@stack"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@stack"]) == nil || $receiver == null){
 self["@stack"]=_st($OrderedCollection())._new();
 $1=self["@stack"];
 } else {
-$1=$2;
+$1=self["@stack"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"stack",{},smalltalk.ASTInterpreter)})},
@@ -1797,8 +1776,7 @@ category: 'interpreting',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=self._step();
+self._step();
 $ctx1.sendIdx["step"]=1;
 _st((function(){
 return smalltalk.withContext(function($ctx2) {
@@ -1822,9 +1800,7 @@ category: 'visiting',
 fn: function (aNode){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=self._hasReturned();
-if(! smalltalk.assert($1)){
+if(! smalltalk.assert(self._hasReturned())){
 smalltalk.ASTInterpreter.superclass.fn.prototype._visit_.apply(_st(self), [aNode]);
 };
 return self}, function($ctx1) {$ctx1.fill(self,"visit:",{aNode:aNode},smalltalk.ASTInterpreter)})},
@@ -1843,10 +1819,9 @@ fn: function (aNode){
 var self=this;
 var poppedValue;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
 poppedValue=self._pop();
 $ctx1.sendIdx["pop"]=1;
-$1=self._pop();
+self._pop();
 self._push_(poppedValue);
 self._assign_to_(_st(aNode)._left(),poppedValue);
 return self}, function($ctx1) {$ctx1.fill(self,"visitAssignmentNode:",{aNode:aNode,poppedValue:poppedValue},smalltalk.ASTInterpreter)})},
@@ -1908,17 +1883,16 @@ var associations,hashedCollection;
 function $OrderedCollection(){return smalltalk.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
 function $HashedCollection(){return smalltalk.HashedCollection||(typeof HashedCollection=="undefined"?nil:HashedCollection)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
 associations=_st($OrderedCollection())._new();
 $ctx1.sendIdx["new"]=1;
 hashedCollection=_st($HashedCollection())._new();
-$1=_st(_st(aNode)._nodes())._do_((function(each){
+_st(_st(aNode)._nodes())._do_((function(each){
 return smalltalk.withContext(function($ctx2) {
 return _st(associations)._add_(self._pop());
 $ctx2.sendIdx["add:"]=1;
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)})}));
 $ctx1.sendIdx["do:"]=1;
-$2=_st(_st(associations)._reversed())._do_((function(each){
+_st(_st(associations)._reversed())._do_((function(each){
 return smalltalk.withContext(function($ctx2) {
 return _st(hashedCollection)._add_(each);
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)})}));
@@ -1988,7 +1962,6 @@ fn: function (aNode){
 var self=this;
 var receiver,args,message,result;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
 args=_st(_st(aNode)._arguments())._collect_((function(each){
 return smalltalk.withContext(function($ctx2) {
 return self._pop();
@@ -1997,11 +1970,10 @@ $ctx2.sendIdx["pop"]=1;
 receiver=self._pop();
 message=self._messageFromSendNode_arguments_(aNode,_st(args)._reversed());
 result=self._sendMessage_to_superSend_(message,receiver,_st(aNode)._superSend());
-$1=_st(_st(aNode)._isCascadeSendNode())._and_((function(){
+if(smalltalk.assert(_st(_st(aNode)._isCascadeSendNode())._and_((function(){
 return smalltalk.withContext(function($ctx2) {
 return _st(_st(aNode)._isLastChild())._not();
-}, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)})}));
-if(smalltalk.assert($1)){
+}, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)})})))){
 self._push_(receiver);
 $ctx1.sendIdx["push:"]=1;
 } else {
@@ -2040,56 +2012,56 @@ var self=this;
 function $PlatformInterface(){return smalltalk.PlatformInterface||(typeof PlatformInterface=="undefined"?nil:PlatformInterface)}
 function $Smalltalk(){return smalltalk.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
 return smalltalk.withContext(function($ctx1) { 
-var $3,$2,$6,$7,$5,$4,$1,$11,$10,$13,$12,$14,$15,$16,$18,$17,$19,$20,$21,$22,$9,$8;
-$3=_st(aNode)._binding();
+var $2,$1,$5,$6,$4,$3,$9,$8,$11,$10,$12,$13,$14,$16,$15,$17,$18,$19,$20,$7;
+$2=_st(aNode)._binding();
 $ctx1.sendIdx["binding"]=1;
-$2=_st($3)._isUnknownVar();
-if(smalltalk.assert($2)){
-$6=_st($PlatformInterface())._globals();
+$1=_st($2)._isUnknownVar();
+if(smalltalk.assert($1)){
+$5=_st($PlatformInterface())._globals();
 $ctx1.sendIdx["globals"]=1;
-$7=_st(aNode)._value();
+$6=_st(aNode)._value();
 $ctx1.sendIdx["value"]=1;
-$5=_st($6)._at_ifAbsent_($7,(function(){
+$4=_st($5)._at_ifAbsent_($6,(function(){
 return smalltalk.withContext(function($ctx2) {
 return self._error_("Unknown variable");
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)})}));
 $ctx1.sendIdx["at:ifAbsent:"]=1;
-$4=self._push_($5);
+$3=self._push_($4);
 $ctx1.sendIdx["push:"]=1;
-return $4;
+return $3;
 };
-$11=_st(aNode)._binding();
-$10=_st($11)._isInstanceVar();
-if(smalltalk.assert($10)){
-$13=self._context();
+$9=_st(aNode)._binding();
+$8=_st($9)._isInstanceVar();
+if(smalltalk.assert($8)){
+$11=self._context();
 $ctx1.sendIdx["context"]=1;
-$12=_st($13)._receiver();
-$14=_st(aNode)._value();
+$10=_st($11)._receiver();
+$12=_st(aNode)._value();
 $ctx1.sendIdx["value"]=2;
-$9=_st($12)._instVarAt_($14);
+$7=_st($10)._instVarAt_($12);
 } else {
-$15=self._context();
-$16=_st(aNode)._value();
+$13=self._context();
+$14=_st(aNode)._value();
 $ctx1.sendIdx["value"]=3;
-$9=_st($15)._localAt_ifAbsent_($16,(function(){
+$7=_st($13)._localAt_ifAbsent_($14,(function(){
 return smalltalk.withContext(function($ctx2) {
-$18=_st(aNode)._value();
+$16=_st(aNode)._value();
 $ctx2.sendIdx["value"]=4;
-$17=_st($18)._isCapitalized();
-if(smalltalk.assert($17)){
-$19=_st($Smalltalk())._current();
-$20=_st(aNode)._value();
+$15=_st($16)._isCapitalized();
+if(smalltalk.assert($15)){
+$17=_st($Smalltalk())._current();
+$18=_st(aNode)._value();
 $ctx2.sendIdx["value"]=5;
-return _st($19)._at_ifAbsent_($20,(function(){
+return _st($17)._at_ifAbsent_($18,(function(){
 return smalltalk.withContext(function($ctx3) {
-$21=_st($PlatformInterface())._globals();
-$22=_st(aNode)._value();
-return _st($21)._at_($22);
+$19=_st($PlatformInterface())._globals();
+$20=_st(aNode)._value();
+return _st($19)._at_($20);
 }, function($ctx3) {$ctx3.fillBlock({},$ctx2,7)})}));
 };
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,5)})}));
 };
-$8=self._push_($9);
+self._push_($7);
 return self}, function($ctx1) {$ctx1.fill(self,"visitVariableNode:",{aNode:aNode},smalltalk.ASTInterpreter)})},
 args: ["aNode"],
 source: "visitVariableNode: aNode\x0a\x09aNode binding isUnknownVar ifTrue: [\x0a\x09\x09^ self push: (PlatformInterface globals at: aNode value ifAbsent: [ self error: 'Unknown variable' ]) ].\x0a\x09\x09\x0a\x09self push: (aNode binding isInstanceVar\x0a\x09\x09ifTrue: [ self context receiver instVarAt: aNode value ]\x0a\x09\x09ifFalse: [ self context \x0a\x09\x09\x09localAt: aNode value\x0a\x09\x09\x09ifAbsent: [\x0a\x09\x09\x09\x09aNode value isCapitalized\x0a\x09\x09\x09\x09\x09ifTrue: [\x0a\x09\x09\x09\x09\x09\x09Smalltalk current \x0a\x09\x09\x09\x09\x09\x09\x09at: aNode value \x0a\x09\x09\x09\x09\x09\x09\x09ifAbsent: [ PlatformInterface globals at: aNode value ]]]])",
@@ -2181,13 +2153,12 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@index"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@index"]) == nil || $receiver == null){
 self["@index"]=(0);
 $1=self["@index"];
 } else {
-$1=$2;
+$1=self["@index"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"index",{},smalltalk.ASTPCNodeVisitor)})},

+ 196 - 161
js/Compiler-Semantic.js

@@ -97,13 +97,12 @@ fn: function (){
 var self=this;
 function $Dictionary(){return smalltalk.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@args"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@args"]) == nil || $receiver == null){
 self["@args"]=_st($Dictionary())._new();
 $1=self["@args"];
 } else {
-$1=$2;
+$1=self["@args"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"args",{},smalltalk.LexicalScope)})},
@@ -158,12 +157,11 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@blockIndex"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@blockIndex"]) == nil || $receiver == null){
 $1=(0);
 } else {
-$1=$2;
+$1=self["@blockIndex"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"blockIndex",{},smalltalk.LexicalScope)})},
@@ -312,24 +310,23 @@ fn: function (aNode){
 var self=this;
 var lookup;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4;
+var $1,$2,$3;
 lookup=self._bindingFor_(aNode);
-$1=lookup;
-if(($receiver = $1) == nil || $receiver == null){
-$2=self._outerScope();
+if(($receiver = lookup) == nil || $receiver == null){
+$1=self._outerScope();
 $ctx1.sendIdx["outerScope"]=1;
-if(($receiver = $2) == nil || $receiver == null){
-lookup=$2;
+if(($receiver = $1) == nil || $receiver == null){
+lookup=$1;
 } else {
-$3=self._outerScope();
-lookup=_st($3)._lookupVariable_(aNode);
+$2=self._outerScope();
+lookup=_st($2)._lookupVariable_(aNode);
 };
 lookup;
 } else {
-$1;
+lookup;
 };
-$4=lookup;
-return $4;
+$3=lookup;
+return $3;
 }, function($ctx1) {$ctx1.fill(self,"lookupVariable:",{aNode:aNode,lookup:lookup},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",
@@ -456,7 +453,7 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$4,$3,$7,$6,$5;
+var $1,$3,$2,$6,$5,$4;
 $1=self._outerScope();
 $ctx1.sendIdx["outerScope"]=1;
 if(($receiver = $1) == nil || $receiver == null){
@@ -464,18 +461,17 @@ return (1);
 } else {
 $1;
 };
-$2=self._isInlined();
-if(smalltalk.assert($2)){
-$4=self._outerScope();
+if(smalltalk.assert(self._isInlined())){
+$3=self._outerScope();
 $ctx1.sendIdx["outerScope"]=2;
-$3=_st($4)._scopeLevel();
+$2=_st($3)._scopeLevel();
 $ctx1.sendIdx["scopeLevel"]=1;
-return $3;
+return $2;
 };
-$7=self._outerScope();
-$6=_st($7)._scopeLevel();
-$5=_st($6).__plus((1));
-return $5;
+$6=self._outerScope();
+$5=_st($6)._scopeLevel();
+$4=_st($5).__plus((1));
+return $4;
 }, function($ctx1) {$ctx1.fill(self,"scopeLevel",{},smalltalk.LexicalScope)})},
 args: [],
 source: "scopeLevel\x0a\x09self outerScope ifNil: [ ^ 1 ].\x0a\x09self isInlined ifTrue: [ ^ self outerScope scopeLevel ].\x0a\x09\x0a\x09^ self outerScope scopeLevel + 1",
@@ -492,13 +488,12 @@ fn: function (){
 var self=this;
 function $Dictionary(){return smalltalk.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@temps"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@temps"]) == nil || $receiver == null){
 self["@temps"]=_st($Dictionary())._new();
 $1=self["@temps"];
 } else {
-$1=$2;
+$1=self["@temps"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"temps",{},smalltalk.LexicalScope)})},
@@ -577,15 +572,14 @@ category: 'accessing',
 fn: function (aNode){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=smalltalk.MethodLexicalScope.superclass.fn.prototype._bindingFor_.apply(_st(self), [aNode]);
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = smalltalk.MethodLexicalScope.superclass.fn.prototype._bindingFor_.apply(_st(self), [aNode])) == nil || $receiver == null){
 $1=_st(self._iVars())._at_ifAbsent_(_st(aNode)._value(),(function(){
 return smalltalk.withContext(function($ctx2) {
 return nil;
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)})}));
 } else {
-$1=$2;
+$1=smalltalk.MethodLexicalScope.superclass.fn.prototype._bindingFor_.apply(_st(self), [aNode]);
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"bindingFor:",{aNode:aNode},smalltalk.MethodLexicalScope)})},
@@ -656,13 +650,12 @@ fn: function (){
 var self=this;
 function $Dictionary(){return smalltalk.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@iVars"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@iVars"]) == nil || $receiver == null){
 self["@iVars"]=_st($Dictionary())._new();
 $1=self["@iVars"];
 } else {
-$1=$2;
+$1=self["@iVars"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"iVars",{},smalltalk.MethodLexicalScope)})},
@@ -696,12 +689,11 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@localReturn"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@localReturn"]) == nil || $receiver == null){
 $1=false;
 } else {
-$1=$2;
+$1=self["@localReturn"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"localReturn",{},smalltalk.MethodLexicalScope)})},
@@ -752,13 +744,12 @@ fn: function (){
 var self=this;
 function $OrderedCollection(){return smalltalk.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@nonLocalReturns"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@nonLocalReturns"]) == nil || $receiver == null){
 self["@nonLocalReturns"]=_st($OrderedCollection())._new();
 $1=self["@nonLocalReturns"];
 } else {
-$1=$2;
+$1=self["@nonLocalReturns"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"nonLocalReturns",{},smalltalk.MethodLexicalScope)})},
@@ -779,23 +770,22 @@ function $Dictionary(){return smalltalk.Dictionary||(typeof Dictionary=="undefin
 function $Smalltalk(){return smalltalk.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
 function $PseudoVar(){return smalltalk.PseudoVar||(typeof PseudoVar=="undefined"?nil:PseudoVar)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4;
-$1=self["@pseudoVars"];
-if(($receiver = $1) == nil || $receiver == null){
+var $1,$2,$3;
+if(($receiver = self["@pseudoVars"]) == nil || $receiver == null){
 self["@pseudoVars"]=_st($Dictionary())._new();
 self["@pseudoVars"];
 _st(_st(_st($Smalltalk())._current())._pseudoVariableNames())._do_((function(each){
 return smalltalk.withContext(function($ctx2) {
-$2=_st($PseudoVar())._on_(each);
-_st($2)._scope_(self._methodScope());
-$3=_st($2)._yourself();
-return _st(self["@pseudoVars"])._at_put_(each,$3);
+$1=_st($PseudoVar())._on_(each);
+_st($1)._scope_(self._methodScope());
+$2=_st($1)._yourself();
+return _st(self["@pseudoVars"])._at_put_(each,$2);
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)})}));
 } else {
-$1;
+self["@pseudoVars"];
 };
-$4=self["@pseudoVars"];
-return $4;
+$3=self["@pseudoVars"];
+return $3;
 }, function($ctx1) {$ctx1.fill(self,"pseudoVars",{},smalltalk.MethodLexicalScope)})},
 args: [],
 source: "pseudoVars\x0a\x09pseudoVars ifNil: [\x0a\x09\x09pseudoVars := Dictionary new.\x0a\x09\x09Smalltalk current pseudoVariableNames do: [ :each |\x0a\x09\x09\x09pseudoVars at: each put: ((PseudoVar on: each)\x0a\x09\x09\x09\x09scope: self methodScope;\x0a\x09\x09\x09\x09yourself) ]].\x0a\x09^ pseudoVars",
@@ -830,13 +820,12 @@ fn: function (){
 var self=this;
 function $OrderedCollection(){return smalltalk.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@unknownVariables"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@unknownVariables"]) == nil || $receiver == null){
 self["@unknownVariables"]=_st($OrderedCollection())._new();
 $1=self["@unknownVariables"];
 } else {
-$1=$2;
+$1=self["@unknownVariables"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"unknownVariables",{},smalltalk.MethodLexicalScope)})},
@@ -901,6 +890,22 @@ referencedClasses: []
 }),
 smalltalk.ScopeVar);
 
+smalltalk.addMethod(
+smalltalk.method({
+selector: "isImmutable",
+category: 'testing',
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
+return false;
+}, function($ctx1) {$ctx1.fill(self,"isImmutable",{},smalltalk.ScopeVar)})},
+args: [],
+source: "isImmutable\x0a\x09^ false",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.ScopeVar);
+
 smalltalk.addMethod(
 smalltalk.method({
 selector: "isInstanceVar",
@@ -1041,16 +1046,15 @@ fn: function (){
 var self=this;
 function $InvalidAssignmentError(){return smalltalk.InvalidAssignmentError||(typeof InvalidAssignmentError=="undefined"?nil:InvalidAssignmentError)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3;
-$1=_st(self._isArgVar())._or_((function(){
+var $1,$2;
+if(smalltalk.assert(_st(self._isArgVar())._or_((function(){
 return smalltalk.withContext(function($ctx2) {
 return self._isPseudoVar();
-}, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
-if(smalltalk.assert($1)){
-$2=_st($InvalidAssignmentError())._new();
-_st($2)._variableName_(self._name());
-$3=_st($2)._signal();
-$3;
+}, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})})))){
+$1=_st($InvalidAssignmentError())._new();
+_st($1)._variableName_(self._name());
+$2=_st($1)._signal();
+$2;
 };
 return self}, function($ctx1) {$ctx1.fill(self,"validateAssignment",{},smalltalk.ScopeVar)})},
 args: [],
@@ -1139,6 +1143,22 @@ referencedClasses: []
 }),
 smalltalk.ArgVar);
 
+smalltalk.addMethod(
+smalltalk.method({
+selector: "isImmutable",
+category: 'testing',
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
+return true;
+}, function($ctx1) {$ctx1.fill(self,"isImmutable",{},smalltalk.ArgVar)})},
+args: [],
+source: "isImmutable\x0a\x09^ true",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.ArgVar);
+
 
 
 smalltalk.addClass('ClassRefVar', smalltalk.ScopeVar, [], 'Compiler-Semantic');
@@ -1179,6 +1199,22 @@ referencedClasses: []
 }),
 smalltalk.ClassRefVar);
 
+smalltalk.addMethod(
+smalltalk.method({
+selector: "isImmutable",
+category: 'testing',
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
+return true;
+}, function($ctx1) {$ctx1.fill(self,"isImmutable",{},smalltalk.ClassRefVar)})},
+args: [],
+source: "isImmutable\x0a\x09^ true",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.ClassRefVar);
+
 
 
 smalltalk.addClass('InstanceVar', smalltalk.ScopeVar, [], 'Compiler-Semantic');
@@ -1241,6 +1277,22 @@ referencedClasses: []
 }),
 smalltalk.PseudoVar);
 
+smalltalk.addMethod(
+smalltalk.method({
+selector: "isImmutable",
+category: 'testing',
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
+return true;
+}, function($ctx1) {$ctx1.fill(self,"isImmutable",{},smalltalk.PseudoVar)})},
+args: [],
+source: "isImmutable\x0a\x09^ true",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.PseudoVar);
+
 smalltalk.addMethod(
 smalltalk.method({
 selector: "isPseudoVar",
@@ -1309,13 +1361,12 @@ fn: function (){
 var self=this;
 function $Set(){return smalltalk.Set||(typeof Set=="undefined"?nil:Set)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@classReferences"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@classReferences"]) == nil || $receiver == null){
 self["@classReferences"]=_st($Set())._new();
 $1=self["@classReferences"];
 } else {
-$1=$2;
+$1=self["@classReferences"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"classReferences",{},smalltalk.SemanticAnalyzer)})},
@@ -1356,25 +1407,24 @@ var identifier;
 function $Smalltalk(){return smalltalk.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
 function $UnknownVariableError(){return smalltalk.UnknownVariableError||(typeof UnknownVariableError=="undefined"?nil:UnknownVariableError)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4,$5,$6,$7;
+var $1,$2,$3,$4,$5,$6;
 identifier=_st(aNode)._value();
 $ctx1.sendIdx["value"]=1;
-$1=_st(_st(_st(_st(_st($Smalltalk())._current())._globalJsVariables())._includes_(identifier))._not())._and_((function(){
+if(smalltalk.assert(_st(_st(_st(_st(_st($Smalltalk())._current())._globalJsVariables())._includes_(identifier))._not())._and_((function(){
 return smalltalk.withContext(function($ctx2) {
 return self._isVariableGloballyUndefined_(identifier);
-}, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
-if(smalltalk.assert($1)){
-$2=_st($UnknownVariableError())._new();
-$3=$2;
-$4=_st(aNode)._value();
+}, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})})))){
+$1=_st($UnknownVariableError())._new();
+$2=$1;
+$3=_st(aNode)._value();
 $ctx1.sendIdx["value"]=2;
-_st($3)._variableName_($4);
-$5=_st($2)._signal();
-$5;
+_st($2)._variableName_($3);
+$4=_st($1)._signal();
+$4;
 } else {
-$6=_st(_st(self["@currentScope"])._methodScope())._unknownVariables();
-$7=_st(aNode)._value();
-_st($6)._add_($7);
+$5=_st(_st(self["@currentScope"])._methodScope())._unknownVariables();
+$6=_st(aNode)._value();
+_st($5)._add_($6);
 };
 return self}, function($ctx1) {$ctx1.fill(self,"errorUnknownVariable:",{aNode:aNode,identifier:identifier},smalltalk.SemanticAnalyzer)})},
 args: ["aNode"],
@@ -1408,13 +1458,12 @@ fn: function (){
 var self=this;
 function $Dictionary(){return smalltalk.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@messageSends"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@messageSends"]) == nil || $receiver == null){
 self["@messageSends"]=_st($Dictionary())._new();
 $1=self["@messageSends"];
 } else {
-$1=$2;
+$1=self["@messageSends"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"messageSends",{},smalltalk.SemanticAnalyzer)})},
@@ -1491,17 +1540,16 @@ category: 'private',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
-$1=self["@blockIndex"];
-if(($receiver = $1) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@blockIndex"]) == nil || $receiver == null){
 self["@blockIndex"]=(0);
 self["@blockIndex"];
 } else {
-$1;
+self["@blockIndex"];
 };
 self["@blockIndex"]=_st(self["@blockIndex"]).__plus((1));
-$2=self["@blockIndex"];
-return $2;
+$1=self["@blockIndex"];
+return $1;
 }, function($ctx1) {$ctx1.fill(self,"nextBlockIndex",{},smalltalk.SemanticAnalyzer)})},
 args: [],
 source: "nextBlockIndex\x0a\x09blockIndex ifNil: [ blockIndex := 0 ].\x0a\x09\x0a\x09blockIndex := blockIndex + 1.\x0a\x09^ blockIndex",
@@ -1517,10 +1565,8 @@ category: 'scope',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=self["@currentScope"];
-if(($receiver = $1) == nil || $receiver == null){
-$1;
+if(($receiver = self["@currentScope"]) == nil || $receiver == null){
+self["@currentScope"];
 } else {
 self["@currentScope"]=_st(self["@currentScope"])._outerScope();
 self["@currentScope"];
@@ -1558,13 +1604,12 @@ fn: function (){
 var self=this;
 function $Dictionary(){return smalltalk.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@superSends"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@superSends"]) == nil || $receiver == null){
 self["@superSends"]=_st($Dictionary())._new();
 $1=self["@superSends"];
 } else {
-$1=$2;
+$1=self["@superSends"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"superSends",{},smalltalk.SemanticAnalyzer)})},
@@ -1616,10 +1661,8 @@ category: 'scope',
 fn: function (aString){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=_st(self["@currentScope"])._lookupVariable_(aString);
-if(($receiver = $1) == nil || $receiver == null){
-$1;
+if(($receiver = _st(self["@currentScope"])._lookupVariable_(aString)) == nil || $receiver == null){
+_st(self["@currentScope"])._lookupVariable_(aString);
 } else {
 self._errorShadowingVariable_(aString);
 };
@@ -1709,25 +1752,24 @@ category: 'visiting',
 fn: function (aNode){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4;
+var $1;
 self._pushScope_(self._newMethodScope());
 _st(aNode)._scope_(self["@currentScope"]);
 _st(self["@currentScope"])._node_(aNode);
-$1=_st(_st(self._theClass())._allInstanceVariableNames())._do_((function(each){
+_st(_st(self._theClass())._allInstanceVariableNames())._do_((function(each){
 return smalltalk.withContext(function($ctx2) {
 return _st(self["@currentScope"])._addIVar_(each);
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)})}));
 $ctx1.sendIdx["do:"]=1;
-$2=_st(_st(aNode)._arguments())._do_((function(each){
+_st(_st(aNode)._arguments())._do_((function(each){
 return smalltalk.withContext(function($ctx2) {
 self._validateVariableScope_(each);
 return _st(self["@currentScope"])._addArg_(each);
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)})}));
 smalltalk.SemanticAnalyzer.superclass.fn.prototype._visitMethodNode_.apply(_st(self), [aNode]);
-$3=aNode;
-_st($3)._classReferences_(self._classReferences());
-_st($3)._sendIndexes_(self._messageSends());
-$4=_st($3)._superSends_(_st(self._superSends())._keys());
+_st(aNode)._classReferences_(self._classReferences());
+_st(aNode)._sendIndexes_(self._messageSends());
+$1=_st(aNode)._superSends_(_st(self._superSends())._keys());
 self._popScope();
 return self}, function($ctx1) {$ctx1.fill(self,"visitMethodNode:",{aNode:aNode},smalltalk.SemanticAnalyzer)})},
 args: ["aNode"],
@@ -1744,10 +1786,8 @@ category: 'visiting',
 fn: function (aNode){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
 _st(aNode)._scope_(self["@currentScope"]);
-$1=_st(self["@currentScope"])._isMethodScope();
-if(smalltalk.assert($1)){
+if(smalltalk.assert(_st(self["@currentScope"])._isMethodScope())){
 _st(self["@currentScope"])._localReturn_(true);
 } else {
 _st(_st(self["@currentScope"])._methodScope())._addNonLocalReturn_(self["@currentScope"]);
@@ -1770,7 +1810,7 @@ var self=this;
 function $Set(){return smalltalk.Set||(typeof Set=="undefined"?nil:Set)}
 function $IRSendInliner(){return smalltalk.IRSendInliner||(typeof IRSendInliner=="undefined"?nil:IRSendInliner)}
 return smalltalk.withContext(function($ctx1) { 
-var $3,$2,$1,$4,$5,$6,$8,$9,$7,$11,$12,$10,$13,$15,$16,$14,$19,$20,$18,$17,$21,$24,$25,$23,$22;
+var $3,$2,$1,$4,$5,$6,$8,$9,$7,$11,$12,$10,$13,$14,$16,$17,$15,$20,$21,$19,$18;
 $3=_st(aNode)._receiver();
 $ctx1.sendIdx["receiver"]=1;
 $2=_st($3)._value();
@@ -1778,7 +1818,6 @@ $1=_st($2).__eq("super");
 if(smalltalk.assert($1)){
 _st(aNode)._superSend_(true);
 $4=_st(aNode)._receiver();
-$ctx1.sendIdx["receiver"]=2;
 _st($4)._value_("self");
 $5=self._superSends();
 $ctx1.sendIdx["superSends"]=1;
@@ -1804,36 +1843,33 @@ $ctx1.sendIdx["selector"]=3;
 $10=_st($11)._includes_($12);
 if(smalltalk.assert($10)){
 _st(aNode)._shouldBeInlined_(true);
-$13=_st(aNode)._receiver();
-_st($13)._shouldBeAliased_(true);
 };
 };
-$15=self._messageSends();
+$13=self._messageSends();
 $ctx1.sendIdx["messageSends"]=1;
-$16=_st(aNode)._selector();
+$14=_st(aNode)._selector();
 $ctx1.sendIdx["selector"]=4;
-$14=_st($15)._at_ifAbsentPut_($16,(function(){
+_st($13)._at_ifAbsentPut_($14,(function(){
 return smalltalk.withContext(function($ctx2) {
 return _st($Set())._new();
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,5)})}));
-$19=self._messageSends();
+$16=self._messageSends();
 $ctx1.sendIdx["messageSends"]=2;
-$20=_st(aNode)._selector();
+$17=_st(aNode)._selector();
 $ctx1.sendIdx["selector"]=5;
-$18=_st($19)._at_($20);
+$15=_st($16)._at_($17);
 $ctx1.sendIdx["at:"]=2;
-$17=_st($18)._add_(aNode);
-$21=aNode;
-$24=self._messageSends();
-$25=_st(aNode)._selector();
-$23=_st($24)._at_($25);
-$22=_st($23)._size();
-_st($21)._index_($22);
+_st($15)._add_(aNode);
+$20=self._messageSends();
+$21=_st(aNode)._selector();
+$19=_st($20)._at_($21);
+$18=_st($19)._size();
+_st(aNode)._index_($18);
 smalltalk.SemanticAnalyzer.superclass.fn.prototype._visitSendNode_.apply(_st(self), [aNode]);
 return self}, function($ctx1) {$ctx1.fill(self,"visitSendNode:",{aNode:aNode},smalltalk.SemanticAnalyzer)})},
 args: ["aNode"],
-source: "visitSendNode: aNode\x0a\x0a\x09aNode receiver value = 'super'\x0a\x09\x09ifTrue: [\x0a\x09\x09\x09aNode superSend: true.\x0a\x09\x09\x09aNode receiver value: 'self'.\x0a\x09\x09\x09self superSends at: aNode selector ifAbsentPut: [ Set new ].\x0a\x09\x09\x09(self superSends at: aNode selector) add: aNode ]\x0a\x09\x09\x0a\x09\x09ifFalse: [ (IRSendInliner inlinedSelectors includes: aNode selector) ifTrue: [\x0a\x09\x09\x09aNode shouldBeInlined: true.\x0a\x09\x09\x09aNode receiver shouldBeAliased: true ] ].\x0a\x0a\x09self messageSends at: aNode selector ifAbsentPut: [ Set new ].\x0a\x09(self messageSends at: aNode selector) add: aNode.\x0a\x0a\x09aNode index: (self messageSends at: aNode selector) size.\x0a\x0a\x09super visitSendNode: aNode",
-messageSends: ["ifTrue:ifFalse:", "=", "value", "receiver", "superSend:", "value:", "at:ifAbsentPut:", "superSends", "selector", "new", "add:", "at:", "ifTrue:", "includes:", "inlinedSelectors", "shouldBeInlined:", "shouldBeAliased:", "messageSends", "index:", "size", "visitSendNode:"],
+source: "visitSendNode: aNode\x0a\x0a\x09aNode receiver value = 'super'\x0a\x09\x09ifTrue: [\x0a\x09\x09\x09aNode superSend: true.\x0a\x09\x09\x09aNode receiver value: 'self'.\x0a\x09\x09\x09self superSends at: aNode selector ifAbsentPut: [ Set new ].\x0a\x09\x09\x09(self superSends at: aNode selector) add: aNode ]\x0a\x09\x09\x0a\x09\x09ifFalse: [ (IRSendInliner inlinedSelectors includes: aNode selector) ifTrue: [\x0a\x09\x09\x09aNode shouldBeInlined: true ] ].\x0a\x0a\x09self messageSends at: aNode selector ifAbsentPut: [ Set new ].\x0a\x09(self messageSends at: aNode selector) add: aNode.\x0a\x0a\x09aNode index: (self messageSends at: aNode selector) size.\x0a\x0a\x09super visitSendNode: aNode",
+messageSends: ["ifTrue:ifFalse:", "=", "value", "receiver", "superSend:", "value:", "at:ifAbsentPut:", "superSends", "selector", "new", "add:", "at:", "ifTrue:", "includes:", "inlinedSelectors", "shouldBeInlined:", "messageSends", "index:", "size", "visitSendNode:"],
 referencedClasses: ["Set", "IRSendInliner"]
 }),
 smalltalk.SemanticAnalyzer);
@@ -1869,41 +1905,40 @@ var binding;
 function $ClassRefVar(){return smalltalk.ClassRefVar||(typeof ClassRefVar=="undefined"?nil:ClassRefVar)}
 function $UnknownVar(){return smalltalk.UnknownVar||(typeof UnknownVar=="undefined"?nil:UnknownVar)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$3,$2,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13;
+var $2,$1,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12;
 binding=_st(self["@currentScope"])._lookupVariable_(aNode);
-$1=binding;
-if(($receiver = $1) == nil || $receiver == null){
-$3=_st(aNode)._value();
+if(($receiver = binding) == nil || $receiver == null){
+$2=_st(aNode)._value();
 $ctx1.sendIdx["value"]=1;
-$2=_st($3)._isCapitalized();
-if(smalltalk.assert($2)){
-$4=_st($ClassRefVar())._new();
+$1=_st($2)._isCapitalized();
+if(smalltalk.assert($1)){
+$3=_st($ClassRefVar())._new();
 $ctx1.sendIdx["new"]=1;
-$5=$4;
-$6=_st(aNode)._value();
+$4=$3;
+$5=_st(aNode)._value();
 $ctx1.sendIdx["value"]=2;
-_st($5)._name_($6);
+_st($4)._name_($5);
 $ctx1.sendIdx["name:"]=1;
-$7=_st($4)._yourself();
+$6=_st($3)._yourself();
 $ctx1.sendIdx["yourself"]=1;
-binding=$7;
+binding=$6;
 binding;
-$8=self._classReferences();
-$9=_st(aNode)._value();
+$7=self._classReferences();
+$8=_st(aNode)._value();
 $ctx1.sendIdx["value"]=3;
-_st($8)._add_($9);
+_st($7)._add_($8);
 } else {
 self._errorUnknownVariable_(aNode);
-$10=_st($UnknownVar())._new();
-$11=$10;
-$12=_st(aNode)._value();
-_st($11)._name_($12);
-$13=_st($10)._yourself();
-binding=$13;
+$9=_st($UnknownVar())._new();
+$10=$9;
+$11=_st(aNode)._value();
+_st($10)._name_($11);
+$12=_st($9)._yourself();
+binding=$12;
 binding;
 };
 } else {
-$1;
+binding;
 };
 _st(aNode)._binding_(binding);
 return self}, function($ctx1) {$ctx1.fill(self,"visitVariableNode:",{aNode:aNode,binding:binding},smalltalk.SemanticAnalyzer)})},

+ 190 - 218
js/Compiler-Tests.js

@@ -11,10 +11,8 @@ fn: function (aNode,aClass){
 var self=this;
 function $SemanticAnalyzer(){return smalltalk.SemanticAnalyzer||(typeof SemanticAnalyzer=="undefined"?nil:SemanticAnalyzer)}
 return smalltalk.withContext(function($ctx1) { 
-var $1;
 _st(_st($SemanticAnalyzer())._on_(aClass))._visit_(aNode);
-$1=aNode;
-return $1;
+return aNode;
 }, function($ctx1) {$ctx1.fill(self,"analyze:forClass:",{aNode:aNode,aClass:aClass},smalltalk.ASTParsingTest)})},
 args: ["aNode", "aClass"],
 source: "analyze: aNode forClass: aClass\x0a\x09(SemanticAnalyzer on: aClass) visit: aNode.\x0a\x09^ aNode",
@@ -198,27 +196,27 @@ var self=this;
 var ast;
 function $Object(){return smalltalk.Object||(typeof Object=="undefined"?nil:Object)}
 return smalltalk.withContext(function($ctx1) { 
-var $4,$5,$3,$2,$1,$9,$10,$8,$7,$6;
+var $3,$4,$2,$1,$7,$8,$6,$5;
 ast=self._parse_forClass_("foo true ifTrue: [ self asString yourself ]. ^ self asBoolean",$Object());
 $ctx1.sendIdx["parse:forClass:"]=1;
-$4=self._astPCNodeVisitorForSelector_("yourself");
+$3=self._astPCNodeVisitorForSelector_("yourself");
 $ctx1.sendIdx["astPCNodeVisitorForSelector:"]=1;
-_st($4)._visit_(ast);
+_st($3)._visit_(ast);
 $ctx1.sendIdx["visit:"]=1;
-$5=_st($4)._currentNode();
+$4=_st($3)._currentNode();
 $ctx1.sendIdx["currentNode"]=1;
-$3=$5;
-$2=_st($3)._selector();
+$2=$4;
+$1=_st($2)._selector();
 $ctx1.sendIdx["selector"]=1;
-$1=self._assert_equals_($2,"yourself");
+self._assert_equals_($1,"yourself");
 $ctx1.sendIdx["assert:equals:"]=1;
 ast=self._parse_forClass_("foo true ifTrue: [ self asString yourself ]. ^ self asBoolean",$Object());
-$9=self._astPCNodeVisitorForSelector_("asBoolean");
-_st($9)._visit_(ast);
-$10=_st($9)._currentNode();
-$8=$10;
-$7=_st($8)._selector();
-$6=self._assert_equals_($7,"asBoolean");
+$7=self._astPCNodeVisitorForSelector_("asBoolean");
+_st($7)._visit_(ast);
+$8=_st($7)._currentNode();
+$6=$8;
+$5=_st($6)._selector();
+self._assert_equals_($5,"asBoolean");
 return self}, function($ctx1) {$ctx1.fill(self,"testMessageSendWithInlining",{ast:ast},smalltalk.ASTPCNodeVisitorTest)})},
 args: [],
 source: "testMessageSendWithInlining\x0a\x09| ast |\x0a\x09\x0a\x09ast := self parse: 'foo true ifTrue: [ self asString yourself ]. ^ self asBoolean' forClass: Object.\x0a\x09self assert: ((self astPCNodeVisitorForSelector: 'yourself')\x0a\x09\x09visit: ast;\x0a\x09\x09currentNode) selector equals: 'yourself'.\x0a\x09\x09\x0a\x09ast := self parse: 'foo true ifTrue: [ self asString yourself ]. ^ self asBoolean' forClass: Object.\x0a\x09self assert: ((self astPCNodeVisitorForSelector: 'asBoolean')\x0a\x09\x09visit: ast;\x0a\x09\x09currentNode) selector equals: 'asBoolean'",
@@ -284,9 +282,7 @@ fn: function (){
 var self=this;
 function $CodeGenerator(){return smalltalk.CodeGenerator||(typeof CodeGenerator=="undefined"?nil:CodeGenerator)}
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=$CodeGenerator();
-return $1;
+return $CodeGenerator();
 }, function($ctx1) {$ctx1.fill(self,"codeGeneratorClass",{},smalltalk.CodeGeneratorTest)})},
 args: [],
 source: "codeGeneratorClass\x0a\x09^ CodeGenerator",
@@ -342,16 +338,15 @@ fn: function (aString,anObject,aResult){
 var self=this;
 var method,result;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4;
+var $1,$2,$3;
 self["@receiver"]=anObject;
 $1=self._compiler();
-$2=aString;
-$3=_st(anObject)._class();
+$2=_st(anObject)._class();
 $ctx1.sendIdx["class"]=1;
-method=_st($1)._install_forClass_category_($2,$3,"tests");
+method=_st($1)._install_forClass_category_(aString,$2,"tests");
 result=_st(self["@receiver"])._perform_(_st(method)._selector());
-$4=_st(anObject)._class();
-_st($4)._removeCompiledMethod_(method);
+$3=_st(anObject)._class();
+_st($3)._removeCompiledMethod_(method);
 self._assert_equals_(aResult,result);
 return self}, function($ctx1) {$ctx1.fill(self,"should:receiver:return:",{aString:aString,anObject:anObject,aResult:aResult,method:method,result:result},smalltalk.CodeGeneratorTest)})},
 args: ["aString", "anObject", "aResult"],
@@ -401,12 +396,11 @@ category: 'tests',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3;
-$1=self._should_return_("foo | a | a := true ifTrue: [ 1 ]. ^ a",(1));
+self._should_return_("foo | a | a := true ifTrue: [ 1 ]. ^ a",(1));
 $ctx1.sendIdx["should:return:"]=1;
-$2=self._should_return_("foo | a | a := false ifTrue: [ 1 ]. ^ a",nil);
+self._should_return_("foo | a | a := false ifTrue: [ 1 ]. ^ a",nil);
 $ctx1.sendIdx["should:return:"]=2;
-$3=self._should_return_("foo | a | ^ a := true ifTrue: [ 1 ]",(1));
+self._should_return_("foo | a | ^ a := true ifTrue: [ 1 ]",(1));
 return self}, function($ctx1) {$ctx1.fill(self,"testAssignment",{},smalltalk.CodeGeneratorTest)})},
 args: [],
 source: "testAssignment\x0a\x09self should: 'foo | a | a := true ifTrue: [ 1 ]. ^ a' return: 1.\x0a\x09self should: 'foo | a | a := false ifTrue: [ 1 ]. ^ a' return: nil.\x0a\x0a\x09self should: 'foo | a | ^ a := true ifTrue: [ 1 ]' return: 1",
@@ -422,10 +416,9 @@ category: 'tests',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
-$1=self._should_return_("\x5c arg ^ 4",(4));
+self._should_return_("\x5c arg ^ 4",(4));
 $ctx1.sendIdx["should:return:"]=1;
-$2=self._should_return_("\x5c\x5c arg ^ 42",(42));
+self._should_return_("\x5c\x5c arg ^ 42",(42));
 return self}, function($ctx1) {$ctx1.fill(self,"testBackslashSelectors",{},smalltalk.CodeGeneratorTest)})},
 args: [],
 source: "testBackslashSelectors\x0a\x09\x0a\x09self should: '\x5c arg ^ 4' return: 4.\x0a\x09self should: '\x5c\x5c arg ^ 42' return: 42",
@@ -441,12 +434,11 @@ category: 'tests',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3;
-$1=self._should_return_("foo ^ #(1 2 3) collect: [ :each | true ifTrue: [ each + 1 ] ]",[(2), (3), (4)]);
+self._should_return_("foo ^ #(1 2 3) collect: [ :each | true ifTrue: [ each + 1 ] ]",[(2), (3), (4)]);
 $ctx1.sendIdx["should:return:"]=1;
-$2=self._should_return_("foo ^ #(1 2 3) collect: [ :each | false ifFalse: [ each + 1 ] ]",[(2), (3), (4)]);
+self._should_return_("foo ^ #(1 2 3) collect: [ :each | false ifFalse: [ each + 1 ] ]",[(2), (3), (4)]);
 $ctx1.sendIdx["should:return:"]=2;
-$3=self._should_return_("foo ^ #(1 2 3) collect: [ :each | each odd ifTrue: [ each + 1 ] ifFalse: [ each - 1 ] ]",[(2), (1), (4)]);
+self._should_return_("foo ^ #(1 2 3) collect: [ :each | each odd ifTrue: [ each + 1 ] ifFalse: [ each - 1 ] ]",[(2), (1), (4)]);
 return self}, function($ctx1) {$ctx1.fill(self,"testBlockReturn",{},smalltalk.CodeGeneratorTest)})},
 args: [],
 source: "testBlockReturn\x0a\x09self should: 'foo ^ #(1 2 3) collect: [ :each | true ifTrue: [ each + 1 ] ]' return: #(2 3 4).\x0a\x09self should: 'foo ^ #(1 2 3) collect: [ :each | false ifFalse: [ each + 1 ] ]' return: #(2 3 4).\x0a\x09self should: 'foo ^ #(1 2 3) collect: [ :each | each odd ifTrue: [ each + 1 ] ifFalse: [ each - 1 ] ]' return: #(2 1 4).",
@@ -516,12 +508,11 @@ fn: function (){
 var self=this;
 function $BlockClosure(){return smalltalk.BlockClosure||(typeof BlockClosure=="undefined"?nil:BlockClosure)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3;
-$1=self._should_return_("foo ^ eval class",$BlockClosure());
+self._should_return_("foo ^ eval class",$BlockClosure());
 $ctx1.sendIdx["should:return:"]=1;
-$2=self._should_return_("foo ^ Math cos: 0",(1));
+self._should_return_("foo ^ Math cos: 0",(1));
 $ctx1.sendIdx["should:return:"]=2;
-$3=self._should_return_("foo ^ NonExistingVar",nil);
+self._should_return_("foo ^ NonExistingVar",nil);
 return self}, function($ctx1) {$ctx1.fill(self,"testGlobalVar",{},smalltalk.CodeGeneratorTest)})},
 args: [],
 source: "testGlobalVar\x0a\x09self should: 'foo ^ eval class' return: BlockClosure.\x0a\x09self should: 'foo ^ Math cos: 0' return: 1.\x0a\x09self should: 'foo ^ NonExistingVar' return: nil",
@@ -538,33 +529,33 @@ fn: function (){
 var self=this;
 function $Array(){return smalltalk.Array||(typeof Array=="undefined"?nil:Array)}
 return smalltalk.withContext(function($ctx1) { 
-var $3,$4,$2,$1,$7,$8,$6,$5,$11,$12,$10,$9,$15,$16,$14,$13;
-$3="foo".__minus_gt($Array());
+var $2,$3,$1,$5,$6,$4,$8,$9,$7,$11,$12,$10;
+$2="foo".__minus_gt($Array());
 $ctx1.sendIdx["->"]=1;
-$4="bar".__minus_gt((2));
+$3="bar".__minus_gt((2));
 $ctx1.sendIdx["->"]=2;
-$2=[$3,$4];
-$1=self._should_return_("foo\x0a\x09| x |\x0a\x09x := Array.\x0a\x09^ x with: 'foo'->x with: 'bar'->(true ifTrue: [ x := 2 ])\x0a",$2);
+$1=[$2,$3];
+self._should_return_("foo\x0a\x09| x |\x0a\x09x := Array.\x0a\x09^ x with: 'foo'->x with: 'bar'->(true ifTrue: [ x := 2 ])\x0a",$1);
 $ctx1.sendIdx["should:return:"]=1;
-$7="foo".__minus_gt((1));
+$5="foo".__minus_gt((1));
 $ctx1.sendIdx["->"]=3;
-$8="bar".__minus_gt((2));
+$6="bar".__minus_gt((2));
 $ctx1.sendIdx["->"]=4;
-$6=[$7,$8];
-$5=self._should_return_("foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ Array with: 'foo'->x with: 'bar'->(true ifTrue: [ x := 2 ])\x0a",$6);
+$4=[$5,$6];
+self._should_return_("foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ Array with: 'foo'->x with: 'bar'->(true ifTrue: [ x := 2 ])\x0a",$4);
 $ctx1.sendIdx["should:return:"]=2;
-$11="foo".__minus_gt((1));
+$8="foo".__minus_gt((1));
 $ctx1.sendIdx["->"]=5;
-$12="bar".__minus_gt((2));
+$9="bar".__minus_gt((2));
 $ctx1.sendIdx["->"]=6;
-$10=[$11,$12];
-$9=self._should_return_("foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ { 'foo'->x. 'bar'->(true ifTrue: [ x := 2 ]) }\x0a",$10);
+$7=[$8,$9];
+self._should_return_("foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ { 'foo'->x. 'bar'->(true ifTrue: [ x := 2 ]) }\x0a",$7);
 $ctx1.sendIdx["should:return:"]=3;
-$15="foo".__minus_gt((1));
+$11="foo".__minus_gt((1));
 $ctx1.sendIdx["->"]=7;
-$16="bar".__minus_gt((2));
-$14=smalltalk.HashedCollection._from_([$15,$16]);
-$13=self._should_return_("foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ #{ 'foo'->x. 'bar'->(true ifTrue: [ x := 2 ]) }\x0a",$14);
+$12="bar".__minus_gt((2));
+$10=smalltalk.HashedCollection._from_([$11,$12]);
+self._should_return_("foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ #{ 'foo'->x. 'bar'->(true ifTrue: [ x := 2 ]) }\x0a",$10);
 return self}, function($ctx1) {$ctx1.fill(self,"testInnerTemporalDependentElementsOrdered",{},smalltalk.CodeGeneratorTest)})},
 args: [],
 source: "testInnerTemporalDependentElementsOrdered\x0a\x09self should: 'foo\x0a\x09| x |\x0a\x09x := Array.\x0a\x09^ x with: ''foo''->x with: ''bar''->(true ifTrue: [ x := 2 ])\x0a' return: {'foo'->Array. 'bar'->2}.\x0a\x09self should: 'foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ Array with: ''foo''->x with: ''bar''->(true ifTrue: [ x := 2 ])\x0a' return: {'foo'->1. 'bar'->2}.\x0a\x09self should: 'foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ { ''foo''->x. ''bar''->(true ifTrue: [ x := 2 ]) }\x0a' return: {'foo'->1. 'bar'->2}.\x0a\x09self should: 'foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ #{ ''foo''->x. ''bar''->(true ifTrue: [ x := 2 ]) }\x0a' return: #{'foo'->1. 'bar'->2}.",
@@ -596,30 +587,30 @@ category: 'tests',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4,$5,$6,$9,$10,$8,$7,$11,$12,$13;
-$1=self._should_return_("foo ^ 1",(1));
+var $2,$3,$1;
+self._should_return_("foo ^ 1",(1));
 $ctx1.sendIdx["should:return:"]=1;
-$2=self._should_return_("foo ^ 'hello'","hello");
+self._should_return_("foo ^ 'hello'","hello");
 $ctx1.sendIdx["should:return:"]=2;
-$3=self._should_return_("foo ^ #(1 2 3 4)",[(1), (2), (3), (4)]);
+self._should_return_("foo ^ #(1 2 3 4)",[(1), (2), (3), (4)]);
 $ctx1.sendIdx["should:return:"]=3;
-$4=self._should_return_("foo ^ {1. [:x | x ] value: 2. 3. [4] value}",[(1), (2), (3), (4)]);
+self._should_return_("foo ^ {1. [:x | x ] value: 2. 3. [4] value}",[(1), (2), (3), (4)]);
 $ctx1.sendIdx["should:return:"]=4;
-$5=self._should_return_("foo ^ true",true);
+self._should_return_("foo ^ true",true);
 $ctx1.sendIdx["should:return:"]=5;
-$6=self._should_return_("foo ^ false",false);
+self._should_return_("foo ^ false",false);
 $ctx1.sendIdx["should:return:"]=6;
-$9=(1).__minus_gt((2));
+$2=(1).__minus_gt((2));
 $ctx1.sendIdx["->"]=1;
-$10=(3).__minus_gt((4));
-$8=smalltalk.HashedCollection._from_([$9,$10]);
-$7=self._should_return_("foo ^ #{1->2. 3->4}",$8);
+$3=(3).__minus_gt((4));
+$1=smalltalk.HashedCollection._from_([$2,$3]);
+self._should_return_("foo ^ #{1->2. 3->4}",$1);
 $ctx1.sendIdx["should:return:"]=7;
-$11=self._should_return_("foo ^ #hello","hello");
+self._should_return_("foo ^ #hello","hello");
 $ctx1.sendIdx["should:return:"]=8;
-$12=self._should_return_("foo ^ -123.456",(-123.456));
+self._should_return_("foo ^ -123.456",(-123.456));
 $ctx1.sendIdx["should:return:"]=9;
-$13=self._should_return_("foo ^ -2.5e4",(-25000));
+self._should_return_("foo ^ -2.5e4",(-25000));
 return self}, function($ctx1) {$ctx1.fill(self,"testLiterals",{},smalltalk.CodeGeneratorTest)})},
 args: [],
 source: "testLiterals\x0a\x09self should: 'foo ^ 1' return: 1.\x0a\x09self should: 'foo ^ ''hello''' return: 'hello'.\x0a\x09self should: 'foo ^ #(1 2 3 4)' return: #(1 2 3 4).\x0a\x09self should: 'foo ^ {1. [:x | x ] value: 2. 3. [4] value}' return: #(1 2 3 4).\x0a\x09self should: 'foo ^ true' return: true.\x0a\x09self should: 'foo ^ false' return: false.\x0a\x09self should: 'foo ^ #{1->2. 3->4}' return: #{1->2. 3->4}.\x0a\x09self should: 'foo ^ #hello' return: #hello.\x0a\x09self should: 'foo ^ -123.456' return: -123.456.\x0a\x09self should: 'foo ^ -2.5e4' return: -25000.",
@@ -635,16 +626,15 @@ category: 'tests',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4,$5;
-$1=self._should_return_("foo ^ 1",(1));
+self._should_return_("foo ^ 1",(1));
 $ctx1.sendIdx["should:return:"]=1;
-$2=self._should_return_("foo ^ 1 + 1",(2));
+self._should_return_("foo ^ 1 + 1",(2));
 $ctx1.sendIdx["should:return:"]=2;
-$3=self._should_return_("foo ",self["@receiver"]);
+self._should_return_("foo ",self["@receiver"]);
 $ctx1.sendIdx["should:return:"]=3;
-$4=self._should_return_("foo self asString",self["@receiver"]);
+self._should_return_("foo self asString",self["@receiver"]);
 $ctx1.sendIdx["should:return:"]=4;
-$5=self._should_return_("foo | a b | a := 1. b := 2. ^ a + b",(3));
+self._should_return_("foo | a b | a := 1. b := 2. ^ a + b",(3));
 return self}, function($ctx1) {$ctx1.fill(self,"testLocalReturn",{},smalltalk.CodeGeneratorTest)})},
 args: [],
 source: "testLocalReturn\x0a\x09self should: 'foo ^ 1' return: 1.\x0a\x09self should: 'foo ^ 1 + 1' return: 2.\x0a\x09self should: 'foo ' return: receiver.\x0a\x09self should: 'foo self asString' return: receiver.\x0a\x09self should: 'foo | a b | a := 1. b := 2. ^ a + b' return: 3",
@@ -660,16 +650,15 @@ category: 'tests',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4,$5;
-$1=self._should_return_("foo ^ 1 asString","1");
+self._should_return_("foo ^ 1 asString","1");
 $ctx1.sendIdx["should:return:"]=1;
-$2=self._should_return_("foo ^ 1 + 1",(2));
+self._should_return_("foo ^ 1 + 1",(2));
 $ctx1.sendIdx["should:return:"]=2;
-$3=self._should_return_("foo ^ 1 + 2 * 3",(9));
+self._should_return_("foo ^ 1 + 2 * 3",(9));
 $ctx1.sendIdx["should:return:"]=3;
-$4=self._should_return_("foo ^ 1 to: 3",[(1), (2), (3)]);
+self._should_return_("foo ^ 1 to: 3",[(1), (2), (3)]);
 $ctx1.sendIdx["should:return:"]=4;
-$5=self._should_return_("foo ^ 1 to: 5 by: 2",[(1), (3), (5)]);
+self._should_return_("foo ^ 1 to: 5 by: 2",[(1), (3), (5)]);
 return self}, function($ctx1) {$ctx1.fill(self,"testMessageSends",{},smalltalk.CodeGeneratorTest)})},
 args: [],
 source: "testMessageSends\x0a\x09self should: 'foo ^ 1 asString' return: '1'.\x0a\x0a\x09self should: 'foo ^ 1 + 1' return: 2.\x0a\x09self should: 'foo ^ 1 + 2 * 3' return: 9.\x0a\x0a\x09self should: 'foo ^ 1 to: 3' return: #(1 2 3).\x0a\x09self should: 'foo ^ 1 to: 5 by: 2' return: #(1 3 5)",
@@ -717,14 +706,13 @@ category: 'tests',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4;
-$1=self._should_return_("foo ^ true ifTrue: [ false ifFalse: [ 1 ] ]",(1));
+self._should_return_("foo ^ true ifTrue: [ false ifFalse: [ 1 ] ]",(1));
 $ctx1.sendIdx["should:return:"]=1;
-$2=self._should_return_("foo ^ true ifTrue: [ false ifTrue: [ 1 ] ]",nil);
+self._should_return_("foo ^ true ifTrue: [ false ifTrue: [ 1 ] ]",nil);
 $ctx1.sendIdx["should:return:"]=2;
-$3=self._should_return_("foo true ifTrue: [ false ifFalse: [ ^ 1 ] ]",(1));
+self._should_return_("foo true ifTrue: [ false ifFalse: [ ^ 1 ] ]",(1));
 $ctx1.sendIdx["should:return:"]=3;
-$4=self._should_return_("foo true ifTrue: [ false ifTrue: [ ^ 1 ] ]",self["@receiver"]);
+self._should_return_("foo true ifTrue: [ false ifTrue: [ ^ 1 ] ]",self["@receiver"]);
 return self}, function($ctx1) {$ctx1.fill(self,"testNestedIfTrue",{},smalltalk.CodeGeneratorTest)})},
 args: [],
 source: "testNestedIfTrue\x0a\x09self should: 'foo ^ true ifTrue: [ false ifFalse: [ 1 ] ]' return: 1.\x0a\x09self should: 'foo ^ true ifTrue: [ false ifTrue: [ 1 ] ]' return: nil.\x0a\x0a\x09self should: 'foo true ifTrue: [ false ifFalse: [ ^ 1 ] ]' return: 1.\x0a\x09self should: 'foo true ifTrue: [ false ifTrue: [ ^ 1 ] ]' return: receiver.",
@@ -757,14 +745,13 @@ category: 'tests',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4;
-$1=self._should_return_("foo [ ^ 1 ] value",(1));
+self._should_return_("foo [ ^ 1 ] value",(1));
 $ctx1.sendIdx["should:return:"]=1;
-$2=self._should_return_("foo [ ^ 1 + 1 ] value",(2));
+self._should_return_("foo [ ^ 1 + 1 ] value",(2));
 $ctx1.sendIdx["should:return:"]=2;
-$3=self._should_return_("foo | a b | a := 1. b := 2. [ ^ a + b ] value. self halt",(3));
+self._should_return_("foo | a b | a := 1. b := 2. [ ^ a + b ] value. self halt",(3));
 $ctx1.sendIdx["should:return:"]=3;
-$4=self._should_return_("foo [ :x | ^ x + x ] value: 4. ^ 2",(8));
+self._should_return_("foo [ :x | ^ x + x ] value: 4. ^ 2",(8));
 return self}, function($ctx1) {$ctx1.fill(self,"testNonLocalReturn",{},smalltalk.CodeGeneratorTest)})},
 args: [],
 source: "testNonLocalReturn\x0a\x09self should: 'foo [ ^ 1 ] value' return: 1.\x0a\x09self should: 'foo [ ^ 1 + 1 ] value' return: 2.\x0a\x09self should: 'foo | a b | a := 1. b := 2. [ ^ a + b ] value. self halt' return: 3.\x0a\x09self should: 'foo [ :x | ^ x + x ] value: 4. ^ 2' return: 8",
@@ -780,10 +767,9 @@ category: 'tests',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
-$1=self._should_return_("foo ^Object",_st(smalltalk)._at_("Object"));
+self._should_return_("foo ^Object",_st(smalltalk)._at_("Object"));
 $ctx1.sendIdx["should:return:"]=1;
-$2=self._should_return_("foo ^NonExistent",nil);
+self._should_return_("foo ^NonExistent",nil);
 return self}, function($ctx1) {$ctx1.fill(self,"testPascalCaseGlobal",{},smalltalk.CodeGeneratorTest)})},
 args: [],
 source: "testPascalCaseGlobal\x0a\x09self should: 'foo ^Object' return: (smalltalk at: 'Object').\x0a\x09self should: 'foo ^NonExistent' return: nil",
@@ -800,10 +786,9 @@ fn: function (){
 var self=this;
 function $Array(){return smalltalk.Array||(typeof Array=="undefined"?nil:Array)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
-$1=self._should_return_("foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ Array with: x with: (true ifTrue: [ x := 2 ])\x0a",[(1), (2)]);
+self._should_return_("foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ Array with: x with: (true ifTrue: [ x := 2 ])\x0a",[(1), (2)]);
 $ctx1.sendIdx["should:return:"]=1;
-$2=self._should_return_("foo\x0a\x09| x |\x0a\x09x := Array.\x0a\x09^ x with: x with: (true ifTrue: [ x := 2 ])\x0a",[$Array(),(2)]);
+self._should_return_("foo\x0a\x09| x |\x0a\x09x := Array.\x0a\x09^ x with: x with: (true ifTrue: [ x := 2 ])\x0a",[$Array(),(2)]);
 return self}, function($ctx1) {$ctx1.fill(self,"testSendReceiverAndArgumentsOrdered",{},smalltalk.CodeGeneratorTest)})},
 args: [],
 source: "testSendReceiverAndArgumentsOrdered\x0a\x09self should: 'foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ Array with: x with: (true ifTrue: [ x := 2 ])\x0a' return: #(1 2).\x0a\x0a\x09self should: 'foo\x0a\x09| x |\x0a\x09x := Array.\x0a\x09^ x with: x with: (true ifTrue: [ x := 2 ])\x0a' return: {Array. 2}.",
@@ -835,18 +820,17 @@ category: 'tests',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4,$5,$6;
-$1=self._should_return_("foo | a | ^ a",nil);
+self._should_return_("foo | a | ^ a",nil);
 $ctx1.sendIdx["should:return:"]=1;
-$2=self._should_return_("foo | AVariable | ^ AVariable",nil);
+self._should_return_("foo | AVariable | ^ AVariable",nil);
 $ctx1.sendIdx["should:return:"]=2;
-$3=self._should_return_("foo | a b c | ^ c",nil);
+self._should_return_("foo | a b c | ^ c",nil);
 $ctx1.sendIdx["should:return:"]=3;
-$4=self._should_return_("foo | a | [ | d | ^ d ] value",nil);
+self._should_return_("foo | a | [ | d | ^ d ] value",nil);
 $ctx1.sendIdx["should:return:"]=4;
-$5=self._should_return_("foo | a | a:= 1. ^ a",(1));
+self._should_return_("foo | a | a:= 1. ^ a",(1));
 $ctx1.sendIdx["should:return:"]=5;
-$6=self._should_return_("foo | AVariable | AVariable := 1. ^ AVariable",(1));
+self._should_return_("foo | AVariable | AVariable := 1. ^ AVariable",(1));
 return self}, function($ctx1) {$ctx1.fill(self,"testTempVariables",{},smalltalk.CodeGeneratorTest)})},
 args: [],
 source: "testTempVariables\x0a\x09self should: 'foo | a | ^ a' return: nil.\x0a\x09self should: 'foo | AVariable | ^ AVariable' return: nil.\x0a\x09self should: 'foo | a b c | ^ c' return: nil.\x0a\x09self should: 'foo | a | [ | d | ^ d ] value' return: nil.\x0a\x09\x0a\x09self should: 'foo | a | a:= 1. ^ a' return: 1.\x0a\x09self should: 'foo | AVariable | AVariable := 1. ^ AVariable' return: 1.\x09",
@@ -878,14 +862,13 @@ category: 'tests',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4;
-$1=self._should_return_("foo true ifFalse: [ ^ 1 ]",self["@receiver"]);
+self._should_return_("foo true ifFalse: [ ^ 1 ]",self["@receiver"]);
 $ctx1.sendIdx["should:return:"]=1;
-$2=self._should_return_("foo false ifFalse: [ ^ 2 ]",(2));
+self._should_return_("foo false ifFalse: [ ^ 2 ]",(2));
 $ctx1.sendIdx["should:return:"]=2;
-$3=self._should_return_("foo ^ true ifFalse: [ 1 ]",nil);
+self._should_return_("foo ^ true ifFalse: [ 1 ]",nil);
 $ctx1.sendIdx["should:return:"]=3;
-$4=self._should_return_("foo ^ false ifFalse: [ 2 ]",(2));
+self._should_return_("foo ^ false ifFalse: [ 2 ]",(2));
 return self}, function($ctx1) {$ctx1.fill(self,"testifFalse",{},smalltalk.CodeGeneratorTest)})},
 args: [],
 source: "testifFalse\x0a\x09self should: 'foo true ifFalse: [ ^ 1 ]' return: receiver.\x0a\x09self should: 'foo false ifFalse: [ ^ 2 ]' return: 2.\x0a\x09\x0a\x09self should: 'foo ^ true ifFalse: [ 1 ]' return: nil.\x0a\x09self should: 'foo ^ false ifFalse: [ 2 ]' return: 2.",
@@ -901,14 +884,13 @@ category: 'tests',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4;
-$1=self._should_return_("foo true ifFalse: [ ^ 1 ] ifTrue: [ ^ 2 ]",(2));
+self._should_return_("foo true ifFalse: [ ^ 1 ] ifTrue: [ ^ 2 ]",(2));
 $ctx1.sendIdx["should:return:"]=1;
-$2=self._should_return_("foo false ifFalse: [ ^ 2 ] ifTrue: [ ^1 ]",(2));
+self._should_return_("foo false ifFalse: [ ^ 2 ] ifTrue: [ ^1 ]",(2));
 $ctx1.sendIdx["should:return:"]=2;
-$3=self._should_return_("foo ^ true ifFalse: [ 1 ] ifTrue: [ 2 ]",(2));
+self._should_return_("foo ^ true ifFalse: [ 1 ] ifTrue: [ 2 ]",(2));
 $ctx1.sendIdx["should:return:"]=3;
-$4=self._should_return_("foo ^ false ifFalse: [ 2 ] ifTrue: [ 1 ]",(2));
+self._should_return_("foo ^ false ifFalse: [ 2 ] ifTrue: [ 1 ]",(2));
 return self}, function($ctx1) {$ctx1.fill(self,"testifFalseIfTrue",{},smalltalk.CodeGeneratorTest)})},
 args: [],
 source: "testifFalseIfTrue\x0a\x09self should: 'foo true ifFalse: [ ^ 1 ] ifTrue: [ ^ 2 ]' return: 2.\x0a\x09self should: 'foo false ifFalse: [ ^ 2 ] ifTrue: [ ^1 ]' return: 2.\x0a\x09\x0a\x09self should: 'foo ^ true ifFalse: [ 1 ] ifTrue: [ 2 ]' return: 2.\x0a\x09self should: 'foo ^ false ifFalse: [ 2 ] ifTrue: [ 1 ]' return: 2.",
@@ -924,14 +906,13 @@ category: 'tests',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4;
-$1=self._should_return_("foo ^ 1 ifNil: [ 2 ]",(1));
+self._should_return_("foo ^ 1 ifNil: [ 2 ]",(1));
 $ctx1.sendIdx["should:return:"]=1;
-$2=self._should_return_("foo ^ nil ifNil: [ 2 ]",(2));
+self._should_return_("foo ^ nil ifNil: [ 2 ]",(2));
 $ctx1.sendIdx["should:return:"]=2;
-$3=self._should_return_("foo 1 ifNil: [ ^ 2 ]",self["@receiver"]);
+self._should_return_("foo 1 ifNil: [ ^ 2 ]",self["@receiver"]);
 $ctx1.sendIdx["should:return:"]=3;
-$4=self._should_return_("foo nil ifNil: [ ^ 2 ]",(2));
+self._should_return_("foo nil ifNil: [ ^ 2 ]",(2));
 return self}, function($ctx1) {$ctx1.fill(self,"testifNil",{},smalltalk.CodeGeneratorTest)})},
 args: [],
 source: "testifNil\x0a\x09self should: 'foo ^ 1 ifNil: [ 2 ]' return: 1.\x0a\x09self should: 'foo ^ nil ifNil: [ 2 ]' return: 2.\x0a\x0a\x09self should: 'foo 1 ifNil: [ ^ 2 ]' return: receiver.\x0a\x09self should: 'foo nil ifNil: [ ^ 2 ]' return: 2.",
@@ -947,14 +928,13 @@ category: 'tests',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4;
-$1=self._should_return_("foo ^ 1 ifNil: [ 2 ] ifNotNil: [ 3 ]",(3));
+self._should_return_("foo ^ 1 ifNil: [ 2 ] ifNotNil: [ 3 ]",(3));
 $ctx1.sendIdx["should:return:"]=1;
-$2=self._should_return_("foo ^ nil ifNil: [ 2 ] ifNotNil: [ 3 ]",(2));
+self._should_return_("foo ^ nil ifNil: [ 2 ] ifNotNil: [ 3 ]",(2));
 $ctx1.sendIdx["should:return:"]=2;
-$3=self._should_return_("foo 1 ifNil: [ ^ 2 ] ifNotNil: [ ^3 ]",(3));
+self._should_return_("foo 1 ifNil: [ ^ 2 ] ifNotNil: [ ^3 ]",(3));
 $ctx1.sendIdx["should:return:"]=3;
-$4=self._should_return_("foo nil ifNil: [ ^ 2 ] ifNotNil: [ ^3 ]",(2));
+self._should_return_("foo nil ifNil: [ ^ 2 ] ifNotNil: [ ^3 ]",(2));
 return self}, function($ctx1) {$ctx1.fill(self,"testifNilIfNotNil",{},smalltalk.CodeGeneratorTest)})},
 args: [],
 source: "testifNilIfNotNil\x0a\x09self should: 'foo ^ 1 ifNil: [ 2 ] ifNotNil: [ 3 ]' return: 3.\x0a\x09self should: 'foo ^ nil ifNil: [ 2 ] ifNotNil: [ 3 ]' return: 2.\x0a\x0a\x09self should: 'foo 1 ifNil: [ ^ 2 ] ifNotNil: [ ^3 ]' return: 3.\x0a\x09self should: 'foo nil ifNil: [ ^ 2 ] ifNotNil: [ ^3 ]' return: 2.",
@@ -970,14 +950,13 @@ category: 'tests',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4;
-$1=self._should_return_("foo ^ 1 ifNotNil: [ 2 ]",(2));
+self._should_return_("foo ^ 1 ifNotNil: [ 2 ]",(2));
 $ctx1.sendIdx["should:return:"]=1;
-$2=self._should_return_("foo ^ nil ifNotNil: [ 2 ]",nil);
+self._should_return_("foo ^ nil ifNotNil: [ 2 ]",nil);
 $ctx1.sendIdx["should:return:"]=2;
-$3=self._should_return_("foo 1 ifNotNil: [ ^ 2 ]",(2));
+self._should_return_("foo 1 ifNotNil: [ ^ 2 ]",(2));
 $ctx1.sendIdx["should:return:"]=3;
-$4=self._should_return_("foo nil ifNotNil: [ ^ 2 ]",self["@receiver"]);
+self._should_return_("foo nil ifNotNil: [ ^ 2 ]",self["@receiver"]);
 return self}, function($ctx1) {$ctx1.fill(self,"testifNotNil",{},smalltalk.CodeGeneratorTest)})},
 args: [],
 source: "testifNotNil\x0a\x09self should: 'foo ^ 1 ifNotNil: [ 2 ]' return: 2.\x0a\x09self should: 'foo ^ nil ifNotNil: [ 2 ]' return: nil.\x0a\x0a\x09self should: 'foo 1 ifNotNil: [ ^ 2 ]' return: 2.\x0a\x09self should: 'foo nil ifNotNil: [ ^ 2 ]' return: receiver.",
@@ -993,18 +972,17 @@ category: 'tests',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4,$5,$6;
-$1=self._should_return_("foo ^ 1 ifNotNil: [ :val | val + 2 ]",(3));
+self._should_return_("foo ^ 1 ifNotNil: [ :val | val + 2 ]",(3));
 $ctx1.sendIdx["should:return:"]=1;
-$2=self._should_return_("foo ^ nil ifNotNil: [ :val | val + 2 ]",nil);
+self._should_return_("foo ^ nil ifNotNil: [ :val | val + 2 ]",nil);
 $ctx1.sendIdx["should:return:"]=2;
-$3=self._should_return_("foo ^ 1 ifNil: [ 5 ] ifNotNil: [ :val | val + 2 ]",(3));
+self._should_return_("foo ^ 1 ifNil: [ 5 ] ifNotNil: [ :val | val + 2 ]",(3));
 $ctx1.sendIdx["should:return:"]=3;
-$4=self._should_return_("foo ^ nil ifNil: [ 5 ] ifNotNil: [ :val | val + 2 ]",(5));
+self._should_return_("foo ^ nil ifNil: [ 5 ] ifNotNil: [ :val | val + 2 ]",(5));
 $ctx1.sendIdx["should:return:"]=4;
-$5=self._should_return_("foo ^ 1 ifNotNil: [ :val | val + 2 ] ifNil: [ 5 ]",(3));
+self._should_return_("foo ^ 1 ifNotNil: [ :val | val + 2 ] ifNil: [ 5 ]",(3));
 $ctx1.sendIdx["should:return:"]=5;
-$6=self._should_return_("foo ^ nil ifNotNil: [ :val | val + 2 ] ifNil: [ 5 ]",(5));
+self._should_return_("foo ^ nil ifNotNil: [ :val | val + 2 ] ifNil: [ 5 ]",(5));
 return self}, function($ctx1) {$ctx1.fill(self,"testifNotNilWithArgument",{},smalltalk.CodeGeneratorTest)})},
 args: [],
 source: "testifNotNilWithArgument\x0a\x09self should: 'foo ^ 1 ifNotNil: [ :val | val + 2 ]' return: 3.\x0a\x09self should: 'foo ^ nil ifNotNil: [ :val | val + 2 ]' return: nil.\x0a\x09\x0a\x09self should: 'foo ^ 1 ifNil: [ 5 ] ifNotNil: [ :val | val + 2 ]' return: 3.\x0a\x09self should: 'foo ^ nil ifNil: [ 5 ] ifNotNil: [ :val | val + 2 ]' return: 5.\x0a\x09\x0a\x09self should: 'foo ^ 1 ifNotNil: [ :val | val + 2 ] ifNil: [ 5 ]' return: 3.\x0a\x09self should: 'foo ^ nil ifNotNil: [ :val | val + 2 ] ifNil: [ 5 ]' return: 5",
@@ -1020,14 +998,13 @@ category: 'tests',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4;
-$1=self._should_return_("foo false ifTrue: [ ^ 1 ]",self["@receiver"]);
+self._should_return_("foo false ifTrue: [ ^ 1 ]",self["@receiver"]);
 $ctx1.sendIdx["should:return:"]=1;
-$2=self._should_return_("foo true ifTrue: [ ^ 2 ]",(2));
+self._should_return_("foo true ifTrue: [ ^ 2 ]",(2));
 $ctx1.sendIdx["should:return:"]=2;
-$3=self._should_return_("foo ^ false ifTrue: [ 1 ]",nil);
+self._should_return_("foo ^ false ifTrue: [ 1 ]",nil);
 $ctx1.sendIdx["should:return:"]=3;
-$4=self._should_return_("foo ^ true ifTrue: [ 2 ]",(2));
+self._should_return_("foo ^ true ifTrue: [ 2 ]",(2));
 return self}, function($ctx1) {$ctx1.fill(self,"testifTrue",{},smalltalk.CodeGeneratorTest)})},
 args: [],
 source: "testifTrue\x0a\x09self should: 'foo false ifTrue: [ ^ 1 ]' return: receiver.\x0a\x09self should: 'foo true ifTrue: [ ^ 2 ]' return: 2.\x0a\x09\x0a\x09self should: 'foo ^ false ifTrue: [ 1 ]' return: nil.\x0a\x09self should: 'foo ^ true ifTrue: [ 2 ]' return: 2.",
@@ -1043,14 +1020,13 @@ category: 'tests',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4;
-$1=self._should_return_("foo false ifTrue: [ ^ 1 ] ifFalse: [ ^2 ]",(2));
+self._should_return_("foo false ifTrue: [ ^ 1 ] ifFalse: [ ^2 ]",(2));
 $ctx1.sendIdx["should:return:"]=1;
-$2=self._should_return_("foo true ifTrue: [ ^ 1 ] ifFalse: [ ^ 2 ]",(1));
+self._should_return_("foo true ifTrue: [ ^ 1 ] ifFalse: [ ^ 2 ]",(1));
 $ctx1.sendIdx["should:return:"]=2;
-$3=self._should_return_("foo ^ false ifTrue: [ 2 ] ifFalse: [ 1 ]",(1));
+self._should_return_("foo ^ false ifTrue: [ 2 ] ifFalse: [ 1 ]",(1));
 $ctx1.sendIdx["should:return:"]=3;
-$4=self._should_return_("foo ^ true ifTrue: [ 2 ] ifFalse: [ 1 ]",(2));
+self._should_return_("foo ^ true ifTrue: [ 2 ] ifFalse: [ 1 ]",(2));
 return self}, function($ctx1) {$ctx1.fill(self,"testifTrueIfFalse",{},smalltalk.CodeGeneratorTest)})},
 args: [],
 source: "testifTrueIfFalse\x0a\x09self should: 'foo false ifTrue: [ ^ 1 ] ifFalse: [ ^2 ]' return: 2.\x0a\x09self should: 'foo true ifTrue: [ ^ 1 ] ifFalse: [ ^ 2 ]' return: 1.\x0a\x09\x0a\x09self should: 'foo ^ false ifTrue: [ 2 ] ifFalse: [ 1 ]' return: 1.\x0a\x09self should: 'foo ^ true ifTrue: [ 2 ] ifFalse: [ 1 ]' return: 2.",
@@ -1070,9 +1046,7 @@ fn: function (){
 var self=this;
 function $InliningCodeGenerator(){return smalltalk.InliningCodeGenerator||(typeof InliningCodeGenerator=="undefined"?nil:InliningCodeGenerator)}
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=$InliningCodeGenerator();
-return $1;
+return $InliningCodeGenerator();
 }, function($ctx1) {$ctx1.fill(self,"codeGeneratorClass",{},smalltalk.InliningCodeGeneratorTest)})},
 args: [],
 source: "codeGeneratorClass\x0a\x09^ InliningCodeGenerator",
@@ -1092,10 +1066,8 @@ fn: function (aNode,aClass){
 var self=this;
 function $SemanticAnalyzer(){return smalltalk.SemanticAnalyzer||(typeof SemanticAnalyzer=="undefined"?nil:SemanticAnalyzer)}
 return smalltalk.withContext(function($ctx1) { 
-var $1;
 _st(_st($SemanticAnalyzer())._on_(aClass))._visit_(aNode);
-$1=aNode;
-return $1;
+return aNode;
 }, function($ctx1) {$ctx1.fill(self,"analyze:forClass:",{aNode:aNode,aClass:aClass},smalltalk.InterpreterTest)})},
 args: ["aNode", "aClass"],
 source: "analyze: aNode forClass: aClass\x0a\x09(SemanticAnalyzer on: aClass) visit: aNode.\x0a\x09^ aNode",
@@ -1525,32 +1497,32 @@ fn: function (){
 var self=this;
 var src,ast;
 return smalltalk.withContext(function($ctx1) { 
-var $3,$2,$1,$14,$13,$12,$11,$10,$9,$8,$7,$6,$5,$4;
+var $2,$1,$12,$11,$10,$9,$8,$7,$6,$5,$4,$3;
 src="foo | a | a + 1. [ [ | b | b := a ] ]";
 ast=_st(smalltalk)._parse_(src);
 _st(self["@analyzer"])._visit_(ast);
-$3=_st(ast)._scope();
+$2=_st(ast)._scope();
 $ctx1.sendIdx["scope"]=1;
-$2=_st($3)._scopeLevel();
+$1=_st($2)._scopeLevel();
 $ctx1.sendIdx["scopeLevel"]=1;
-$1=self._assert_equals_($2,(1));
+self._assert_equals_($1,(1));
 $ctx1.sendIdx["assert:equals:"]=1;
-$14=_st(ast)._nodes();
-$13=_st($14)._first();
-$12=_st($13)._nodes();
-$ctx1.sendIdx["nodes"]=3;
-$11=_st($12)._last();
+$12=_st(ast)._nodes();
+$11=_st($12)._first();
 $10=_st($11)._nodes();
+$ctx1.sendIdx["nodes"]=3;
+$9=_st($10)._last();
+$8=_st($9)._nodes();
 $ctx1.sendIdx["nodes"]=2;
-$9=_st($10)._first();
+$7=_st($8)._first();
 $ctx1.sendIdx["first"]=2;
-$8=_st($9)._nodes();
+$6=_st($7)._nodes();
 $ctx1.sendIdx["nodes"]=1;
-$7=_st($8)._first();
+$5=_st($6)._first();
 $ctx1.sendIdx["first"]=1;
-$6=_st($7)._scope();
-$5=_st($6)._scopeLevel();
-$4=self._assert_equals_($5,(3));
+$4=_st($5)._scope();
+$3=_st($4)._scopeLevel();
+self._assert_equals_($3,(3));
 return self}, function($ctx1) {$ctx1.fill(self,"testScopeLevel",{src:src,ast:ast},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 equals: 1.\x0a\x09self assert: ast nodes first nodes last nodes first nodes first scope scopeLevel equals: 3",
@@ -1716,96 +1688,96 @@ fn: function (){
 var self=this;
 var src,ast;
 return smalltalk.withContext(function($ctx1) { 
-var $8,$7,$6,$5,$4,$3,$2,$1,$17,$16,$15,$14,$13,$12,$11,$18,$10,$9,$30,$29,$28,$27,$26,$25,$24,$23,$22,$21,$20,$19,$43,$42,$41,$40,$39,$38,$37,$36,$35,$34,$33,$48,$47,$46,$45,$44,$32,$31;
+var $7,$6,$5,$4,$3,$2,$1,$15,$14,$13,$12,$11,$10,$9,$16,$8,$27,$26,$25,$24,$23,$22,$21,$20,$19,$18,$17,$39,$38,$37,$36,$35,$34,$33,$32,$31,$30,$29,$44,$43,$42,$41,$40,$28;
 src="foo | a | a + 1. [ | b | b := a ]";
 ast=_st(smalltalk)._parse_(src);
 _st(self["@analyzer"])._visit_(ast);
-$8=_st(ast)._nodes();
+$7=_st(ast)._nodes();
 $ctx1.sendIdx["nodes"]=2;
-$7=_st($8)._first();
+$6=_st($7)._first();
 $ctx1.sendIdx["first"]=2;
-$6=_st($7)._nodes();
+$5=_st($6)._nodes();
 $ctx1.sendIdx["nodes"]=1;
-$5=_st($6)._first();
+$4=_st($5)._first();
 $ctx1.sendIdx["first"]=1;
-$4=_st($5)._receiver();
+$3=_st($4)._receiver();
 $ctx1.sendIdx["receiver"]=1;
-$3=_st($4)._binding();
+$2=_st($3)._binding();
 $ctx1.sendIdx["binding"]=1;
-$2=_st($3)._isTempVar();
+$1=_st($2)._isTempVar();
 $ctx1.sendIdx["isTempVar"]=1;
-$1=self._assert_($2);
+self._assert_($1);
 $ctx1.sendIdx["assert:"]=1;
-$17=_st(ast)._nodes();
+$15=_st(ast)._nodes();
 $ctx1.sendIdx["nodes"]=4;
-$16=_st($17)._first();
+$14=_st($15)._first();
 $ctx1.sendIdx["first"]=4;
-$15=_st($16)._nodes();
+$13=_st($14)._nodes();
 $ctx1.sendIdx["nodes"]=3;
-$14=_st($15)._first();
+$12=_st($13)._first();
 $ctx1.sendIdx["first"]=3;
-$13=_st($14)._receiver();
-$12=_st($13)._binding();
+$11=_st($12)._receiver();
+$10=_st($11)._binding();
 $ctx1.sendIdx["binding"]=2;
-$11=_st($12)._scope();
+$9=_st($10)._scope();
 $ctx1.sendIdx["scope"]=1;
-$18=_st(ast)._scope();
+$16=_st(ast)._scope();
 $ctx1.sendIdx["scope"]=2;
-$10=_st($11).__eq_eq($18);
+$8=_st($9).__eq_eq($16);
 $ctx1.sendIdx["=="]=1;
-$9=self._assert_($10);
+self._assert_($8);
 $ctx1.sendIdx["assert:"]=2;
-$30=_st(ast)._nodes();
+$27=_st(ast)._nodes();
 $ctx1.sendIdx["nodes"]=8;
-$29=_st($30)._first();
+$26=_st($27)._first();
 $ctx1.sendIdx["first"]=7;
-$28=_st($29)._nodes();
+$25=_st($26)._nodes();
 $ctx1.sendIdx["nodes"]=7;
-$27=_st($28)._last();
+$24=_st($25)._last();
 $ctx1.sendIdx["last"]=1;
-$26=_st($27)._nodes();
+$23=_st($24)._nodes();
 $ctx1.sendIdx["nodes"]=6;
-$25=_st($26)._first();
+$22=_st($23)._first();
 $ctx1.sendIdx["first"]=6;
-$24=_st($25)._nodes();
+$21=_st($22)._nodes();
 $ctx1.sendIdx["nodes"]=5;
-$23=_st($24)._first();
+$20=_st($21)._first();
 $ctx1.sendIdx["first"]=5;
-$22=_st($23)._left();
+$19=_st($20)._left();
 $ctx1.sendIdx["left"]=1;
-$21=_st($22)._binding();
+$18=_st($19)._binding();
 $ctx1.sendIdx["binding"]=3;
-$20=_st($21)._isTempVar();
-$19=self._assert_($20);
+$17=_st($18)._isTempVar();
+self._assert_($17);
 $ctx1.sendIdx["assert:"]=3;
-$43=_st(ast)._nodes();
+$39=_st(ast)._nodes();
 $ctx1.sendIdx["nodes"]=12;
-$42=_st($43)._first();
+$38=_st($39)._first();
 $ctx1.sendIdx["first"]=10;
-$41=_st($42)._nodes();
+$37=_st($38)._nodes();
 $ctx1.sendIdx["nodes"]=11;
-$40=_st($41)._last();
+$36=_st($37)._last();
 $ctx1.sendIdx["last"]=2;
-$39=_st($40)._nodes();
+$35=_st($36)._nodes();
 $ctx1.sendIdx["nodes"]=10;
-$38=_st($39)._first();
+$34=_st($35)._first();
 $ctx1.sendIdx["first"]=9;
-$37=_st($38)._nodes();
+$33=_st($34)._nodes();
 $ctx1.sendIdx["nodes"]=9;
-$36=_st($37)._first();
+$32=_st($33)._first();
 $ctx1.sendIdx["first"]=8;
-$35=_st($36)._left();
-$34=_st($35)._binding();
-$33=_st($34)._scope();
+$31=_st($32)._left();
+$30=_st($31)._binding();
+$29=_st($30)._scope();
 $ctx1.sendIdx["scope"]=3;
-$48=_st(ast)._nodes();
-$47=_st($48)._first();
-$46=_st($47)._nodes();
+$44=_st(ast)._nodes();
+$43=_st($44)._first();
+$42=_st($43)._nodes();
 $ctx1.sendIdx["nodes"]=13;
-$45=_st($46)._last();
-$44=_st($45)._scope();
-$32=_st($33).__eq_eq($44);
-$31=self._assert_($32);
+$41=_st($42)._last();
+$40=_st($41)._scope();
+$28=_st($29).__eq_eq($40);
+self._assert_($28);
 return self}, function($ctx1) {$ctx1.fill(self,"testVariablesLookup",{src:src,ast:ast},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.",

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 213 - 274
js/Helios-Browser.js


+ 9 - 15
js/Helios-Commands-Core.js

@@ -32,9 +32,8 @@ category: 'converting',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self._isBindingGroup();
-if(smalltalk.assert($2)){
+var $1;
+if(smalltalk.assert(self._isBindingGroup())){
 $1=self._asGroupBinding();
 } else {
 $1=self._asActionBinding();
@@ -373,18 +372,17 @@ var self=this;
 var classes;
 function $OrderedCollection(){return smalltalk.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
+var $1;
 classes=_st($OrderedCollection())._new();
-$1=self._isConcrete();
-if(smalltalk.assert($1)){
+if(smalltalk.assert(self._isConcrete())){
 _st(classes)._add_(self);
 };
 _st(self._subclasses())._do_((function(each){
 return smalltalk.withContext(function($ctx2) {
 return _st(classes)._addAll_(_st(each)._concreteClasses());
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)})}));
-$2=classes;
-return $2;
+$1=classes;
+return $1;
 }, function($ctx1) {$ctx1.fill(self,"concreteClasses",{classes:classes},smalltalk.HLCommand.klass)})},
 args: [],
 source: "concreteClasses\x0a\x09| classes |\x0a\x09\x0a\x09classes := OrderedCollection new.\x0a\x09\x0a\x09self isConcrete\x0a\x09\x09ifTrue: [ classes add: self ].\x0a\x09\x09\x0a\x09self subclasses do: [ :each | \x0a\x09\x09classes addAll: each concreteClasses ].\x0a\x09\x09\x0a\x09^ classes",
@@ -501,9 +499,7 @@ fn: function (aBinding){
 var self=this;
 var newBinding;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=self._isConcrete();
-if(smalltalk.assert($1)){
+if(smalltalk.assert(self._isConcrete())){
 newBinding=self._registerOn_(aBinding);
 newBinding;
 } else {
@@ -655,12 +651,10 @@ fn: function (aBinding,aModel){
 var self=this;
 var newBinding;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=_st(self._isConcrete())._and_((function(){
+if(smalltalk.assert(_st(self._isConcrete())._and_((function(){
 return smalltalk.withContext(function($ctx2) {
 return self._isValidFor_(aModel);
-}, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
-if(smalltalk.assert($1)){
+}, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})})))){
 newBinding=self._registerOn_for_(aBinding,aModel);
 newBinding;
 } else {

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 230 - 285
js/Helios-Core.js


+ 96 - 109
js/Helios-Debugger.js

@@ -46,13 +46,13 @@ var self=this;
 var variables,inspectedContext;
 function $Dictionary(){return smalltalk.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$1,$4,$5,$6,$7,$8;
+var $1,$2,$3,$4,$5;
 variables=_st($Dictionary())._new();
 inspectedContext=self._context();
-$2=variables;
-$3=_st(inspectedContext)._locals();
+$1=variables;
+$2=_st(inspectedContext)._locals();
 $ctx1.sendIdx["locals"]=1;
-$1=_st($2)._addAll_($3);
+_st($1)._addAll_($2);
 $ctx1.sendIdx["addAll:"]=1;
 _st((function(){
 return smalltalk.withContext(function($ctx2) {
@@ -64,18 +64,16 @@ return _st(inspectedContext)._isBlockContext();
 return smalltalk.withContext(function($ctx2) {
 inspectedContext=_st(inspectedContext)._outerContext();
 inspectedContext;
-$4=inspectedContext;
-if(($receiver = $4) == nil || $receiver == null){
-return $4;
+if(($receiver = inspectedContext) == nil || $receiver == null){
+return inspectedContext;
 } else {
-$5=variables;
-$6=_st(inspectedContext)._locals();
-return _st($5)._addAll_($6);
+$3=variables;
+$4=_st(inspectedContext)._locals();
+return _st($3)._addAll_($4);
 };
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)})}));
-$7=anInspector;
-_st($7)._setLabel_("Context");
-$8=_st($7)._setVariables_(variables);
+_st(anInspector)._setLabel_("Context");
+$5=_st(anInspector)._setVariables_(variables);
 return self}, function($ctx1) {$ctx1.fill(self,"inspectOn:",{anInspector:anInspector,variables:variables,inspectedContext:inspectedContext},smalltalk.HLContextInspectorDecorator)})},
 args: ["anInspector"],
 source: "inspectOn: anInspector\x0a\x09| variables inspectedContext |\x0a\x09\x0a\x09variables := Dictionary new.\x0a\x09inspectedContext := self context.\x0a\x09\x0a\x09variables addAll: inspectedContext locals.\x0a\x09\x0a\x09[ inspectedContext notNil and: [ inspectedContext isBlockContext ] ] whileTrue: [\x0a\x09\x09inspectedContext := inspectedContext outerContext.\x0a\x09\x09inspectedContext ifNotNil: [\x0a\x09\x09\x09variables addAll: inspectedContext locals ] ].\x0a\x09\x0a\x09anInspector\x0a\x09\x09setLabel: 'Context';\x0a\x09\x09setVariables: variables",
@@ -117,16 +115,15 @@ fn: function (){
 var self=this;
 function $HLDebuggerCodeWidget(){return smalltalk.HLDebuggerCodeWidget||(typeof HLDebuggerCodeWidget=="undefined"?nil:HLDebuggerCodeWidget)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$4,$1;
-$2=self["@codeWidget"];
-if(($receiver = $2) == nil || $receiver == null){
-$3=_st($HLDebuggerCodeWidget())._new();
-_st($3)._browserModel_(self._model());
-$4=_st($3)._yourself();
-self["@codeWidget"]=$4;
+var $2,$3,$1;
+if(($receiver = self["@codeWidget"]) == nil || $receiver == null){
+$2=_st($HLDebuggerCodeWidget())._new();
+_st($2)._browserModel_(self._model());
+$3=_st($2)._yourself();
+self["@codeWidget"]=$3;
 $1=self["@codeWidget"];
 } else {
-$1=$2;
+$1=self["@codeWidget"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"codeWidget",{},smalltalk.HLDebugger)})},
@@ -179,13 +176,12 @@ fn: function (){
 var self=this;
 function $HLInspectorWidget(){return smalltalk.HLInspectorWidget||(typeof HLInspectorWidget=="undefined"?nil:HLInspectorWidget)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@inspectorWidget"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@inspectorWidget"]) == nil || $receiver == null){
 self["@inspectorWidget"]=_st($HLInspectorWidget())._new();
 $1=self["@inspectorWidget"];
 } else {
-$1=$2;
+$1=self["@inspectorWidget"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"inspectorWidget",{},smalltalk.HLDebugger)})},
@@ -204,13 +200,12 @@ fn: function (){
 var self=this;
 function $HLDebuggerModel(){return smalltalk.HLDebuggerModel||(typeof HLDebuggerModel=="undefined"?nil:HLDebuggerModel)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@model"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@model"]) == nil || $receiver == null){
 self["@model"]=_st($HLDebuggerModel())._new();
 $1=self["@model"];
 } else {
-$1=$2;
+$1=self["@model"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"model",{},smalltalk.HLDebugger)})},
@@ -230,16 +225,16 @@ var self=this;
 function $HLDebuggerContextSelected(){return smalltalk.HLDebuggerContextSelected||(typeof HLDebuggerContextSelected=="undefined"?nil:HLDebuggerContextSelected)}
 function $HLDebuggerStepped(){return smalltalk.HLDebuggerStepped||(typeof HLDebuggerStepped=="undefined"?nil:HLDebuggerStepped)}
 return smalltalk.withContext(function($ctx1) { 
-var $3,$2,$1,$6,$5,$4;
-$3=self._model();
+var $2,$1,$4,$3;
+$2=self._model();
 $ctx1.sendIdx["model"]=1;
-$2=_st($3)._announcer();
+$1=_st($2)._announcer();
 $ctx1.sendIdx["announcer"]=1;
-$1=_st($2)._on_send_to_($HLDebuggerContextSelected(),"onContextSelected:",self);
+_st($1)._on_send_to_($HLDebuggerContextSelected(),"onContextSelected:",self);
 $ctx1.sendIdx["on:send:to:"]=1;
-$6=self._model();
-$5=_st($6)._announcer();
-$4=_st($5)._on_send_to_($HLDebuggerStepped(),"onContextSelected:",self);
+$4=self._model();
+$3=_st($4)._announcer();
+_st($3)._on_send_to_($HLDebuggerStepped(),"onContextSelected:",self);
 return self}, function($ctx1) {$ctx1.fill(self,"observeModel",{},smalltalk.HLDebugger)})},
 args: [],
 source: "observeModel\x0a\x09self model announcer \x0a\x09\x09on: HLDebuggerContextSelected\x0a\x09\x09send: #onContextSelected:\x0a\x09\x09to: self.\x0a\x09\x09\x0a\x09self model announcer \x0a\x09\x09on: HLDebuggerStepped\x0a\x09\x09send: #onContextSelected:\x0a\x09\x09to: self",
@@ -292,16 +287,13 @@ function $HLContainer(){return smalltalk.HLContainer||(typeof HLContainer=="unde
 function $HLHorizontalSplitter(){return smalltalk.HLHorizontalSplitter||(typeof HLHorizontalSplitter=="undefined"?nil:HLHorizontalSplitter)}
 function $HLVerticalSplitter(){return smalltalk.HLVerticalSplitter||(typeof HLVerticalSplitter=="undefined"?nil:HLVerticalSplitter)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$4,$6,$7,$8,$5,$3,$1;
-$2=html;
-$4=$HLContainer();
-$6=$HLHorizontalSplitter();
-$7=self._stackListWidget();
-$8=_st($HLVerticalSplitter())._with_with_(self._codeWidget(),self._inspectorWidget());
-$5=_st($6)._with_with_($7,$8);
+var $3,$4,$2,$1;
+$3=self._stackListWidget();
+$4=_st($HLVerticalSplitter())._with_with_(self._codeWidget(),self._inspectorWidget());
+$2=_st($HLHorizontalSplitter())._with_with_($3,$4);
 $ctx1.sendIdx["with:with:"]=1;
-$3=_st($4)._with_($5);
-$1=_st($2)._with_($3);
+$1=_st($HLContainer())._with_($2);
+_st(html)._with_($1);
 $ctx1.sendIdx["with:"]=1;
 return self}, function($ctx1) {$ctx1.fill(self,"renderContentOn:",{html:html},smalltalk.HLDebugger)})},
 args: ["html"],
@@ -319,16 +311,15 @@ fn: function (){
 var self=this;
 function $HLStackListWidget(){return smalltalk.HLStackListWidget||(typeof HLStackListWidget=="undefined"?nil:HLStackListWidget)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$4,$1;
-$2=self["@stackListWidget"];
-if(($receiver = $2) == nil || $receiver == null){
-$3=_st($HLStackListWidget())._on_(self._model());
-_st($3)._next_(self._codeWidget());
-$4=_st($3)._yourself();
-self["@stackListWidget"]=$4;
+var $2,$3,$1;
+if(($receiver = self["@stackListWidget"]) == nil || $receiver == null){
+$2=_st($HLStackListWidget())._on_(self._model());
+_st($2)._next_(self._codeWidget());
+$3=_st($2)._yourself();
+self["@stackListWidget"]=$3;
 $1=self["@stackListWidget"];
 } else {
-$1=$2;
+$1=self["@stackListWidget"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"stackListWidget",{},smalltalk.HLDebugger)})},
@@ -346,10 +337,9 @@ category: 'actions',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
-$1=smalltalk.HLDebugger.superclass.fn.prototype._unregister.apply(_st(self), []);
+smalltalk.HLDebugger.superclass.fn.prototype._unregister.apply(_st(self), []);
 $ctx1.sendIdx["unregister"]=1;
-$2=_st(self._inspectorWidget())._unregister();
+_st(self._inspectorWidget())._unregister();
 return self}, function($ctx1) {$ctx1.fill(self,"unregister",{},smalltalk.HLDebugger)})},
 args: [],
 source: "unregister\x0a\x09super unregister.\x0a\x09self inspectorWidget unregister",
@@ -508,58 +498,57 @@ fn: function (aNode){
 var self=this;
 var token;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$7,$6,$5,$4,$10,$9,$8,$3,$14,$13,$12,$11,$15,$20,$19,$18,$17,$21,$16,$26,$25,$24,$23,$27,$22;
-$1=aNode;
-if(($receiver = $1) == nil || $receiver == null){
-$1;
+var $1,$6,$5,$4,$3,$9,$8,$7,$2,$13,$12,$11,$10,$14,$19,$18,$17,$16,$20,$15,$25,$24,$23,$22,$26,$21;
+if(($receiver = aNode) == nil || $receiver == null){
+aNode;
 } else {
-$2=self._editor();
+$1=self._editor();
 $ctx1.sendIdx["editor"]=1;
-$7=_st(aNode)._position();
+$6=_st(aNode)._position();
 $ctx1.sendIdx["position"]=1;
-$6=_st($7)._x();
+$5=_st($6)._x();
 $ctx1.sendIdx["x"]=1;
-$5=_st($6).__minus((1));
+$4=_st($5).__minus((1));
 $ctx1.sendIdx["-"]=1;
-$4="line".__minus_gt($5);
+$3="line".__minus_gt($4);
 $ctx1.sendIdx["->"]=1;
-$10=_st(aNode)._position();
+$9=_st(aNode)._position();
 $ctx1.sendIdx["position"]=2;
-$9=_st($10)._y();
-$8="ch".__minus_gt($9);
+$8=_st($9)._y();
+$7="ch".__minus_gt($8);
 $ctx1.sendIdx["->"]=2;
-$3=smalltalk.HashedCollection._from_([$4,$8]);
-token=_st($2)._getTokenAt_($3);
+$2=smalltalk.HashedCollection._from_([$3,$7]);
+token=_st($1)._getTokenAt_($2);
 token;
 self._clearHighlight();
-$14=_st(aNode)._position();
+$13=_st(aNode)._position();
 $ctx1.sendIdx["position"]=3;
-$13=_st($14)._x();
+$12=_st($13)._x();
 $ctx1.sendIdx["x"]=2;
-$12=_st($13).__minus((1));
+$11=_st($12).__minus((1));
 $ctx1.sendIdx["-"]=2;
-$11=self._addStopAt_($12);
-$11;
-$15=self._editor();
-$20=_st(aNode)._position();
+$10=self._addStopAt_($11);
+$10;
+$14=self._editor();
+$19=_st(aNode)._position();
 $ctx1.sendIdx["position"]=4;
-$19=_st($20)._x();
+$18=_st($19)._x();
 $ctx1.sendIdx["x"]=3;
-$18=_st($19).__minus((1));
+$17=_st($18).__minus((1));
 $ctx1.sendIdx["-"]=3;
-$17="line".__minus_gt($18);
+$16="line".__minus_gt($17);
 $ctx1.sendIdx["->"]=3;
-$21="ch".__minus_gt(_st(token)._start());
+$20="ch".__minus_gt(_st(token)._start());
 $ctx1.sendIdx["->"]=4;
-$16=smalltalk.HashedCollection._from_([$17,$21]);
-$26=_st(aNode)._position();
-$25=_st($26)._x();
-$24=_st($25).__minus((1));
-$23="line".__minus_gt($24);
+$15=smalltalk.HashedCollection._from_([$16,$20]);
+$25=_st(aNode)._position();
+$24=_st($25)._x();
+$23=_st($24).__minus((1));
+$22="line".__minus_gt($23);
 $ctx1.sendIdx["->"]=5;
-$27="ch".__minus_gt(_st(token)._end());
-$22=smalltalk.HashedCollection._from_([$23,$27]);
-_st($15)._setSelection_to_($16,$22);
+$26="ch".__minus_gt(_st(token)._end());
+$21=smalltalk.HashedCollection._from_([$22,$26]);
+_st($14)._setSelection_to_($15,$21);
 };
 return self}, function($ctx1) {$ctx1.fill(self,"highlightNode:",{aNode:aNode,token:token},smalltalk.HLDebuggerCodeWidget)})},
 args: ["aNode"],
@@ -579,23 +568,23 @@ function $HLDebuggerContextSelected(){return smalltalk.HLDebuggerContextSelected
 function $HLDebuggerStepped(){return smalltalk.HLDebuggerStepped||(typeof HLDebuggerStepped=="undefined"?nil:HLDebuggerStepped)}
 function $HLDebuggerWhere(){return smalltalk.HLDebuggerWhere||(typeof HLDebuggerWhere=="undefined"?nil:HLDebuggerWhere)}
 return smalltalk.withContext(function($ctx1) { 
-var $3,$2,$1,$6,$5,$4,$9,$8,$7;
+var $2,$1,$4,$3,$6,$5;
 smalltalk.HLDebuggerCodeWidget.superclass.fn.prototype._observeBrowserModel.apply(_st(self), []);
-$3=self._browserModel();
+$2=self._browserModel();
 $ctx1.sendIdx["browserModel"]=1;
-$2=_st($3)._announcer();
+$1=_st($2)._announcer();
 $ctx1.sendIdx["announcer"]=1;
-$1=_st($2)._on_send_to_($HLDebuggerContextSelected(),"onContextSelected",self);
+_st($1)._on_send_to_($HLDebuggerContextSelected(),"onContextSelected",self);
 $ctx1.sendIdx["on:send:to:"]=1;
-$6=self._browserModel();
+$4=self._browserModel();
 $ctx1.sendIdx["browserModel"]=2;
-$5=_st($6)._announcer();
+$3=_st($4)._announcer();
 $ctx1.sendIdx["announcer"]=2;
-$4=_st($5)._on_send_to_($HLDebuggerStepped(),"onContextSelected",self);
+_st($3)._on_send_to_($HLDebuggerStepped(),"onContextSelected",self);
 $ctx1.sendIdx["on:send:to:"]=2;
-$9=self._browserModel();
-$8=_st($9)._announcer();
-$7=_st($8)._on_send_to_($HLDebuggerWhere(),"onContextSelected",self);
+$6=self._browserModel();
+$5=_st($6)._announcer();
+_st($5)._on_send_to_($HLDebuggerWhere(),"onContextSelected",self);
 return self}, function($ctx1) {$ctx1.fill(self,"observeBrowserModel",{},smalltalk.HLDebuggerCodeWidget)})},
 args: [],
 source: "observeBrowserModel\x0a\x09super observeBrowserModel.\x0a\x09\x0a\x09self browserModel announcer \x0a\x09\x09on: HLDebuggerContextSelected\x0a\x09\x09send: #onContextSelected\x0a\x09\x09to: self.\x0a\x09\x0a\x09self browserModel announcer \x0a\x09\x09on: HLDebuggerStepped\x0a\x09\x09send: #onContextSelected\x0a\x09\x09to: self.\x0a\x09\x0a\x09self browserModel announcer \x0a\x09\x09on: HLDebuggerWhere\x0a\x09\x09send: #onContextSelected\x0a\x09\x09to: self",
@@ -649,15 +638,14 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
-$1=self["@currentContext"];
-if(($receiver = $1) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@currentContext"]) == nil || $receiver == null){
 self._currentContext_(self._rootContext());
 } else {
-$1;
+self["@currentContext"];
 };
-$2=self["@currentContext"];
-return $2;
+$1=self["@currentContext"];
+return $1;
 }, function($ctx1) {$ctx1.fill(self,"currentContext",{},smalltalk.HLDebuggerModel)})},
 args: [],
 source: "currentContext\x0a\x09currentContext ifNil: [ self currentContext: self rootContext ].\x0a\x09^ currentContext",
@@ -952,13 +940,12 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@items"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@items"]) == nil || $receiver == null){
 self["@items"]=_st(self._model())._contexts();
 $1=self["@items"];
 } else {
-$1=$2;
+$1=self["@items"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"items",{},smalltalk.HLStackListWidget)})},

+ 64 - 85
js/Helios-Inspector.js

@@ -61,10 +61,9 @@ fn: function (){
 var self=this;
 var selection;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
+var $1;
 selection=_st(self["@model"])._selection();
-$2=_st(_st(_st(self["@model"])._variables())._keys())._includes_(selection);
-if(smalltalk.assert($2)){
+if(smalltalk.assert(_st(_st(_st(self["@model"])._variables())._keys())._includes_(selection))){
 $1=_st(_st(self["@model"])._instVarObjectAt_(selection))._printString();
 } else {
 $1="";
@@ -89,13 +88,12 @@ fn: function (){
 var self=this;
 function $Announcer(){return smalltalk.Announcer||(typeof Announcer=="undefined"?nil:Announcer)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@announcer"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@announcer"]) == nil || $receiver == null){
 self["@announcer"]=_st($Announcer())._new();
 $1=self["@announcer"];
 } else {
-$1=$2;
+$1=self["@announcer"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"announcer",{},smalltalk.HLInspectorModel)})},
@@ -114,13 +112,12 @@ fn: function (){
 var self=this;
 function $HLCodeModel(){return smalltalk.HLCodeModel||(typeof HLCodeModel=="undefined"?nil:HLCodeModel)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@code"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@code"]) == nil || $receiver == null){
 self["@code"]=_st($HLCodeModel())._on_(self._environment());
 $1=self["@code"];
 } else {
-$1=$2;
+$1=self["@code"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"code",{},smalltalk.HLInspectorModel)})},
@@ -139,12 +136,11 @@ fn: function (){
 var self=this;
 function $HLManager(){return smalltalk.HLManager||(typeof HLManager=="undefined"?nil:HLManager)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@environment"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@environment"]) == nil || $receiver == null){
 $1=_st(_st($HLManager())._current())._environment();
 } else {
-$1=$2;
+$1=self["@environment"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"environment",{},smalltalk.HLInspectorModel)})},
@@ -248,12 +244,11 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@label"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@label"]) == nil || $receiver == null){
 $1=_st(self._inspectee())._printString();
 } else {
-$1=$2;
+$1=self["@label"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"label",{},smalltalk.HLInspectorModel)})},
@@ -353,12 +348,11 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@selection"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@selection"]) == nil || $receiver == null){
 $1="";
 } else {
-$1=$2;
+$1=self["@selection"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"selection",{},smalltalk.HLInspectorModel)})},
@@ -411,12 +405,11 @@ fn: function (){
 var self=this;
 function $Dictionary(){return smalltalk.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@variables"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@variables"]) == nil || $receiver == null){
 $1=_st($Dictionary())._new();
 } else {
-$1=$2;
+$1=self["@variables"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"variables",{},smalltalk.HLInspectorModel)})},
@@ -475,13 +468,12 @@ fn: function (){
 var self=this;
 function $Announcer(){return smalltalk.Announcer||(typeof Announcer=="undefined"?nil:Announcer)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@announcer"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@announcer"]) == nil || $receiver == null){
 self["@announcer"]=_st($Announcer())._new();
 $1=self["@announcer"];
 } else {
-$1=$2;
+$1=self["@announcer"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"announcer",{},smalltalk.HLInspectorVariablesWidget)})},
@@ -569,9 +561,7 @@ category: 'actions',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=_st(self._variables()).__eq(self._items());
-if(! smalltalk.assert($1)){
+if(! smalltalk.assert(_st(self._variables()).__eq(self._items()))){
 self._resetItems();
 smalltalk.HLInspectorVariablesWidget.superclass.fn.prototype._refresh.apply(_st(self), []);
 };
@@ -724,17 +714,16 @@ fn: function (){
 var self=this;
 function $HLCodeWidget(){return smalltalk.HLCodeWidget||(typeof HLCodeWidget=="undefined"?nil:HLCodeWidget)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$4,$1;
-$2=self["@codeWidget"];
-if(($receiver = $2) == nil || $receiver == null){
-$3=_st($HLCodeWidget())._new();
-_st($3)._model_(_st(self["@model"])._code());
-_st($3)._receiver_(_st(self["@model"])._inspectee());
-$4=_st($3)._yourself();
-self["@codeWidget"]=$4;
+var $2,$3,$1;
+if(($receiver = self["@codeWidget"]) == nil || $receiver == null){
+$2=_st($HLCodeWidget())._new();
+_st($2)._model_(_st(self["@model"])._code());
+_st($2)._receiver_(_st(self["@model"])._inspectee());
+$3=_st($2)._yourself();
+self["@codeWidget"]=$3;
 $1=self["@codeWidget"];
 } else {
-$1=$2;
+$1=self["@codeWidget"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"codeWidget",{},smalltalk.HLInspectorWidget)})},
@@ -753,16 +742,15 @@ fn: function (){
 var self=this;
 function $HLInspectorDisplayWidget(){return smalltalk.HLInspectorDisplayWidget||(typeof HLInspectorDisplayWidget=="undefined"?nil:HLInspectorDisplayWidget)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$4,$1;
-$2=self["@displayWidget"];
-if(($receiver = $2) == nil || $receiver == null){
-$3=_st($HLInspectorDisplayWidget())._new();
-_st($3)._model_(self._model());
-$4=_st($3)._yourself();
-self["@displayWidget"]=$4;
+var $2,$3,$1;
+if(($receiver = self["@displayWidget"]) == nil || $receiver == null){
+$2=_st($HLInspectorDisplayWidget())._new();
+_st($2)._model_(self._model());
+$3=_st($2)._yourself();
+self["@displayWidget"]=$3;
 $1=self["@displayWidget"];
 } else {
-$1=$2;
+$1=self["@displayWidget"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"displayWidget",{},smalltalk.HLInspectorWidget)})},
@@ -869,13 +857,12 @@ fn: function (){
 var self=this;
 function $HLInspectorModel(){return smalltalk.HLInspectorModel||(typeof HLInspectorModel=="undefined"?nil:HLInspectorModel)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@model"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@model"]) == nil || $receiver == null){
 self._model_(_st($HLInspectorModel())._new());
 $1=self["@model"];
 } else {
-$1=$2;
+$1=self["@model"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"model",{},smalltalk.HLInspectorWidget)})},
@@ -1121,13 +1108,11 @@ var self=this;
 function $HLHorizontalSplitter(){return smalltalk.HLHorizontalSplitter||(typeof HLHorizontalSplitter=="undefined"?nil:HLHorizontalSplitter)}
 function $HLVerticalSplitter(){return smalltalk.HLVerticalSplitter||(typeof HLVerticalSplitter=="undefined"?nil:HLVerticalSplitter)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$3,$4,$2;
-$1=html;
-$3=$HLHorizontalSplitter();
-$4=_st($HLVerticalSplitter())._with_with_(self._variablesWidget(),self._displayWidget());
-$2=_st($3)._with_with_($4,self._codeWidget());
+var $2,$1;
+$2=_st($HLVerticalSplitter())._with_with_(self._variablesWidget(),self._displayWidget());
+$1=_st($HLHorizontalSplitter())._with_with_($2,self._codeWidget());
 $ctx1.sendIdx["with:with:"]=1;
-_st($1)._with_($2);
+_st(html)._with_($1);
 return self}, function($ctx1) {$ctx1.fill(self,"renderContentOn:",{html:html},smalltalk.HLInspectorWidget)})},
 args: ["html"],
 source: "renderContentOn: html\x0a   \x09html with: (HLHorizontalSplitter\x0a    \x09with: (HLVerticalSplitter \x0a            with: self variablesWidget\x0a            with: self displayWidget)\x0a        with: self codeWidget)",
@@ -1210,16 +1195,15 @@ fn: function (){
 var self=this;
 function $HLInspectorVariablesWidget(){return smalltalk.HLInspectorVariablesWidget||(typeof HLInspectorVariablesWidget=="undefined"?nil:HLInspectorVariablesWidget)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$4,$1;
-$2=self["@variablesWidget"];
-if(($receiver = $2) == nil || $receiver == null){
-$3=_st($HLInspectorVariablesWidget())._new();
-_st($3)._model_(self._model());
-$4=_st($3)._yourself();
-self["@variablesWidget"]=$4;
+var $2,$3,$1;
+if(($receiver = self["@variablesWidget"]) == nil || $receiver == null){
+$2=_st($HLInspectorVariablesWidget())._new();
+_st($2)._model_(self._model());
+$3=_st($2)._yourself();
+self["@variablesWidget"]=$3;
 $1=self["@variablesWidget"];
 } else {
-$1=$2;
+$1=self["@variablesWidget"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"variablesWidget",{},smalltalk.HLInspectorWidget)})},
@@ -1243,21 +1227,17 @@ function $HLContainer(){return smalltalk.HLContainer||(typeof HLContainer=="unde
 function $HLHorizontalSplitter(){return smalltalk.HLHorizontalSplitter||(typeof HLHorizontalSplitter=="undefined"?nil:HLHorizontalSplitter)}
 function $HLVerticalSplitter(){return smalltalk.HLVerticalSplitter||(typeof HLVerticalSplitter=="undefined"?nil:HLVerticalSplitter)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$4,$6,$8,$9,$7,$5,$3,$1,$10;
-$2=html;
-$4=$HLContainer();
-$6=$HLHorizontalSplitter();
-$8=$HLVerticalSplitter();
-$9=self._variablesWidget();
+var $4,$3,$2,$1,$5;
+$4=self._variablesWidget();
 $ctx1.sendIdx["variablesWidget"]=1;
-$7=_st($8)._with_with_($9,self._displayWidget());
-$5=_st($6)._with_with_($7,self._codeWidget());
+$3=_st($HLVerticalSplitter())._with_with_($4,self._displayWidget());
+$2=_st($HLHorizontalSplitter())._with_with_($3,self._codeWidget());
 $ctx1.sendIdx["with:with:"]=1;
-$3=_st($4)._with_($5);
-$1=_st($2)._with_($3);
+$1=_st($HLContainer())._with_($2);
+_st(html)._with_($1);
 $ctx1.sendIdx["with:"]=1;
-$10=self._variablesWidget();
-_st($10)._focus();
+$5=self._variablesWidget();
+_st($5)._focus();
 return self}, function($ctx1) {$ctx1.fill(self,"renderContentOn:",{html:html},smalltalk.HLInspector)})},
 args: ["html"],
 source: "renderContentOn: html\x0a   \x09html with: (HLContainer with: (HLHorizontalSplitter\x0a    \x09with: (HLVerticalSplitter \x0a            with: self variablesWidget\x0a            with: self displayWidget)\x0a        with: self codeWidget)).\x0a\x09\x0a\x09self variablesWidget focus",
@@ -1328,13 +1308,12 @@ fn: function (){
 var self=this;
 function $OrderedCollection(){return smalltalk.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@inspectors"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@inspectors"]) == nil || $receiver == null){
 self["@inspectors"]=_st($OrderedCollection())._new();
 $1=self["@inspectors"];
 } else {
-$1=$2;
+$1=self["@inspectors"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"inspectors",{},smalltalk.HLInspector.klass)})},

+ 95 - 138
js/Helios-KeyBindings.js

@@ -222,9 +222,7 @@ fn: function (){
 var self=this;
 function $HLKeyBinder(){return smalltalk.HLKeyBinder||(typeof HLKeyBinder=="undefined"?nil:HLKeyBinder)}
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=_st(self._command())._isInputRequired();
-if(smalltalk.assert($1)){
+if(smalltalk.assert(_st(self._command())._isInputRequired())){
 _st(_st(_st($HLKeyBinder())._current())._helper())._showWidget_(self._inputWidget());
 } else {
 self._executeCommand();
@@ -525,13 +523,11 @@ fn: function (aString,aBinding){
 var self=this;
 var binding;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
 binding=self._at_(aString);
-$1=binding;
-if(($receiver = $1) == nil || $receiver == null){
+if(($receiver = binding) == nil || $receiver == null){
 return self;
 } else {
-$1;
+binding;
 };
 _st(binding)._add_(aBinding);
 return self}, function($ctx1) {$ctx1.fill(self,"at:add:",{aString:aString,aBinding:aBinding,binding:binding},smalltalk.HLBindingGroup)})},
@@ -574,13 +570,12 @@ fn: function (){
 var self=this;
 function $OrderedCollection(){return smalltalk.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@bindings"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@bindings"]) == nil || $receiver == null){
 self["@bindings"]=_st($OrderedCollection())._new();
 $1=self["@bindings"];
 } else {
-$1=$2;
+$1=self["@bindings"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"bindings",{},smalltalk.HLBindingGroup)})},
@@ -653,9 +648,7 @@ category: 'rendering',
 fn: function (aBindingHelper,html){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=self._isActive();
-if(smalltalk.assert($1)){
+if(smalltalk.assert(self._isActive())){
 _st(aBindingHelper)._renderBindingGroup_on_(self,html);
 };
 return self}, function($ctx1) {$ctx1.fill(self,"renderOn:html:",{aBindingHelper:aBindingHelper,html:html},smalltalk.HLBindingGroup)})},
@@ -677,15 +670,14 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@callback"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@callback"]) == nil || $receiver == null){
 self["@callback"]=(function(value){
 return smalltalk.withContext(function($ctx2) {
 }, function($ctx2) {$ctx2.fillBlock({value:value},$ctx1,2)})});
 $1=self["@callback"];
 } else {
-$1=$2;
+$1=self["@callback"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"callback",{},smalltalk.HLBindingActionInputWidget)})},
@@ -737,12 +729,11 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@defaultValue"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@defaultValue"]) == nil || $receiver == null){
 $1="";
 } else {
-$1=$2;
+$1=self["@defaultValue"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"defaultValue",{},smalltalk.HLBindingActionInputWidget)})},
@@ -873,12 +864,11 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@inputCompletion"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@inputCompletion"]) == nil || $receiver == null){
 $1=[];
 } else {
-$1=$2;
+$1=self["@inputCompletion"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"inputCompletion",{},smalltalk.HLBindingActionInputWidget)})},
@@ -912,13 +902,12 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@message"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@message"]) == nil || $receiver == null){
 self["@message"]="";
 $1=self["@message"];
 } else {
-$1=$2;
+$1=self["@message"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"message",{},smalltalk.HLBindingActionInputWidget)})},
@@ -952,12 +941,10 @@ category: 'actions',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=self["@wrapper"];
-if(($receiver = $1) == nil || $receiver == null){
+if(($receiver = self["@wrapper"]) == nil || $receiver == null){
 return self;
 } else {
-$1;
+self["@wrapper"];
 };
 _st(self["@wrapper"])._class_(self._status());
 _st(self["@messageTag"])._contents_(self._message());
@@ -976,53 +963,51 @@ category: 'rendering',
 fn: function (html){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$4,$6,$8,$10,$9,$7,$5,$11,$12,$13,$3,$14;
-$1=self["@wrapper"];
-if(($receiver = $1) == nil || $receiver == null){
+var $1,$3,$5,$8,$7,$6,$4,$9,$10,$11,$2,$12;
+if(($receiver = self["@wrapper"]) == nil || $receiver == null){
 self["@wrapper"]=_st(html)._span();
 $ctx1.sendIdx["span"]=1;
 self["@wrapper"];
 } else {
-$1;
+self["@wrapper"];
 };
-$2=self["@wrapper"];
-_st($2)._class_(self._status());
+$1=self["@wrapper"];
+_st($1)._class_(self._status());
 $ctx1.sendIdx["class:"]=1;
-$3=_st($2)._with_((function(){
+$2=_st($1)._with_((function(){
 return smalltalk.withContext(function($ctx2) {
-$4=_st(html)._input();
-_st($4)._placeholder_(self._ghostText());
-_st($4)._value_(self._defaultValue());
-$6=$4;
-$7=_st((function(event){
+$3=_st(html)._input();
+_st($3)._placeholder_(self._ghostText());
+_st($3)._value_(self._defaultValue());
+$5=$3;
+$6=_st((function(event){
 return smalltalk.withContext(function($ctx3) {
-$8=_st(_st(event)._which()).__eq((13));
-if(smalltalk.assert($8)){
-$10=_st(self["@input"])._asJQuery();
+if(smalltalk.assert(_st(_st(event)._which()).__eq((13)))){
+$8=_st(self["@input"])._asJQuery();
 $ctx3.sendIdx["asJQuery"]=1;
-$9=_st($10)._val();
-return self._evaluate_($9);
+$7=_st($8)._val();
+return self._evaluate_($7);
 };
 }, function($ctx3) {$ctx3.fillBlock({event:event},$ctx2,3)})}))._yourself();
 $ctx2.sendIdx["yourself"]=1;
-$5=_st($6)._onKeyDown_($7);
-self["@input"]=$5;
+$4=_st($5)._onKeyDown_($6);
+self["@input"]=$4;
 self["@input"];
-$11=_st(self["@input"])._asJQuery();
+$9=_st(self["@input"])._asJQuery();
 $ctx2.sendIdx["asJQuery"]=2;
-_st($11)._typeahead_(smalltalk.HashedCollection._from_(["source".__minus_gt(self._inputCompletion())]));
-$12=_st(html)._span();
-_st($12)._class_("help-inline");
-_st($12)._with_(self._message());
-$13=_st($12)._yourself();
-self["@messageTag"]=$13;
+_st($9)._typeahead_(smalltalk.HashedCollection._from_(["source".__minus_gt(self._inputCompletion())]));
+$10=_st(html)._span();
+_st($10)._class_("help-inline");
+_st($10)._with_(self._message());
+$11=_st($10)._yourself();
+self["@messageTag"]=$11;
 return self["@messageTag"];
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)})}));
 $ctx1.sendIdx["with:"]=1;
 _st((function(){
 return smalltalk.withContext(function($ctx2) {
-$14=_st(self["@input"])._asJQuery();
-return _st($14)._focus();
+$12=_st(self["@input"])._asJQuery();
+return _st($12)._focus();
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,5)})}))._valueWithTimeout_((10));
 return self}, function($ctx1) {$ctx1.fill(self,"renderOn:",{html:html},smalltalk.HLBindingActionInputWidget)})},
 args: ["html"],
@@ -1039,13 +1024,12 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@status"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@status"]) == nil || $receiver == null){
 self["@status"]="info";
 $1=self["@status"];
 } else {
-$1=$2;
+$1=self["@status"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"status",{},smalltalk.HLBindingActionInputWidget)})},
@@ -1131,9 +1115,7 @@ category: 'actions',
 fn: function (aBinding){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=_st(aBinding)._isActive();
-if(! smalltalk.assert($1)){
+if(! smalltalk.assert(_st(aBinding)._isActive())){
 return self;
 };
 self._selectBinding_(aBinding);
@@ -1153,13 +1135,12 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@bindings"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@bindings"]) == nil || $receiver == null){
 self["@bindings"]=self._defaultBindings();
 $1=self["@bindings"];
 } else {
-$1=$2;
+$1=self["@bindings"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"bindings",{},smalltalk.HLKeyBinder)})},
@@ -1177,10 +1158,8 @@ category: 'actions',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=self["@selectedBinding"];
-if(($receiver = $1) == nil || $receiver == null){
-$1;
+if(($receiver = self["@selectedBinding"]) == nil || $receiver == null){
+self["@selectedBinding"];
 } else {
 _st(self["@selectedBinding"])._release();
 };
@@ -1309,11 +1288,9 @@ fn: function (anEvent){
 var self=this;
 var binding;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
 binding=_st(self._selectedBinding())._atKey_(_st(anEvent)._which());
-$1=binding;
-if(($receiver = $1) == nil || $receiver == null){
-$1;
+if(($receiver = binding) == nil || $receiver == null){
+binding;
 } else {
 self._applyBinding_(binding);
 _st(anEvent)._preventDefault();
@@ -1334,11 +1311,8 @@ category: 'events',
 fn: function (event){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$1;
-$2=_st(_st(event)._which()).__eq(self._activationKey());
-if(smalltalk.assert($2)){
-$3=_st(event)._ctrlKey();
-if(smalltalk.assert($3)){
+if(smalltalk.assert(_st(_st(event)._which()).__eq(self._activationKey()))){
+if(smalltalk.assert(_st(event)._ctrlKey())){
 self._activate();
 _st(event)._preventDefault();
 return false;
@@ -1359,9 +1333,8 @@ category: 'events',
 fn: function (event){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self._isActive();
-if(smalltalk.assert($2)){
+var $1;
+if(smalltalk.assert(self._isActive())){
 $1=self._handleActiveKeyDown_(event);
 } else {
 $1=self._handleInactiveKeyDown_(event);
@@ -1440,9 +1413,7 @@ category: 'actions',
 fn: function (aBinding){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=_st(aBinding).__eq(self["@selectedBinding"]);
-if(smalltalk.assert($1)){
+if(smalltalk.assert(_st(aBinding).__eq(self["@selectedBinding"]))){
 return self;
 };
 self["@selectedBinding"]=aBinding;
@@ -1462,12 +1433,11 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@selectedBinding"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@selectedBinding"]) == nil || $receiver == null){
 $1=self._bindings();
 } else {
-$1=$2;
+$1=self["@selectedBinding"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"selectedBinding",{},smalltalk.HLKeyBinder)})},
@@ -1524,13 +1494,12 @@ category: 'instance creation',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@current"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@current"]) == nil || $receiver == null){
 self["@current"]=smalltalk.HLKeyBinder.klass.superclass.fn.prototype._new.apply(_st(self), []);
 $1=self["@current"];
 } else {
-$1=$2;
+$1=self["@current"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"current",{},smalltalk.HLKeyBinder.klass)})},
@@ -1825,15 +1794,14 @@ category: 'rendering',
 fn: function (html){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$3,$5,$4,$2;
+var $1,$3,$4,$2;
 $1=_st(html)._span();
 _st($1)._class_("selected");
 $3=$1;
-$5=_st(self._selectedBinding())._label();
-if(($receiver = $5) == nil || $receiver == null){
+if(($receiver = _st(self._selectedBinding())._label()) == nil || $receiver == null){
 $4="Action";
 } else {
-$4=$5;
+$4=_st(self._selectedBinding())._label();
 };
 $2=_st($3)._with_($4);
 return self}, function($ctx1) {$ctx1.fill(self,"renderLabelOn:",{html:html},smalltalk.HLKeyBinderHelperWidget)})},
@@ -1956,7 +1924,7 @@ category: 'actions',
 fn: function (aWidget){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $3,$2,$1,$4,$7,$6,$5;
+var $3,$2,$1,$6,$5,$4;
 $3=self._mainId();
 $ctx1.sendIdx["mainId"]=1;
 $2="#".__comma($3);
@@ -1964,11 +1932,10 @@ $ctx1.sendIdx[","]=1;
 $1=_st($2)._asJQuery();
 $ctx1.sendIdx["asJQuery"]=1;
 _st($1)._empty();
-$4=aWidget;
-$7=self._mainId();
-$6="#".__comma($7);
-$5=_st($6)._asJQuery();
-_st($4)._appendToJQuery_($5);
+$6=self._mainId();
+$5="#".__comma($6);
+$4=_st($5)._asJQuery();
+_st(aWidget)._appendToJQuery_($4);
 return self}, function($ctx1) {$ctx1.fill(self,"showWidget:",{aWidget:aWidget},smalltalk.HLKeyBinderHelperWidget)})},
 args: ["aWidget"],
 source: "showWidget: aWidget\x0a\x09\x22Some actions need to display more info to the user or request input.\x0a\x09This method is the right place for that\x22\x0a\x09\x0a\x09('#', self mainId) asJQuery empty.\x0a\x09aWidget appendToJQuery: ('#', self mainId) asJQuery",
@@ -2047,12 +2014,10 @@ category: 'events handling',
 fn: function (anEvent,anInteger,aBlock){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=_st(_st(_st(anEvent)._which()).__eq(anInteger))._and_((function(){
+if(smalltalk.assert(_st(_st(_st(anEvent)._which()).__eq(anInteger))._and_((function(){
 return smalltalk.withContext(function($ctx2) {
 return _st(self._isKeyDown())._not();
-}, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
-if(smalltalk.assert($1)){
+}, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})})))){
 self._whileKeyDownDo_(aBlock);
 };
 return self}, function($ctx1) {$ctx1.fill(self,"handleEvent:forKey:action:",{anEvent:anEvent,anInteger:anInteger,aBlock:aBlock},smalltalk.HLRepeatedKeyDownHandler)})},
@@ -2089,20 +2054,16 @@ category: 'events handling',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3;
-$1=self._isKeyDown();
-if(smalltalk.assert($1)){
+if(smalltalk.assert(self._isKeyDown())){
 self["@keyDown"]=false;
 self["@keyDown"];
-$2=self["@interval"];
-if(($receiver = $2) == nil || $receiver == null){
-$2;
+if(($receiver = self["@interval"]) == nil || $receiver == null){
+self["@interval"];
 } else {
 _st(self["@interval"])._clearInterval();
 };
-$3=self["@delay"];
-if(($receiver = $3) == nil || $receiver == null){
-$3;
+if(($receiver = self["@delay"]) == nil || $receiver == null){
+self["@delay"];
 } else {
 _st(self["@delay"])._clearTimeout();
 };
@@ -2122,12 +2083,11 @@ category: 'testing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@keyDown"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@keyDown"]) == nil || $receiver == null){
 $1=false;
 } else {
-$1=$2;
+$1=self["@keyDown"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"isKeyDown",{},smalltalk.HLRepeatedKeyDownHandler)})},
@@ -2146,13 +2106,12 @@ fn: function (){
 var self=this;
 function $Dictionary(){return smalltalk.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@keyBindings"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@keyBindings"]) == nil || $receiver == null){
 self["@keyBindings"]=_st($Dictionary())._new();
 $1=self["@keyBindings"];
 } else {
-$1=$2;
+$1=self["@keyBindings"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"keyBindings",{},smalltalk.HLRepeatedKeyDownHandler)})},
@@ -2188,12 +2147,11 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@repeatInterval"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@repeatInterval"]) == nil || $receiver == null){
 $1=self._defaultRepeatInterval();
 } else {
-$1=$2;
+$1=self["@repeatInterval"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"repeatInterval",{},smalltalk.HLRepeatedKeyDownHandler)})},
@@ -2227,11 +2185,10 @@ category: 'actions',
 fn: function (aBlock){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
+var $1;
 $1=_st((function(){
 return smalltalk.withContext(function($ctx2) {
-$2=_st(self._widget())._hasFocus();
-if(smalltalk.assert($2)){
+if(smalltalk.assert(_st(self._widget())._hasFocus())){
 return _st(aBlock)._value();
 } else {
 return self._handleKeyUp();

+ 30 - 30
js/Helios-Layout.js

@@ -354,7 +354,7 @@ fn: function (anInteger){
 var self=this;
 var container,size,offset,percentage;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$3,$2,$6,$7,$5,$4,$9,$11,$10,$8,$13,$16,$15,$14,$12,$18,$21,$20,$19,$17;
+var $1,$3,$2,$6,$7,$5,$4,$8,$10,$9,$11,$14,$13,$12,$15,$18,$17,$16;
 $1=_st(self["@firstPane"])._asJQuery();
 $ctx1.sendIdx["asJQuery"]=1;
 container=_st($1)._parent();
@@ -371,29 +371,29 @@ $ctx1.sendIdx["-"]=1;
 $4=_st($5).__slash(size);
 percentage=_st($4).__star((100));
 percentage=(80)._min_(_st(percentage)._max_((20)));
-$9=_st(self["@firstPane"])._asJQuery();
+$8=_st(self["@firstPane"])._asJQuery();
 $ctx1.sendIdx["asJQuery"]=3;
-$11=_st(percentage)._asString();
+$10=_st(percentage)._asString();
 $ctx1.sendIdx["asString"]=1;
-$10=_st($11).__comma("%");
+$9=_st($10).__comma("%");
 $ctx1.sendIdx[","]=1;
-$8=_st($9)._css_put_("bottom",$10);
+_st($8)._css_put_("bottom",$9);
 $ctx1.sendIdx["css:put:"]=1;
-$13=_st(self["@splitter"])._asJQuery();
+$11=_st(self["@splitter"])._asJQuery();
 $ctx1.sendIdx["asJQuery"]=4;
-$16=(100).__minus(percentage);
+$14=(100).__minus(percentage);
 $ctx1.sendIdx["-"]=3;
-$15=_st($16)._asString();
+$13=_st($14)._asString();
 $ctx1.sendIdx["asString"]=2;
-$14=_st($15).__comma("%");
+$12=_st($13).__comma("%");
 $ctx1.sendIdx[","]=2;
-$12=_st($13)._css_put_("top",$14);
+_st($11)._css_put_("top",$12);
 $ctx1.sendIdx["css:put:"]=2;
-$18=_st(self["@secondPane"])._asJQuery();
-$21=(100).__minus(percentage);
-$20=_st($21)._asString();
-$19=_st($20).__comma("%");
-$17=_st($18)._css_put_("top",$19);
+$15=_st(self["@secondPane"])._asJQuery();
+$18=(100).__minus(percentage);
+$17=_st($18)._asString();
+$16=_st($17).__comma("%");
+_st($15)._css_put_("top",$16);
 return self}, function($ctx1) {$ctx1.fill(self,"resize:",{anInteger:anInteger,container:container,size:size,offset:offset,percentage:percentage},smalltalk.HLHorizontalSplitter)})},
 args: ["anInteger"],
 source: "resize: anInteger\x0a\x09| container size offset percentage |\x0a    \x0a    container := firstPane asJQuery parent.\x0a\x09offset := firstPane asJQuery offset top.\x0a    size := container height.\x0a\x09\x0a\x09percentage := (size - (anInteger - offset)) / size * 100.\x0a\x09percentage := 80 min: (percentage max: 20).\x0a\x09\x0a    firstPane asJQuery css: 'bottom' put: percentage asString, '%'.\x0a\x09\x0a\x09splitter asJQuery css: 'top' put: (100 - percentage) asString, '%'.\x0a\x09secondPane asJQuery css: 'top' put: (100 - percentage) asString, '%'",
@@ -518,7 +518,7 @@ fn: function (anInteger){
 var self=this;
 var container,size,offset,percentage;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$3,$2,$6,$7,$5,$4,$9,$11,$10,$8,$13,$16,$15,$14,$12,$18,$21,$20,$19,$17;
+var $1,$3,$2,$6,$7,$5,$4,$8,$10,$9,$11,$14,$13,$12,$15,$18,$17,$16;
 $1=_st(self["@firstPane"])._asJQuery();
 $ctx1.sendIdx["asJQuery"]=1;
 container=_st($1)._parent();
@@ -535,29 +535,29 @@ $ctx1.sendIdx["-"]=1;
 $4=_st($5).__slash(size);
 percentage=_st($4).__star((100));
 percentage=(80)._min_(_st(percentage)._max_((20)));
-$9=_st(self["@firstPane"])._asJQuery();
+$8=_st(self["@firstPane"])._asJQuery();
 $ctx1.sendIdx["asJQuery"]=3;
-$11=_st(percentage)._asString();
+$10=_st(percentage)._asString();
 $ctx1.sendIdx["asString"]=1;
-$10=_st($11).__comma("%");
+$9=_st($10).__comma("%");
 $ctx1.sendIdx[","]=1;
-$8=_st($9)._css_put_("right",$10);
+_st($8)._css_put_("right",$9);
 $ctx1.sendIdx["css:put:"]=1;
-$13=_st(self["@splitter"])._asJQuery();
+$11=_st(self["@splitter"])._asJQuery();
 $ctx1.sendIdx["asJQuery"]=4;
-$16=(100).__minus(percentage);
+$14=(100).__minus(percentage);
 $ctx1.sendIdx["-"]=3;
-$15=_st($16)._asString();
+$13=_st($14)._asString();
 $ctx1.sendIdx["asString"]=2;
-$14=_st($15).__comma("%");
+$12=_st($13).__comma("%");
 $ctx1.sendIdx[","]=2;
-$12=_st($13)._css_put_("left",$14);
+_st($11)._css_put_("left",$12);
 $ctx1.sendIdx["css:put:"]=2;
-$18=_st(self["@secondPane"])._asJQuery();
-$21=(100).__minus(percentage);
-$20=_st($21)._asString();
-$19=_st($20).__comma("%");
-$17=_st($18)._css_put_("left",$19);
+$15=_st(self["@secondPane"])._asJQuery();
+$18=(100).__minus(percentage);
+$17=_st($18)._asString();
+$16=_st($17).__comma("%");
+_st($15)._css_put_("left",$16);
 return self}, function($ctx1) {$ctx1.fill(self,"resize:",{anInteger:anInteger,container:container,size:size,offset:offset,percentage:percentage},smalltalk.HLVerticalSplitter)})},
 args: ["anInteger"],
 source: "resize: anInteger\x0a\x09| container size offset percentage |\x0a    \x0a    container := firstPane asJQuery parent.\x0a\x09offset := firstPane asJQuery offset left.\x0a    size := container width.\x0a\x09\x0a\x09percentage := (size - (anInteger - offset)) / size * 100.\x0a\x09percentage := 80 min: (percentage max: 20).\x0a\x09\x0a    firstPane asJQuery css: 'right' put: percentage asString, '%'.\x0a\x09\x0a\x09splitter asJQuery css: 'left' put: (100 - percentage) asString, '%'.\x0a\x09secondPane asJQuery css: 'left' put: (100 - percentage) asString, '%'",

+ 69 - 87
js/Helios-References.js

@@ -157,14 +157,13 @@ fn: function (){
 var self=this;
 function $HLClassReferencesListWidget(){return smalltalk.HLClassReferencesListWidget||(typeof HLClassReferencesListWidget=="undefined"?nil:HLClassReferencesListWidget)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@classReferencesListWidget"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@classReferencesListWidget"]) == nil || $receiver == null){
 self["@classReferencesListWidget"]=_st($HLClassReferencesListWidget())._on_(self._model());
 self["@classReferencesListWidget"];
 $1=_st(self["@classReferencesListWidget"])._next_(self._regexpListWidget());
 } else {
-$1=$2;
+$1=self["@classReferencesListWidget"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"classReferencesListWidget",{},smalltalk.HLReferences)})},
@@ -183,14 +182,13 @@ fn: function (){
 var self=this;
 function $HLImplementorsListWidget(){return smalltalk.HLImplementorsListWidget||(typeof HLImplementorsListWidget=="undefined"?nil:HLImplementorsListWidget)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@implementorsListWidget"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@implementorsListWidget"]) == nil || $receiver == null){
 self["@implementorsListWidget"]=_st($HLImplementorsListWidget())._on_(self._model());
 self["@implementorsListWidget"];
 $1=_st(self["@implementorsListWidget"])._next_(self._classReferencesListWidget());
 } else {
-$1=$2;
+$1=self["@implementorsListWidget"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"implementorsListWidget",{},smalltalk.HLReferences)})},
@@ -209,16 +207,15 @@ fn: function (){
 var self=this;
 function $HLReferencesModel(){return smalltalk.HLReferencesModel||(typeof HLReferencesModel=="undefined"?nil:HLReferencesModel)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$4,$1;
-$2=self["@model"];
-if(($receiver = $2) == nil || $receiver == null){
-$3=_st($HLReferencesModel())._new();
-_st($3)._environment_(_st(self._manager())._environment());
-$4=_st($3)._yourself();
-self["@model"]=$4;
+var $2,$3,$1;
+if(($receiver = self["@model"]) == nil || $receiver == null){
+$2=_st($HLReferencesModel())._new();
+_st($2)._environment_(_st(self._manager())._environment());
+$3=_st($2)._yourself();
+self["@model"]=$3;
 $1=self["@model"];
 } else {
-$1=$2;
+$1=self["@model"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"model",{},smalltalk.HLReferences)})},
@@ -253,14 +250,13 @@ fn: function (){
 var self=this;
 function $HLRegexpListWidget(){return smalltalk.HLRegexpListWidget||(typeof HLRegexpListWidget=="undefined"?nil:HLRegexpListWidget)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@regexpListWidget"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@regexpListWidget"]) == nil || $receiver == null){
 self["@regexpListWidget"]=_st($HLRegexpListWidget())._on_(self._model());
 self["@regexpListWidget"];
 $1=_st(self["@regexpListWidget"])._next_(self._sourceCodeWidget());
 } else {
-$1=$2;
+$1=self["@regexpListWidget"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"regexpListWidget",{},smalltalk.HLReferences)})},
@@ -298,26 +294,21 @@ function $HLContainer(){return smalltalk.HLContainer||(typeof HLContainer=="unde
 function $HLHorizontalSplitter(){return smalltalk.HLHorizontalSplitter||(typeof HLHorizontalSplitter=="undefined"?nil:HLHorizontalSplitter)}
 function $HLVerticalSplitter(){return smalltalk.HLVerticalSplitter||(typeof HLVerticalSplitter=="undefined"?nil:HLVerticalSplitter)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$4,$6,$8,$10,$11,$9,$12,$7,$5,$3,$1,$13;
-$2=html;
-$4=$HLContainer();
-$6=$HLHorizontalSplitter();
-$8=$HLVerticalSplitter();
-$10=$HLVerticalSplitter();
-$11=self._sendersListWidget();
+var $5,$4,$6,$3,$2,$1,$7;
+$5=self._sendersListWidget();
 $ctx1.sendIdx["sendersListWidget"]=1;
-$9=_st($10)._with_with_($11,self._implementorsListWidget());
+$4=_st($HLVerticalSplitter())._with_with_($5,self._implementorsListWidget());
 $ctx1.sendIdx["with:with:"]=3;
-$12=_st($HLVerticalSplitter())._with_with_(self._classReferencesListWidget(),self._regexpListWidget());
-$7=_st($8)._with_with_($9,$12);
+$6=_st($HLVerticalSplitter())._with_with_(self._classReferencesListWidget(),self._regexpListWidget());
+$3=_st($HLVerticalSplitter())._with_with_($4,$6);
 $ctx1.sendIdx["with:with:"]=2;
-$5=_st($6)._with_with_($7,self._sourceCodeWidget());
+$2=_st($HLHorizontalSplitter())._with_with_($3,self._sourceCodeWidget());
 $ctx1.sendIdx["with:with:"]=1;
-$3=_st($4)._with_($5);
-$1=_st($2)._with_($3);
+$1=_st($HLContainer())._with_($2);
+_st(html)._with_($1);
 $ctx1.sendIdx["with:"]=1;
-$13=self._sendersListWidget();
-_st($13)._focus();
+$7=self._sendersListWidget();
+_st($7)._focus();
 return self}, function($ctx1) {$ctx1.fill(self,"renderContentOn:",{html:html},smalltalk.HLReferences)})},
 args: ["html"],
 source: "renderContentOn: html\x0a\x09html with: (HLContainer with: (HLHorizontalSplitter \x0a    \x09with: (HLVerticalSplitter\x0a        \x09with: (HLVerticalSplitter\x0a            \x09with: self sendersListWidget\x0a                with: self implementorsListWidget)\x0a            with: (HLVerticalSplitter\x0a            \x09with: self classReferencesListWidget\x0a                with: self regexpListWidget)) \x0a        with: self sourceCodeWidget)).\x0a\x09\x0a\x09self sendersListWidget focus",
@@ -350,14 +341,13 @@ fn: function (){
 var self=this;
 function $HLSendersListWidget(){return smalltalk.HLSendersListWidget||(typeof HLSendersListWidget=="undefined"?nil:HLSendersListWidget)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@sendersListWidget"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@sendersListWidget"]) == nil || $receiver == null){
 self["@sendersListWidget"]=_st($HLSendersListWidget())._on_(self._model());
 self["@sendersListWidget"];
 $1=_st(self["@sendersListWidget"])._next_(self._implementorsListWidget());
 } else {
-$1=$2;
+$1=self["@sendersListWidget"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"sendersListWidget",{},smalltalk.HLReferences)})},
@@ -376,16 +366,15 @@ fn: function (){
 var self=this;
 function $HLBrowserCodeWidget(){return smalltalk.HLBrowserCodeWidget||(typeof HLBrowserCodeWidget=="undefined"?nil:HLBrowserCodeWidget)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$4,$1;
-$2=self["@sourceCodeWidget"];
-if(($receiver = $2) == nil || $receiver == null){
-$3=_st($HLBrowserCodeWidget())._new();
-_st($3)._browserModel_(self._model());
-$4=_st($3)._yourself();
-self["@sourceCodeWidget"]=$4;
+var $2,$3,$1;
+if(($receiver = self["@sourceCodeWidget"]) == nil || $receiver == null){
+$2=_st($HLBrowserCodeWidget())._new();
+_st($2)._browserModel_(self._model());
+$3=_st($2)._yourself();
+self["@sourceCodeWidget"]=$3;
 $1=self["@sourceCodeWidget"];
 } else {
-$1=$2;
+$1=self["@sourceCodeWidget"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"sourceCodeWidget",{},smalltalk.HLReferences)})},
@@ -549,30 +538,28 @@ category: 'reactions',
 fn: function (aMethod){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4,$6,$5;
+var $1,$2,$4,$3;
 var $early={};
 try {
-$1=aMethod;
-if(($receiver = $1) == nil || $receiver == null){
+if(($receiver = aMethod) == nil || $receiver == null){
 return self;
 } else {
-$1;
+aMethod;
 };
 _st(self._items())._detect_ifNone_((function(each){
 return smalltalk.withContext(function($ctx2) {
-$2=each;
-$3=_st(aMethod)._selector();
+$1=_st(aMethod)._selector();
 $ctx2.sendIdx["selector"]=1;
-return _st($2).__eq($3);
+return _st(each).__eq($1);
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)})}),(function(){
 return smalltalk.withContext(function($ctx2) {
 throw $early=[self];
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)})}));
-$4=_st(aMethod)._selector();
+$2=_st(aMethod)._selector();
 $ctx1.sendIdx["selector"]=2;
-self._selectedItem_($4);
-$6=_st(aMethod)._selector();
-$5=self._activateItem_($6);
+self._selectedItem_($2);
+$4=_st(aMethod)._selector();
+$3=self._activateItem_($4);
 return self}
 catch(e) {if(e===$early)return e[0]; throw e}
 }, function($ctx1) {$ctx1.fill(self,"onMethodSelected:",{aMethod:aMethod},smalltalk.HLReferencesListWidget)})},
@@ -606,12 +593,11 @@ category: 'rendering',
 fn: function (aMethod,html){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$3,$2;
-$1=html;
-$3=_st(_st(_st(aMethod)._methodClass())._name()).__comma(" >> #");
-$2=_st($3).__comma(_st(aMethod)._selector());
+var $2,$1;
+$2=_st(_st(_st(aMethod)._methodClass())._name()).__comma(" >> #");
+$1=_st($2).__comma(_st(aMethod)._selector());
 $ctx1.sendIdx[","]=1;
-_st($1)._with_($2);
+_st(html)._with_($1);
 return self}, function($ctx1) {$ctx1.fill(self,"renderItemLabel:on:",{aMethod:aMethod,html:html},smalltalk.HLReferencesListWidget)})},
 args: ["aMethod", "html"],
 source: "renderItemLabel: aMethod on: html\x0a\x09html with: aMethod methodClass name, ' >> #', aMethod selector",
@@ -856,21 +842,20 @@ var self=this;
 var references;
 function $OrderedCollection(){return smalltalk.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1,$3;
+var $1;
 references=_st($OrderedCollection())._new();
-$1=_st(self._classesAndMetaclasses())._do_((function(each){
+_st(self._classesAndMetaclasses())._do_((function(each){
 return smalltalk.withContext(function($ctx2) {
 return _st(_st(_st(each)._methodDictionary())._values())._do_((function(method){
 return smalltalk.withContext(function($ctx3) {
-$2=_st(_st(method)._referencedClasses())._includes_(aString);
-if(smalltalk.assert($2)){
+if(smalltalk.assert(_st(_st(method)._referencedClasses())._includes_(aString))){
 return _st(references)._add_(method);
 };
 }, function($ctx3) {$ctx3.fillBlock({method:method},$ctx2,2)})}));
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)})}));
 $ctx1.sendIdx["do:"]=1;
-$3=references;
-return $3;
+$1=references;
+return $1;
 }, function($ctx1) {$ctx1.fill(self,"classReferencesOf:",{aString:aString,references:references},smalltalk.HLReferencesModel)})},
 args: ["aString"],
 source: "classReferencesOf: aString\x0a\x09\x22Answer all methods referencing the class named aString\x22\x0a\x09\x0a\x09| references |\x0a\x09\x0a\x09references := OrderedCollection new.\x0a\x09\x0a\x09self classesAndMetaclasses do: [ :each |\x0a\x09\x09each methodDictionary values do: [ :method |\x0a\x09\x09\x09(method referencedClasses includes: aString) ifTrue: [\x0a\x09\x09\x09\x09references add: method ] ] ].\x0a\x09\x09\x09\x09\x0a\x09^ references",
@@ -904,15 +889,14 @@ category: 'cache',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
-$1=self["@classesAndMetaclassesCache"];
-if(($receiver = $1) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@classesAndMetaclassesCache"]) == nil || $receiver == null){
 self._updateClassesAndMetaclassesCache();
 } else {
-$1;
+self["@classesAndMetaclassesCache"];
 };
-$2=self["@classesAndMetaclassesCache"];
-return $2;
+$1=self["@classesAndMetaclassesCache"];
+return $1;
 }, function($ctx1) {$ctx1.fill(self,"classesAndMetaclassesCache",{},smalltalk.HLReferencesModel)})},
 args: [],
 source: "classesAndMetaclassesCache\x0a\x09classesAndMetaclassesCache ifNil: [ self updateClassesAndMetaclassesCache ].\x0a\x09\x0a\x09^ classesAndMetaclassesCache",
@@ -987,15 +971,14 @@ category: 'cache',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
-$1=self["@methodsCache"];
-if(($receiver = $1) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@methodsCache"]) == nil || $receiver == null){
 self._updateMethodsCache();
 } else {
-$1;
+self["@methodsCache"];
 };
-$2=self["@methodsCache"];
-return $2;
+$1=self["@methodsCache"];
+return $1;
 }, function($ctx1) {$ctx1.fill(self,"methodsCache",{},smalltalk.HLReferencesModel)})},
 args: [],
 source: "methodsCache\x0a\x09methodsCache ifNil: [ self updateMethodsCache ].\x0a\x09\x0a\x09^ methodsCache",
@@ -1100,15 +1083,14 @@ fn: function (){
 var self=this;
 function $OrderedCollection(){return smalltalk.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
+var $1;
 self["@classesAndMetaclassesCache"]=_st(_st(self._environment())._classes())._inject_into_(_st($OrderedCollection())._new(),(function(acc,each){
 return smalltalk.withContext(function($ctx2) {
-$1=acc;
-_st($1)._add_(each);
+_st(acc)._add_(each);
 $ctx2.sendIdx["add:"]=1;
-_st($1)._add_(_st(each)._class());
-$2=_st($1)._yourself();
-return $2;
+_st(acc)._add_(_st(each)._class());
+$1=_st(acc)._yourself();
+return $1;
 }, function($ctx2) {$ctx2.fillBlock({acc:acc,each:each},$ctx1,1)})}));
 return self}, function($ctx1) {$ctx1.fill(self,"updateClassesAndMetaclassesCache",{},smalltalk.HLReferencesModel)})},
 args: [],

+ 5 - 8
js/Helios-Transcript.js

@@ -84,10 +84,8 @@ category: 'actions',
 fn: function (aString){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=self["@textarea"];
-if(($receiver = $1) == nil || $receiver == null){
-$1;
+if(($receiver = self["@textarea"]) == nil || $receiver == null){
+self["@textarea"];
 } else {
 _st(_st(self["@textarea"])._asJQuery())._append_(_st(aString)._asString());
 };
@@ -202,13 +200,12 @@ fn: function (){
 var self=this;
 function $OrderedCollection(){return smalltalk.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@transcripts"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@transcripts"]) == nil || $receiver == null){
 self["@transcripts"]=_st($OrderedCollection())._new();
 $1=self["@transcripts"];
 } else {
-$1=$2;
+$1=self["@transcripts"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"transcripts",{},smalltalk.HLTranscriptHandler.klass)})},

+ 5 - 5
js/Helios-Workspace-Tests.js

@@ -12,13 +12,13 @@ var self=this;
 function $HLCodeWidget(){return smalltalk.HLCodeWidget||(typeof HLCodeWidget=="undefined"?nil:HLCodeWidget)}
 function $HashedCollection(){return smalltalk.HashedCollection||(typeof HashedCollection=="undefined"?nil:HashedCollection)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1,$4,$3;
-$2=_st(_st($HLCodeWidget())._pcKeyMap())._isKindOf_($HashedCollection());
+var $1,$2;
+$1=_st(_st($HLCodeWidget())._pcKeyMap())._isKindOf_($HashedCollection());
 $ctx1.sendIdx["isKindOf:"]=1;
-$1=self._assert_($2);
+self._assert_($1);
 $ctx1.sendIdx["assert:"]=1;
-$4=_st(_st($HLCodeWidget())._macKeyMap())._isKindOf_($HashedCollection());
-$3=self._assert_($4);
+$2=_st(_st($HLCodeWidget())._macKeyMap())._isKindOf_($HashedCollection());
+self._assert_($2);
 return self}, function($ctx1) {$ctx1.fill(self,"testKeyMap",{},smalltalk.HLCodeWidgetTest)})},
 args: [],
 source: "testKeyMap\x0a\x09\x22Key maps are a collection of associations.\x22\x0a\x09self assert: (HLCodeWidget pcKeyMap isKindOf: HashedCollection).\x0a\x09self assert: (HLCodeWidget macKeyMap isKindOf: HashedCollection)",

+ 176 - 210
js/Helios-Workspace.js

@@ -11,13 +11,12 @@ fn: function (){
 var self=this;
 function $Announcer(){return smalltalk.Announcer||(typeof Announcer=="undefined"?nil:Announcer)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@announcer"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@announcer"]) == nil || $receiver == null){
 self["@announcer"]=_st($Announcer())._new();
 $1=self["@announcer"];
 } else {
-$1=$2;
+$1=self["@announcer"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"announcer",{},smalltalk.HLCodeModel)})},
@@ -73,12 +72,11 @@ fn: function (){
 var self=this;
 function $HLManager(){return smalltalk.HLManager||(typeof HLManager=="undefined"?nil:HLManager)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@environment"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@environment"]) == nil || $receiver == null){
 $1=_st(_st($HLManager())._current())._environment();
 } else {
-$1=$2;
+$1=self["@environment"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"environment",{},smalltalk.HLCodeModel)})},
@@ -128,13 +126,12 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@receiver"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@receiver"]) == nil || $receiver == null){
 self["@receiver"]=self._defaultReceiver();
 $1=self["@receiver"];
 } else {
-$1=$2;
+$1=self["@receiver"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"receiver",{},smalltalk.HLCodeModel)})},
@@ -284,11 +281,9 @@ category: 'accessing',
 fn: function (aString){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
 _st(self["@editor"])._setValue_(aString);
-$1=self["@state"];
-if(($receiver = $1) == nil || $receiver == null){
-$1;
+if(($receiver = self["@state"]) == nil || $receiver == null){
+self["@state"];
 } else {
 self._updateState();
 };
@@ -325,9 +320,8 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=_st(self["@editor"])._somethingSelected();
-if(smalltalk.assert($2)){
+var $1;
+if(smalltalk.assert(_st(self["@editor"])._somethingSelected())){
 $1=self._selection();
 } else {
 $1=self._currentLine();
@@ -351,22 +345,22 @@ var result;
 function $HLDoItRequested(){return smalltalk.HLDoItRequested||(typeof HLDoItRequested=="undefined"?nil:HLDoItRequested)}
 function $HLDoItExecuted(){return smalltalk.HLDoItExecuted||(typeof HLDoItExecuted=="undefined"?nil:HLDoItExecuted)}
 return smalltalk.withContext(function($ctx1) { 
-var $3,$2,$4,$1,$7,$6,$8,$5,$9;
-$3=self._model();
+var $2,$1,$3,$5,$4,$6,$7;
+$2=self._model();
 $ctx1.sendIdx["model"]=1;
-$2=_st($3)._announcer();
+$1=_st($2)._announcer();
 $ctx1.sendIdx["announcer"]=1;
-$4=_st($HLDoItRequested())._on_(self["@model"]);
+$3=_st($HLDoItRequested())._on_(self["@model"]);
 $ctx1.sendIdx["on:"]=1;
-$1=_st($2)._announce_($4);
+_st($1)._announce_($3);
 $ctx1.sendIdx["announce:"]=1;
 result=_st(self["@model"])._doIt_(self._currentLineOrSelection());
-$7=self._model();
-$6=_st($7)._announcer();
-$8=_st($HLDoItExecuted())._on_(self["@model"]);
-$5=_st($6)._announce_($8);
-$9=result;
-return $9;
+$5=self._model();
+$4=_st($5)._announcer();
+$6=_st($HLDoItExecuted())._on_(self["@model"]);
+_st($4)._announce_($6);
+$7=result;
+return $7;
 }, function($ctx1) {$ctx1.fill(self,"doIt",{result:result},smalltalk.HLCodeWidget)})},
 args: [],
 source: "doIt\x0a\x09| result |\x0a\x0a\x09self model announcer announce: (HLDoItRequested on: model).\x0a\x09result := model doIt: self currentLineOrSelection.\x0a\x09self model announcer announce: (HLDoItExecuted on: model).\x0a\x0a\x09^ result",
@@ -513,18 +507,16 @@ fn: function (anEditor,aToken){
 var self=this;
 function $Smalltalk(){return smalltalk.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$4,$5,$1;
+var $2,$3,$1;
 $1=_st(_st(_st(_st(_st(_st($Smalltalk())._current())._at_("allSelectors"))._value())._asArray())._select_((function(each){
 return smalltalk.withContext(function($ctx2) {
-$2=each;
-$3=_st(aToken)._string();
+$2=_st(aToken)._string();
 $ctx2.sendIdx["string"]=1;
-return _st($2)._includesSubString_($3);
+return _st(each)._includesSubString_($2);
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)})})))._reject_((function(each){
 return smalltalk.withContext(function($ctx2) {
-$4=each;
-$5=_st(aToken)._string();
-return _st($4).__eq($5);
+$3=_st(aToken)._string();
+return _st(each).__eq($3);
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)})}));
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"messageHintFor:token:",{anEditor:anEditor,aToken:aToken},smalltalk.HLCodeWidget)})},
@@ -543,13 +535,12 @@ fn: function (){
 var self=this;
 function $HLCodeModel(){return smalltalk.HLCodeModel||(typeof HLCodeModel=="undefined"?nil:HLCodeModel)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@model"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@model"]) == nil || $receiver == null){
 self["@model"]=_st($HLCodeModel())._new();
 $1=self["@model"];
 } else {
-$1=$2;
+$1=self["@model"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"model",{},smalltalk.HLCodeWidget)})},
@@ -664,59 +655,59 @@ var self=this;
 var start,stop,currentLine;
 function $HashedCollection(){return smalltalk.HashedCollection||(typeof HashedCollection=="undefined"?nil:HashedCollection)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$4,$6,$5,$3,$7,$8,$9,$10,$12,$13,$11,$14,$16,$19,$20,$18,$17,$15,$21,$25,$24,$23,$22,$26,$27,$28;
+var $1,$2,$4,$3,$5,$6,$7,$8,$10,$11,$9,$12,$15,$16,$14,$13,$17,$21,$20,$19,$18,$22,$23;
 $1=_st(self["@editor"])._getCursor_(false);
 $ctx1.sendIdx["getCursor:"]=1;
 currentLine=_st($1)._line();
 start=_st($HashedCollection())._new();
 $ctx1.sendIdx["new"]=1;
-$2=_st(start)._at_put_("line",currentLine);
+_st(start)._at_put_("line",currentLine);
 $ctx1.sendIdx["at:put:"]=1;
-$4=start;
-$6=_st(self["@editor"])._getCursor_(false);
+$2=start;
+$4=_st(self["@editor"])._getCursor_(false);
 $ctx1.sendIdx["getCursor:"]=2;
-$5=_st($6)._ch();
-$3=_st($4)._at_put_("ch",$5);
+$3=_st($4)._ch();
+_st($2)._at_put_("ch",$3);
 $ctx1.sendIdx["at:put:"]=2;
-$7=_st(self["@editor"])._getSelection();
+$5=_st(self["@editor"])._getSelection();
 $ctx1.sendIdx["getSelection"]=1;
-_st($7)._ifEmpty_((function(){
+_st($5)._ifEmpty_((function(){
 return smalltalk.withContext(function($ctx2) {
-$8=start;
-$9=_st(_st(self["@editor"])._getLine_(currentLine))._size();
+$6=start;
+$7=_st(_st(self["@editor"])._getLine_(currentLine))._size();
 $ctx2.sendIdx["size"]=1;
-_st($8)._at_put_("ch",$9);
+_st($6)._at_put_("ch",$7);
 $ctx2.sendIdx["at:put:"]=3;
-$10=self["@editor"];
-$12="line".__minus_gt(currentLine);
+$8=self["@editor"];
+$10="line".__minus_gt(currentLine);
 $ctx2.sendIdx["->"]=1;
-$13="ch".__minus_gt((0));
-$11=smalltalk.HashedCollection._from_([$12,$13]);
-return _st($10)._setSelection_end_($11,start);
+$11="ch".__minus_gt((0));
+$9=smalltalk.HashedCollection._from_([$10,$11]);
+return _st($8)._setSelection_end_($9,start);
 $ctx2.sendIdx["setSelection:end:"]=1;
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
 stop=_st($HashedCollection())._new();
-$14=_st(stop)._at_put_("line",currentLine);
+_st(stop)._at_put_("line",currentLine);
 $ctx1.sendIdx["at:put:"]=4;
-$16=stop;
-$19=_st(start)._at_("ch");
-$20=_st(aString)._size();
-$18=_st($19).__plus($20);
-$17=_st($18).__plus((2));
+$12=stop;
+$15=_st(start)._at_("ch");
+$16=_st(aString)._size();
+$14=_st($15).__plus($16);
+$13=_st($14).__plus((2));
 $ctx1.sendIdx["+"]=1;
-$15=_st($16)._at_put_("ch",$17);
-$21=self["@editor"];
-$25=_st(self["@editor"])._getSelection();
-$24=_st($25).__comma(" ");
-$23=_st($24).__comma(aString);
+_st($12)._at_put_("ch",$13);
+$17=self["@editor"];
+$21=_st(self["@editor"])._getSelection();
+$20=_st($21).__comma(" ");
+$19=_st($20).__comma(aString);
 $ctx1.sendIdx[","]=2;
-$22=_st($23).__comma(" ");
+$18=_st($19).__comma(" ");
 $ctx1.sendIdx[","]=1;
-_st($21)._replaceSelection_($22);
-$26=self["@editor"];
-$27=_st(self["@editor"])._getCursor_(true);
-_st($26)._setCursor_($27);
-$28=_st(self["@editor"])._setSelection_end_(stop,start);
+_st($17)._replaceSelection_($18);
+$22=self["@editor"];
+$23=_st(self["@editor"])._getCursor_(true);
+_st($22)._setCursor_($23);
+_st(self["@editor"])._setSelection_end_(stop,start);
 return self}, function($ctx1) {$ctx1.fill(self,"print:",{aString:aString,start:start,stop:stop,currentLine:currentLine},smalltalk.HLCodeWidget)})},
 args: ["aString"],
 source: "print: aString\x0a\x09| start stop currentLine |\x0a    currentLine := (editor getCursor: false) line.\x0a\x09start := HashedCollection new.\x0a\x09start at: 'line' put: currentLine.\x0a\x09start at: 'ch' put: (editor getCursor: false) ch.\x0a    (editor getSelection) ifEmpty: [\x0a    \x09\x22select current line if selection is empty\x22\x0a    \x09start at: 'ch' put: (editor getLine: currentLine) size.\x0a        editor setSelection: #{'line' -> currentLine. 'ch' -> 0} end: start.\x0a    ].\x0a\x09stop := HashedCollection new.\x0a\x09stop at: 'line' put: currentLine.\x0a\x09stop at: 'ch' put: ((start at: 'ch') + aString size + 2).\x0a\x0a\x09editor replaceSelection: (editor getSelection, ' ', aString, ' ').\x0a\x09editor setCursor: (editor getCursor: true).\x0a\x09editor setSelection: stop end: start",
@@ -988,15 +979,14 @@ category: 'updating',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3;
-$1=self._hasModification();
-if(smalltalk.assert($1)){
-$2=_st(self["@state"])._asJQuery();
+var $1,$2;
+if(smalltalk.assert(self._hasModification())){
+$1=_st(self["@state"])._asJQuery();
 $ctx1.sendIdx["asJQuery"]=1;
-_st($2)._addClass_("modified");
+_st($1)._addClass_("modified");
 } else {
-$3=_st(self["@state"])._asJQuery();
-_st($3)._removeClass_("modified");
+$2=_st(self["@state"])._asJQuery();
+_st($2)._removeClass_("modified");
 };
 return self}, function($ctx1) {$ctx1.fill(self,"updateState",{},smalltalk.HLCodeWidget)})},
 args: [],
@@ -1015,7 +1005,7 @@ var self=this;
 var variables,classNames,pseudoVariables;
 function $Smalltalk(){return smalltalk.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
 return smalltalk.withContext(function($ctx1) { 
-var $3,$2,$1,$4,$6,$5,$7,$13,$12,$11,$10,$14,$15,$9,$16,$17,$8;
+var $3,$2,$1,$4,$6,$5,$7,$13,$12,$11,$10,$14,$9,$15,$8;
 $3=_st(_st(_st(anEditor)._display())._wrapper())._asJQuery();
 $ctx1.sendIdx["asJQuery"]=1;
 $2=_st($3)._find_("span.cm-variable");
@@ -1042,16 +1032,14 @@ $11=_st($12)._asSet();
 $10=_st($11)._asArray();
 $9=_st($10)._select_((function(each){
 return smalltalk.withContext(function($ctx2) {
-$14=each;
-$15=_st(aToken)._string();
+$14=_st(aToken)._string();
 $ctx2.sendIdx["string"]=1;
-return _st($14)._includesSubString_($15);
+return _st(each)._includesSubString_($14);
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)})}));
 $8=_st($9)._reject_((function(each){
 return smalltalk.withContext(function($ctx2) {
-$16=each;
-$17=_st(aToken)._string();
-return _st($16).__eq($17);
+$15=_st(aToken)._string();
+return _st(each).__eq($15);
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,4)})}));
 return $8;
 }, function($ctx1) {$ctx1.fill(self,"variableHintFor:token:",{anEditor:anEditor,aToken:aToken,variables:variables,classNames:classNames,pseudoVariables:pseudoVariables},smalltalk.HLCodeWidget)})},
@@ -1073,7 +1061,7 @@ var cursor,token,completions;
 function $CodeMirror(){return smalltalk.CodeMirror||(typeof CodeMirror=="undefined"?nil:CodeMirror)}
 function $HLCodeWidget(){return smalltalk.HLCodeWidget||(typeof HLCodeWidget=="undefined"?nil:HLCodeWidget)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$4,$3,$2,$5,$7,$10,$11,$9,$8,$14,$15,$13,$12,$6;
+var $1,$4,$3,$2,$6,$9,$10,$8,$7,$13,$14,$12,$11,$5;
 cursor=_st(anEditor)._getCursor();
 token=_st(anEditor)._getTokenAt_(cursor);
 $1=token;
@@ -1083,28 +1071,27 @@ $3=_st($4)._value_value_(_st(anEditor)._getMode(),_st(token)._at_("state"));
 $ctx1.sendIdx["value:value:"]=1;
 $2=_st($3)._state();
 _st($1)._at_put_("state",$2);
-$5=_st(_st(token)._type()).__eq("variable");
-if(smalltalk.assert($5)){
+if(smalltalk.assert(_st(_st(token)._type()).__eq("variable"))){
 completions=_st($HLCodeWidget())._variableHintFor_token_(anEditor,token);
 } else {
 completions=_st($HLCodeWidget())._messageHintFor_token_(anEditor,token);
 };
-$7="list".__minus_gt(completions);
+$6="list".__minus_gt(completions);
 $ctx1.sendIdx["->"]=1;
-$10=_st($CodeMirror())._basicAt_("Pos");
+$9=_st($CodeMirror())._basicAt_("Pos");
 $ctx1.sendIdx["basicAt:"]=2;
-$11=_st(cursor)._line();
+$10=_st(cursor)._line();
 $ctx1.sendIdx["line"]=1;
-$9=_st($10)._value_value_($11,_st(token)._end());
+$8=_st($9)._value_value_($10,_st(token)._end());
 $ctx1.sendIdx["value:value:"]=2;
-$8="from".__minus_gt($9);
+$7="from".__minus_gt($8);
 $ctx1.sendIdx["->"]=2;
-$14=_st($CodeMirror())._basicAt_("Pos");
-$15=_st(cursor)._line();
-$13=_st($14)._value_value_($15,_st(token)._start());
-$12="to".__minus_gt($13);
-$6=smalltalk.HashedCollection._from_([$7,$8,$12]);
-return $6;
+$13=_st($CodeMirror())._basicAt_("Pos");
+$14=_st(cursor)._line();
+$12=_st($13)._value_value_($14,_st(token)._start());
+$11="to".__minus_gt($12);
+$5=smalltalk.HashedCollection._from_([$6,$7,$11]);
+return $5;
 }, function($ctx1) {$ctx1.fill(self,"hintFor:options:",{anEditor:anEditor,options:options,cursor:cursor,token:token,completions:completions},smalltalk.HLCodeWidget.klass)})},
 args: ["anEditor", "options"],
 source: "hintFor: anEditor options: options\x0a\x09| cursor token completions |\x0a\x09\x0a\x09cursor := anEditor getCursor.\x0a\x09token := anEditor getTokenAt: cursor.\x0a\x09token at: 'state' put: ((CodeMirror basicAt: 'innerMode')\x0a\x09\x09value: anEditor getMode value: (token at: 'state')) state.\x0a\x09\x0a\x09completions := token type = 'variable' \x0a\x09\x09ifTrue: [ HLCodeWidget variableHintFor: anEditor token: token ]\x0a\x09\x09ifFalse: [ HLCodeWidget messageHintFor: anEditor token: token ].\x0a\x09\x0a\x09^ #{\x0a\x09\x09'list' -> completions.\x0a\x09\x09'from' -> ((CodeMirror basicAt: 'Pos') value: cursor line value: token end).\x0a\x09\x09'to' -> ((CodeMirror basicAt: 'Pos') value: cursor line value: token start)\x0a\x09}",
@@ -1141,9 +1128,8 @@ fn: function (){
 var self=this;
 function $HLManager(){return smalltalk.HLManager||(typeof HLManager=="undefined"?nil:HLManager)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=_st(_st(_st($HLManager())._current())._keyBinder())._systemIsMac();
-if(smalltalk.assert($2)){
+var $1;
+if(smalltalk.assert(_st(_st(_st($HLManager())._current())._keyBinder())._systemIsMac())){
 $1=self._macKeyMap();
 } else {
 $1=self._pcKeyMap();
@@ -1473,12 +1459,11 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@methodContents"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@methodContents"]) == nil || $receiver == null){
 $1="";
 } else {
-$1=$2;
+$1=self["@methodContents"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"methodContents",{},smalltalk.HLNavigationCodeWidget)})},
@@ -1696,10 +1681,8 @@ var self=this;
 var block;
 function $HLChangeForbidden(){return smalltalk.HLChangeForbidden||(typeof HLChangeForbidden=="undefined"?nil:HLChangeForbidden)}
 return smalltalk.withContext(function($ctx1) { 
-var $1;
 block=_st(anAnnouncement)._actionBlock();
-$1=self._hasModification();
-if(smalltalk.assert($1)){
+if(smalltalk.assert(self._hasModification())){
 self._confirm_ifTrue_("Changes have not been saved. Do you want to discard these changes?",(function(){
 return smalltalk.withContext(function($ctx2) {
 self._methodContents_(self._contents());
@@ -1723,17 +1706,16 @@ fn: function (anAnnouncement){
 var self=this;
 var class_;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3;
+var $1;
 class_=_st(anAnnouncement)._item();
-$1=class_;
-if(($receiver = $1) == nil || $receiver == null){
-$2=self._contents_("");
+if(($receiver = class_) == nil || $receiver == null){
+$1=self._contents_("");
 $ctx1.sendIdx["contents:"]=1;
-return $2;
+return $1;
 } else {
-$1;
+class_;
 };
-$3=self._contents_(_st(class_)._definition());
+self._contents_(_st(class_)._definition());
 return self}, function($ctx1) {$ctx1.fill(self,"onClassSelected:",{anAnnouncement:anAnnouncement,class_:class_},smalltalk.HLBrowserCodeWidget)})},
 args: ["anAnnouncement"],
 source: "onClassSelected: anAnnouncement\x0a\x09| class |\x0a\x09\x0a\x09class:= anAnnouncement item.\x0a\x09\x0a\x09class ifNil: [ ^ self contents: '' ].\x0a    self contents: class definition",
@@ -1782,32 +1764,32 @@ fn: function (anAnnouncement){
 var self=this;
 var method;
 return smalltalk.withContext(function($ctx1) { 
-var $4,$3,$2,$1,$6,$5,$11,$10,$9,$12,$8,$7;
+var $3,$2,$1,$5,$4,$9,$8,$7,$10,$6;
 method=_st(anAnnouncement)._method();
-$4=self._browserModel();
+$3=self._browserModel();
 $ctx1.sendIdx["browserModel"]=1;
-$3=_st($4)._selectedClass();
-$2=_st($3).__eq(_st(method)._methodClass());
+$2=_st($3)._selectedClass();
+$1=_st($2).__eq(_st(method)._methodClass());
 $ctx1.sendIdx["="]=1;
-if(! smalltalk.assert($2)){
+if(! smalltalk.assert($1)){
 return self;
 };
-$6=self._browserModel();
+$5=self._browserModel();
 $ctx1.sendIdx["browserModel"]=2;
-$5=_st($6)._selectedMethod();
+$4=_st($5)._selectedMethod();
 $ctx1.sendIdx["selectedMethod"]=1;
-if(($receiver = $5) == nil || $receiver == null){
+if(($receiver = $4) == nil || $receiver == null){
 return self;
 } else {
-$5;
+$4;
 };
-$11=self._browserModel();
-$10=_st($11)._selectedMethod();
-$9=_st($10)._selector();
+$9=self._browserModel();
+$8=_st($9)._selectedMethod();
+$7=_st($8)._selector();
 $ctx1.sendIdx["selector"]=1;
-$12=_st(method)._selector();
-$8=_st($9).__eq($12);
-if(! smalltalk.assert($8)){
+$10=_st(method)._selector();
+$6=_st($7).__eq($10);
+if(! smalltalk.assert($6)){
 return self;
 };
 self._refresh();
@@ -1827,17 +1809,16 @@ fn: function (anAnnouncement){
 var self=this;
 var method;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3;
+var $1;
 method=_st(anAnnouncement)._item();
-$1=method;
-if(($receiver = $1) == nil || $receiver == null){
-$2=self._contents_("");
+if(($receiver = method) == nil || $receiver == null){
+$1=self._contents_("");
 $ctx1.sendIdx["contents:"]=1;
-return $2;
+return $1;
 } else {
-$1;
+method;
 };
-$3=self._contents_(_st(method)._source());
+self._contents_(_st(method)._source());
 return self}, function($ctx1) {$ctx1.fill(self,"onMethodSelected:",{anAnnouncement:anAnnouncement,method:method},smalltalk.HLBrowserCodeWidget)})},
 args: ["anAnnouncement"],
 source: "onMethodSelected: anAnnouncement\x0a\x09| method |\x0a\x09\x0a\x09method := anAnnouncement item.\x0a\x09\x0a\x09method ifNil: [ ^ self contents: '' ].\x0a    self contents: method source",
@@ -1854,17 +1835,16 @@ fn: function (anAnnouncement){
 var self=this;
 var package_;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3;
+var $1;
 package_=_st(anAnnouncement)._item();
-$1=package_;
-if(($receiver = $1) == nil || $receiver == null){
-$2=self._contents_("");
+if(($receiver = package_) == nil || $receiver == null){
+$1=self._contents_("");
 $ctx1.sendIdx["contents:"]=1;
-return $2;
+return $1;
 } else {
-$1;
+package_;
 };
-$3=self._contents_(_st(package_)._definition());
+self._contents_(_st(package_)._definition());
 return self}, function($ctx1) {$ctx1.fill(self,"onPackageSelected:",{anAnnouncement:anAnnouncement,package_:package_},smalltalk.HLBrowserCodeWidget)})},
 args: ["anAnnouncement"],
 source: "onPackageSelected: anAnnouncement\x0a\x09| package |\x0a\x09\x0a\x09package := anAnnouncement item.\x0a\x09\x0a\x09package ifNil: [ ^ self contents: '' ].\x0a    self contents: package definition",
@@ -1882,38 +1862,32 @@ var self=this;
 var lineIndex,newContents;
 function $String(){return smalltalk.String||(typeof String=="undefined"?nil:String)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$5,$6,$4,$8,$10,$12,$11,$9,$7;
+var $2,$1,$6,$5,$4,$3;
 lineIndex=(1);
 self._contents_(_st($String())._streamContents_((function(stream){
 return smalltalk.withContext(function($ctx2) {
 return _st(self._contents())._linesDo_((function(each){
 return smalltalk.withContext(function($ctx3) {
-$1=_st(lineIndex).__eq(_st(anAnnouncement)._line());
-if(smalltalk.assert($1)){
-$2=stream;
-$3=$2;
-$5=each;
-$6=_st(anAnnouncement)._column();
+if(smalltalk.assert(_st(lineIndex).__eq(_st(anAnnouncement)._line()))){
+$2=_st(anAnnouncement)._column();
 $ctx3.sendIdx["column"]=1;
-$4=_st($5)._copyFrom_to_((1),$6);
+$1=_st(each)._copyFrom_to_((1),$2);
 $ctx3.sendIdx["copyFrom:to:"]=1;
-_st($3)._nextPutAll_($4);
+_st(stream)._nextPutAll_($1);
 $ctx3.sendIdx["nextPutAll:"]=1;
-_st($2)._nextPutAll_("<- ");
+_st(stream)._nextPutAll_("<- ");
 $ctx3.sendIdx["nextPutAll:"]=2;
-_st($2)._nextPutAll_(_st(anAnnouncement)._message());
+_st(stream)._nextPutAll_(_st(anAnnouncement)._message());
 $ctx3.sendIdx["nextPutAll:"]=3;
-_st($2)._nextPutAll_(" ");
+_st(stream)._nextPutAll_(" ");
 $ctx3.sendIdx["nextPutAll:"]=4;
-$8=$2;
-$10=each;
-$12=_st(anAnnouncement)._column();
-$11=_st($12).__plus((1));
+$6=_st(anAnnouncement)._column();
+$5=_st($6).__plus((1));
 $ctx3.sendIdx["+"]=1;
-$9=_st($10)._copyFrom_to_($11,_st(each)._size());
-$7=_st($8)._nextPutAll_($9);
+$4=_st(each)._copyFrom_to_($5,_st(each)._size());
+$3=_st(stream)._nextPutAll_($4);
 $ctx3.sendIdx["nextPutAll:"]=5;
-$7;
+$3;
 } else {
 _st(stream)._nextPutAll_(each);
 $ctx3.sendIdx["nextPutAll:"]=6;
@@ -1938,7 +1912,7 @@ category: 'reactions',
 fn: function (anAnnouncement){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1,$3,$7,$6,$5,$4;
+var $2,$1,$3,$6,$5,$4;
 $2=self._browserModel();
 $ctx1.sendIdx["browserModel"]=1;
 $1=_st($2)._selectedClass();
@@ -1950,10 +1924,10 @@ return $3;
 } else {
 $1;
 };
-$7=self._browserModel();
-$6=_st($7)._selectedClass();
-$5=_st($6)._definition();
-$4=self._contents_($5);
+$6=self._browserModel();
+$5=_st($6)._selectedClass();
+$4=_st($5)._definition();
+self._contents_($4);
 return self}, function($ctx1) {$ctx1.fill(self,"onProtocolSelected:",{anAnnouncement:anAnnouncement},smalltalk.HLBrowserCodeWidget)})},
 args: ["anAnnouncement"],
 source: "onProtocolSelected: anAnnouncement\x0a\x09self browserModel selectedClass ifNil: [ ^ self contents: '' ].\x0a    self contents: self browserModel selectedClass definition",
@@ -1985,7 +1959,7 @@ category: 'reactions',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1,$3,$7,$6,$5,$4;
+var $2,$1,$3,$6,$5,$4;
 $2=self._browserModel();
 $ctx1.sendIdx["browserModel"]=1;
 $1=_st($2)._selectedClass();
@@ -1997,10 +1971,10 @@ return $3;
 } else {
 $1;
 };
-$7=self._browserModel();
-$6=_st($7)._selectedClass();
-$5=_st($6)._definition();
-$4=self._contents_($5);
+$6=self._browserModel();
+$5=_st($6)._selectedClass();
+$4=_st($5)._definition();
+self._contents_($4);
 return self}, function($ctx1) {$ctx1.fill(self,"onShowInstanceToggled",{},smalltalk.HLBrowserCodeWidget)})},
 args: [],
 source: "onShowInstanceToggled\x0a\x09self browserModel selectedClass ifNil: [ ^ self contents: '' ].\x0a    \x0a    self contents: self browserModel selectedClass definition",
@@ -2051,17 +2025,16 @@ var self=this;
 var error;
 function $String(){return smalltalk.String||(typeof String=="undefined"?nil:String)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
+var $1;
 error=_st(anAnnouncement)._error();
 self._confirm_ifTrue_(_st($String())._streamContents_((function(stream){
 return smalltalk.withContext(function($ctx2) {
-$1=stream;
-_st($1)._nextPutAll_(_st(error)._messageText());
+_st(stream)._nextPutAll_(_st(error)._messageText());
 $ctx2.sendIdx["nextPutAll:"]=1;
-_st($1)._nextPutAll_(_st($String())._cr());
+_st(stream)._nextPutAll_(_st($String())._cr());
 $ctx2.sendIdx["nextPutAll:"]=2;
-$2=_st($1)._nextPutAll_("Would you like to define an instance variable?");
-return $2;
+$1=_st(stream)._nextPutAll_("Would you like to define an instance variable?");
+return $1;
 }, function($ctx2) {$ctx2.fillBlock({stream:stream},$ctx1,1)})})),(function(){
 return smalltalk.withContext(function($ctx2) {
 return _st(self._browserModel())._addInstVarNamed_(_st(error)._variableName());
@@ -2081,13 +2054,10 @@ category: 'actions',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1,$4,$3;
-$2=self._hasModification();
-if(smalltalk.assert($2)){
+if(smalltalk.assert(self._hasModification())){
 return self;
 };
-$4=self._hasFocus();
-if(smalltalk.assert($4)){
+if(smalltalk.assert(self._hasFocus())){
 return self;
 };
 self._contents_(_st(_st(self._browserModel())._selectedMethod())._source());
@@ -2146,16 +2116,16 @@ category: 'actions',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $3,$2,$1,$6,$5,$4;
+var $2,$1,$4,$3;
 smalltalk.HLBrowserCodeWidget.superclass.fn.prototype._unregsiter.apply(_st(self), []);
-$3=self._browserModel();
+$2=self._browserModel();
 $ctx1.sendIdx["browserModel"]=1;
-$2=_st($3)._announcer();
-$1=_st($2)._unsubscribe_(self);
+$1=_st($2)._announcer();
+_st($1)._unsubscribe_(self);
 $ctx1.sendIdx["unsubscribe:"]=1;
-$6=self._browserModel();
-$5=_st($6)._systemAnnouncer();
-$4=_st($5)._unsubscribe_(self);
+$4=self._browserModel();
+$3=_st($4)._systemAnnouncer();
+_st($3)._unsubscribe_(self);
 return self}, function($ctx1) {$ctx1.fill(self,"unregister",{},smalltalk.HLBrowserCodeWidget)})},
 args: [],
 source: "unregister\x0a\x09super unregsiter.\x0a\x09\x0a\x09self browserModel announcer unsubscribe: self.\x0a\x09self browserModel systemAnnouncer unsubscribe: self",
@@ -2228,13 +2198,12 @@ fn: function (){
 var self=this;
 function $HLCodeWidget(){return smalltalk.HLCodeWidget||(typeof HLCodeWidget=="undefined"?nil:HLCodeWidget)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@codeWidget"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@codeWidget"]) == nil || $receiver == null){
 self["@codeWidget"]=_st($HLCodeWidget())._new();
 $1=self["@codeWidget"];
 } else {
-$1=$2;
+$1=self["@codeWidget"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"codeWidget",{},smalltalk.HLWorkspace)})},
@@ -2272,13 +2241,12 @@ var self=this;
 function $HLContainer(){return smalltalk.HLContainer||(typeof HLContainer=="undefined"?nil:HLContainer)}
 function $HLHorizontalSplitter(){return smalltalk.HLHorizontalSplitter||(typeof HLHorizontalSplitter=="undefined"?nil:HLHorizontalSplitter)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$1;
-$2=html;
-$3=_st($HLContainer())._with_(_st($HLHorizontalSplitter())._with_with_(self._codeWidget(),(function(canvas){
+var $1;
+$1=_st($HLContainer())._with_(_st($HLHorizontalSplitter())._with_with_(self._codeWidget(),(function(canvas){
 return smalltalk.withContext(function($ctx2) {
 return self._renderTranscriptOn_(canvas);
 }, function($ctx2) {$ctx2.fillBlock({canvas:canvas},$ctx1,1)})})));
-$1=_st($2)._with_($3);
+_st(html)._with_($1);
 $ctx1.sendIdx["with:"]=1;
 return self}, function($ctx1) {$ctx1.fill(self,"renderContentOn:",{html:html},smalltalk.HLWorkspace)})},
 args: ["html"],
@@ -2325,13 +2293,12 @@ fn: function (){
 var self=this;
 function $HLTranscript(){return smalltalk.HLTranscript||(typeof HLTranscript=="undefined"?nil:HLTranscript)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@transcript"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@transcript"]) == nil || $receiver == null){
 self["@transcript"]=_st($HLTranscript())._new();
 $1=self["@transcript"];
 } else {
-$1=$2;
+$1=self["@transcript"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"transcript",{},smalltalk.HLWorkspace)})},
@@ -2349,10 +2316,9 @@ category: 'actions',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
-$1=smalltalk.HLWorkspace.superclass.fn.prototype._unregister.apply(_st(self), []);
+smalltalk.HLWorkspace.superclass.fn.prototype._unregister.apply(_st(self), []);
 $ctx1.sendIdx["unregister"]=1;
-$2=_st(self._transcript())._unregister();
+_st(self._transcript())._unregister();
 return self}, function($ctx1) {$ctx1.fill(self,"unregister",{},smalltalk.HLWorkspace)})},
 args: [],
 source: "unregister\x0a\x09super unregister.\x0a\x09self transcript unregister",

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


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 253 - 323
js/Importer-Exporter.js


+ 4 - 7
js/Kernel-Announcements.js

@@ -81,9 +81,7 @@ category: 'announcing',
 fn: function (anAnnouncement){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=self._handlesAnnouncement_(anAnnouncement);
-if(smalltalk.assert($1)){
+if(smalltalk.assert(self._handlesAnnouncement_(anAnnouncement))){
 _st(self._valuable())._value_(anAnnouncement);
 };
 return self}, function($ctx1) {$ctx1.fill(self,"deliver:",{anAnnouncement:anAnnouncement},smalltalk.AnnouncementSubscription)})},
@@ -308,13 +306,12 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@current"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@current"]) == nil || $receiver == null){
 self["@current"]=smalltalk.SystemAnnouncer.klass.superclass.fn.prototype._new.apply(_st(self), []);
 $1=self["@current"];
 } else {
-$1=$2;
+$1=self["@current"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"current",{},smalltalk.SystemAnnouncer.klass)})},

+ 141 - 171
js/Kernel-Classes.js

@@ -33,7 +33,7 @@ function $MethodAdded(){return smalltalk.MethodAdded||(typeof MethodAdded=="unde
 function $MethodModified(){return smalltalk.MethodModified||(typeof MethodModified=="undefined"?nil:MethodModified)}
 function $SystemAnnouncer(){return smalltalk.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$1,$4,$5,$6,$7,$8,$9,$10;
+var $2,$3,$1,$4,$5,$6,$7,$8,$9;
 oldMethod=_st(self._methodDictionary())._at_ifAbsent_(_st(aMethod)._selector(),(function(){
 return smalltalk.withContext(function($ctx2) {
 return nil;
@@ -48,21 +48,20 @@ $5=_st(aMethod)._protocol();
 _st($4)._addElement_($5);
 };
 self._basicAddCompiledMethod_(aMethod);
-$6=oldMethod;
-if(($receiver = $6) == nil || $receiver == null){
-$7=_st($MethodAdded())._new();
+if(($receiver = oldMethod) == nil || $receiver == null){
+$6=_st($MethodAdded())._new();
 $ctx1.sendIdx["new"]=1;
-_st($7)._method_(aMethod);
+_st($6)._method_(aMethod);
 $ctx1.sendIdx["method:"]=1;
-$8=_st($7)._yourself();
+$7=_st($6)._yourself();
 $ctx1.sendIdx["yourself"]=1;
-announcement=$8;
+announcement=$7;
 } else {
-$9=_st($MethodModified())._new();
-_st($9)._oldMethod_(oldMethod);
-_st($9)._method_(aMethod);
-$10=_st($9)._yourself();
-announcement=$10;
+$8=_st($MethodModified())._new();
+_st($8)._oldMethod_(oldMethod);
+_st($8)._method_(aMethod);
+$9=_st($8)._yourself();
+announcement=$9;
 };
 _st(_st($SystemAnnouncer())._current())._announce_(announcement);
 return self}, function($ctx1) {$ctx1.fill(self,"addCompiledMethod:",{aMethod:aMethod,oldMethod:oldMethod,announcement:announcement},smalltalk.Behavior)})},
@@ -110,18 +109,16 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$4,$5,$6,$7,$1;
+var $2,$3,$4,$5,$1;
 $2=self._allSuperclasses();
 $3=self._selectors();
 $ctx1.sendIdx["selectors"]=1;
 $1=_st($2)._inject_into_($3,(function(acc,each){
 return smalltalk.withContext(function($ctx2) {
-$4=acc;
-$5=$4;
-$6=_st(each)._selectors();
-_st($5)._addAll_($6);
-$7=_st($4)._yourself();
-return $7;
+$4=_st(each)._selectors();
+_st(acc)._addAll_($4);
+$5=_st(acc)._yourself();
+return $5;
 }, function($ctx2) {$ctx2.fillBlock({acc:acc,each:each},$ctx1,1)})}));
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"allSelectors",{},smalltalk.Behavior)})},
@@ -192,7 +189,7 @@ fn: function (){
 var self=this;
 function $OrderedCollection(){return smalltalk.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$5,$6,$4,$7,$9,$8,$10,$3;
+var $1,$2,$5,$4,$6,$8,$7,$9,$3;
 $1=self._superclass();
 $ctx1.sendIdx["superclass"]=1;
 if(($receiver = $1) == nil || $receiver == null){
@@ -201,16 +198,15 @@ return $2;
 } else {
 $1;
 };
-$5=$OrderedCollection();
-$6=self._superclass();
+$5=self._superclass();
 $ctx1.sendIdx["superclass"]=2;
-$4=_st($5)._with_($6);
-$7=$4;
-$9=self._superclass();
-$8=_st($9)._allSuperclasses();
-_st($7)._addAll_($8);
-$10=_st($4)._yourself();
-$3=$10;
+$4=_st($OrderedCollection())._with_($5);
+$6=$4;
+$8=self._superclass();
+$7=_st($8)._allSuperclasses();
+_st($6)._addAll_($7);
+$9=_st($4)._yourself();
+$3=$9;
 return $3;
 }, function($ctx1) {$ctx1.fill(self,"allSuperclasses",{},smalltalk.Behavior)})},
 args: [],
@@ -303,12 +299,11 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self._basicAt_("comment");
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self._basicAt_("comment")) == nil || $receiver == null){
 $1="";
 } else {
-$1=$2;
+$1=self._basicAt_("comment");
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"comment",{},smalltalk.Behavior)})},
@@ -481,7 +476,7 @@ category: 'testing',
 fn: function (aClass){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$4,$5,$3,$6,$2;
+var $1,$4,$3,$5,$2;
 $1=self._superclass();
 $ctx1.sendIdx["superclass"]=1;
 if(($receiver = $1) == nil || $receiver == null){
@@ -489,14 +484,13 @@ return false;
 } else {
 $1;
 };
-$4=aClass;
-$5=self._superclass();
+$4=self._superclass();
 $ctx1.sendIdx["superclass"]=2;
-$3=_st($4).__eq_eq($5);
+$3=_st(aClass).__eq_eq($4);
 $2=_st($3)._or_((function(){
 return smalltalk.withContext(function($ctx2) {
-$6=self._superclass();
-return _st($6)._inheritsFrom_(aClass);
+$5=self._superclass();
+return _st($5)._inheritsFrom_(aClass);
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)})}));
 return $2;
 }, function($ctx1) {$ctx1.fill(self,"inheritsFrom:",{aClass:aClass},smalltalk.Behavior)})},
@@ -579,7 +573,7 @@ fn: function (selector){
 var self=this;
 var lookupClass;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
+var $1;
 var $early={};
 try {
 lookupClass=self;
@@ -588,10 +582,9 @@ return smalltalk.withContext(function($ctx2) {
 return _st(lookupClass).__eq(nil);
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}))._whileFalse_((function(){
 return smalltalk.withContext(function($ctx2) {
-$1=_st(lookupClass)._includesSelector_(selector);
-if(smalltalk.assert($1)){
-$2=_st(lookupClass)._methodAt_(selector);
-throw $early=[$2];
+if(smalltalk.assert(_st(lookupClass)._includesSelector_(selector))){
+$1=_st(lookupClass)._methodAt_(selector);
+throw $early=[$1];
 };
 lookupClass=_st(lookupClass)._superclass();
 return lookupClass;
@@ -856,10 +849,9 @@ var methodsByCategory;
 function $HashedCollection(){return smalltalk.HashedCollection||(typeof HashedCollection=="undefined"?nil:HashedCollection)}
 function $Array(){return smalltalk.Array||(typeof Array=="undefined"?nil:Array)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
 methodsByCategory=_st($HashedCollection())._new();
 $ctx1.sendIdx["new"]=1;
-$1=_st(_st(self._methodDictionary())._values())._do_((function(m){
+_st(_st(self._methodDictionary())._values())._do_((function(m){
 return smalltalk.withContext(function($ctx2) {
 return _st(_st(methodsByCategory)._at_ifAbsentPut_(_st(m)._category(),(function(){
 return smalltalk.withContext(function($ctx3) {
@@ -867,7 +859,7 @@ return _st($Array())._new();
 }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)})})))._add_(m);
 }, function($ctx2) {$ctx2.fillBlock({m:m},$ctx1,1)})}));
 $ctx1.sendIdx["do:"]=1;
-$2=_st(self._protocols())._do_((function(category){
+_st(self._protocols())._do_((function(category){
 return smalltalk.withContext(function($ctx2) {
 return _st(aBlock)._value_value_(category,_st(methodsByCategory)._at_(category));
 }, function($ctx2) {$ctx2.fillBlock({category:category},$ctx1,3)})}));
@@ -1111,28 +1103,26 @@ fn: function (){
 var self=this;
 function $String(){return smalltalk.String||(typeof String=="undefined"?nil:String)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$5,$6,$4,$7,$8,$9,$12,$11,$13,$10,$14,$1;
+var $3,$4,$2,$5,$8,$7,$9,$6,$10,$1;
 $1=_st($String())._streamContents_((function(stream){
 return smalltalk.withContext(function($ctx2) {
-$2=stream;
-_st($2)._nextPutAll_(_st(self._superclass())._asString());
+_st(stream)._nextPutAll_(_st(self._superclass())._asString());
 $ctx2.sendIdx["nextPutAll:"]=1;
-_st($2)._nextPutAll_(" subclass: #");
+_st(stream)._nextPutAll_(" subclass: #");
 $ctx2.sendIdx["nextPutAll:"]=2;
-_st($2)._nextPutAll_(self._name());
+_st(stream)._nextPutAll_(self._name());
 $ctx2.sendIdx["nextPutAll:"]=3;
-$3=$2;
-$5=_st($String())._lf();
+$3=_st($String())._lf();
 $ctx2.sendIdx["lf"]=1;
-$6=_st($String())._tab();
+$4=_st($String())._tab();
 $ctx2.sendIdx["tab"]=1;
-$4=_st($5).__comma($6);
+$2=_st($3).__comma($4);
 $ctx2.sendIdx[","]=1;
-_st($3)._nextPutAll_($4);
+_st(stream)._nextPutAll_($2);
 $ctx2.sendIdx["nextPutAll:"]=4;
-$7=_st($2)._nextPutAll_("instanceVariableNames: '");
+$5=_st(stream)._nextPutAll_("instanceVariableNames: '");
 $ctx2.sendIdx["nextPutAll:"]=5;
-$7;
+$5;
 _st(self._instanceVariableNames())._do_separatedBy_((function(each){
 return smalltalk.withContext(function($ctx3) {
 return _st(stream)._nextPutAll_(each);
@@ -1142,21 +1132,19 @@ return smalltalk.withContext(function($ctx3) {
 return _st(stream)._nextPutAll_(" ");
 $ctx3.sendIdx["nextPutAll:"]=7;
 }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)})}));
-$8=stream;
-$9=$8;
-$12=_st($String())._lf();
-$11="'".__comma($12);
-$13=_st($String())._tab();
-$10=_st($11).__comma($13);
+$8=_st($String())._lf();
+$7="'".__comma($8);
+$9=_st($String())._tab();
+$6=_st($7).__comma($9);
 $ctx2.sendIdx[","]=2;
-_st($9)._nextPutAll_($10);
+_st(stream)._nextPutAll_($6);
 $ctx2.sendIdx["nextPutAll:"]=8;
-_st($8)._nextPutAll_("package: '");
+_st(stream)._nextPutAll_("package: '");
 $ctx2.sendIdx["nextPutAll:"]=9;
-_st($8)._nextPutAll_(self._category());
+_st(stream)._nextPutAll_(self._category());
 $ctx2.sendIdx["nextPutAll:"]=10;
-$14=_st($8)._nextPutAll_("'");
-return $14;
+$10=_st(stream)._nextPutAll_("'");
+return $10;
 }, function($ctx2) {$ctx2.fillBlock({stream:stream},$ctx1,1)})}));
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"definition",{},smalltalk.Class)})},
@@ -1393,15 +1381,14 @@ fn: function (){
 var self=this;
 function $String(){return smalltalk.String||(typeof String=="undefined"?nil:String)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$1;
+var $2,$1;
 $1=_st($String())._streamContents_((function(stream){
 return smalltalk.withContext(function($ctx2) {
-$2=stream;
-_st($2)._nextPutAll_(self._asString());
+_st(stream)._nextPutAll_(self._asString());
 $ctx2.sendIdx["nextPutAll:"]=1;
-$3=_st($2)._nextPutAll_(" instanceVariableNames: '");
+$2=_st(stream)._nextPutAll_(" instanceVariableNames: '");
 $ctx2.sendIdx["nextPutAll:"]=2;
-$3;
+$2;
 _st(self._instanceVariableNames())._do_separatedBy_((function(each){
 return smalltalk.withContext(function($ctx3) {
 return _st(stream)._nextPutAll_(each);
@@ -1478,11 +1465,10 @@ category: 'printing',
 fn: function (aStream){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
-$1=aStream;
-_st($1)._nextPutAll_(_st(self._instanceClass())._name());
+var $1;
+_st(aStream)._nextPutAll_(_st(self._instanceClass())._name());
 $ctx1.sendIdx["nextPutAll:"]=1;
-$2=_st($1)._nextPutAll_(" class");
+$1=_st(aStream)._nextPutAll_(" class");
 return self}, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},smalltalk.Metaclass)})},
 args: ["aStream"],
 source: "printOn: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: self instanceClass name;\x0a\x09\x09nextPutAll: ' class'",
@@ -1562,22 +1548,20 @@ var self=this;
 var theClass,thePackage;
 function $Smalltalk(){return smalltalk.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4;
+var $1,$2;
 theClass=_st(_st($Smalltalk())._current())._at_(className);
 thePackage=self._createPackageNamed_(packageName);
-$1=theClass;
-if(($receiver = $1) == nil || $receiver == null){
-$1;
+if(($receiver = theClass) == nil || $receiver == null){
+theClass;
 } else {
 _st(theClass)._package_(thePackage);
-$2=_st(_st(theClass)._superclass()).__eq_eq(aClass);
-if(! smalltalk.assert($2)){
-$3=self._migrateClassNamed_superclass_instanceVariableNames_package_(className,aClass,aCollection,packageName);
-return $3;
+if(! smalltalk.assert(_st(_st(theClass)._superclass()).__eq_eq(aClass))){
+$1=self._migrateClassNamed_superclass_instanceVariableNames_package_(className,aClass,aCollection,packageName);
+return $1;
 };
 };
-$4=self._basicAddSubclassOf_named_instanceVariableNames_package_(aClass,className,aCollection,packageName);
-return $4;
+$2=self._basicAddSubclassOf_named_instanceVariableNames_package_(aClass,className,aCollection,packageName);
+return $2;
 }, function($ctx1) {$ctx1.fill(self,"addSubclassOf:named:instanceVariableNames:package:",{aClass:aClass,className:className,aCollection:aCollection,packageName:packageName,theClass:theClass,thePackage:thePackage},smalltalk.ClassBuilder)})},
 args: ["aClass", "className", "aCollection", "packageName"],
 source: "addSubclassOf: aClass named: className instanceVariableNames: aCollection package: packageName\x0a\x09| theClass thePackage |\x0a\x09\x0a\x09theClass := Smalltalk current at: className.\x0a\x09thePackage := self createPackageNamed: packageName.\x0a\x09\x0a\x09theClass ifNotNil: [\x0a\x09\x09theClass package: thePackage.\x0a\x09\x09theClass superclass == aClass ifFalse: [\x0a\x09\x09\x09^ self\x0a\x09\x09\x09\x09migrateClassNamed: className\x0a\x09\x09\x09\x09superclass: aClass\x0a\x09\x09\x09\x09instanceVariableNames: aCollection\x0a\x09\x09\x09\x09package: packageName ] ].\x0a\x09\x09\x0a\x09^ self\x0a\x09\x09basicAddSubclassOf: aClass\x0a\x09\x09named: className\x0a\x09\x09instanceVariableNames: aCollection\x0a\x09\x09package: packageName",
@@ -1628,9 +1612,7 @@ category: 'private',
 fn: function (aClass,aCollection){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=_st(aClass)._isMetaclass();
-if(! smalltalk.assert($1)){
+if(! smalltalk.assert(_st(aClass)._isMetaclass())){
 self._error_(_st(_st(aClass)._name()).__comma(" is not a metaclass"));
 };
 _st(aClass)._basicAt_put_("iVarNames",aCollection);
@@ -1757,42 +1739,41 @@ fn: function (aClass,anotherClass){
 var self=this;
 function $Compiler(){return smalltalk.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
 return smalltalk.withContext(function($ctx1) { 
-var $3,$2,$4,$5,$6,$7,$1,$8,$10,$9,$14,$13,$12,$15,$16,$17,$18,$11;
+var $2,$1,$3,$4,$5,$6,$8,$7,$11,$10,$9,$12,$13,$14,$15;
 _st(anotherClass)._comment_(_st(aClass)._comment());
-$3=_st(aClass)._methodDictionary();
+$2=_st(aClass)._methodDictionary();
 $ctx1.sendIdx["methodDictionary"]=1;
-$2=_st($3)._values();
+$1=_st($2)._values();
 $ctx1.sendIdx["values"]=1;
-$1=_st($2)._do_((function(each){
+_st($1)._do_((function(each){
 return smalltalk.withContext(function($ctx2) {
-$4=_st($Compiler())._new();
+$3=_st($Compiler())._new();
 $ctx2.sendIdx["new"]=1;
-$5=_st(each)._source();
+$4=_st(each)._source();
 $ctx2.sendIdx["source"]=1;
-$6=anotherClass;
-$7=_st(each)._category();
+$5=_st(each)._category();
 $ctx2.sendIdx["category"]=1;
-return _st($4)._install_forClass_category_($5,$6,$7);
+return _st($3)._install_forClass_category_($4,anotherClass,$5);
 $ctx2.sendIdx["install:forClass:category:"]=1;
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)})}));
 $ctx1.sendIdx["do:"]=1;
-$8=_st(anotherClass)._class();
+$6=_st(anotherClass)._class();
 $ctx1.sendIdx["class"]=1;
-$10=_st(aClass)._class();
+$8=_st(aClass)._class();
 $ctx1.sendIdx["class"]=2;
-$9=_st($10)._instanceVariableNames();
-self._basicClass_instanceVariables_($8,$9);
-$14=_st(aClass)._class();
+$7=_st($8)._instanceVariableNames();
+self._basicClass_instanceVariables_($6,$7);
+$11=_st(aClass)._class();
 $ctx1.sendIdx["class"]=3;
-$13=_st($14)._methodDictionary();
-$12=_st($13)._values();
-$11=_st($12)._do_((function(each){
+$10=_st($11)._methodDictionary();
+$9=_st($10)._values();
+_st($9)._do_((function(each){
 return smalltalk.withContext(function($ctx2) {
-$15=_st($Compiler())._new();
-$16=_st(each)._source();
-$17=_st(anotherClass)._class();
-$18=_st(each)._category();
-return _st($15)._install_forClass_category_($16,$17,$18);
+$12=_st($Compiler())._new();
+$13=_st(each)._source();
+$14=_st(anotherClass)._class();
+$15=_st(each)._category();
+return _st($12)._install_forClass_category_($13,$14,$15);
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)})}));
 self._setupClass_(anotherClass);
 return self}, function($ctx1) {$ctx1.fill(self,"copyClass:to:",{aClass:aClass,anotherClass:anotherClass},smalltalk.ClassBuilder)})},
@@ -1833,12 +1814,10 @@ category: 'method definition',
 fn: function (aCompiledMethod,aBehavior,aString){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
 _st(aCompiledMethod)._category_(aString);
 _st(aBehavior)._addCompiledMethod_(aCompiledMethod);
 self._setupClass_(aBehavior);
-$1=aCompiledMethod;
-return $1;
+return aCompiledMethod;
 }, function($ctx1) {$ctx1.fill(self,"installMethod:forClass:category:",{aCompiledMethod:aCompiledMethod,aBehavior:aBehavior,aString:aString},smalltalk.ClassBuilder)})},
 args: ["aCompiledMethod", "aBehavior", "aString"],
 source: "installMethod: aCompiledMethod forClass: aBehavior category: aString\x0a\x09aCompiledMethod category: aString.\x0a\x09aBehavior addCompiledMethod: aCompiledMethod.\x0a\x09self setupClass: aBehavior.\x0a\x09^aCompiledMethod",
@@ -1875,13 +1854,12 @@ category: 'class migration',
 fn: function (aClass,anotherClass){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$4,$5,$1;
+var $2,$3,$4,$1;
 $2=_st(aClass)._name();
 $ctx1.sendIdx["name"]=1;
-$3=anotherClass;
-$4=_st(aClass)._instanceVariableNames();
-$5=_st(_st(aClass)._package())._name();
-$1=self._migrateClassNamed_superclass_instanceVariableNames_package_($2,$3,$4,$5);
+$3=_st(aClass)._instanceVariableNames();
+$4=_st(_st(aClass)._package())._name();
+$1=self._migrateClassNamed_superclass_instanceVariableNames_package_($2,anotherClass,$3,$4);
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"migrateClass:superclass:",{aClass:aClass,anotherClass:anotherClass},smalltalk.ClassBuilder)})},
 args: ["aClass", "anotherClass"],
@@ -1903,14 +1881,14 @@ function $Error(){return smalltalk.Error||(typeof Error=="undefined"?nil:Error)}
 function $SystemAnnouncer(){return smalltalk.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
 function $ClassMigrated(){return smalltalk.ClassMigrated||(typeof ClassMigrated=="undefined"?nil:ClassMigrated)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4,$5,$6,$8,$7,$9,$10,$11,$12,$13;
+var $1,$2,$3,$4,$5,$7,$6,$8,$9,$10,$11;
 tmp="new*".__comma(className);
 $ctx1.sendIdx[","]=1;
 $1=_st($Smalltalk())._current();
 $ctx1.sendIdx["current"]=1;
 oldClass=_st($1)._at_(className);
 newClass=self._addSubclassOf_named_instanceVariableNames_package_(aClass,tmp,aCollection,packageName);
-$2=self._basicSwapClassNames_with_(oldClass,newClass);
+self._basicSwapClassNames_with_(oldClass,newClass);
 $ctx1.sendIdx["basicSwapClassNames:with:"]=1;
 _st((function(){
 return smalltalk.withContext(function($ctx2) {
@@ -1918,32 +1896,32 @@ return self._copyClass_to_(oldClass,newClass);
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}))._on_do_($Error(),(function(exception){
 return smalltalk.withContext(function($ctx2) {
 self._basicSwapClassNames_with_(oldClass,newClass);
-$3=self._basicRemoveClass_(newClass);
+$2=self._basicRemoveClass_(newClass);
 $ctx2.sendIdx["basicRemoveClass:"]=1;
-$3;
+$2;
 return _st(exception)._signal();
 }, function($ctx2) {$ctx2.fillBlock({exception:exception},$ctx1,2)})}));
 self._rawRenameClass_to_(oldClass,tmp);
 $ctx1.sendIdx["rawRenameClass:to:"]=1;
-$4=self._rawRenameClass_to_(newClass,className);
-$5=_st(oldClass)._subclasses();
-$6=(function(each){
+$3=self._rawRenameClass_to_(newClass,className);
+$4=_st(oldClass)._subclasses();
+$5=(function(each){
 return smalltalk.withContext(function($ctx2) {
 return self._migrateClass_superclass_(each,newClass);
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)})});
-$8="Recompiling ".__comma(_st(newClass)._name());
-$7=_st($8).__comma("...");
+$7="Recompiling ".__comma(_st(newClass)._name());
+$6=_st($7).__comma("...");
 $ctx1.sendIdx[","]=2;
-_st($5)._do_displayingProgress_($6,$7);
-$9=self._basicRemoveClass_(oldClass);
-$10=_st($SystemAnnouncer())._current();
-$11=_st($ClassMigrated())._new();
-_st($11)._theClass_(newClass);
-_st($11)._oldClass_(oldClass);
-$12=_st($11)._yourself();
-_st($10)._announce_($12);
-$13=newClass;
-return $13;
+_st($4)._do_displayingProgress_($5,$6);
+self._basicRemoveClass_(oldClass);
+$8=_st($SystemAnnouncer())._current();
+$9=_st($ClassMigrated())._new();
+_st($9)._theClass_(newClass);
+_st($9)._oldClass_(oldClass);
+$10=_st($9)._yourself();
+_st($8)._announce_($10);
+$11=newClass;
+return $11;
 }, function($ctx1) {$ctx1.fill(self,"migrateClassNamed:superclass:instanceVariableNames:package:",{className:className,aClass:aClass,aCollection:aCollection,packageName:packageName,oldClass:oldClass,newClass:newClass,tmp:tmp},smalltalk.ClassBuilder)})},
 args: ["className", "aClass", "aCollection", "packageName"],
 source: "migrateClassNamed: className superclass: aClass instanceVariableNames: aCollection package: packageName\x0a\x09| oldClass newClass tmp |\x0a\x09\x0a\x09tmp := 'new*', className.\x0a\x09oldClass := Smalltalk current at: className.\x0a\x09\x0a\x09newClass := self\x0a\x09\x09addSubclassOf: aClass\x0a\x09\x09named: tmp\x0a\x09\x09instanceVariableNames: aCollection\x0a\x09\x09package: packageName.\x0a\x0a\x09self basicSwapClassNames: oldClass with: newClass.\x0a\x0a\x09[ self copyClass: oldClass to: newClass ]\x0a\x09\x09on: Error\x0a\x09\x09do: [ :exception |\x0a\x09\x09\x09self\x0a\x09\x09\x09\x09basicSwapClassNames: oldClass with: newClass;\x0a\x09\x09\x09\x09basicRemoveClass: newClass.\x0a\x09\x09\x09exception signal ].\x0a\x0a\x09self\x0a\x09\x09rawRenameClass: oldClass to: tmp;\x0a\x09\x09rawRenameClass: newClass to: className.\x0a\x0a\x09oldClass subclasses \x0a\x09\x09do: [ :each | self migrateClass: each superclass: newClass ]\x0a\x09\x09displayingProgress: 'Recompiling ', newClass name, '...'.\x0a\x0a\x09self basicRemoveClass: oldClass.\x0a\x09\x0a\x09SystemAnnouncer current announce: (ClassMigrated new\x0a\x09\x09theClass: newClass;\x0a\x09\x09oldClass: oldClass;\x0a\x09\x09yourself).\x0a\x09\x0a\x09^newClass",
@@ -2038,24 +2016,21 @@ var newClass;
 function $SystemAnnouncer(){return smalltalk.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
 function $ClassAdded(){return smalltalk.ClassAdded||(typeof ClassAdded=="undefined"?nil:ClassAdded)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$5,$4,$6,$7,$8;
-$1=aClass;
-$2=className;
-$3=self._instanceVariableNamesFor_(ivarNames);
-$5=packageName;
-if(($receiver = $5) == nil || $receiver == null){
-$4="unclassified";
+var $1,$2,$3,$4,$5;
+$1=self._instanceVariableNamesFor_(ivarNames);
+if(($receiver = packageName) == nil || $receiver == null){
+$2="unclassified";
 } else {
-$4=$5;
+$2=packageName;
 };
-newClass=self._addSubclassOf_named_instanceVariableNames_package_($1,$2,$3,$4);
+newClass=self._addSubclassOf_named_instanceVariableNames_package_(aClass,className,$1,$2);
 self._setupClass_(newClass);
-$6=_st($ClassAdded())._new();
-_st($6)._theClass_(newClass);
-$7=_st($6)._yourself();
-_st(_st($SystemAnnouncer())._current())._announce_($7);
-$8=newClass;
-return $8;
+$3=_st($ClassAdded())._new();
+_st($3)._theClass_(newClass);
+$4=_st($3)._yourself();
+_st(_st($SystemAnnouncer())._current())._announce_($4);
+$5=newClass;
+return $5;
 }, function($ctx1) {$ctx1.fill(self,"superclass:subclass:instanceVariableNames:package:",{aClass:aClass,className:className,ivarNames:ivarNames,packageName:packageName,newClass:newClass},smalltalk.ClassBuilder)})},
 args: ["aClass", "className", "ivarNames", "packageName"],
 source: "superclass: aClass subclass: className instanceVariableNames: ivarNames package: packageName\x0a\x09| newClass |\x0a\x09\x0a\x09newClass := self addSubclassOf: aClass\x0a\x09\x09named: className instanceVariableNames: (self instanceVariableNamesFor: ivarNames)\x0a\x09\x09package: (packageName ifNil: ['unclassified']).\x0a\x09self setupClass: newClass.\x0a\x09\x0a\x09SystemAnnouncer current\x0a\x09\x09announce: (ClassAdded new\x0a\x09\x09\x09theClass: newClass;\x0a\x09\x09\x09yourself).\x0a\x09\x0a\x09^newClass",
@@ -2189,10 +2164,8 @@ fn: function (aChunkParser){
 var self=this;
 var chunk;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
 chunk=_st(aChunkParser)._nextChunk();
-$1=_st(chunk)._isEmpty();
-if(! smalltalk.assert($1)){
+if(! smalltalk.assert(_st(chunk)._isEmpty())){
 self._setComment_(chunk);
 };
 return self}, function($ctx1) {$ctx1.fill(self,"scanFrom:",{aChunkParser:aChunkParser,chunk:chunk},smalltalk.ClassCommentReader)})},
@@ -2232,13 +2205,11 @@ var self=this;
 var children,others;
 function $ClassSorterNode(){return smalltalk.ClassSorterNode||(typeof ClassSorterNode=="undefined"?nil:ClassSorterNode)}
 return smalltalk.withContext(function($ctx1) { 
-var $1;
 children=[];
 others=[];
 _st(aCollection)._do_((function(each){
 return smalltalk.withContext(function($ctx2) {
-$1=_st(_st(each)._superclass()).__eq(self._theClass());
-if(smalltalk.assert($1)){
+if(smalltalk.assert(_st(_st(each)._superclass()).__eq(self._theClass()))){
 return _st(children)._add_(each);
 $ctx2.sendIdx["add:"]=1;
 } else {
@@ -2350,20 +2321,19 @@ category: 'visiting',
 fn: function (aCollection){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$4,$3,$6,$5;
-$1=aCollection;
-$2=self._theClass();
+var $1,$3,$2,$5,$4;
+$1=self._theClass();
 $ctx1.sendIdx["theClass"]=1;
-_st($1)._add_($2);
+_st(aCollection)._add_($1);
 _st(_st(self._nodes())._sorted_((function(a,b){
 return smalltalk.withContext(function($ctx2) {
-$4=_st(a)._theClass();
+$3=_st(a)._theClass();
 $ctx2.sendIdx["theClass"]=2;
-$3=_st($4)._name();
+$2=_st($3)._name();
 $ctx2.sendIdx["name"]=1;
-$6=_st(b)._theClass();
-$5=_st($6)._name();
-return _st($3).__lt_eq($5);
+$5=_st(b)._theClass();
+$4=_st($5)._name();
+return _st($2).__lt_eq($4);
 }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,1)})})))._do_((function(aNode){
 return smalltalk.withContext(function($ctx2) {
 return _st(aNode)._traverseClassesWith_(aCollection);

+ 167 - 210
js/Kernel-Collections.js

@@ -83,11 +83,10 @@ category: 'printing',
 fn: function (aStream){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
-$1=_st(self._key())._printOn_(aStream);
+_st(self._key())._printOn_(aStream);
 $ctx1.sendIdx["printOn:"]=1;
 _st(aStream)._nextPutAll_(" -> ");
-$2=_st(self._value())._printOn_(aStream);
+_st(self._value())._printOn_(aStream);
 return self}, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},smalltalk.Association)})},
 args: ["aStream"],
 source: "printOn: aStream\x0a\x09self key printOn: aStream.\x0a\x09aStream nextPutAll: ' -> '.\x0a\x09self value printOn: aStream",
@@ -200,13 +199,11 @@ category: 'adding/removing',
 fn: function (aCollection){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
 _st(aCollection)._do_((function(each){
 return smalltalk.withContext(function($ctx2) {
 return self._add_(each);
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)})}));
-$1=aCollection;
-return $1;
+return aCollection;
 }, function($ctx1) {$ctx1.fill(self,"addAll:",{aCollection:aCollection},smalltalk.Collection)})},
 args: ["aCollection"],
 source: "addAll: aCollection\x0a\x09aCollection do: [:each |\x0a\x09\x09self add: each].\x0a\x09^aCollection",
@@ -323,13 +320,11 @@ category: 'testing',
 fn: function (aBlock){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
 var $early={};
 try {
 self._do_((function(each){
 return smalltalk.withContext(function($ctx2) {
-$1=_st(aBlock)._value_(each);
-if(smalltalk.assert($1)){
+if(smalltalk.assert(_st(aBlock)._value_(each))){
 throw $early=[true];
 };
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)})}));
@@ -509,9 +504,8 @@ category: 'testing',
 fn: function (aBlock){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self._isEmpty();
-if(smalltalk.assert($2)){
+var $1;
+if(smalltalk.assert(self._isEmpty())){
 $1=_st(aBlock)._value();
 } else {
 $1=self;
@@ -532,9 +526,7 @@ category: 'testing',
 fn: function (aBlock){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=self._notEmpty();
-_st($1)._ifTrue_(aBlock);
+_st(self._notEmpty())._ifTrue_(aBlock);
 return self}, function($ctx1) {$ctx1.fill(self,"ifNotEmpty:",{aBlock:aBlock},smalltalk.Collection)})},
 args: ["aBlock"],
 source: "ifNotEmpty: aBlock\x0a\x09self notEmpty ifTrue: aBlock.",
@@ -674,18 +666,17 @@ fn: function (anObject){
 var self=this;
 var tally;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
+var $1;
 tally=(0);
 self._do_((function(each){
 return smalltalk.withContext(function($ctx2) {
-$1=_st(anObject).__eq(each);
-if(smalltalk.assert($1)){
+if(smalltalk.assert(_st(anObject).__eq(each))){
 tally=_st(tally).__plus((1));
 return tally;
 };
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)})}));
-$2=tally;
-return $2;
+$1=tally;
+return $1;
 }, function($ctx1) {$ctx1.fill(self,"occurrencesOf:",{anObject:anObject,tally:tally},smalltalk.Collection)})},
 args: ["anObject"],
 source: "occurrencesOf: anObject\x0a\x09\x22Answer how many of the receiver's elements are equal to anObject.\x22\x0a\x0a\x09| tally |\x0a\x09tally := 0.\x0a\x09self do: [:each | anObject = each ifTrue: [tally := tally + 1]].\x0a\x09^tally",
@@ -779,17 +770,16 @@ fn: function (aBlock){
 var self=this;
 var stream;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
+var $1;
 stream=_st(_st(self._class())._new())._writeStream();
 self._do_((function(each){
 return smalltalk.withContext(function($ctx2) {
-$1=_st(aBlock)._value_(each);
-if(smalltalk.assert($1)){
+if(smalltalk.assert(_st(aBlock)._value_(each))){
 return _st(stream)._nextPut_(each);
 };
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)})}));
-$2=_st(stream)._contents();
-return $2;
+$1=_st(stream)._contents();
+return $1;
 }, function($ctx1) {$ctx1.fill(self,"select:",{aBlock:aBlock,stream:stream},smalltalk.Collection)})},
 args: ["aBlock"],
 source: "select: aBlock\x0a\x09| stream |\x0a\x09stream := self class new writeStream.\x0a\x09self do: [:each |\x0a\x09\x09(aBlock value: each) ifTrue: [\x0a\x09\x09stream nextPut: each]].\x0a\x09^stream contents",
@@ -1161,28 +1151,28 @@ category: 'comparing',
 fn: function (aHashedCollection){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $3,$4,$2,$1,$7,$8,$6,$5,$10,$11,$9;
-$3=self._class();
+var $2,$3,$1,$5,$6,$4,$8,$9,$7;
+$2=self._class();
 $ctx1.sendIdx["class"]=1;
-$4=_st(aHashedCollection)._class();
-$2=_st($3).__eq($4);
+$3=_st(aHashedCollection)._class();
+$1=_st($2).__eq($3);
 $ctx1.sendIdx["="]=1;
-if(! smalltalk.assert($2)){
+if(! smalltalk.assert($1)){
 return false;
 };
-$7=self._size();
+$5=self._size();
 $ctx1.sendIdx["size"]=1;
-$8=_st(aHashedCollection)._size();
-$6=_st($7).__eq($8);
+$6=_st(aHashedCollection)._size();
+$4=_st($5).__eq($6);
 $ctx1.sendIdx["="]=2;
-if(! smalltalk.assert($6)){
+if(! smalltalk.assert($4)){
 return false;
 };
-$10=self._associations();
+$8=self._associations();
 $ctx1.sendIdx["associations"]=1;
-$11=_st(aHashedCollection)._associations();
-$9=_st($10).__eq($11);
-return $9;
+$9=_st(aHashedCollection)._associations();
+$7=_st($8).__eq($9);
+return $7;
 }, function($ctx1) {$ctx1.fill(self,"=",{aHashedCollection:aHashedCollection},smalltalk.HashedCollection)})},
 args: ["aHashedCollection"],
 source: "= aHashedCollection\x0a\x09self class = aHashedCollection class ifFalse: [^false].\x0a\x09self size = aHashedCollection size ifFalse: [^false].\x0a\x09^self associations = aHashedCollection associations",
@@ -1214,10 +1204,8 @@ category: 'adding/removing',
 fn: function (aHashedCollection){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
 smalltalk.HashedCollection.superclass.fn.prototype._addAll_.apply(_st(self), [_st(aHashedCollection)._associations()]);
-$1=aHashedCollection;
-return $1;
+return aHashedCollection;
 }, function($ctx1) {$ctx1.fill(self,"addAll:",{aHashedCollection:aHashedCollection},smalltalk.HashedCollection)})},
 args: ["aHashedCollection"],
 source: "addAll: aHashedCollection\x0a\x09super addAll: aHashedCollection associations.\x0a\x09^aHashedCollection",
@@ -1320,9 +1308,8 @@ category: 'accessing',
 fn: function (aKey,aBlock){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self._includesKey_(aKey);
-$1=_st($2)._ifTrue_ifFalse_((function(){
+var $1;
+$1=_st(self._includesKey_(aKey))._ifTrue_ifFalse_((function(){
 return smalltalk.withContext(function($ctx2) {
 return self._basicAt_(aKey);
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}),aBlock);
@@ -1363,9 +1350,8 @@ category: 'accessing',
 fn: function (aKey,aBlock,anotherBlock){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self._includesKey_(aKey);
-$1=_st($2)._ifTrue_ifFalse_((function(){
+var $1;
+$1=_st(self._includesKey_(aKey))._ifTrue_ifFalse_((function(){
 return smalltalk.withContext(function($ctx2) {
 return _st(aBlock)._value_(self._at_(aKey));
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}),anotherBlock);
@@ -1639,10 +1625,9 @@ category: 'printing',
 fn: function (aStream){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3;
-$1=smalltalk.HashedCollection.superclass.fn.prototype._printOn_.apply(_st(self), [aStream]);
+smalltalk.HashedCollection.superclass.fn.prototype._printOn_.apply(_st(self), [aStream]);
 $ctx1.sendIdx["printOn:"]=1;
-$2=_st(aStream)._nextPutAll_(" (");
+_st(aStream)._nextPutAll_(" (");
 $ctx1.sendIdx["nextPutAll:"]=1;
 _st(self._associations())._do_separatedBy_((function(each){
 return smalltalk.withContext(function($ctx2) {
@@ -1652,7 +1637,7 @@ return smalltalk.withContext(function($ctx2) {
 return _st(aStream)._nextPutAll_(" , ");
 $ctx2.sendIdx["nextPutAll:"]=2;
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)})}));
-$3=_st(aStream)._nextPutAll_(")");
+_st(aStream)._nextPutAll_(")");
 return self}, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},smalltalk.HashedCollection)})},
 args: ["aStream"],
 source: "printOn: aStream\x0a\x09super printOn: aStream.\x0a\x09\x0a\x09aStream nextPutAll: ' ('.\x0a\x09self associations\x0a\x09\x09do: [:each | each printOn: aStream ]\x0a\x09\x09separatedBy: [ aStream nextPutAll: ' , ' ].\x0a\x09aStream nextPutAll: ')'",
@@ -1704,9 +1689,8 @@ category: 'adding/removing',
 fn: function (aKey,aBlock){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self._includesKey_(aKey);
-if(smalltalk.assert($2)){
+var $1;
+if(smalltalk.assert(self._includesKey_(aKey))){
 $1=self._basicDelete_(aKey);
 } else {
 $1=_st(aBlock)._value();
@@ -1728,17 +1712,16 @@ fn: function (aBlock){
 var self=this;
 var newDict;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
+var $1;
 newDict=_st(self._class())._new();
 self._keysAndValuesDo_((function(key,value){
 return smalltalk.withContext(function($ctx2) {
-$1=_st(aBlock)._value_(value);
-if(smalltalk.assert($1)){
+if(smalltalk.assert(_st(aBlock)._value_(value))){
 return _st(newDict)._at_put_(key,value);
 };
 }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1,1)})}));
-$2=newDict;
-return $2;
+$1=newDict;
+return $1;
 }, function($ctx1) {$ctx1.fill(self,"select:",{aBlock:aBlock,newDict:newDict},smalltalk.HashedCollection)})},
 args: ["aBlock"],
 source: "select: aBlock\x0a\x09| newDict |\x0a\x09newDict := self class new.\x0a\x09self keysAndValuesDo: [:key :value |\x0a\x09\x09(aBlock value: value) ifTrue: [newDict at: key put: value]].\x0a\x09^newDict",
@@ -2034,13 +2017,12 @@ fn: function (anObject,aBlock){
 var self=this;
 var index;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
+var $1;
 index=_st(self["@values"])._indexOf_ifAbsent_(anObject,(function(){
 return smalltalk.withContext(function($ctx2) {
 return (0);
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
-$2=_st(index).__eq((0));
-if(smalltalk.assert($2)){
+if(smalltalk.assert(_st(index).__eq((0)))){
 $1=_st(aBlock)._value();
 } else {
 $1=_st(self["@keys"])._at_(index);
@@ -2224,29 +2206,29 @@ category: 'comparing',
 fn: function (aCollection){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $4,$5,$3,$6,$7,$2,$1,$8;
+var $3,$4,$2,$5,$6,$1,$7;
 var $early={};
 try {
-$4=self._class();
+$3=self._class();
 $ctx1.sendIdx["class"]=1;
-$5=_st(aCollection)._class();
-$3=_st($4).__eq($5);
+$4=_st(aCollection)._class();
+$2=_st($3).__eq($4);
 $ctx1.sendIdx["="]=1;
-$2=_st($3)._and_((function(){
+$1=_st($2)._and_((function(){
 return smalltalk.withContext(function($ctx2) {
-$6=self._size();
+$5=self._size();
 $ctx2.sendIdx["size"]=1;
-$7=_st(aCollection)._size();
-return _st($6).__eq($7);
+$6=_st(aCollection)._size();
+return _st($5).__eq($6);
 $ctx2.sendIdx["="]=2;
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
-if(! smalltalk.assert($2)){
+if(! smalltalk.assert($1)){
 return false;
 };
 self._withIndexDo_((function(each,i){
 return smalltalk.withContext(function($ctx2) {
-$8=_st(_st(aCollection)._at_(i)).__eq(each);
-if(! smalltalk.assert($8)){
+$7=_st(_st(aCollection)._at_(i)).__eq(each);
+if(! smalltalk.assert($7)){
 throw $early=[false];
 };
 }, function($ctx2) {$ctx2.fillBlock({each:each,i:i},$ctx1,3)})}));
@@ -2798,9 +2780,7 @@ fn: function (){
 var self=this;
 function $Stream(){return smalltalk.Stream||(typeof Stream=="undefined"?nil:Stream)}
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=$Stream();
-return $1;
+return $Stream();
 }, function($ctx1) {$ctx1.fill(self,"streamClass",{},smalltalk.SequenceableCollection.klass)})},
 args: [],
 source: "streamClass\x0a\x09\x09^Stream",
@@ -2978,10 +2958,9 @@ category: 'printing',
 fn: function (aStream){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3;
-$1=smalltalk.Array.superclass.fn.prototype._printOn_.apply(_st(self), [aStream]);
+smalltalk.Array.superclass.fn.prototype._printOn_.apply(_st(self), [aStream]);
 $ctx1.sendIdx["printOn:"]=1;
-$2=_st(aStream)._nextPutAll_(" (");
+_st(aStream)._nextPutAll_(" (");
 $ctx1.sendIdx["nextPutAll:"]=1;
 self._do_separatedBy_((function(each){
 return smalltalk.withContext(function($ctx2) {
@@ -2991,7 +2970,7 @@ return smalltalk.withContext(function($ctx2) {
 return _st(aStream)._nextPutAll_(" ");
 $ctx2.sendIdx["nextPutAll:"]=2;
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)})}));
-$3=_st(aStream)._nextPutAll_(")");
+_st(aStream)._nextPutAll_(")");
 return self}, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},smalltalk.Array)})},
 args: ["aStream"],
 source: "printOn: aStream\x0a\x09super printOn: aStream.\x0a\x09\x0a\x09aStream nextPutAll: ' ('.\x0a\x09self \x0a\x09\x09do: [ :each | each printOn: aStream ]\x0a\x09\x09separatedBy: [ aStream nextPutAll: ' ' ].\x0a\x09aStream nextPutAll: ')'",
@@ -3725,11 +3704,10 @@ category: 'converting',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
-$1=_st(self._last()).__eq(":");
-if(! smalltalk.assert($1)){
-$2=self.__comma(":");
-return $2;
+var $1;
+if(! smalltalk.assert(_st(self._last()).__eq(":"))){
+$1=self.__comma(":");
+return $1;
 };
 return self;
 }, function($ctx1) {$ctx1.fill(self,"asMutator",{},smalltalk.String)})},
@@ -3897,9 +3875,8 @@ category: 'converting',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self._isEmpty();
-if(smalltalk.assert($2)){
+var $1;
+if(smalltalk.assert(self._isEmpty())){
 $1=self;
 } else {
 $1=_st(_st(self._first())._asUppercase()).__comma(self._allButFirst());
@@ -4161,7 +4138,7 @@ var self=this;
 var cr,lf,start,sz,nextLF,nextCR;
 function $String(){return smalltalk.String||(typeof String=="undefined"?nil:String)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1,$4,$5,$3,$6,$7,$8,$10,$9,$11,$12,$13,$14,$15,$16;
+var $2,$1,$4,$5,$3,$6,$7,$9,$8,$10,$11,$12,$13;
 var $early={};
 try {
 start=(1);
@@ -4202,11 +4179,10 @@ return _st(nextLF).__lt(nextCR);
 }, function($ctx4) {$ctx4.fillBlock({},$ctx3,6)})}));
 }, function($ctx3) {$ctx3.fillBlock({},$ctx2,5)})}));
 if(smalltalk.assert($3)){
-$6=aBlock;
-$7=start;
-$8=_st(nextLF).__minus((1));
+$6=start;
+$7=_st(nextLF).__minus((1));
 $ctx2.sendIdx["-"]=1;
-_st($6)._value_value_value_($7,$8,nextLF);
+_st(aBlock)._value_value_value_($6,$7,nextLF);
 $ctx2.sendIdx["value:value:value:"]=2;
 start=(1).__plus(nextLF);
 $ctx2.sendIdx["+"]=1;
@@ -4215,15 +4191,14 @@ nextLF=self._indexOf_startingAt_(lf,start);
 $ctx2.sendIdx["indexOf:startingAt:"]=3;
 return nextLF;
 } else {
-$10=(1).__plus(nextCR);
+$9=(1).__plus(nextCR);
 $ctx2.sendIdx["+"]=2;
-$9=_st($10).__eq(nextLF);
-if(smalltalk.assert($9)){
-$11=aBlock;
-$12=start;
-$13=_st(nextCR).__minus((1));
+$8=_st($9).__eq(nextLF);
+if(smalltalk.assert($8)){
+$10=start;
+$11=_st(nextCR).__minus((1));
 $ctx2.sendIdx["-"]=2;
-_st($11)._value_value_value_($12,$13,nextLF);
+_st(aBlock)._value_value_value_($10,$11,nextLF);
 $ctx2.sendIdx["value:value:value:"]=3;
 start=(1).__plus(nextLF);
 $ctx2.sendIdx["+"]=3;
@@ -4235,10 +4210,9 @@ nextLF=self._indexOf_startingAt_(lf,start);
 $ctx2.sendIdx["indexOf:startingAt:"]=5;
 return nextLF;
 } else {
-$14=aBlock;
-$15=start;
-$16=_st(nextCR).__minus((1));
-_st($14)._value_value_value_($15,$16,nextCR);
+$12=start;
+$13=_st(nextCR).__minus((1));
+_st(aBlock)._value_value_value_($12,$13,nextCR);
 start=(1).__plus(nextCR);
 start;
 nextCR=self._indexOf_startingAt_(cr,start);
@@ -4264,17 +4238,16 @@ fn: function (anIndex){
 var self=this;
 var lineCount;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
+var $1;
 var $early={};
 try {
 lineCount=(0);
 self._lineIndicesDo_((function(start,endWithoutDelimiters,end){
 return smalltalk.withContext(function($ctx2) {
 lineCount=_st(lineCount).__plus((1));
-$1=_st(lineCount).__eq(anIndex);
-if(smalltalk.assert($1)){
-$2=self._copyFrom_to_(start,endWithoutDelimiters);
-throw $early=[$2];
+if(smalltalk.assert(_st(lineCount).__eq(anIndex))){
+$1=self._copyFrom_to_(start,endWithoutDelimiters);
+throw $early=[$1];
 };
 }, function($ctx2) {$ctx2.fillBlock({start:start,endWithoutDelimiters:endWithoutDelimiters,end:end},$ctx1,1)})}));
 return nil;
@@ -4387,13 +4360,12 @@ category: 'printing',
 fn: function (aStream){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
-$1=aStream;
-_st($1)._nextPutAll_("'");
+var $1;
+_st(aStream)._nextPutAll_("'");
 $ctx1.sendIdx["nextPutAll:"]=1;
-_st($1)._nextPutAll_(self);
+_st(aStream)._nextPutAll_(self);
 $ctx1.sendIdx["nextPutAll:"]=2;
-$2=_st($1)._nextPutAll_("'");
+$1=_st(aStream)._nextPutAll_("'");
 return self}, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},smalltalk.String)})},
 args: ["aStream"],
 source: "printOn: aStream\x0a\x09aStream \x0a\x09\x09nextPutAll: '''';\x0a\x09\x09nextPutAll: self;\x0a\x09\x09nextPutAll: ''''",
@@ -4583,12 +4555,11 @@ fn: function (separators){
 var self=this;
 function $RegularExpression(){return smalltalk.RegularExpression||(typeof RegularExpression=="undefined"?nil:RegularExpression)}
 return smalltalk.withContext(function($ctx1) { 
-var $3,$5,$4,$2,$1;
-$3=$RegularExpression();
-$5="^[".__comma(separators);
-$4=_st($5).__comma("]+");
+var $4,$3,$2,$1;
+$4="^[".__comma(separators);
+$3=_st($4).__comma("]+");
 $ctx1.sendIdx[","]=1;
-$2=_st($3)._fromString_flag_($4,"g");
+$2=_st($RegularExpression())._fromString_flag_($3,"g");
 $1=self._replaceRegexp_with_($2,"");
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"trimLeft:",{separators:separators},smalltalk.String)})},
@@ -4625,12 +4596,11 @@ fn: function (separators){
 var self=this;
 function $RegularExpression(){return smalltalk.RegularExpression||(typeof RegularExpression=="undefined"?nil:RegularExpression)}
 return smalltalk.withContext(function($ctx1) { 
-var $3,$5,$4,$2,$1;
-$3=$RegularExpression();
-$5="[".__comma(separators);
-$4=_st($5).__comma("]+$");
+var $4,$3,$2,$1;
+$4="[".__comma(separators);
+$3=_st($4).__comma("]+$");
 $ctx1.sendIdx[","]=1;
-$2=_st($3)._fromString_flag_($4,"g");
+$2=_st($RegularExpression())._fromString_flag_($3,"g");
 $1=self._replaceRegexp_with_($2,"");
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"trimRight:",{separators:separators},smalltalk.String)})},
@@ -4837,9 +4807,7 @@ fn: function (){
 var self=this;
 function $StringStream(){return smalltalk.StringStream||(typeof StringStream=="undefined"?nil:StringStream)}
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=$StringStream();
-return $1;
+return $StringStream();
 }, function($ctx1) {$ctx1.fill(self,"streamClass",{},smalltalk.String.klass)})},
 args: [],
 source: "streamClass\x0a\x09\x09^StringStream",
@@ -4890,28 +4858,27 @@ category: 'comparing',
 fn: function (aCollection){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $3,$4,$2,$1,$7,$8,$6,$5,$9;
+var $2,$3,$1,$5,$6,$4;
 var $early={};
 try {
-$3=self._class();
+$2=self._class();
 $ctx1.sendIdx["class"]=1;
-$4=_st(aCollection)._class();
-$2=_st($3).__eq($4);
+$3=_st(aCollection)._class();
+$1=_st($2).__eq($3);
 $ctx1.sendIdx["="]=1;
-if(! smalltalk.assert($2)){
+if(! smalltalk.assert($1)){
 return false;
 };
-$7=self._size();
+$5=self._size();
 $ctx1.sendIdx["size"]=1;
-$8=_st(aCollection)._size();
-$6=_st($7).__eq($8);
-if(! smalltalk.assert($6)){
+$6=_st(aCollection)._size();
+$4=_st($5).__eq($6);
+if(! smalltalk.assert($4)){
 return false;
 };
 self._do_((function(each){
 return smalltalk.withContext(function($ctx2) {
-$9=_st(aCollection)._includes_(each);
-if(! smalltalk.assert($9)){
+if(! smalltalk.assert(_st(aCollection)._includes_(each))){
 throw $early=[false];
 };
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)})}));
@@ -5063,10 +5030,9 @@ category: 'printing',
 fn: function (aStream){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3;
-$1=smalltalk.Set.superclass.fn.prototype._printOn_.apply(_st(self), [aStream]);
+smalltalk.Set.superclass.fn.prototype._printOn_.apply(_st(self), [aStream]);
 $ctx1.sendIdx["printOn:"]=1;
-$2=_st(aStream)._nextPutAll_(" (");
+_st(aStream)._nextPutAll_(" (");
 $ctx1.sendIdx["nextPutAll:"]=1;
 self._do_separatedBy_((function(each){
 return smalltalk.withContext(function($ctx2) {
@@ -5076,7 +5042,7 @@ return smalltalk.withContext(function($ctx2) {
 return _st(aStream)._nextPutAll_(" ");
 $ctx2.sendIdx["nextPutAll:"]=2;
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)})}));
-$3=_st(aStream)._nextPutAll_(")");
+_st(aStream)._nextPutAll_(")");
 return self}, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},smalltalk.Set)})},
 args: ["aStream"],
 source: "printOn: aStream\x0a\x09super printOn: aStream.\x0a\x09\x0a\x09aStream nextPutAll: ' ('.\x0a\x09self \x0a\x09\x09do: [ :each | each printOn: aStream ]\x0a\x09\x09separatedBy: [ aStream nextPutAll: ' ' ].\x0a\x09aStream nextPutAll: ')'",
@@ -5125,17 +5091,16 @@ fn: function (aBlock){
 var self=this;
 var collection;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
+var $1;
 collection=_st(self._class())._new();
 self._do_((function(each){
 return smalltalk.withContext(function($ctx2) {
-$1=_st(aBlock)._value_(each);
-if(smalltalk.assert($1)){
+if(smalltalk.assert(_st(aBlock)._value_(each))){
 return _st(collection)._add_(each);
 };
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)})}));
-$2=collection;
-return $2;
+$1=collection;
+return $1;
 }, function($ctx1) {$ctx1.fill(self,"select:",{aBlock:aBlock,collection:collection},smalltalk.Set)})},
 args: ["aBlock"],
 source: "select: aBlock\x0a\x09| collection |\x0a\x09collection := self class new.\x0a\x09self do: [:each |\x0a\x09\x09(aBlock value: each) ifTrue: [\x0a\x09\x09\x09collection add: each]].\x0a\x09^collection",
@@ -5217,22 +5182,20 @@ var self=this;
 var result;
 function $OrderedCollection(){return smalltalk.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4;
+var $1,$2;
 var $early={};
 try {
 result=_st(self["@read"])._at_ifAbsent_(self["@readIndex"],(function(){
 return smalltalk.withContext(function($ctx2) {
-$1=_st(self["@write"])._isEmpty();
-if(smalltalk.assert($1)){
-$2=_st(self["@readIndex"]).__gt((1));
-if(smalltalk.assert($2)){
+if(smalltalk.assert(_st(self["@write"])._isEmpty())){
+if(smalltalk.assert(_st(self["@readIndex"]).__gt((1)))){
 self["@read"]=[];
 self["@read"];
 self["@readIndex"]=(1);
 self["@readIndex"];
 };
-$3=_st(aBlock)._value();
-throw $early=[$3];
+$1=_st(aBlock)._value();
+throw $early=[$1];
 };
 self["@read"]=self["@write"];
 self["@read"];
@@ -5244,8 +5207,8 @@ return _st(self["@read"])._first();
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
 _st(self["@read"])._at_put_(self["@readIndex"],nil);
 self["@readIndex"]=_st(self["@readIndex"]).__plus((1));
-$4=result;
-return $4;
+$2=result;
+return $2;
 }
 catch(e) {if(e===$early)return e[0]; throw e}
 }, function($ctx1) {$ctx1.fill(self,"nextIfAbsent:",{aBlock:aBlock,result:result},smalltalk.Queue)})},
@@ -5527,18 +5490,17 @@ category: 'reading',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$4,$3,$5,$6,$1;
-$2=self._atEnd();
-if(smalltalk.assert($2)){
+var $3,$2,$4,$5,$1;
+if(smalltalk.assert(self._atEnd())){
 $1=nil;
 } else {
-$4=self._position();
+$3=self._position();
 $ctx1.sendIdx["position"]=1;
-$3=_st($4).__plus((1));
-self._position_($3);
-$5=self["@collection"];
-$6=self._position();
-$1=_st($5)._at_($6);
+$2=_st($3).__plus((1));
+self._position_($2);
+$4=self["@collection"];
+$5=self._position();
+$1=_st($4)._at_($5);
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"next",{},smalltalk.Stream)})},
@@ -5557,17 +5519,16 @@ fn: function (anInteger){
 var self=this;
 var tempCollection;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
+var $1;
 tempCollection=_st(_st(self._collection())._class())._new();
 _st(anInteger)._timesRepeat_((function(){
 return smalltalk.withContext(function($ctx2) {
-$1=self._atEnd();
-if(! smalltalk.assert($1)){
+if(! smalltalk.assert(self._atEnd())){
 return _st(tempCollection)._add_(self._next());
 };
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
-$2=tempCollection;
-return $2;
+$1=tempCollection;
+return $1;
 }, function($ctx1) {$ctx1.fill(self,"next:",{anInteger:anInteger,tempCollection:tempCollection},smalltalk.Stream)})},
 args: ["anInteger"],
 source: "next: anInteger\x0a\x09| tempCollection |\x0a\x09tempCollection := self collection class new.\x0a\x09anInteger timesRepeat: [\x0a\x09\x09self atEnd ifFalse: [\x0a\x09\x09tempCollection add: self next]].\x0a\x09^tempCollection",
@@ -5646,9 +5607,8 @@ category: 'reading',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self._atEnd();
-if(! smalltalk.assert($2)){
+var $1;
+if(! smalltalk.assert(self._atEnd())){
 $1=_st(self._collection())._at_(_st(self._position()).__plus((1)));
 };
 return $1;
@@ -5667,13 +5627,12 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@position"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@position"]) == nil || $receiver == null){
 self["@position"]=(0);
 $1=self["@position"];
 } else {
-$1=$2;
+$1=self["@position"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"position",{},smalltalk.Stream)})},
@@ -5940,18 +5899,17 @@ fn: function (anInteger){
 var self=this;
 var tempCollection;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
+var $1;
 tempCollection=_st(_st(self._collection())._class())._new();
 _st(anInteger)._timesRepeat_((function(){
 return smalltalk.withContext(function($ctx2) {
-$1=self._atEnd();
-if(! smalltalk.assert($1)){
+if(! smalltalk.assert(self._atEnd())){
 tempCollection=_st(tempCollection).__comma(self._next());
 return tempCollection;
 };
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
-$2=tempCollection;
-return $2;
+$1=tempCollection;
+return $1;
 }, function($ctx1) {$ctx1.fill(self,"next:",{anInteger:anInteger,tempCollection:tempCollection},smalltalk.StringStream)})},
 args: ["anInteger"],
 source: "next: anInteger\x0a\x09| tempCollection |\x0a\x09tempCollection := self collection class new.\x0a\x09anInteger timesRepeat: [\x0a\x09\x09self atEnd ifFalse: [\x0a\x09\x09tempCollection := tempCollection, self next]].\x0a\x09^tempCollection",
@@ -5984,52 +5942,51 @@ fn: function (aString){
 var self=this;
 var pre,post;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$3,$2,$4,$5,$6,$9,$8,$10,$7,$12,$11,$14,$13,$16,$17,$15,$19,$20,$18;
-$1=self._atEnd();
-if(smalltalk.assert($1)){
-$3=self._collection();
+var $2,$1,$3,$4,$5,$8,$7,$9,$6,$11,$10,$13,$12,$15,$16,$14,$18,$19,$17;
+if(smalltalk.assert(self._atEnd())){
+$2=self._collection();
 $ctx1.sendIdx["collection"]=1;
-$2=_st($3).__comma(aString);
+$1=_st($2).__comma(aString);
 $ctx1.sendIdx[","]=1;
-self._setCollection_($2);
+self._setCollection_($1);
 $ctx1.sendIdx["setCollection:"]=1;
 } else {
-$4=self._collection();
+$3=self._collection();
 $ctx1.sendIdx["collection"]=2;
-$5=self._position();
+$4=self._position();
 $ctx1.sendIdx["position"]=1;
-pre=_st($4)._copyFrom_to_((1),$5);
+pre=_st($3)._copyFrom_to_((1),$4);
 $ctx1.sendIdx["copyFrom:to:"]=1;
 pre;
-$6=self._collection();
+$5=self._collection();
 $ctx1.sendIdx["collection"]=3;
-$9=self._position();
+$8=self._position();
 $ctx1.sendIdx["position"]=2;
-$8=_st($9).__plus((1));
+$7=_st($8).__plus((1));
 $ctx1.sendIdx["+"]=2;
-$10=_st(aString)._size();
+$9=_st(aString)._size();
 $ctx1.sendIdx["size"]=1;
-$7=_st($8).__plus($10);
+$6=_st($7).__plus($9);
 $ctx1.sendIdx["+"]=1;
-$12=self._collection();
-$11=_st($12)._size();
+$11=self._collection();
+$10=_st($11)._size();
 $ctx1.sendIdx["size"]=2;
-post=_st($6)._copyFrom_to_($7,$11);
+post=_st($5)._copyFrom_to_($6,$10);
 post;
-$14=_st(pre).__comma(aString);
-$13=_st($14).__comma(post);
+$13=_st(pre).__comma(aString);
+$12=_st($13).__comma(post);
 $ctx1.sendIdx[","]=2;
-self._setCollection_($13);
+self._setCollection_($12);
 };
-$16=self._position();
+$15=self._position();
 $ctx1.sendIdx["position"]=3;
-$17=_st(aString)._size();
-$15=_st($16).__plus($17);
-self._position_($15);
-$19=self._streamSize();
-$20=self._position();
-$18=_st($19)._max_($20);
-self._setStreamSize_($18);
+$16=_st(aString)._size();
+$14=_st($15).__plus($16);
+self._position_($14);
+$18=self._streamSize();
+$19=self._position();
+$17=_st($18)._max_($19);
+self._setStreamSize_($17);
 return self}, function($ctx1) {$ctx1.fill(self,"nextPutAll:",{aString:aString,pre:pre,post:post},smalltalk.StringStream)})},
 args: ["aString"],
 source: "nextPutAll: aString\x0a\x09| pre post |\x0a\x09self atEnd ifTrue: [ self setCollection: self collection, aString ] ifFalse: [\x0a\x09\x09pre := self collection copyFrom: 1 to: self position.\x0a\x09\x09post := self collection copyFrom: (self position + 1 + aString size) to: self collection size.\x0a\x09\x09self setCollection: pre, aString, post\x0a\x09].\x0a\x09self position: self position + aString size.\x0a\x09self setStreamSize: (self streamSize max: self position)",

+ 11 - 13
js/Kernel-Exceptions.js

@@ -539,18 +539,17 @@ category: 'private',
 fn: function (aContext){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$4,$1;
-$2=aContext;
-if(($receiver = $2) == nil || $receiver == null){
-$1=$2;
+var $1,$2;
+if(($receiver = aContext) == nil || $receiver == null){
+aContext;
 } else {
-$3=_st(aContext)._home();
+$1=_st(aContext)._home();
 $ctx1.sendIdx["home"]=1;
-if(($receiver = $3) == nil || $receiver == null){
-$1=$3;
+if(($receiver = $1) == nil || $receiver == null){
+$1;
 } else {
-$4=_st(aContext)._home();
-$1=self._logContext_($4);
+$2=_st(aContext)._home();
+self._logContext_($2);
 };
 };
 return self}, function($ctx1) {$ctx1.fill(self,"logErrorContext:",{aContext:aContext},smalltalk.ErrorHandler)})},
@@ -570,13 +569,12 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@current"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@current"]) == nil || $receiver == null){
 self["@current"]=self._new();
 $1=self["@current"];
 } else {
-$1=$2;
+$1=self["@current"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"current",{},smalltalk.ErrorHandler.klass)})},

+ 111 - 145
js/Kernel-Infrastructure.js

@@ -32,13 +32,12 @@ fn: function (){
 var self=this;
 function $Transcript(){return smalltalk.Transcript||(typeof Transcript=="undefined"?nil:Transcript)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@inspector"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@inspector"]) == nil || $receiver == null){
 self["@inspector"]=$Transcript();
 $1=self["@inspector"];
 } else {
-$1=$2;
+$1=self["@inspector"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"inspector",{},smalltalk.InspectorHandler.klass)})},
@@ -294,12 +293,11 @@ fn: function (aString){
 var self=this;
 function $Smalltalk(){return smalltalk.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=_st(_st($Smalltalk())._current())._at_(_st(aString)._asSymbol());
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = _st(_st($Smalltalk())._current())._at_(_st(aString)._asSymbol())) == nil || $receiver == null){
 $1=self._error_("Invalid class name");
 } else {
-$1=$2;
+$1=_st(_st($Smalltalk())._current())._at_(_st(aString)._asSymbol());
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"classNamed:",{aString:aString},smalltalk.Environment)})},
@@ -405,15 +403,14 @@ var self=this;
 function $Smalltalk(){return smalltalk.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
 function $ClassBuilder(){return smalltalk.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$3,$2;
-$1=_st(_st($Smalltalk())._current())._at_(aClassName);
-if(($receiver = $1) == nil || $receiver == null){
-$1;
+var $2,$1;
+if(($receiver = _st(_st($Smalltalk())._current())._at_(aClassName)) == nil || $receiver == null){
+_st(_st($Smalltalk())._current())._at_(aClassName);
 } else {
-$3="A class named ".__comma(aClassName);
-$2=_st($3).__comma(" already exists");
+$2="A class named ".__comma(aClassName);
+$1=_st($2).__comma(" already exists");
 $ctx1.sendIdx[","]=1;
-self._error_($2);
+self._error_($1);
 };
 _st(_st($ClassBuilder())._new())._copyClass_named_(aClass,aClassName);
 return self}, function($ctx1) {$ctx1.fill(self,"copyClass:to:",{aClass:aClass,aClassName:aClassName},smalltalk.Environment)})},
@@ -465,11 +462,9 @@ category: 'error handling',
 fn: function (aBlock,anErrorClass,exceptionBlock){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
 self._try_catch_(aBlock,(function(exception){
 return smalltalk.withContext(function($ctx2) {
-$1=_st(exception)._isKindOf_(self._classNamed_(_st(anErrorClass)._name()));
-if(smalltalk.assert($1)){
+if(smalltalk.assert(_st(exception)._isKindOf_(self._classNamed_(_st(anErrorClass)._name())))){
 return _st(exceptionBlock)._value_(exception);
 } else {
 return _st(exception)._signal();
@@ -509,16 +504,13 @@ var self=this;
 var package_;
 function $Package(){return smalltalk.Package||(typeof Package=="undefined"?nil:Package)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
 package_=_st($Package())._named_(aPackageName);
-$1=package_;
-if(($receiver = $1) == nil || $receiver == null){
+if(($receiver = package_) == nil || $receiver == null){
 self._error_("Invalid package name");
 } else {
-$1;
+package_;
 };
-$2=_st(package_).__eq_eq(_st(aClass)._package());
-if(smalltalk.assert($2)){
+if(smalltalk.assert(_st(package_).__eq_eq(_st(aClass)._package()))){
 return self;
 };
 _st(aClass)._package_(package_);
@@ -539,24 +531,23 @@ var self=this;
 var destinationClass;
 function $Smalltalk(){return smalltalk.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$3,$4,$2,$5;
+var $2,$3,$1,$4;
 destinationClass=_st(_st($Smalltalk())._current())._at_(_st(aClassName)._asSymbol());
-$1=destinationClass;
-if(($receiver = $1) == nil || $receiver == null){
+if(($receiver = destinationClass) == nil || $receiver == null){
 self._error_("Invalid class name");
 } else {
-$1;
+destinationClass;
 };
-$3=destinationClass;
-$4=_st(aMethod)._methodClass();
+$2=destinationClass;
+$3=_st(aMethod)._methodClass();
 $ctx1.sendIdx["methodClass"]=1;
-$2=_st($3).__eq_eq($4);
-if(smalltalk.assert($2)){
+$1=_st($2).__eq_eq($3);
+if(smalltalk.assert($1)){
 return self;
 };
 _st(destinationClass)._compile_category_(_st(aMethod)._source(),_st(aMethod)._protocol());
-$5=_st(aMethod)._methodClass();
-_st($5)._removeCompiledMethod_(aMethod);
+$4=_st(aMethod)._methodClass();
+_st($4)._removeCompiledMethod_(aMethod);
 return self}, function($ctx1) {$ctx1.fill(self,"moveMethod:toClass:",{aMethod:aMethod,aClassName:aClassName,destinationClass:destinationClass},smalltalk.Environment)})},
 args: ["aMethod", "aClassName"],
 source: "moveMethod: aMethod toClass: aClassName\x0a\x09| destinationClass |\x0a\x09\x0a\x09destinationClass := Smalltalk current at: aClassName asSymbol.\x0a\x09destinationClass ifNil: [ self error: 'Invalid class name' ].\x0a\x09destinationClass == aMethod methodClass ifTrue: [ ^ self ].\x0a\x09\x0a\x09destinationClass \x0a\x09\x09compile: aMethod source\x0a\x09\x09category: aMethod protocol.\x0a\x09aMethod methodClass \x0a\x09\x09removeCompiledMethod: aMethod",
@@ -715,15 +706,14 @@ var self=this;
 function $Smalltalk(){return smalltalk.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
 function $ClassBuilder(){return smalltalk.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$3,$2;
-$1=_st(_st($Smalltalk())._current())._at_(aClassName);
-if(($receiver = $1) == nil || $receiver == null){
-$1;
+var $2,$1;
+if(($receiver = _st(_st($Smalltalk())._current())._at_(aClassName)) == nil || $receiver == null){
+_st(_st($Smalltalk())._current())._at_(aClassName);
 } else {
-$3="A class named ".__comma(aClassName);
-$2=_st($3).__comma(" already exists");
+$2="A class named ".__comma(aClassName);
+$1=_st($2).__comma(" already exists");
 $ctx1.sendIdx[","]=1;
-self._error_($2);
+self._error_($1);
 };
 _st(_st($ClassBuilder())._new())._renameClass_to_(aClass,aClassName);
 return self}, function($ctx1) {$ctx1.fill(self,"renameClass:to:",{aClass:aClass,aClassName:aClassName},smalltalk.Environment)})},
@@ -914,9 +904,8 @@ category: 'proxy',
 fn: function (aMessage){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self._lookupProperty_(_st(_st(aMessage)._selector())._asJavaScriptSelector());
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self._lookupProperty_(_st(_st(aMessage)._selector())._asJavaScriptSelector())) == nil || $receiver == null){
 $1=smalltalk.JSObjectProxy.superclass.fn.prototype._doesNotUnderstand_.apply(_st(self), [aMessage]);
 } else {
 var jsSelector;
@@ -1294,47 +1283,41 @@ fn: function (){
 var self=this;
 function $String(){return smalltalk.String||(typeof String=="undefined"?nil:String)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$4,$5,$7,$8,$6,$9,$12,$11,$10,$13,$15,$16,$14,$18,$19,$17,$1;
+var $2,$4,$5,$3,$8,$7,$6,$10,$11,$9,$13,$12,$1;
 $1=_st($String())._streamContents_((function(stream){
 return smalltalk.withContext(function($ctx2) {
-$2=stream;
-$3=$2;
-$4=_st(self._class())._name();
+$2=_st(self._class())._name();
 $ctx2.sendIdx["name"]=1;
-_st($3)._nextPutAll_($4);
+_st(stream)._nextPutAll_($2);
 $ctx2.sendIdx["nextPutAll:"]=1;
-$5=$2;
-$7=_st($String())._lf();
+$4=_st($String())._lf();
 $ctx2.sendIdx["lf"]=1;
-$8=_st($String())._tab();
+$5=_st($String())._tab();
 $ctx2.sendIdx["tab"]=1;
-$6=_st($7).__comma($8);
+$3=_st($4).__comma($5);
 $ctx2.sendIdx[","]=1;
-_st($5)._nextPutAll_($6);
+_st(stream)._nextPutAll_($3);
 $ctx2.sendIdx["nextPutAll:"]=2;
-_st($2)._nextPutAll_(" named: ");
+_st(stream)._nextPutAll_(" named: ");
 $ctx2.sendIdx["nextPutAll:"]=3;
-$9=$2;
-$12=self._name();
-$11="'".__comma($12);
+$8=self._name();
+$7="'".__comma($8);
 $ctx2.sendIdx[","]=3;
-$10=_st($11).__comma("'");
+$6=_st($7).__comma("'");
 $ctx2.sendIdx[","]=2;
-_st($9)._nextPutAll_($10);
+_st(stream)._nextPutAll_($6);
 $ctx2.sendIdx["nextPutAll:"]=4;
-$13=$2;
-$15=_st($String())._lf();
-$16=_st($String())._tab();
-$14=_st($15).__comma($16);
+$10=_st($String())._lf();
+$11=_st($String())._tab();
+$9=_st($10).__comma($11);
 $ctx2.sendIdx[","]=4;
-_st($13)._nextPutAll_($14);
+_st(stream)._nextPutAll_($9);
 $ctx2.sendIdx["nextPutAll:"]=5;
-_st($2)._nextPutAll_(" transport: (");
+_st(stream)._nextPutAll_(" transport: (");
 $ctx2.sendIdx["nextPutAll:"]=6;
-$18=$2;
-$19=_st(_st(self._transport())._definition()).__comma(")");
-$17=_st($18)._nextPutAll_($19);
-return $17;
+$13=_st(_st(self._transport())._definition()).__comma(")");
+$12=_st(stream)._nextPutAll_($13);
+return $12;
 }, function($ctx2) {$ctx2.fillBlock({stream:stream},$ctx1,1)})}));
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"definition",{},smalltalk.Package)})},
@@ -1485,14 +1468,13 @@ category: 'printing',
 fn: function (aStream){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
+var $1;
 smalltalk.Package.superclass.fn.prototype._printOn_.apply(_st(self), [aStream]);
-$1=aStream;
-_st($1)._nextPutAll_(" (");
+_st(aStream)._nextPutAll_(" (");
 $ctx1.sendIdx["nextPutAll:"]=1;
-_st($1)._nextPutAll_(self._name());
+_st(aStream)._nextPutAll_(self._name());
 $ctx1.sendIdx["nextPutAll:"]=2;
-$2=_st($1)._nextPutAll_(")");
+$1=_st(aStream)._nextPutAll_(")");
 return self}, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},smalltalk.Package)})},
 args: ["aStream"],
 source: "printOn: aStream\x0a\x09super printOn: aStream.\x0a\x09aStream \x0a\x09\x09nextPutAll: ' (';\x0a\x09\x09nextPutAll: self name;\x0a\x09\x09nextPutAll: ')'",
@@ -1554,16 +1536,15 @@ fn: function (){
 var self=this;
 function $PackageTransport(){return smalltalk.PackageTransport||(typeof PackageTransport=="undefined"?nil:PackageTransport)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$4,$1;
-$2=self["@transport"];
-if(($receiver = $2) == nil || $receiver == null){
-$3=_st($PackageTransport())._fromJson_(self._basicTransport());
-_st($3)._package_(self);
-$4=_st($3)._yourself();
-self["@transport"]=$4;
+var $2,$3,$1;
+if(($receiver = self["@transport"]) == nil || $receiver == null){
+$2=_st($PackageTransport())._fromJson_(self._basicTransport());
+_st($2)._package_(self);
+$3=_st($2)._yourself();
+self["@transport"]=$3;
 $1=self["@transport"];
 } else {
-$1=$2;
+$1=self["@transport"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"transport",{},smalltalk.Package)})},
@@ -1668,13 +1649,12 @@ var children,others,nodes,expandedClasses;
 function $ClassSorterNode(){return smalltalk.ClassSorterNode||(typeof ClassSorterNode=="undefined"?nil:ClassSorterNode)}
 function $Array(){return smalltalk.Array||(typeof Array=="undefined"?nil:Array)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1,$4,$3,$6,$5,$7,$8;
+var $2,$1,$4,$3,$5;
 children=[];
 others=[];
-$1=_st(classes)._do_((function(each){
+_st(classes)._do_((function(each){
 return smalltalk.withContext(function($ctx2) {
-$2=_st(classes)._includes_(_st(each)._superclass());
-if(smalltalk.assert($2)){
+if(smalltalk.assert(_st(classes)._includes_(_st(each)._superclass()))){
 return _st(others)._add_(each);
 } else {
 return _st(children)._add_(each);
@@ -1688,21 +1668,21 @@ return _st($ClassSorterNode())._on_classes_level_(each,others,(0));
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,4)})}));
 nodes=_st(nodes)._sorted_((function(a,b){
 return smalltalk.withContext(function($ctx2) {
-$4=_st(a)._theClass();
+$2=_st(a)._theClass();
 $ctx2.sendIdx["theClass"]=1;
-$3=_st($4)._name();
+$1=_st($2)._name();
 $ctx2.sendIdx["name"]=1;
-$6=_st(b)._theClass();
-$5=_st($6)._name();
-return _st($3).__lt_eq($5);
+$4=_st(b)._theClass();
+$3=_st($4)._name();
+return _st($1).__lt_eq($3);
 }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,5)})}));
 expandedClasses=_st($Array())._new();
-$7=_st(nodes)._do_((function(aNode){
+_st(nodes)._do_((function(aNode){
 return smalltalk.withContext(function($ctx2) {
 return _st(aNode)._traverseClassesWith_(expandedClasses);
 }, function($ctx2) {$ctx2.fillBlock({aNode:aNode},$ctx1,6)})}));
-$8=expandedClasses;
-return $8;
+$5=expandedClasses;
+return $5;
 }, function($ctx1) {$ctx1.fill(self,"sortedClasses:",{classes:classes,children:children,others:others,nodes:nodes,expandedClasses:expandedClasses},smalltalk.Package.klass)})},
 args: ["classes"],
 source: "sortedClasses: classes\x0a\x09\x22Answer classes, sorted by superclass/subclasses and by class name for common subclasses (Issue #143)\x22\x0a\x0a\x09| children others nodes expandedClasses |\x0a\x09children := #().\x0a\x09others := #().\x0a\x09classes do: [:each |\x0a\x09\x09(classes includes: each superclass)\x0a\x09\x09\x09ifFalse: [children add: each]\x0a\x09\x09\x09ifTrue: [others add: each]].\x0a\x09nodes := children collect: [:each |\x0a\x09\x09ClassSorterNode on: each classes: others level: 0].\x0a\x09nodes := nodes sorted: [:a :b | a theClass name <= b theClass name ].\x0a\x09expandedClasses := Array new.\x0a\x09nodes do: [:aNode |\x0a\x09\x09aNode traverseClassesWith: expandedClasses].\x0a\x09^expandedClasses",
@@ -1723,9 +1703,8 @@ category: 'actions',
 fn: function (anObject){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@worker"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@worker"]) == nil || $receiver == null){
 $1=self._error_("ajax: not available");
 } else {
 $1=_st(self["@worker"])._ajax_(anObject);
@@ -1746,9 +1725,8 @@ category: 'actions',
 fn: function (aString){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@worker"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@worker"]) == nil || $receiver == null){
 $1=self._error_("alert: not available");
 } else {
 $1=_st(self["@worker"])._alert_(aString);
@@ -1769,9 +1747,8 @@ category: 'actions',
 fn: function (aString){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@worker"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@worker"]) == nil || $receiver == null){
 $1=self._error_("confirm: not available");
 } else {
 $1=_st(self["@worker"])._confirm_(aString);
@@ -1835,16 +1812,13 @@ var self=this;
 var candidate;
 function $BrowserInterface(){return smalltalk.BrowserInterface||(typeof BrowserInterface=="undefined"?nil:BrowserInterface)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
 smalltalk.PlatformInterface.klass.superclass.fn.prototype._initialize.apply(_st(self), []);
-$1=$BrowserInterface();
-if(($receiver = $1) == nil || $receiver == null){
-$1;
+if(($receiver = $BrowserInterface()) == nil || $receiver == null){
+$BrowserInterface();
 } else {
 candidate=_st($BrowserInterface())._new();
 candidate;
-$2=_st(candidate)._isAvailable();
-if(smalltalk.assert($2)){
+if(smalltalk.assert(_st(candidate)._isAvailable())){
 self._setWorker_(candidate);
 return self;
 };
@@ -1864,9 +1838,8 @@ category: 'actions',
 fn: function (aString){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@worker"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@worker"]) == nil || $receiver == null){
 $1=self._error_("prompt: not available");
 } else {
 $1=_st(self["@worker"])._prompt_(aString);
@@ -1924,13 +1897,12 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@current"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@current"]) == nil || $receiver == null){
 self["@current"]=self._new();
 $1=self["@current"];
 } else {
-$1=$2;
+$1=self["@current"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"current",{},smalltalk.ProgressHandler.klass)})},
@@ -2036,12 +2008,11 @@ var self=this;
 function $Error(){return smalltalk.Error||(typeof Error=="undefined"?nil:Error)}
 function $JavaScriptException(){return smalltalk.JavaScriptException||(typeof JavaScriptException=="undefined"?nil:JavaScriptException)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=_st(self._isSmalltalkObject_(anObject))._and_((function(){
+var $1;
+if(smalltalk.assert(_st(self._isSmalltalkObject_(anObject))._and_((function(){
 return smalltalk.withContext(function($ctx2) {
 return _st(anObject)._isKindOf_($Error());
-}, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
-if(smalltalk.assert($2)){
+}, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})})))){
 $1=anObject;
 } else {
 $1=_st($JavaScriptException())._on_(anObject);
@@ -2080,9 +2051,8 @@ category: 'accessing',
 fn: function (aKey,aBlock){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self._includesKey_(aKey);
-$1=_st($2)._ifTrue_ifFalse_((function(){
+var $1;
+$1=_st(self._includesKey_(aKey))._ifTrue_ifFalse_((function(){
 return smalltalk.withContext(function($ctx2) {
 return self._at_(aKey);
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}),aBlock);
@@ -2195,14 +2165,13 @@ category: 'private',
 fn: function (packageName,aDict){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
+var $1;
 self._deprecatedAPI();
-$1=_st(aDict)._isEmpty();
-if(! smalltalk.assert($1)){
+if(! smalltalk.assert(_st(aDict)._isEmpty())){
 self._error_("createPackage:properties: called with nonempty properties");
 };
-$2=self._createPackage_(packageName);
-return $2;
+$1=self._createPackage_(packageName);
+return $1;
 }, function($ctx1) {$ctx1.fill(self,"createPackage:properties:",{packageName:packageName,aDict:aDict},smalltalk.Smalltalk)})},
 args: ["packageName", "aDict"],
 source: "createPackage: packageName properties: aDict\x0a\x09\x22Needed to import .st files: they begin with this call.\x22\x0a\x09self deprecatedAPI.\x0a\x09\x0a\x09aDict isEmpty ifFalse: [ self error: 'createPackage:properties: called with nonempty properties' ].\x0a\x09^ self createPackage: packageName",
@@ -2366,9 +2335,8 @@ category: 'packages',
 fn: function (packageName,aBlock){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self._packageAt_(packageName);
-$1=_st($2)._ifNil_(aBlock);
+var $1;
+$1=_st(self._packageAt_(packageName))._ifNil_(aBlock);
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"packageAt:ifAbsent:",{packageName:packageName,aBlock:aBlock},smalltalk.Smalltalk)})},
 args: ["packageName", "aBlock"],
@@ -2507,16 +2475,15 @@ var self=this;
 function $SystemAnnouncer(){return smalltalk.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
 function $ClassRemoved(){return smalltalk.ClassRemoved||(typeof ClassRemoved=="undefined"?nil:ClassRemoved)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3;
-$1=_st(aClass)._isMetaclass();
-if(smalltalk.assert($1)){
+var $1,$2;
+if(smalltalk.assert(_st(aClass)._isMetaclass())){
 self._error_(_st(_st(aClass)._asString()).__comma(" is a Metaclass and cannot be removed!"));
 };
 self._deleteClass_(aClass);
-$2=_st($ClassRemoved())._new();
-_st($2)._theClass_(aClass);
-$3=_st($2)._yourself();
-_st(_st($SystemAnnouncer())._current())._announce_($3);
+$1=_st($ClassRemoved())._new();
+_st($1)._theClass_(aClass);
+$2=_st($1)._yourself();
+_st(_st($SystemAnnouncer())._current())._announce_($2);
 return self}, function($ctx1) {$ctx1.fill(self,"removeClass:",{aClass:aClass},smalltalk.Smalltalk)})},
 args: ["aClass"],
 source: "removeClass: aClass\x0a\x09aClass isMetaclass ifTrue: [self error: aClass asString, ' is a Metaclass and cannot be removed!'].\x0a\x09\x0a\x09self deleteClass: aClass.\x0a\x09\x0a\x09SystemAnnouncer current\x0a\x09\x09announce: (ClassRemoved new\x0a\x09\x09\x09theClass: aClass;\x0a\x09\x09\x09yourself)",
@@ -2558,7 +2525,7 @@ fn: function (packageName,newName){
 var self=this;
 var pkg;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3;
+var $1,$2;
 pkg=self._packageAt_ifAbsent_(packageName,(function(){
 return smalltalk.withContext(function($ctx2) {
 $1="Missing package: ".__comma(packageName);
@@ -2566,12 +2533,11 @@ $ctx2.sendIdx[","]=1;
 return self._error_($1);
 $ctx2.sendIdx["error:"]=1;
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
-$2=self._packageAt_(newName);
-if(($receiver = $2) == nil || $receiver == null){
-$2;
+if(($receiver = self._packageAt_(newName)) == nil || $receiver == null){
+self._packageAt_(newName);
 } else {
-$3="Already exists a package called: ".__comma(newName);
-self._error_($3);
+$2="Already exists a package called: ".__comma(newName);
+self._error_($2);
 };
 _st(self._at_("packages"))._at_put_(newName,pkg);
 _st(pkg)._name_(newName);

+ 52 - 69
js/Kernel-Methods.js

@@ -223,14 +223,13 @@ fn: function (anErrorClass,aBlock){
 var self=this;
 function $Smalltalk(){return smalltalk.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
+var $1;
 $1=self._try_catch_(self,(function(error){
 var smalltalkError;
 return smalltalk.withContext(function($ctx2) {
 smalltalkError=_st(_st($Smalltalk())._current())._asSmalltalkException_(error);
 smalltalkError;
-$2=_st(smalltalkError)._isKindOf_(anErrorClass);
-if(smalltalk.assert($2)){
+if(smalltalk.assert(_st(smalltalkError)._isKindOf_(anErrorClass))){
 return _st(aBlock)._value_(smalltalkError);
 } else {
 return _st(smalltalkError)._resignal();
@@ -493,12 +492,11 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self._basicAt_("category");
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self._basicAt_("category")) == nil || $receiver == null){
 $1=self._defaultCategory();
 } else {
-$1=$2;
+$1=self._basicAt_("category");
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"category",{},smalltalk.CompiledMethod)})},
@@ -635,14 +633,12 @@ fn: function (){
 var self=this;
 var selector;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
 var $early={};
 try {
 selector=self._selector();
 _st(self._methodClass())._allSubclassesDo_((function(each){
 return smalltalk.withContext(function($ctx2) {
-$1=_st(each)._includesSelector_(selector);
-if(smalltalk.assert($1)){
+if(smalltalk.assert(_st(each)._includesSelector_(selector))){
 throw $early=[true];
 };
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)})}));
@@ -665,22 +661,21 @@ fn: function (){
 var self=this;
 var superclass;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$6,$5,$4,$3;
+var $1,$5,$4,$3,$2;
 $1=self._methodClass();
 $ctx1.sendIdx["methodClass"]=1;
 superclass=_st($1)._superclass();
 $ctx1.sendIdx["superclass"]=1;
-$2=superclass;
-if(($receiver = $2) == nil || $receiver == null){
+if(($receiver = superclass) == nil || $receiver == null){
 return false;
 } else {
-$2;
+superclass;
 };
-$6=self._methodClass();
-$5=_st($6)._superclass();
-$4=_st($5)._lookupSelector_(self._selector());
-$3=_st($4)._notNil();
-return $3;
+$5=self._methodClass();
+$4=_st($5)._superclass();
+$3=_st($4)._lookupSelector_(self._selector());
+$2=_st($3)._notNil();
+return $2;
 }, function($ctx1) {$ctx1.fill(self,"isOverride",{superclass:superclass},smalltalk.CompiledMethod)})},
 args: [],
 source: "isOverride\x0a\x09| superclass |\x0a    \x0a    superclass := self methodClass superclass.\x0a\x09superclass ifNil: [ ^ false ].\x0a\x09\x0a    ^ (self methodClass superclass lookupSelector: self selector) notNil",
@@ -836,12 +831,11 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self._basicAt_("source");
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self._basicAt_("source")) == nil || $receiver == null){
 $1="";
 } else {
-$1=$2;
+$1=self._basicAt_("source");
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"source",{},smalltalk.CompiledMethod)})},
@@ -914,9 +908,7 @@ category: 'actions',
 fn: function (aBlock){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=_st(self["@poolSize"]).__lt(self._maxPoolSize());
-if(smalltalk.assert($1)){
+if(smalltalk.assert(_st(self["@poolSize"]).__lt(self._maxPoolSize()))){
 self._addWorker();
 };
 _st(self["@queue"])._nextPut_(aBlock);
@@ -957,7 +949,7 @@ var self=this;
 var sentinel;
 function $Object(){return smalltalk.Object||(typeof Object=="undefined"?nil:Object)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
+var $1;
 sentinel=_st($Object())._new();
 $1=(function(){
 var block;
@@ -969,8 +961,7 @@ return smalltalk.withContext(function($ctx3) {
 return sentinel;
 }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)})}));
 block;
-$2=_st(block).__eq_eq(sentinel);
-if(! smalltalk.assert($2)){
+if(! smalltalk.assert(_st(block).__eq_eq(sentinel))){
 return _st((function(){
 return smalltalk.withContext(function($ctx3) {
 return _st(block)._value();
@@ -996,12 +987,11 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@maxPoolSize"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@maxPoolSize"]) == nil || $receiver == null){
 $1=self._defaultMaxPoolSize();
 } else {
-$1=$2;
+$1=self["@maxPoolSize"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"maxPoolSize",{},smalltalk.ForkPool)})},
@@ -1037,13 +1027,12 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self["@default"];
-if(($receiver = $2) == nil || $receiver == null){
+var $1;
+if(($receiver = self["@default"]) == nil || $receiver == null){
 self["@default"]=self._new();
 $1=self["@default"];
 } else {
-$1=$2;
+$1=self["@default"];
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"default",{},smalltalk.ForkPool.klass)})},
@@ -1130,14 +1119,13 @@ category: 'printing',
 fn: function (aStream){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
+var $1;
 smalltalk.Message.superclass.fn.prototype._printOn_.apply(_st(self), [aStream]);
-$1=aStream;
-_st($1)._nextPutAll_("(");
+_st(aStream)._nextPutAll_("(");
 $ctx1.sendIdx["nextPutAll:"]=1;
-_st($1)._nextPutAll_(self._selector());
+_st(aStream)._nextPutAll_(self._selector());
 $ctx1.sendIdx["nextPutAll:"]=2;
-$2=_st($1)._nextPutAll_(")");
+$1=_st(aStream)._nextPutAll_(")");
 return self}, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},smalltalk.Message)})},
 args: ["aStream"],
 source: "printOn: aStream\x0a\x09super printOn: aStream.\x0a\x09aStream\x0a\x09\x09nextPutAll: '(';\x0a\x09\x09nextPutAll: self selector;\x0a\x09\x09nextPutAll: ')'",
@@ -1283,18 +1271,17 @@ category: 'printing',
 fn: function (aStream){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
+var $1;
 smalltalk.MessageSend.superclass.fn.prototype._printOn_.apply(_st(self), [aStream]);
-$1=aStream;
-_st($1)._nextPutAll_("(");
+_st(aStream)._nextPutAll_("(");
 $ctx1.sendIdx["nextPutAll:"]=1;
-_st($1)._nextPutAll_(self._receiver());
+_st(aStream)._nextPutAll_(self._receiver());
 $ctx1.sendIdx["nextPutAll:"]=2;
-_st($1)._nextPutAll_(" >> ");
+_st(aStream)._nextPutAll_(" >> ");
 $ctx1.sendIdx["nextPutAll:"]=3;
-_st($1)._nextPutAll_(self._selector());
+_st(aStream)._nextPutAll_(self._selector());
 $ctx1.sendIdx["nextPutAll:"]=4;
-$2=_st($1)._nextPutAll_(")");
+$1=_st(aStream)._nextPutAll_(")");
 return self}, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},smalltalk.MessageSend)})},
 args: ["aStream"],
 source: "printOn: aStream\x0a\x09super printOn: aStream.\x0a\x09aStream\x0a\x09\x09nextPutAll: '(';\x0a\x09\x09nextPutAll: self receiver;\x0a\x09\x09nextPutAll: ' >> ';\x0a\x09\x09nextPutAll: self selector;\x0a\x09\x09nextPutAll: ')'",
@@ -1482,16 +1469,15 @@ category: 'converting',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$3,$4,$1;
-$2=self._isBlockContext();
-if(smalltalk.assert($2)){
-$3="a block (in ".__comma(_st(self._methodContext())._asString());
+var $2,$3,$1;
+if(smalltalk.assert(self._isBlockContext())){
+$2="a block (in ".__comma(_st(self._methodContext())._asString());
 $ctx1.sendIdx[","]=2;
-$1=_st($3).__comma(")");
+$1=_st($2).__comma(")");
 $ctx1.sendIdx[","]=1;
 } else {
-$4=_st(_st(_st(self._receiver())._class())._name()).__comma(" >> ");
-$1=_st($4).__comma(self._selector());
+$3=_st(_st(_st(self._receiver())._class())._name()).__comma(" >> ");
+$1=_st($3).__comma(self._selector());
 $ctx1.sendIdx[","]=3;
 };
 return $1;
@@ -1606,20 +1592,18 @@ category: 'accessing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$3,$2;
-$1=self._isBlockContext();
-if(! smalltalk.assert($1)){
+var $1;
+if(! smalltalk.assert(self._isBlockContext())){
 return self;
 };
-$3=self._outerContext();
-if(($receiver = $3) == nil || $receiver == null){
-$2=$3;
+if(($receiver = self._outerContext()) == nil || $receiver == null){
+$1=self._outerContext();
 } else {
 var outer;
 outer=$receiver;
-$2=_st(outer)._methodContext();
+$1=_st(outer)._methodContext();
 };
-return $2;
+return $1;
 }, function($ctx1) {$ctx1.fill(self,"methodContext",{},smalltalk.MethodContext)})},
 args: [],
 source: "methodContext\x0a\x09self isBlockContext ifFalse: [ ^ self ].\x0a\x09\x0a\x09^ self outerContext ifNotNil: [ :outer |\x0a\x09\x09outer methodContext ]",
@@ -1651,14 +1635,13 @@ category: 'printing',
 fn: function (aStream){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
+var $1;
 smalltalk.MethodContext.superclass.fn.prototype._printOn_.apply(_st(self), [aStream]);
-$1=aStream;
-_st($1)._nextPutAll_("(");
+_st(aStream)._nextPutAll_("(");
 $ctx1.sendIdx["nextPutAll:"]=1;
-_st($1)._nextPutAll_(self._asString());
+_st(aStream)._nextPutAll_(self._asString());
 $ctx1.sendIdx["nextPutAll:"]=2;
-$2=_st($1)._nextPutAll_(")");
+$1=_st(aStream)._nextPutAll_(")");
 return self}, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},smalltalk.MethodContext)})},
 args: ["aStream"],
 source: "printOn: aStream\x0a\x09super printOn: aStream.\x0a\x09aStream \x0a\x09\x09nextPutAll: '(';\x0a\x09\x09nextPutAll: self asString;\x0a\x09\x09nextPutAll: ')'",

+ 75 - 95
js/Kernel-Objects.js

@@ -500,17 +500,16 @@ var self=this;
 var variables;
 function $Dictionary(){return smalltalk.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3;
+var $1;
 variables=_st($Dictionary())._new();
-$1=_st(variables)._at_put_("#self",self);
+_st(variables)._at_put_("#self",self);
 $ctx1.sendIdx["at:put:"]=1;
 _st(_st(self._class())._allInstanceVariableNames())._do_((function(each){
 return smalltalk.withContext(function($ctx2) {
 return _st(variables)._at_put_(each,self._instVarAt_(each));
 }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)})}));
-$2=anInspector;
-_st($2)._setLabel_(self._printString());
-$3=_st($2)._setVariables_(variables);
+_st(anInspector)._setLabel_(self._printString());
+$1=_st(anInspector)._setVariables_(variables);
 return self}, function($ctx1) {$ctx1.fill(self,"inspectOn:",{anInspector:anInspector,variables:variables},smalltalk.Object)})},
 args: ["anInspector"],
 source: "inspectOn: anInspector\x0a\x09| variables |\x0a\x09variables := Dictionary new.\x0a\x09variables at: '#self' put: self.\x0a\x09self class allInstanceVariableNames do: [:each |\x0a\x09\x09variables at: each put: (self instVarAt: each)].\x0a\x09anInspector\x0a\x09\x09setLabel: self printString;\x0a\x09\x09setVariables: variables",
@@ -638,9 +637,8 @@ category: 'testing',
 fn: function (aClass){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self._isMemberOf_(aClass);
-if(smalltalk.assert($2)){
+var $1;
+if(smalltalk.assert(self._isMemberOf_(aClass))){
 $1=true;
 } else {
 $1=_st(self._class())._inheritsFrom_(aClass);
@@ -858,25 +856,23 @@ category: 'printing',
 fn: function (aStream){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$7,$6,$5,$4,$3,$1,$9,$11,$10,$8;
-$2=aStream;
-$7=self._class();
+var $5,$4,$3,$2,$1,$7,$6;
+$5=self._class();
 $ctx1.sendIdx["class"]=1;
-$6=_st($7)._name();
+$4=_st($5)._name();
 $ctx1.sendIdx["name"]=1;
-$5=_st($6)._first();
-$4=_st($5)._isVowel();
-if(smalltalk.assert($4)){
-$3="an ";
+$3=_st($4)._first();
+$2=_st($3)._isVowel();
+if(smalltalk.assert($2)){
+$1="an ";
 } else {
-$3="a ";
+$1="a ";
 };
-$1=_st($2)._nextPutAll_($3);
+_st(aStream)._nextPutAll_($1);
 $ctx1.sendIdx["nextPutAll:"]=1;
-$9=aStream;
-$11=self._class();
-$10=_st($11)._name();
-$8=_st($9)._nextPutAll_($10);
+$7=self._class();
+$6=_st($7)._name();
+_st(aStream)._nextPutAll_($6);
 return self}, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},smalltalk.Object)})},
 args: ["aStream"],
 source: "printOn: aStream\x0a\x09\x22Append to the aStream, a string representing the receiver.\x22\x0a\x09\x0a\x09aStream nextPutAll: (self class name first isVowel\x0a\x09\x09ifTrue: [ 'an ' ]\x0a\x09\x09ifFalse: [ 'a ' ]).\x0a\x09aStream nextPutAll: self class name",
@@ -1236,9 +1232,8 @@ category: 'controlling',
 fn: function (aBlock){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self.__eq(true);
-$1=_st($2)._ifTrue_ifFalse_(aBlock,(function(){
+var $1;
+$1=_st(self.__eq(true))._ifTrue_ifFalse_(aBlock,(function(){
 return smalltalk.withContext(function($ctx2) {
 return false;
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
@@ -1458,9 +1453,8 @@ category: 'controlling',
 fn: function (aBlock){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
-$2=self.__eq(true);
-$1=_st($2)._ifTrue_ifFalse_((function(){
+var $1;
+$1=_st(self.__eq(true))._ifTrue_ifFalse_((function(){
 return smalltalk.withContext(function($ctx2) {
 return true;
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}),aBlock);
@@ -3012,13 +3006,10 @@ category: 'mathematical functions',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
-$1=self._isZero();
-if(smalltalk.assert($1)){
+if(smalltalk.assert(self._isZero())){
 return (0);
 };
-$2=self._positive();
-if(smalltalk.assert($2)){
+if(smalltalk.assert(self._positive())){
 return (1);
 } else {
 return (-1);
@@ -3168,16 +3159,14 @@ var self=this;
 var array,value,pos;
 function $Array(){return smalltalk.Array||(typeof Array=="undefined"?nil:Array)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3;
+var $1;
 value=self;
 array=_st($Array())._new();
 pos=(1);
-$1=_st(step).__eq((0));
-if(smalltalk.assert($1)){
+if(smalltalk.assert(_st(step).__eq((0)))){
 self._error_("step must be non-zero");
 };
-$2=_st(step).__lt((0));
-if(smalltalk.assert($2)){
+if(smalltalk.assert(_st(step).__lt((0)))){
 _st((function(){
 return smalltalk.withContext(function($ctx2) {
 return _st(value).__gt_eq(stop);
@@ -3207,8 +3196,8 @@ value=_st(value).__plus(step);
 return value;
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,7)})}));
 };
-$3=array;
-return $3;
+$1=array;
+return $1;
 }, function($ctx1) {$ctx1.fill(self,"to:by:",{stop:stop,step:step,array:array,value:value,pos:pos},smalltalk.Number)})},
 args: ["stop", "step"],
 source: "to: stop by: step\x0a\x09| array value pos |\x0a\x09value := self.\x0a\x09array := Array new.\x0a\x09pos := 1.\x0a\x09step = 0 ifTrue: [self error: 'step must be non-zero'].\x0a\x09step < 0\x0a\x09\x09ifTrue: [[ value >= stop ] whileTrue: [\x0a\x09\x09\x09\x09\x09array at: pos put: value.\x0a\x09\x09\x09\x09\x09pos := pos + 1.\x0a\x09\x09\x09\x09\x09value := value + step]]\x0a\x09\x09ifFalse: [[ value <= stop ] whileTrue: [\x0a\x09\x09\x09\x09\x09array at: pos put: value.\x0a\x09\x09\x09\x09pos := pos + 1.\x0a\x09\x09\x09\x09\x09value := value + step]].\x0a\x09^array",
@@ -3225,14 +3214,11 @@ fn: function (stop,step,aBlock){
 var self=this;
 var value;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
 value=self;
-$1=_st(step).__eq((0));
-if(smalltalk.assert($1)){
+if(smalltalk.assert(_st(step).__eq((0)))){
 self._error_("step must be non-zero");
 };
-$2=_st(step).__lt((0));
-if(smalltalk.assert($2)){
+if(smalltalk.assert(_st(step).__lt((0)))){
 _st((function(){
 return smalltalk.withContext(function($ctx2) {
 return _st(value).__gt_eq(stop);
@@ -3388,21 +3374,20 @@ fn: function (aPoint){
 var self=this;
 function $Point(){return smalltalk.Point||(typeof Point=="undefined"?nil:Point)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$4,$6,$5,$3,$8,$10,$9,$7,$1;
-$2=$Point();
-$4=self._x();
+var $3,$5,$4,$2,$7,$9,$8,$6,$1;
+$3=self._x();
 $ctx1.sendIdx["x"]=1;
-$6=_st(aPoint)._asPoint();
+$5=_st(aPoint)._asPoint();
 $ctx1.sendIdx["asPoint"]=1;
-$5=_st($6)._x();
-$3=_st($4).__star($5);
+$4=_st($5)._x();
+$2=_st($3).__star($4);
 $ctx1.sendIdx["*"]=1;
-$8=self._y();
+$7=self._y();
 $ctx1.sendIdx["y"]=1;
-$10=_st(aPoint)._asPoint();
-$9=_st($10)._y();
-$7=_st($8).__star($9);
-$1=_st($2)._x_y_($3,$7);
+$9=_st(aPoint)._asPoint();
+$8=_st($9)._y();
+$6=_st($7).__star($8);
+$1=_st($Point())._x_y_($2,$6);
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"*",{aPoint:aPoint},smalltalk.Point)})},
 args: ["aPoint"],
@@ -3420,21 +3405,20 @@ fn: function (aPoint){
 var self=this;
 function $Point(){return smalltalk.Point||(typeof Point=="undefined"?nil:Point)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$4,$6,$5,$3,$8,$10,$9,$7,$1;
-$2=$Point();
-$4=self._x();
+var $3,$5,$4,$2,$7,$9,$8,$6,$1;
+$3=self._x();
 $ctx1.sendIdx["x"]=1;
-$6=_st(aPoint)._asPoint();
+$5=_st(aPoint)._asPoint();
 $ctx1.sendIdx["asPoint"]=1;
-$5=_st($6)._x();
-$3=_st($4).__plus($5);
+$4=_st($5)._x();
+$2=_st($3).__plus($4);
 $ctx1.sendIdx["+"]=1;
-$8=self._y();
+$7=self._y();
 $ctx1.sendIdx["y"]=1;
-$10=_st(aPoint)._asPoint();
-$9=_st($10)._y();
-$7=_st($8).__plus($9);
-$1=_st($2)._x_y_($3,$7);
+$9=_st(aPoint)._asPoint();
+$8=_st($9)._y();
+$6=_st($7).__plus($8);
+$1=_st($Point())._x_y_($2,$6);
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"+",{aPoint:aPoint},smalltalk.Point)})},
 args: ["aPoint"],
@@ -3452,21 +3436,20 @@ fn: function (aPoint){
 var self=this;
 function $Point(){return smalltalk.Point||(typeof Point=="undefined"?nil:Point)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$4,$6,$5,$3,$8,$10,$9,$7,$1;
-$2=$Point();
-$4=self._x();
+var $3,$5,$4,$2,$7,$9,$8,$6,$1;
+$3=self._x();
 $ctx1.sendIdx["x"]=1;
-$6=_st(aPoint)._asPoint();
+$5=_st(aPoint)._asPoint();
 $ctx1.sendIdx["asPoint"]=1;
-$5=_st($6)._x();
-$3=_st($4).__minus($5);
+$4=_st($5)._x();
+$2=_st($3).__minus($4);
 $ctx1.sendIdx["-"]=1;
-$8=self._y();
+$7=self._y();
 $ctx1.sendIdx["y"]=1;
-$10=_st(aPoint)._asPoint();
-$9=_st($10)._y();
-$7=_st($8).__minus($9);
-$1=_st($2)._x_y_($3,$7);
+$9=_st(aPoint)._asPoint();
+$8=_st($9)._y();
+$6=_st($7).__minus($8);
+$1=_st($Point())._x_y_($2,$6);
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"-",{aPoint:aPoint},smalltalk.Point)})},
 args: ["aPoint"],
@@ -3484,21 +3467,20 @@ fn: function (aPoint){
 var self=this;
 function $Point(){return smalltalk.Point||(typeof Point=="undefined"?nil:Point)}
 return smalltalk.withContext(function($ctx1) { 
-var $2,$4,$6,$5,$3,$8,$10,$9,$7,$1;
-$2=$Point();
-$4=self._x();
+var $3,$5,$4,$2,$7,$9,$8,$6,$1;
+$3=self._x();
 $ctx1.sendIdx["x"]=1;
-$6=_st(aPoint)._asPoint();
+$5=_st(aPoint)._asPoint();
 $ctx1.sendIdx["asPoint"]=1;
-$5=_st($6)._x();
-$3=_st($4).__slash($5);
+$4=_st($5)._x();
+$2=_st($3).__slash($4);
 $ctx1.sendIdx["/"]=1;
-$8=self._y();
+$7=self._y();
 $ctx1.sendIdx["y"]=1;
-$10=_st(aPoint)._asPoint();
-$9=_st($10)._y();
-$7=_st($8).__slash($9);
-$1=_st($2)._x_y_($3,$7);
+$9=_st(aPoint)._asPoint();
+$8=_st($9)._y();
+$6=_st($7).__slash($8);
+$1=_st($Point())._x_y_($2,$6);
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"/",{aPoint:aPoint},smalltalk.Point)})},
 args: ["aPoint"],
@@ -3566,18 +3548,16 @@ category: 'printing',
 fn: function (aStream){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3;
-$1=_st(self["@x"])._printOn_(aStream);
+_st(self["@x"])._printOn_(aStream);
 $ctx1.sendIdx["printOn:"]=1;
 _st(aStream)._nextPutAll_("@");
-$2=_st(_st(self["@y"])._notNil())._and_((function(){
+if(smalltalk.assert(_st(_st(self["@y"])._notNil())._and_((function(){
 return smalltalk.withContext(function($ctx2) {
 return _st(self["@y"])._negative();
-}, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
-if(smalltalk.assert($2)){
+}, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})})))){
 _st(aStream)._space();
 };
-$3=_st(self["@y"])._printOn_(aStream);
+_st(self["@y"])._printOn_(aStream);
 return self}, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},smalltalk.Point)})},
 args: ["aStream"],
 source: "printOn: aStream\x0a\x09\x22Print receiver in classic x@y notation.\x22\x0a\x0a\x09x printOn: aStream.\x0a\x09\x0a\x09aStream nextPutAll: '@'.\x0a\x09(y notNil and: [y negative]) ifTrue: [\x0a\x09\x09\x09\x22Avoid ambiguous @- construct\x22\x0a\x09\x09\x09aStream space ].\x0a\x09\x0a\x09y printOn: aStream",

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


+ 37 - 40
js/SUnit-Tests.js

@@ -64,13 +64,12 @@ fn: function (){
 var self=this;
 function $Error(){return smalltalk.Error||(typeof Error=="undefined"?nil:Error)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
-$1=self._should_raise_((function(){
+self._should_raise_((function(){
 return smalltalk.withContext(function($ctx2) {
 return _st(self["@empty"])._at_((5));
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}),$Error());
 $ctx1.sendIdx["should:raise:"]=1;
-$2=self._should_raise_((function(){
+self._should_raise_((function(){
 return smalltalk.withContext(function($ctx2) {
 return _st(self["@empty"])._at_put_((5),"abc");
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)})}),$Error());
@@ -89,13 +88,13 @@ category: 'tests',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1,$4,$3;
-$2=_st(self["@full"])._includes_((5));
+var $1,$2;
+$1=_st(self["@full"])._includes_((5));
 $ctx1.sendIdx["includes:"]=1;
-$1=self._assert_($2);
+self._assert_($1);
 $ctx1.sendIdx["assert:"]=1;
-$4=_st(self["@full"])._includes_("abc");
-$3=self._assert_($4);
+$2=_st(self["@full"])._includes_("abc");
+self._assert_($2);
 return self}, function($ctx1) {$ctx1.fill(self,"testIncludes",{},smalltalk.ExampleSetTest)})},
 args: [],
 source: "testIncludes\x0a\x09self assert: (full includes: 5).\x0a\x09self assert: (full includes: #abc)",
@@ -111,18 +110,18 @@ category: 'tests',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1,$4,$3,$6,$5;
-$2=_st(self["@empty"])._occurrencesOf_((0));
+var $1,$2,$3;
+$1=_st(self["@empty"])._occurrencesOf_((0));
 $ctx1.sendIdx["occurrencesOf:"]=1;
-$1=self._assert_equals_($2,(0));
+self._assert_equals_($1,(0));
 $ctx1.sendIdx["assert:equals:"]=1;
-$4=_st(self["@full"])._occurrencesOf_((5));
+$2=_st(self["@full"])._occurrencesOf_((5));
 $ctx1.sendIdx["occurrencesOf:"]=2;
-$3=self._assert_equals_($4,(1));
+self._assert_equals_($2,(1));
 $ctx1.sendIdx["assert:equals:"]=2;
 _st(self["@full"])._add_((5));
-$6=_st(self["@full"])._occurrencesOf_((5));
-$5=self._assert_equals_($6,(1));
+$3=_st(self["@full"])._occurrencesOf_((5));
+self._assert_equals_($3,(1));
 return self}, function($ctx1) {$ctx1.fill(self,"testOccurrences",{},smalltalk.ExampleSetTest)})},
 args: [],
 source: "testOccurrences\x0a\x09self assert: (empty occurrencesOf: 0) equals: 0.\x0a\x09self assert: (full occurrencesOf: 5) equals: 1.\x0a\x09full add: 5.\x0a\x09self assert: (full occurrencesOf: 5) equals: 1",
@@ -230,20 +229,20 @@ category: 'helpers',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$4,$3,$2;
-$1=self._timeout_((100));
+var $2,$1;
+self._timeout_((100));
 $ctx1.sendIdx["timeout:"]=1;
-$3=self._async_((function(){
+$1=self._async_((function(){
 return smalltalk.withContext(function($ctx2) {
 self._timeout_((20));
-$4=self._async_((function(){
+$2=self._async_((function(){
 return smalltalk.withContext(function($ctx3) {
 return self._finished();
 }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)})}));
-return _st($4)._valueWithTimeout_((30));
+return _st($2)._valueWithTimeout_((30));
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
 $ctx1.sendIdx["async:"]=1;
-$2=_st($3)._valueWithTimeout_((20));
+_st($1)._valueWithTimeout_((20));
 $ctx1.sendIdx["valueWithTimeout:"]=1;
 return self}, function($ctx1) {$ctx1.fill(self,"fakeMultipleTimeoutFailing",{},smalltalk.SUnitAsyncTest)})},
 args: [],
@@ -260,20 +259,20 @@ category: 'helpers',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$4,$3,$2;
-$1=self._timeout_((20));
+var $2,$1;
+self._timeout_((20));
 $ctx1.sendIdx["timeout:"]=1;
-$3=self._async_((function(){
+$1=self._async_((function(){
 return smalltalk.withContext(function($ctx2) {
 self._timeout_((40));
-$4=self._async_((function(){
+$2=self._async_((function(){
 return smalltalk.withContext(function($ctx3) {
 return self._finished();
 }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)})}));
-return _st($4)._valueWithTimeout_((20));
+return _st($2)._valueWithTimeout_((20));
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
 $ctx1.sendIdx["async:"]=1;
-$2=_st($3)._valueWithTimeout_((10));
+_st($1)._valueWithTimeout_((10));
 $ctx1.sendIdx["valueWithTimeout:"]=1;
 return self}, function($ctx1) {$ctx1.fill(self,"fakeMultipleTimeoutPassing",{},smalltalk.SUnitAsyncTest)})},
 args: [],
@@ -366,7 +365,7 @@ var suite,runner,result,assertBlock;
 function $TestSuiteRunner(){return smalltalk.TestSuiteRunner||(typeof TestSuiteRunner=="undefined"?nil:TestSuiteRunner)}
 function $ResultAnnouncement(){return smalltalk.ResultAnnouncement||(typeof ResultAnnouncement=="undefined"?nil:ResultAnnouncement)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3,$4,$6,$5,$7;
+var $1,$2,$3,$4,$6,$5;
 suite=["fakeError", "fakeErrorFailingInTearDown", "fakeFailure", "testPass"]._collect_((function(each){
 return smalltalk.withContext(function($ctx2) {
 return _st(self._class())._selector_(each);
@@ -393,8 +392,7 @@ return smalltalk.withContext(function($ctx2) {
 $6=_st(ann)._result();
 $5=_st($6).__eq_eq(result);
 if(smalltalk.assert($5)){
-$7=_st(_st(result)._runs()).__eq(_st(result)._total());
-return _st($7)._ifTrue_(assertBlock);
+return _st(_st(_st(result)._runs()).__eq(_st(result)._total()))._ifTrue_(assertBlock);
 };
 }, function($ctx2) {$ctx2.fillBlock({ann:ann},$ctx1,3)})}));
 _st(runner)._run();
@@ -470,18 +468,18 @@ category: 'tests',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1,$3,$5,$4;
-$2=self._isAsync();
+var $1,$2,$3;
+$1=self._isAsync();
 $ctx1.sendIdx["isAsync"]=1;
-$1=self._deny_($2);
+self._deny_($1);
 $ctx1.sendIdx["deny:"]=1;
 self._timeout_((0));
-$3=self._isAsync();
+$2=self._isAsync();
 $ctx1.sendIdx["isAsync"]=2;
-self._assert_($3);
+self._assert_($2);
 self._finished();
-$5=self._isAsync();
-$4=self._deny_($5);
+$3=self._isAsync();
+self._deny_($3);
 return self}, function($ctx1) {$ctx1.fill(self,"testIsAsyncReturnsCorrectValues",{},smalltalk.SUnitAsyncTest)})},
 args: [],
 source: "testIsAsyncReturnsCorrectValues\x0a\x09self deny: self isAsync.\x0a\x09self timeout: 0.\x0a\x09self assert: self isAsync.\x0a\x09self finished.\x0a\x09self deny: self isAsync",
@@ -525,7 +523,7 @@ function $TestSuiteRunner(){return smalltalk.TestSuiteRunner||(typeof TestSuiteR
 function $Set(){return smalltalk.Set||(typeof Set=="undefined"?nil:Set)}
 function $ResultAnnouncement(){return smalltalk.ResultAnnouncement||(typeof ResultAnnouncement=="undefined"?nil:ResultAnnouncement)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$4,$3,$5;
+var $1,$2,$4,$3;
 suite=["fakeTimeout", "fakeMultipleTimeoutFailing", "fakeMultipleTimeoutPassing", "testPass"]._collect_((function(each){
 return smalltalk.withContext(function($ctx2) {
 return _st(self._class())._selector_(each);
@@ -549,8 +547,7 @@ return smalltalk.withContext(function($ctx2) {
 $4=_st(ann)._result();
 $3=_st($4).__eq_eq(result);
 if(smalltalk.assert($3)){
-$5=_st(_st(result)._runs()).__eq(_st(result)._total());
-return _st($5)._ifTrue_(assertBlock);
+return _st(_st(_st(result)._runs()).__eq(_st(result)._total()))._ifTrue_(assertBlock);
 };
 }, function($ctx2) {$ctx2.fillBlock({ann:ann},$ctx1,3)})}));
 _st(runner)._run();

+ 25 - 43
js/SUnit.js

@@ -65,9 +65,7 @@ category: 'testing',
 fn: function (aBoolean,aString){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=aBoolean;
-if(! smalltalk.assert($1)){
+if(! smalltalk.assert(aBoolean)){
 self._signalFailure_(aString);
 };
 return self}, function($ctx1) {$ctx1.fill(self,"assert:description:",{aBoolean:aBoolean,aString:aString},smalltalk.TestCase)})},
@@ -113,13 +111,12 @@ fn: function (aBlock){
 var self=this;
 var c;
 return smalltalk.withContext(function($ctx1) { 
-var $2,$1;
+var $1;
 self._errorIfNotAsync_("#async");
 c=self["@context"];
 $1=(function(){
 return smalltalk.withContext(function($ctx2) {
-$2=self._isAsync();
-if(smalltalk.assert($2)){
+if(smalltalk.assert(self._isAsync())){
 return _st(c)._execute_(aBlock);
 };
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})});
@@ -171,9 +168,7 @@ category: 'error handling',
 fn: function (aString){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=self._isAsync();
-if(! smalltalk.assert($1)){
+if(! smalltalk.assert(self._isAsync())){
 self._error_(_st(aString).__comma(" used without prior #timeout:"));
 };
 return self}, function($ctx1) {$ctx1.fill(self,"errorIfNotAsync:",{aString:aString},smalltalk.TestCase)})},
@@ -406,10 +401,8 @@ category: 'async',
 fn: function (aNumber){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=self["@asyncTimeout"];
-if(($receiver = $1) == nil || $receiver == null){
-$1;
+if(($receiver = self["@asyncTimeout"]) == nil || $receiver == null){
+self["@asyncTimeout"];
 } else {
 _st(self["@asyncTimeout"])._clearTimeout();
 };
@@ -435,14 +428,13 @@ fn: function (){
 var self=this;
 var selectors;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
+var $1;
 selectors=self._testSelectors();
-$1=self._shouldInheritSelectors();
-if(smalltalk.assert($1)){
+if(smalltalk.assert(self._shouldInheritSelectors())){
 _st(selectors)._addAll_(_st(self._superclass())._allTestSelectors());
 };
-$2=selectors;
-return $2;
+$1=selectors;
+return $1;
 }, function($ctx1) {$ctx1.fill(self,"allTestSelectors",{selectors:selectors},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",
@@ -514,9 +506,7 @@ fn: function (){
 var self=this;
 function $TestCase(){return smalltalk.TestCase||(typeof TestCase=="undefined"?nil:TestCase)}
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=$TestCase();
-return $1;
+return $TestCase();
 }, function($ctx1) {$ctx1.fill(self,"lookupHierarchyRoot",{},smalltalk.TestCase.klass)})},
 args: [],
 source: "lookupHierarchyRoot\x0a\x09^TestCase",
@@ -596,8 +586,8 @@ fn: function (aBlock){
 var self=this;
 var failed;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$3;
-$1=_st(self["@testCase"])._context_(self);
+var $1;
+_st(self["@testCase"])._context_(self);
 $ctx1.sendIdx["context:"]=1;
 _st((function(){
 return smalltalk.withContext(function($ctx2) {
@@ -609,16 +599,15 @@ return failed;
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}))._ensure_((function(){
 return smalltalk.withContext(function($ctx2) {
 _st(self["@testCase"])._context_(nil);
-$2=_st(failed)._and_((function(){
+if(smalltalk.assert(_st(failed)._and_((function(){
 return smalltalk.withContext(function($ctx3) {
 return _st(self["@testCase"])._isAsync();
 $ctx3.sendIdx["isAsync"]=1;
-}, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)})}));
-if(smalltalk.assert($2)){
+}, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)})})))){
 _st(self["@testCase"])._finished();
 };
-$3=_st(self["@testCase"])._isAsync();
-if(! smalltalk.assert($3)){
+$1=_st(self["@testCase"])._isAsync();
+if(! smalltalk.assert($1)){
 return _st(self["@testCase"])._tearDown();
 };
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)})}));
@@ -698,7 +687,6 @@ category: 'running',
 fn: function (aBlock){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
 _st((function(){
 return smalltalk.withContext(function($ctx2) {
 return self._withErrorReporting_((function(){
@@ -707,8 +695,7 @@ return smalltalk.ReportingTestContext.superclass.fn.prototype._execute_.apply(_s
 }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)})}));
 }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}))._ensure_((function(){
 return smalltalk.withContext(function($ctx2) {
-$1=_st(self["@testCase"])._isAsync();
-if(! smalltalk.assert($1)){
+if(! smalltalk.assert(_st(self["@testCase"])._isAsync())){
 _st(self["@result"])._increaseRuns();
 return _st(self["@finished"])._value();
 };
@@ -762,8 +749,7 @@ var self=this;
 function $TestFailure(){return smalltalk.TestFailure||(typeof TestFailure=="undefined"?nil:TestFailure)}
 function $Error(){return smalltalk.Error||(typeof Error=="undefined"?nil:Error)}
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=_st((function(){
+_st((function(){
 return smalltalk.withContext(function($ctx2) {
 return _st(aBlock)._on_do_($TestFailure(),(function(ex){
 return smalltalk.withContext(function($ctx3) {
@@ -927,15 +913,14 @@ category: 'running',
 fn: function (aBlock){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $3,$2,$4,$6,$5,$1;
+var $3,$2,$5,$4,$1;
 $3=self._runs();
 $ctx1.sendIdx["runs"]=1;
 $2=_st($3).__eq_eq(self._total());
 if(! smalltalk.assert($2)){
-$4=aBlock;
-$6=self._runs();
-$5=_st($6).__plus((1));
-$1=_st($4)._value_($5);
+$5=self._runs();
+$4=_st($5).__plus((1));
+$1=_st(aBlock)._value_($4);
 };
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"nextRunDo:",{aBlock:aBlock},smalltalk.TestResult)})},
@@ -955,8 +940,7 @@ var self=this;
 function $TestFailure(){return smalltalk.TestFailure||(typeof TestFailure=="undefined"?nil:TestFailure)}
 function $Error(){return smalltalk.Error||(typeof Error=="undefined"?nil:Error)}
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=_st((function(){
+_st((function(){
 return smalltalk.withContext(function($ctx2) {
 return _st((function(){
 return smalltalk.withContext(function($ctx3) {
@@ -1131,7 +1115,6 @@ var self=this;
 function $Announcer(){return smalltalk.Announcer||(typeof Announcer=="undefined"?nil:Announcer)}
 function $TestResult(){return smalltalk.TestResult||(typeof TestResult=="undefined"?nil:TestResult)}
 return smalltalk.withContext(function($ctx1) { 
-var $1;
 smalltalk.TestSuiteRunner.superclass.fn.prototype._initialize.apply(_st(self), []);
 self["@announcer"]=_st($Announcer())._new();
 $ctx1.sendIdx["new"]=1;
@@ -1141,8 +1124,7 @@ var runs;
 return smalltalk.withContext(function($ctx2) {
 runs=_st(self["@result"])._runs();
 runs;
-$1=_st(runs).__lt(_st(self["@result"])._total());
-if(smalltalk.assert($1)){
+if(smalltalk.assert(_st(runs).__lt(_st(self["@result"])._total()))){
 return _st(self._contextOf_(_st(runs).__plus((1))))._start();
 };
 }, function($ctx2) {$ctx2.fillBlock({runs:runs},$ctx1,1)})});

+ 13 - 17
js/Spaces.js

@@ -51,12 +51,10 @@ category: 'releasing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=self["@frame"];
-if(($receiver = $1) == nil || $receiver == null){
+if(($receiver = self["@frame"]) == nil || $receiver == null){
 return self;
 } else {
-$1;
+self["@frame"];
 };
 _st(_st(self["@frame"])._asJQuery())._remove();
 self._release();
@@ -76,18 +74,17 @@ fn: function (aBlock){
 var self=this;
 function $ObjectSpaceConnectionError(){return smalltalk.ObjectSpaceConnectionError||(typeof ObjectSpaceConnectionError=="undefined"?nil:ObjectSpaceConnectionError)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2,$4,$6,$5,$3;
-$1=self._isConnected();
-if(! smalltalk.assert($1)){
-$2=_st($ObjectSpaceConnectionError())._signal();
-return $2;
+var $1,$3,$5,$4,$2;
+if(! smalltalk.assert(self._isConnected())){
+$1=_st($ObjectSpaceConnectionError())._signal();
+return $1;
 };
-$4=_st(self["@frame"])._contentWindow();
-$6="(".__comma(_st(aBlock)._compiledSource());
-$5=_st($6).__comma(")()");
+$3=_st(self["@frame"])._contentWindow();
+$5="(".__comma(_st(aBlock)._compiledSource());
+$4=_st($5).__comma(")()");
 $ctx1.sendIdx[","]=1;
-$3=_st($4)._eval_($5);
-return $3;
+$2=_st($3)._eval_($4);
+return $2;
 }, function($ctx1) {$ctx1.fill(self,"do:",{aBlock:aBlock},smalltalk.ObjectSpace)})},
 args: ["aBlock"],
 source: "do: aBlock\x0a\x09self isConnected ifFalse: [ ^ ObjectSpaceConnectionError signal ].\x0a\x09^ frame contentWindow eval: '(', aBlock compiledSource, ')()'",
@@ -288,10 +285,9 @@ category: 'tests',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
-$1=self._assert_(_st(_st(self["@space"])._frame())._notNil());
+self._assert_(_st(_st(self["@space"])._frame())._notNil());
 $ctx1.sendIdx["assert:"]=1;
-$2=self._assert_(_st(self["@space"])._isConnected());
+self._assert_(_st(self["@space"])._isConnected());
 return self}, function($ctx1) {$ctx1.fill(self,"testCreate",{},smalltalk.ObjectSpaceTest)})},
 args: [],
 source: "testCreate\x0a\x0a\x09self assert: space frame notNil.\x0a\x09self assert: space isConnected",

+ 35 - 4
st/Compiler-AST.st

@@ -119,7 +119,7 @@ isCascadeNode
 !
 
 isImmutable
-	^false
+	^ false
 !
 
 isJSStatementNode
@@ -134,6 +134,14 @@ isNode
 	^ true
 !
 
+isReferenced
+	"Answer true if the receiver is referenced by other nodes.
+	Do not take sequences or assignments into account"
+	
+	^ (self parent isSequenceNode or: [
+		self parent isAssignmentNode ]) not
+!
+
 isReturnNode
 	^false
 !
@@ -142,10 +150,18 @@ isSendNode
 	^false
 !
 
+isSequenceNode
+	^ false
+!
+
 isValueNode
 	^false
 !
 
+isVariableNode
+	^ false
+!
+
 stopOnStepping
 	^ false
 !
@@ -545,7 +561,8 @@ isSendNode
 
 shouldBeAliased
 	^ super shouldBeAliased or: [
-		(self method sendIndexes at: self selector) size > 1 ]
+		(self method sendIndexes at: self selector) size > 1 and: [
+			self isReferenced ] ]
 !
 
 stopOnStepping
@@ -582,7 +599,7 @@ temps: aCollection
 	temps := aCollection
 ! !
 
-!SequenceNode methodsFor: 'testing'!
+!SequenceNode methodsFor: 'converting'!
 
 asBlockSequenceNode
 	^BlockSequenceNode new
@@ -592,6 +609,12 @@ asBlockSequenceNode
 		yourself
 ! !
 
+!SequenceNode methodsFor: 'testing'!
+
+isSequenceNode
+	^ true
+! !
+
 !SequenceNode methodsFor: 'visiting'!
 
 accept: aVisitor
@@ -688,8 +711,16 @@ binding: aScopeVar
 
 !VariableNode methodsFor: 'testing'!
 
+isArgument
+	^ self binding isArgVar
+!
+
 isImmutable
-	^ self binding isPseudoVar
+	^ self binding isImmutable
+!
+
+isVariableNode
+	^ true
 ! !
 
 !VariableNode methodsFor: 'visiting'!

+ 10 - 6
st/Compiler-IR.st

@@ -130,10 +130,10 @@ visitBlockSequenceNode: aNode
 		do: [
 			aNode nodes ifNotEmpty: [
 				aNode nodes allButLast do: [ :each |
-					self sequence add: (self visit: each) ].
+					self sequence add: (self visitOrAlias: each) ].
 				aNode nodes last isReturnNode
-					ifFalse: [ self sequence add: (IRBlockReturn new add: (self visit: aNode nodes last); yourself) ]
-					ifTrue: [ self sequence add: (self visit: aNode nodes last) ]]]
+					ifFalse: [ self sequence add: (IRBlockReturn new add: (self visitOrAlias: aNode nodes last); yourself) ]
+					ifTrue: [ self sequence add: (self visitOrAlias: aNode nodes last) ]]]
 !
 
 visitCascadeNode: aNode
@@ -203,6 +203,12 @@ visitMethodNode: aNode
 	^ self method
 !
 
+visitOrAlias: aNode
+	^ aNode shouldBeAliased
+		ifTrue: [ self alias: aNode ]
+		ifFalse: [ self visit: aNode ]
+!
+
 visitReturnNode: aNode
 	| return |
 	return := aNode nonLocalReturn
@@ -237,9 +243,7 @@ visitSequenceNode: aNode
 		withSequence: IRSequence new
 		do: [
 			aNode nodes do: [ :each | | instruction |
-				instruction := each shouldBeAliased
-					ifTrue: [ self alias: each ]
-					ifFalse: [ self visit: each ].
+				instruction := self visitOrAlias: each.
 				instruction isVariable ifFalse: [
 					self sequence add: instruction ]]]
 !

+ 17 - 2
st/Compiler-Semantic.st

@@ -246,6 +246,10 @@ isClassRefVar
 	^ false
 !
 
+isImmutable
+	^ false
+!
+
 isInstanceVar
 	^ false
 !
@@ -303,6 +307,10 @@ I am an argument of a method or block.!
 
 isArgVar
 	^ true
+!
+
+isImmutable
+	^ true
 ! !
 
 ScopeVar subclass: #ClassRefVar
@@ -325,6 +333,10 @@ alias
 
 isClassRefVar
 	^ true
+!
+
+isImmutable
+	^ true
 ! !
 
 ScopeVar subclass: #InstanceVar
@@ -359,6 +371,10 @@ alias
 
 !PseudoVar methodsFor: 'testing'!
 
+isImmutable
+	^ true
+!
+
 isPseudoVar
 	^ true
 ! !
@@ -560,8 +576,7 @@ visitSendNode: aNode
 			(self superSends at: aNode selector) add: aNode ]
 		
 		ifFalse: [ (IRSendInliner inlinedSelectors includes: aNode selector) ifTrue: [
-			aNode shouldBeInlined: true.
-			aNode receiver shouldBeAliased: true ] ].
+			aNode shouldBeInlined: true ] ].
 
 	self messageSends at: aNode selector ifAbsentPut: [ Set new ].
 	(self messageSends at: aNode selector) add: aNode.

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