| Index: pkg/compiler/lib/src/cps_ir/type_propagation.dart
|
| diff --git a/pkg/compiler/lib/src/cps_ir/type_propagation.dart b/pkg/compiler/lib/src/cps_ir/type_propagation.dart
|
| index db089cd344f07e9d53709eb29758d87beb00bd32..0a2b4cef8060d3aa61435b707c5d6d69397d3fc1 100644
|
| --- a/pkg/compiler/lib/src/cps_ir/type_propagation.dart
|
| +++ b/pkg/compiler/lib/src/cps_ir/type_propagation.dart
|
| @@ -361,6 +361,9 @@ class TypePropagator extends Pass {
|
|
|
| @override
|
| void rewrite(FunctionDefinition root) {
|
| + // Set all parent pointers.
|
| + new ParentVisitor().visit(root);
|
| +
|
| Map<Expression, ConstantValue> replacements = <Expression, ConstantValue>{};
|
|
|
| // Analyze. In this phase, the entire term is analyzed for reachability
|
| @@ -405,7 +408,7 @@ final Map<String, BuiltinOperator> NumBinaryBuiltins =
|
| * Uses the information from a preceding analysis pass in order to perform the
|
| * actual transformations on the CPS graph.
|
| */
|
| -class TransformingVisitor extends DeepRecursiveVisitor {
|
| +class TransformingVisitor extends LeafVisitor {
|
| final TypePropagationVisitor analyzer;
|
| final Map<Expression, ConstantValue> replacements;
|
| final ConstantPropagationLattice lattice;
|
| @@ -512,7 +515,7 @@ class TransformingVisitor extends DeepRecursiveVisitor {
|
|
|
| /// Sets parent pointers and computes types for the given subtree.
|
| void reanalyze(Node node) {
|
| - ParentVisitor.setParents(node);
|
| + new ParentVisitor().visit(node);
|
| analyzer.reanalyzeSubtree(node);
|
| }
|
|
|
| @@ -557,6 +560,7 @@ class TransformingVisitor extends DeepRecursiveVisitor {
|
| // traversing the entire subtree of [node]. Temporarily close the
|
| // term with a dummy node while recomputing types.
|
| context.body = new Unreachable();
|
| + new ParentVisitor().visit(insertedCode.root);
|
| reanalyze(insertedCode.root);
|
|
|
| context.body = node;
|
| @@ -1498,7 +1502,8 @@ class TransformingVisitor extends DeepRecursiveVisitor {
|
| // target definitely does not use it.
|
| Constant dummy = makeConstantPrimitive(new IntConstantValue(0));
|
| insertLetPrim(node, dummy);
|
| - node.arguments[0].changeTo(dummy);
|
| + node.arguments[0].unlink();
|
| + node.arguments[0] = new Reference<Primitive>(dummy);
|
| node.receiverIsIntercepted = false;
|
| }
|
| }
|
| @@ -2693,7 +2698,7 @@ class OriginalLengthEntity extends Entity {
|
| String get name => 'length';
|
| }
|
|
|
| -class ResetAnalysisInfo extends TrampolineRecursiveVisitor {
|
| +class ResetAnalysisInfo extends RecursiveVisitor {
|
| Set<Continuation> reachableContinuations;
|
| Map<Variable, ConstantValue> values;
|
|
|
|
|