Forráskód Böngészése

arrayOfNodes: inlined, isolate: removed

Herbert Vojčík 13 éve
szülő
commit
89157a209d
3 módosított fájl, 32 hozzáadás és 103 törlés
  1. 6 31
      js/Compiler.deploy.js
  2. 15 50
      js/Compiler.js
  3. 11 22
      st/Compiler.st

+ 6 - 31
js/Compiler.deploy.js

@@ -2063,19 +2063,6 @@ return self;}
 }),
 smalltalk.ImpCodeGenerator);
 
-smalltalk.addMethod(
-"_arrayOfValues_",
-smalltalk.method({
-selector: "arrayOfValues:",
-fn: function (nodes){
-var self=this;
-var args=nil;
-(args=smalltalk.send(nodes, "_collect_", [(function(node){return smalltalk.send(self, "_isolated_", [node]);})]));
-smalltalk.send(self, "_lazyAssignValue_", [smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(str){smalltalk.send(str, "_nextPutAll_", ["["]);smalltalk.send(args, "_do_separatedBy_", [(function(each){return smalltalk.send(str, "_nextPutAll_", [smalltalk.send(self, "_useValueNamed_", [each])]);}), (function(){return smalltalk.send(str, "_nextPutAll_", [", "]);})]);return smalltalk.send(str, "_nextPutAll_", ["]"]);})])]);
-return self;}
-}),
-smalltalk.ImpCodeGenerator);
-
 smalltalk.addMethod(
 "_assert_",
 smalltalk.method({
@@ -2272,20 +2259,6 @@ return self;}
 }),
 smalltalk.ImpCodeGenerator);
 
-smalltalk.addMethod(
-"_isolate_",
-smalltalk.method({
-selector: "isolate:",
-fn: function (aBlock){
-var self=this;
-var old=nil;
-(old=smalltalk.send(self, "_switchTarget_", [smalltalk.send(self, "_nextLazyvarName", [])]));
-smalltalk.send(aBlock, "_value", []);
-return smalltalk.send(self, "_switchTarget_", [old]);
-return self;}
-}),
-smalltalk.ImpCodeGenerator);
-
 smalltalk.addMethod(
 "_isolated_",
 smalltalk.method({
@@ -2507,7 +2480,7 @@ selector: "send:to:arguments:superSend:",
 fn: function (aSelector, aReceiver, aCollection, aBoolean){
 var self=this;
 var args=nil;
-(args=smalltalk.send(self, "_isolate_", [(function(){return smalltalk.send(self, "_arrayOfValues_", [aCollection]);})]));
+(args=smalltalk.send(self, "_isolated_", [(function($rec){smalltalk.send($rec, "_nodes_", [aCollection]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.DynamicArrayNode || DynamicArrayNode), "_new", []))]));
 smalltalk.send(self, "_lazyAssignExpression_", [smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(str){smalltalk.send(str, "_nextPutAll_", ["smalltalk.send("]);smalltalk.send(str, "_nextPutAll_", [smalltalk.send(self, "_useValueNamed_", [aReceiver])]);smalltalk.send(str, "_nextPutAll_", [smalltalk.send(smalltalk.send(", \x22", "__comma", [smalltalk.send(aSelector, "_asSelector", [])]), "__comma", ["\x22, "])]);smalltalk.send(str, "_nextPutAll_", [smalltalk.send(self, "_useValueNamed_", [args])]);((($receiver = aBoolean).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(str, "_nextPutAll_", [smalltalk.send(", smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(smalltalk.send(self, "_currentClass", []), "_superclass", [])])])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(str, "_nextPutAll_", [smalltalk.send(", smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(smalltalk.send(self, "_currentClass", []), "_superclass", [])])])]);})]));return smalltalk.send(str, "_nextPutAll_", [")"]);})])]);
 return self;}
 }),
