Chromium Code Reviews| Index: pkg/compiler/lib/src/cps_ir/insert_refinements.dart |
| diff --git a/pkg/compiler/lib/src/cps_ir/insert_refinements.dart b/pkg/compiler/lib/src/cps_ir/insert_refinements.dart |
| index afea3976dee6bb0de887eee47d1d8de6b271ba79..4dded8d127ae2879f6b16268224d4c7815cb0735 100644 |
| --- a/pkg/compiler/lib/src/cps_ir/insert_refinements.dart |
| +++ b/pkg/compiler/lib/src/cps_ir/insert_refinements.dart |
| @@ -5,7 +5,6 @@ |
| library cps_ir.optimization.insert_refinements; |
| import 'optimizers.dart' show Pass; |
| -import 'shrinking_reductions.dart' show ParentVisitor; |
| import 'cps_ir_nodes.dart'; |
| import '../types/constants.dart'; |
| import '../constants/values.dart'; |
| @@ -23,7 +22,7 @@ import 'type_mask_system.dart'; |
| /// |
| /// Refinement nodes are inserted after a method invocation to refine the |
| /// receiver to the types that can respond to the given selector. |
| -class InsertRefinements extends RecursiveVisitor implements Pass { |
| +class InsertRefinements extends TrampolineRecursiveVisitor implements Pass { |
| String get passName => 'Insert refinement nodes'; |
| final TypeMaskSystem types; |
| @@ -34,7 +33,6 @@ class InsertRefinements extends RecursiveVisitor implements Pass { |
| InsertRefinements(this.types); |
| void rewrite(FunctionDefinition node) { |
| - new ParentVisitor().visit(node); |
| visit(node.body); |
| } |
| @@ -80,6 +78,7 @@ class InsertRefinements extends RecursiveVisitor implements Pass { |
| /// Enqueues [cont] for processing in a context where [refined] is the |
| /// current refinement for its value. |
| void pushRefinement(Continuation cont, Refinement refined) { |
| + refined.value.parent = refined; |
|
Kevin Millikin (Google)
2015/10/05 12:04:37
Is this necessary here? It looks like the constru
asgerf
2015/10/12 13:18:32
You're right, done.
|
| Primitive value = refined.effectiveDefinition; |
| Primitive currentRefinement = refinementFor[value]; |
| pushAction(() { |
| @@ -121,7 +120,8 @@ class InsertRefinements extends RecursiveVisitor implements Pass { |
| } else { |
| // Filter away receivers that throw on this selector. |
| TypeMask type = types.receiverTypeFor(node.selector, node.mask); |
| - pushRefinement(cont, new Refinement(receiver, type)); |
| + Refinement refinement = new Refinement(receiver, type); |
| + pushRefinement(cont, refinement); |
| } |
| } |