Переглянути джерело

Merge pull request #328 from herby/gh-326

Fixes #326. Stops subtree aliasing at block boundary.
Nicolas Petton 11 роки тому
батько
коміт
862f54e3c7
3 змінених файлів з 46 додано та 7 видалено
  1. 15 0
      js/Compiler-AST.deploy.js
  2. 21 1
      js/Compiler-AST.js
  3. 10 6
      st/Compiler-AST.st

+ 15 - 0
js/Compiler-AST.deploy.js

@@ -369,6 +369,21 @@ return self}
 }),
 smalltalk.BlockNode);
 
+smalltalk.addMethod(
+"_subtreeNeedsAliasing",
+smalltalk.method({
+selector: "subtreeNeedsAliasing",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_shouldBeAliased",[]),"_or_",[(function(){
+return smalltalk.send(self,"_shouldBeInlined",[]);
+})]);
+return $1;
+}
+}),
+smalltalk.BlockNode);
+
 
 
 smalltalk.addClass('CascadeNode', smalltalk.Node, ['receiver'], 'Compiler-AST');

+ 21 - 1
js/Compiler-AST.js

@@ -266,7 +266,7 @@ smalltalk.addMethod(
 "_subtreeNeedsAliasing",
 smalltalk.method({
 selector: "subtreeNeedsAliasing",
-category: 'accessing',
+category: 'testing',
 fn: function (){
 var self=this;
 var $1;
@@ -515,6 +515,26 @@ referencedClasses: []
 }),
 smalltalk.BlockNode);
 
+smalltalk.addMethod(
+"_subtreeNeedsAliasing",
+smalltalk.method({
+selector: "subtreeNeedsAliasing",
+category: 'testing',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_shouldBeAliased",[]),"_or_",[(function(){
+return smalltalk.send(self,"_shouldBeInlined",[]);
+})]);
+return $1;
+},
+args: [],
+source: "subtreeNeedsAliasing\x0a    ^self shouldBeAliased or: [ self shouldBeInlined ]",
+messageSends: ["or:", "shouldBeInlined", "shouldBeAliased"],
+referencedClasses: []
+}),
+smalltalk.BlockNode);
+
 
 
 smalltalk.addClass('CascadeNode', smalltalk.Node, ['receiver'], 'Compiler-AST');

+ 10 - 6
st/Compiler-AST.st

@@ -29,12 +29,6 @@ shouldBeInlined
 
 shouldBeInlined: aBoolean
 	shouldBeInlined := aBoolean
-!
-
-subtreeNeedsAliasing
-    ^(self shouldBeAliased or: [ self shouldBeInlined ]) or: [
-        (self nodes detect: [ :node | node subtreeNeedsAliasing ] ifNone: [ false ]) ~= false
-    ]
 ! !
 
 !Node methodsFor: 'building'!
@@ -71,6 +65,12 @@ isSendNode
 
 isValueNode
 	^false
+!
+
+subtreeNeedsAliasing
+    ^(self shouldBeAliased or: [ self shouldBeInlined ]) or: [
+        (self nodes detect: [ :node | node subtreeNeedsAliasing ] ifNone: [ false ]) ~= false
+    ]
 ! !
 
 !Node methodsFor: 'visiting'!
@@ -143,6 +143,10 @@ scope: aLexicalScope
 
 isBlockNode
 	^true
+!
+
+subtreeNeedsAliasing
+    ^self shouldBeAliased or: [ self shouldBeInlined ]
 ! !
 
 !BlockNode methodsFor: 'visiting'!