@@ -2703,9 +2676,11 @@ smalltalk.addMethod(
 "_visitDynamicArrayNode_",
 smalltalk.method({
 selector: "visitDynamicArrayNode:",
-fn: function (aNode) {
+fn: function (aNode){
 var self=this;
-smalltalk.send(self, "_arrayOfValues_", [smalltalk.send(aNode, "_nodes", [])]);
+var args=nil;
+(args=smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_collect_", [(function(node){return smalltalk.send(self, "_isolated_", [node]);})]));
+smalltalk.send(self, "_lazyAssignValue_", [smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(str){smalltalk.send(str, "_nextPutAll_", ["["]);smalltalk.send(args, "_do_separatedBy_", [(function(each){return smalltalk.send(str, "_nextPutAll_", [smalltalk.send(self, "_useValueNamed_", [each])]);}), (function(){return smalltalk.send(str, "_nextPutAll_", [", "]);})]);return smalltalk.send(str, "_nextPutAll_", ["]"]);})])]);
 return self;}
 }),
 smalltalk.ImpCodeGenerator);
@@ -2717,7 +2692,7 @@ selector: "visitDynamicDictionaryNode:",
 fn: function (aNode){
 var self=this;
 var elements=nil;
-(elements=smalltalk.send(self, "_isolate_", [(function(){return smalltalk.send(self, "_arrayOfValues_", [smalltalk.send(aNode, "_nodes", [])]);})]));
+(elements=smalltalk.send(self, "_isolated_", [(function($rec){smalltalk.send($rec, "_nodes_", [smalltalk.send(aNode, "_nodes", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.DynamicArrayNode || DynamicArrayNode), "_new", []))]));
 smalltalk.send(self, "_lazyAssignValue_", [smalltalk.send(smalltalk.send("smalltalk.HashedCollection._fromPairs_(", "__comma", [smalltalk.send(self, "_useValueNamed_", [elements])]), "__comma", [")"])]);
 return self;}
 }),

+ 15 - 50
js/Compiler.js

@@ -2883,24 +2883,6 @@ referencedClasses: []
 }),
 smalltalk.ImpCodeGenerator);
 
-smalltalk.addMethod(
-"_arrayOfValues_",
-smalltalk.method({
-selector: "arrayOfValues:",
-category: 'visiting',
-fn: function (nodes){
-var self=this;
-var args=nil;
-(args=smalltalk.send(nodes, "_collect_", [(function(node){return smalltalk.send(self, "_isolated_", [node]);})]));
-smalltalk.send(self, "_lazyAssignValue_", [smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(str){smalltalk.send(str, "_nextPutAll_", ["["]);smalltalk.send(args, "_do_separatedBy_", [(function(each){return smalltalk.send(str, "_nextPutAll_", [smalltalk.send(self, "_useValueNamed_", [each])]);}), (function(){return smalltalk.send(str, "_nextPutAll_", [", "]);})]);return smalltalk.send(str, "_nextPutAll_", ["]"]);})])]);
-return self;},
-args: ["nodes"],
-source: "arrayOfValues: nodes\x0a\x09| args |\x0a\x09args :=nodes collect: [ :node | self isolated: node ].\x0a\x09self lazyAssignValue: (String streamContents: [ :str |\x0a\x09\x09str nextPutAll: '['.\x0a\x09\x09args\x0a\x09    \x09\x09do: [:each | str nextPutAll: (self useValueNamed: each) ]\x0a\x09    \x09\x09separatedBy: [str nextPutAll: ', '].\x0a                str nextPutAll: ']'\x0a\x09])",
-messageSends: ["collect:", "isolated:", "lazyAssignValue:", "streamContents:", "nextPutAll:", "do:separatedBy:", "useValueNamed:"],
-referencedClasses: ["String"]
-}),
-smalltalk.ImpCodeGenerator);
-
 smalltalk.addMethod(
 "_assert_",
 smalltalk.method({
@@ -3147,25 +3129,6 @@ referencedClasses: []
 }),
 smalltalk.ImpCodeGenerator);
 
