Index: pkg/compiler/lib/src/cps_ir/scalar_replacement.dart |
diff --git a/pkg/compiler/lib/src/cps_ir/scalar_replacement.dart b/pkg/compiler/lib/src/cps_ir/scalar_replacement.dart |
index b9b6b09c378c616acfcca8d7b99027923a292bfc..0c70e67964a3d926e932756a845227bad669b10c 100644 |
--- a/pkg/compiler/lib/src/cps_ir/scalar_replacement.dart |
+++ b/pkg/compiler/lib/src/cps_ir/scalar_replacement.dart |
@@ -48,8 +48,6 @@ class ScalarReplacer extends Pass { |
@override |
void rewrite(FunctionDefinition root) { |
- // Set all parent pointers. |
- new ParentVisitor().visit(root); |
ScalarReplacementVisitor analyzer = |
new ScalarReplacementVisitor(_internalError, _classWorld); |
analyzer.analyze(root); |
@@ -61,7 +59,7 @@ class ScalarReplacer extends Pass { |
* Do scalar replacement of aggregates on instances. Since scalar replacement |
* can create new candidiates, iterate until all scalar replacements are done. |
*/ |
-class ScalarReplacementVisitor extends RecursiveVisitor { |
+class ScalarReplacementVisitor extends TrampolineRecursiveVisitor { |
final dart2js.InternalErrorFunction internalError; |
final World classWorld; |
@@ -192,6 +190,7 @@ class ScalarReplacementVisitor extends RecursiveVisitor { |
void replacePrimitive(Primitive old, Primitive primitive) { |
LetPrim letPrim = old.parent; |
letPrim.primitive = primitive; |
+ primitive.parent = letPrim; |
} |
void deleteLetPrimOf(Primitive primitive) { |
@@ -233,7 +232,7 @@ class ScalarReplacementVisitor extends RecursiveVisitor { |
/// Visit a just-deleted subterm and unlink all [Reference]s in it. Reconsider |
/// allocations for scalar replacement. |
-class ScalarReplacementRemovalVisitor extends RecursiveVisitor { |
+class ScalarReplacementRemovalVisitor extends TrampolineRecursiveVisitor { |
ScalarReplacementVisitor process; |
ScalarReplacementRemovalVisitor(this.process); |