| 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..ec12543275f6e585eb251b777b09d364a4ace61f 100644
|
| --- a/pkg/compiler/lib/src/cps_ir/insert_refinements.dart
|
| +++ b/pkg/compiler/lib/src/cps_ir/insert_refinements.dart
|
| @@ -68,9 +68,17 @@ class InsertRefinements extends RecursiveVisitor implements Pass {
|
| let = new LetCont(cont, null);
|
| cont.parent = let;
|
| } else {
|
| - let.remove(); // Reuse the existing LetCont.
|
| + // Remove LetCont from current position.
|
| + InteriorNode letParent = let.parent;
|
| + letParent.body = let.body;
|
| + let.body.parent = letParent;
|
| }
|
| - let.insertAbove(use);
|
| +
|
| + // Insert LetCont before use.
|
| + useParent.body = let;
|
| + let.body = use;
|
| + use.parent = let;
|
| + let.parent = useParent;
|
| }
|
|
|
| Primitive unfoldInterceptor(Primitive prim) {
|
| @@ -86,11 +94,11 @@ class InsertRefinements extends RecursiveVisitor implements Pass {
|
| refinementFor[value] = currentRefinement;
|
| if (refined.hasNoUses) {
|
| // Clean up refinements that are not used.
|
| - refined.destroy();
|
| + refined.value.unlink();
|
| } else {
|
| - LetPrim let = new LetPrim(refined);
|
| - refined.parent = let;
|
| - let.insertBelow(cont);
|
| + cont.body = new LetPrim(refined, cont.body);
|
| + refined.parent = cont.body;
|
| + refined.value.parent = refined;
|
| }
|
| });
|
| push(cont);
|
|
|