| Index: pkg/compiler/lib/src/cps_ir/cps_fragment.dart
|
| diff --git a/pkg/compiler/lib/src/cps_ir/cps_fragment.dart b/pkg/compiler/lib/src/cps_ir/cps_fragment.dart
|
| index 5d56560bed9ac0c9b8b3183ad528a8376c401374..57c9647e15f5b7164bb7aaf2e80bfb3b1c039b82 100644
|
| --- a/pkg/compiler/lib/src/cps_ir/cps_fragment.dart
|
| +++ b/pkg/compiler/lib/src/cps_ir/cps_fragment.dart
|
| @@ -346,3 +346,17 @@ void destroyAndReplace(Expression node, Expression newNode) {
|
| parent.body = newNode;
|
| newNode.parent = parent;
|
| }
|
| +
|
| +/// Removes all [Refinement] uses of a given primitive that has no effective
|
| +/// uses.
|
| +void destroyRefinementsOfDeadPrimitive(Primitive prim) {
|
| + while (prim.firstRef != null) {
|
| + Refinement refine = prim.firstRef.parent;
|
| + destroyRefinementsOfDeadPrimitive(refine);
|
| + LetPrim letPrim = refine.parent;
|
| + InteriorNode parent = letPrim.parent;
|
| + parent.body = letPrim.body;
|
| + letPrim.body.parent = parent;
|
| + prim.firstRef.unlink();
|
| + }
|
| +}
|
|
|