|
@@ -353,29 +353,47 @@ selector: "visitCascadeNode:",
|
|
category: 'visiting',
|
|
category: 'visiting',
|
|
fn: function (aNode){
|
|
fn: function (aNode){
|
|
var self=this;
|
|
var self=this;
|
|
-var alias;
|
|
|
|
|
|
+var alias,receiver;
|
|
function $VariableNode(){return smalltalk.VariableNode||(typeof VariableNode=="undefined"?nil:VariableNode)}
|
|
function $VariableNode(){return smalltalk.VariableNode||(typeof VariableNode=="undefined"?nil:VariableNode)}
|
|
return smalltalk.withContext(function($ctx1) {
|
|
return smalltalk.withContext(function($ctx1) {
|
|
-var $1,$2;
|
|
|
|
-$1=_st(_st(aNode)._receiver())._isImmutable();
|
|
|
|
-if(! smalltalk.assert($1)){
|
|
|
|
-alias=self._alias_(_st(aNode)._receiver());
|
|
|
|
|
|
+var $2,$1,$3,$5,$4,$8,$7,$6,$11,$10,$9;
|
|
|
|
+$2=_st(aNode)._receiver();
|
|
|
|
+$ctx1.sendIdx["receiver"]=1;
|
|
|
|
+$1=_st($2)._isImmutable();
|
|
|
|
+if(smalltalk.assert($1)){
|
|
|
|
+receiver=_st(aNode)._receiver();
|
|
|
|
+$ctx1.sendIdx["receiver"]=2;
|
|
|
|
+receiver;
|
|
|
|
+} else {
|
|
|
|
+$3=_st(aNode)._receiver();
|
|
|
|
+alias=self._alias_($3);
|
|
|
|
+$ctx1.sendIdx["alias:"]=1;
|
|
alias;
|
|
alias;
|
|
-_st(_st(aNode)._nodes())._do_((function(each){
|
|
|
|
-return smalltalk.withContext(function($ctx2) {
|
|
|
|
-return _st(each)._receiver_(_st(_st($VariableNode())._new())._binding_(_st(alias)._variable()));
|
|
|
|
-}, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)})}));
|
|
|
|
|
|
+receiver=_st(_st($VariableNode())._new())._binding_(_st(alias)._variable());
|
|
|
|
+receiver;
|
|
};
|
|
};
|
|
-_st(_st(_st(aNode)._nodes())._allButLast())._do_((function(each){
|
|
|
|
|
|
+$5=_st(aNode)._nodes();
|
|
|
|
+$ctx1.sendIdx["nodes"]=1;
|
|
|
|
+$4=_st($5)._do_((function(each){
|
|
return smalltalk.withContext(function($ctx2) {
|
|
return smalltalk.withContext(function($ctx2) {
|
|
-return _st(self._sequence())._add_(self._visit_(each));
|
|
|
|
|
|
+return _st(each)._receiver_(receiver);
|
|
}, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)})}));
|
|
}, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)})}));
|
|
-$2=self._alias_(_st(_st(aNode)._nodes())._last());
|
|
|
|
-return $2;
|
|
|
|
-}, function($ctx1) {$ctx1.fill(self,"visitCascadeNode:",{aNode:aNode,alias:alias},smalltalk.IRASTTranslator)})},
|
|
|
|
|
|
+$ctx1.sendIdx["do:"]=1;
|
|
|
|
+$8=_st(aNode)._nodes();
|
|
|
|
+$ctx1.sendIdx["nodes"]=2;
|
|
|
|
+$7=_st($8)._allButLast();
|
|
|
|
+$6=_st($7)._do_((function(each){
|
|
|
|
+return smalltalk.withContext(function($ctx2) {
|
|
|
|
+return _st(self._sequence())._add_(self._visit_(each));
|
|
|
|
+}, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,4)})}));
|
|
|
|
+$11=_st(aNode)._nodes();
|
|
|
|
+$10=_st($11)._last();
|
|
|
|
+$9=self._alias_($10);
|
|
|
|
+return $9;
|
|
|
|
+}, function($ctx1) {$ctx1.fill(self,"visitCascadeNode:",{aNode:aNode,alias:alias,receiver:receiver},smalltalk.IRASTTranslator)})},
|
|
args: ["aNode"],
|
|
args: ["aNode"],
|
|
-source: "visitCascadeNode: aNode\x0a\x09| alias |\x0a\x0a\x09aNode receiver isImmutable ifFalse: [\x0a\x09\x09alias := self alias: aNode receiver.\x0a\x09\x09aNode nodes do: [ :each |\x0a\x09\x09\x09each receiver: (VariableNode new binding: alias variable) ]].\x0a\x0a\x09aNode nodes allButLast do: [ :each |\x0a\x09\x09self sequence add: (self visit: each) ].\x0a\x0a\x09^ self alias: aNode nodes last",
|
|
|
|
-messageSends: ["ifFalse:", "isImmutable", "receiver", "alias:", "do:", "nodes", "receiver:", "binding:", "new", "variable", "allButLast", "add:", "sequence", "visit:", "last"],
|
|
|
|
|
|
+source: "visitCascadeNode: aNode\x0a\x09| alias receiver |\x0a\x0a\x09aNode receiver isImmutable \x0a\x09\x09ifTrue: [ receiver := aNode receiver ]\x0a\x09\x09ifFalse: [\x0a\x09\x09\x09alias := self alias: aNode receiver.\x0a\x09\x09\x09receiver := VariableNode new binding: alias variable ].\x0a\x09\x0a\x09aNode nodes do: [ :each |\x0a\x09\x09\x09each receiver: receiver ].\x0a\x0a\x09aNode nodes allButLast do: [ :each |\x0a\x09\x09self sequence add: (self visit: each) ].\x0a\x0a\x09^ self alias: aNode nodes last",
|
|
|
|
+messageSends: ["ifTrue:ifFalse:", "isImmutable", "receiver", "alias:", "binding:", "new", "variable", "do:", "nodes", "receiver:", "allButLast", "add:", "sequence", "visit:", "last"],
|
|
referencedClasses: ["VariableNode"]
|
|
referencedClasses: ["VariableNode"]
|
|
}),
|
|
}),
|
|
smalltalk.IRASTTranslator);
|
|
smalltalk.IRASTTranslator);
|
|
@@ -3006,18 +3024,27 @@ selector: "visitIRSend:",
|
|
category: 'visiting',
|
|
category: 'visiting',
|
|
fn: function (anIRSend){
|
|
fn: function (anIRSend){
|
|
var self=this;
|
|
var self=this;
|
|
|
|
+var sends;
|
|
return smalltalk.withContext(function($ctx1) {
|
|
return smalltalk.withContext(function($ctx1) {
|
|
-var $1;
|
|
|
|
|
|
+var $1,$2;
|
|
|
|
+sends=_st(_st(_st(_st(anIRSend)._method())._sendIndexes())._at_(_st(anIRSend)._selector()))._size();
|
|
$1=_st(anIRSend)._classSend();
|
|
$1=_st(anIRSend)._classSend();
|
|
if(($receiver = $1) == nil || $receiver == null){
|
|
if(($receiver = $1) == nil || $receiver == null){
|
|
self._visitSend_(anIRSend);
|
|
self._visitSend_(anIRSend);
|
|
} else {
|
|
} else {
|
|
self._visitSuperSend_(anIRSend);
|
|
self._visitSuperSend_(anIRSend);
|
|
};
|
|
};
|
|
-return self}, function($ctx1) {$ctx1.fill(self,"visitIRSend:",{anIRSend:anIRSend},smalltalk.IRJSTranslator)})},
|
|
|
|
|
|
+$2=_st(_st(sends).__gt((1)))._and_((function(){
|
|
|
|
+return smalltalk.withContext(function($ctx2) {
|
|
|
|
+return _st(_st(anIRSend)._index()).__lt(sends);
|
|
|
|
+}, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)})}));
|
|
|
|
+if(smalltalk.assert($2)){
|
|
|
|
+_st(self._stream())._nextPutSendIndexFor_(anIRSend);
|
|
|
|
+};
|
|
|
|
+return self}, function($ctx1) {$ctx1.fill(self,"visitIRSend:",{anIRSend:anIRSend,sends:sends},smalltalk.IRJSTranslator)})},
|
|
args: ["anIRSend"],
|
|
args: ["anIRSend"],
|
|
-source: "visitIRSend: anIRSend\x0a\x09anIRSend classSend\x0a\x09\x09ifNil: [ self visitSend: anIRSend ]\x0a\x09\x09ifNotNil: [ self visitSuperSend: anIRSend ].\x0a\x09\x09\x0a\x22\x09(anIRSend method sendIndexes at: anIRSend selector) size > 1 \x0a\x09\x09ifTrue: [ self stream nextPutSendIndexFor: anIRSend ]\x22",
|
|
|
|
-messageSends: ["ifNil:ifNotNil:", "classSend", "visitSend:", "visitSuperSend:"],
|
|
|
|
|
|
+source: "visitIRSend: anIRSend\x0a\x09| sends |\x0a\x09sends := (anIRSend method sendIndexes at: anIRSend selector) size.\x0a\x09\x0a\x09anIRSend classSend\x0a\x09\x09ifNil: [ self visitSend: anIRSend ]\x0a\x09\x09ifNotNil: [ self visitSuperSend: anIRSend ].\x0a\x09\x09\x0a\x09(sends > 1 and: [ anIRSend index < sends ])\x0a\x09\x09ifTrue: [ self stream nextPutSendIndexFor: anIRSend ]",
|
|
|
|
+messageSends: ["size", "at:", "sendIndexes", "method", "selector", "ifNil:ifNotNil:", "classSend", "visitSend:", "visitSuperSend:", "ifTrue:", "and:", ">", "<", "index", "nextPutSendIndexFor:", "stream"],
|
|
referencedClasses: []
|
|
referencedClasses: []
|
|
}),
|
|
}),
|
|
smalltalk.IRJSTranslator);
|
|
smalltalk.IRJSTranslator);
|