-smalltalk.addMethod(
-"_isolate_",
-smalltalk.method({
-selector: "isolate:",
-category: 'compilation DSL',
-fn: function (aBlock){
-var self=this;
-var old=nil;
-(old=smalltalk.send(self, "_switchTarget_", [smalltalk.send(self, "_nextLazyvarName", [])]));
-smalltalk.send(aBlock, "_value", []);
-return smalltalk.send(self, "_switchTarget_", [old]);
-return self;},
-args: ["aBlock"],
-source: "isolate: aBlock\x0a| old |\x0a\x09old := self switchTarget: self nextLazyvarName.\x0a\x09aBlock value.\x0a\x09^self switchTarget: old",
-messageSends: ["switchTarget:", "nextLazyvarName", "value"],
-referencedClasses: []
-}),
-smalltalk.ImpCodeGenerator);
-
 smalltalk.addMethod(
 "_isolated_",
 smalltalk.method({
@@ -3473,13 +3436,13 @@ category: 'visiting',
 fn: function (aSelector, aReceiver, aCollection, aBoolean){
 var self=this;
 var args=nil;
-(args=smalltalk.send(self, "_isolate_", [(function(){return smalltalk.send(self, "_arrayOfValues_", [aCollection]);})]));
+(args=smalltalk.send(self, "_isolated_", [(function($rec){smalltalk.send($rec, "_nodes_", [aCollection]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.DynamicArrayNode || DynamicArrayNode), "_new", []))]));
 smalltalk.send(self, "_lazyAssignExpression_", [smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(str){smalltalk.send(str, "_nextPutAll_", ["smalltalk.send("]);smalltalk.send(str, "_nextPutAll_", [smalltalk.send(self, "_useValueNamed_", [aReceiver])]);smalltalk.send(str, "_nextPutAll_", [smalltalk.send(smalltalk.send(", \x22", "__comma", [smalltalk.send(aSelector, "_asSelector", [])]), "__comma", ["\x22, "])]);smalltalk.send(str, "_nextPutAll_", [smalltalk.send(self, "_useValueNamed_", [args])]);((($receiver = aBoolean).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(str, "_nextPutAll_", [smalltalk.send(", smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(smalltalk.send(self, "_currentClass", []), "_superclass", [])])])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(str, "_nextPutAll_", [smalltalk.send(", smalltalk.", "__comma", [smalltalk.send(self, "_classNameFor_", [smalltalk.send(smalltalk.send(self, "_currentClass", []), "_superclass", [])])])]);})]));return smalltalk.send(str, "_nextPutAll_", [")"]);})])]);
 return self;},
 args: ["aSelector", "aReceiver", "aCollection", "aBoolean"],
-source: "send: aSelector to: aReceiver arguments: aCollection superSend: aBoolean\x0a\x09| args |\x0a\x09args := self isolate: [ self arrayOfValues: aCollection ].\x0a\x09self lazyAssignExpression: (String streamContents: [ :str |\x0a\x09\x09str nextPutAll: 'smalltalk.send('.\x0a\x09\x09str nextPutAll: (self useValueNamed: aReceiver).\x0a\x09\x09str nextPutAll: ', \x22', aSelector asSelector, '\x22, '.\x0a\x09\x09str nextPutAll: (self useValueNamed: args).\x0a\x09\x09aBoolean ifTrue: [\x0a\x09\x09\x09str nextPutAll: ', smalltalk.', (self classNameFor: self currentClass superclass)].\x0a\x09\x09str nextPutAll: ')'\x0a\x09])",
-messageSends: ["isolate:", "arrayOfValues:", "lazyAssignExpression:", "streamContents:", "nextPutAll:", "useValueNamed:", ",", "asSelector", "ifTrue:", "classNameFor:", "superclass", "currentClass"],
-referencedClasses: ["String"]
+source: "send: aSelector to: aReceiver arguments: aCollection superSend: aBoolean\x0a\x09| args |\x0a\x09args := self isolated: (DynamicArrayNode new nodes: aCollection; yourself).\x0a\x09self lazyAssignExpression: (String streamContents: [ :str |\x0a\x09\x09str nextPutAll: 'smalltalk.send('.\x0a\x09\x09str nextPutAll: (self useValueNamed: aReceiver).\x0a\x09\x09str nextPutAll: ', \x22', aSelector asSelector, '\x22, '.\x0a\x09\x09str nextPutAll: (self useValueNamed: args).\x0a\x09\x09aBoolean ifTrue: [\x0a\x09\x09\x09str nextPutAll: ', smalltalk.', (self classNameFor: self currentClass superclass)].\x0a\x09\x09str nextPutAll: ')'\x0a\x09])",
+messageSends: ["isolated:", "nodes:", "yourself", "new", "lazyAssignExpression:", "streamContents:", "nextPutAll:", "useValueNamed:", ",", "asSelector", "ifTrue:", "classNameFor:", "superclass", "currentClass"],
+referencedClasses: ["DynamicArrayNode", "String"]
 }),
 smalltalk.ImpCodeGenerator);
 
@@ -3734,14 +3697,16 @@ smalltalk.addMethod(
 smalltalk.method({
 selector: "visitDynamicArrayNode:",
 category: 'visiting',
-fn: function (aNode) {
+fn: function (aNode){
 var self=this;
-smalltalk.send(self, "_arrayOfValues_", [smalltalk.send(aNode, "_nodes", [])]);
+var args=nil;
+(args=smalltalk.send(smalltalk.send(aNode, "_nodes", []), "_collect_", [(function(node){return smalltalk.send(self, "_isolated_", [node]);})]));
+smalltalk.send(self, "_lazyAssignValue_", [smalltalk.send((smalltalk.String || String), "_streamContents_", [(function(str){smalltalk.send(str, "_nextPutAll_", ["["]);smalltalk.send(args, "_do_separatedBy_", [(function(each){return smalltalk.send(str, "_nextPutAll_", [smalltalk.send(self, "_useValueNamed_", [each])]);}), (function(){return smalltalk.send(str, "_nextPutAll_", [", "]);})]);return smalltalk.send(str, "_nextPutAll_", ["]"]);})])]);
 return self;},
 args: ["aNode"],
-source: "visitDynamicArrayNode: aNode\x0a\x09self arrayOfValues: aNode nodes",
-messageSends: ["arrayOfValues:", "nodes"],
-referencedClasses: []
+source: "visitDynamicArrayNode: aNode\x0a\x09| args |\x0a\x09args :=aNode nodes collect: [ :node | self isolated: node ].\x0a\x09self lazyAssignValue: (String streamContents: [ :str |\x0a\x09\x09str nextPutAll: '['.\x0a\x09\x09args\x0a\x09    \x09\x09do: [:each | str nextPutAll: (self useValueNamed: each) ]\x0a\x09    \x09\x09separatedBy: [str nextPutAll: ', '].\x0a                str nextPutAll: ']'\x0a\x09])",
+messageSends: ["collect:", "nodes", "isolated:", "lazyAssignValue:", "streamContents:", "nextPutAll:", "do:separatedBy:", "useValueNamed:"],
+referencedClasses: ["String"]
 }),
 smalltalk.ImpCodeGenerator);
 
@@ -3753,13 +3718,13 @@ category: 'visiting',
 fn: function (aNode){
 var self=this;
 var elements=nil;
-(elements=smalltalk.send(self, "_isolate_", [(function(){return smalltalk.send(self, "_arrayOfValues_", [smalltalk.send(aNode, "_nodes", [])]);})]));
+(elements=smalltalk.send(self, "_isolated_", [(function($rec){smalltalk.send($rec, "_nodes_", [smalltalk.send(aNode, "_nodes", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send((smalltalk.DynamicArrayNode || DynamicArrayNode), "_new", []))]));
 smalltalk.send(self, "_lazyAssignValue_", [smalltalk.send(smalltalk.send("smalltalk.HashedCollection._fromPairs_(", "__comma", [smalltalk.send(self, "_useValueNamed_", [elements])]), "__comma", [")"])]);
 return self;},
 args: ["aNode"],
-source: "visitDynamicDictionaryNode: aNode\x0a\x09| elements |\x0a\x09elements := self isolate: [ self arrayOfValues: aNode nodes ].\x0a\x09self lazyAssignValue: 'smalltalk.HashedCollection._fromPairs_(', (self useValueNamed: elements), ')'",
-messageSends: ["isolate:", "arrayOfValues:", "nodes", "lazyAssignValue:", ",", "useValueNamed:"],
-referencedClasses: []
+source: "visitDynamicDictionaryNode: aNode\x0a\x09| elements |\x0a\x09elements := self isolated: (DynamicArrayNode new nodes: aNode nodes; yourself).\x0a\x09self lazyAssignValue: 'smalltalk.HashedCollection._fromPairs_(', (self useValueNamed: elements), ')'",
+messageSends: ["isolated:", "nodes:", "nodes", "yourself", "new", "lazyAssignValue:", ",", "useValueNamed:"],
+referencedClasses: ["DynamicArrayNode"]
 }),
 smalltalk.ImpCodeGenerator);
 

+ 11 - 22
st/Compiler.st

@@ -1572,13 +1572,6 @@ ifValueWanted: aBlock
 	target ifNotNil: aBlock
 !
 
-isolate: aBlock
-| old |
-	old := self switchTarget: self nextLazyvarName.
-	aBlock value.
-	^self switchTarget: old
-!
-
 isolated: node
  	^ self visit: node targetBeing: self nextLazyvarName
 !
@@ -1942,21 +1935,9 @@ performOptimizations
 
 !ImpCodeGenerator methodsFor: 'visiting'!
 
-arrayOfValues: nodes
-	| args |
-	args :=nodes collect: [ :node | self isolated: node ].
-	self lazyAssignValue: (String streamContents: [ :str |
-		str nextPutAll: '['.
-		args
-	    		do: [:each | str nextPutAll: (self useValueNamed: each) ]
-	    		separatedBy: [str nextPutAll: ', '].
-                str nextPutAll: ']'
-	])
-!
-
 send: aSelector to: aReceiver arguments: aCollection superSend: aBoolean
 	| args |
-	args := self isolate: [ self arrayOfValues: aCollection ].
+	args := self isolated: (DynamicArrayNode new nodes: aCollection; yourself).
 	self lazyAssignExpression: (String streamContents: [ :str |
 		str nextPutAll: 'smalltalk.send('.
 		str nextPutAll: (self useValueNamed: aReceiver).
@@ -2048,12 +2029,20 @@ visitClassReferenceNode: aNode
 !
 
 visitDynamicArrayNode: aNode
-	self arrayOfValues: aNode nodes
+	| args |
+	args :=aNode nodes collect: [ :node | self isolated: node ].
+	self lazyAssignValue: (String streamContents: [ :str |
+		str nextPutAll: '['.
+		args
+	    		do: [:each | str nextPutAll: (self useValueNamed: each) ]
+	    		separatedBy: [str nextPutAll: ', '].
+                str nextPutAll: ']'
+	])
 !
 
 visitDynamicDictionaryNode: aNode
 	| elements |
-	elements := self isolate: [ self arrayOfValues: aNode nodes ].
+	elements := self isolated: (DynamicArrayNode new nodes: aNode nodes; yourself).
 	self lazyAssignValue: 'smalltalk.HashedCollection._fromPairs_(', (self useValueNamed: elements), ')'
 !