| Index: pkg/compiler/lib/src/cps_ir/update_refinements.dart
|
| diff --git a/pkg/compiler/lib/src/cps_ir/update_refinements.dart b/pkg/compiler/lib/src/cps_ir/update_refinements.dart
|
| index 79b3673b5c3f9b937c5d459e370a1a01eb2f9270..d93e747a9ec589e8774868353bd58b9da72b8b64 100644
|
| --- a/pkg/compiler/lib/src/cps_ir/update_refinements.dart
|
| +++ b/pkg/compiler/lib/src/cps_ir/update_refinements.dart
|
| @@ -20,7 +20,7 @@ class UpdateRefinements extends TrampolineRecursiveVisitor implements Pass {
|
|
|
| final TypeMaskSystem typeSystem;
|
|
|
| - Map<Primitive, Primitive> refinementFor = <Primitive, Primitive>{};
|
| + Map<Primitive, Refinement> refinementFor = <Primitive, Refinement>{};
|
|
|
| UpdateRefinements(this.typeSystem);
|
|
|
| @@ -29,33 +29,11 @@ class UpdateRefinements extends TrampolineRecursiveVisitor implements Pass {
|
| }
|
|
|
| Expression traverseLetPrim(LetPrim node) {
|
| - Expression next = node.body;
|
| visit(node.primitive);
|
| - return next;
|
| - }
|
| -
|
| - visitNullCheck(NullCheck node) {
|
| - if (refine(node.value)) {
|
| - Primitive value = node.value.definition;
|
| - if (value.type.isNullable) {
|
| - // Update the type if the input has changed.
|
| - node.type = value.type.nonNullable();
|
| - } else {
|
| - node..replaceUsesWith(value)..destroy();
|
| - LetPrim letPrim = node.parent;
|
| - letPrim.remove();
|
| - return;
|
| - }
|
| - }
|
| - // Use the NullCheck as a refinement.
|
| - Primitive value = node.effectiveDefinition;
|
| - Refinement old = refinementFor[value];
|
| - refinementFor[value] = node;
|
| - pushAction(() {
|
| - refinementFor[value] = old;
|
| - });
|
| + return node.body;
|
| }
|
|
|
| + @override
|
| visitRefinement(Refinement node) {
|
| if (refine(node.value)) {
|
| // Update the type if the input has changed.
|
| @@ -70,6 +48,7 @@ class UpdateRefinements extends TrampolineRecursiveVisitor implements Pass {
|
| });
|
| }
|
|
|
| + @override
|
| processReference(Reference ref) {
|
| refine(ref);
|
| }
|
|
|