| Index: pkg/compiler/lib/src/cps_ir/share_interceptors.dart
|
| diff --git a/pkg/compiler/lib/src/cps_ir/share_interceptors.dart b/pkg/compiler/lib/src/cps_ir/share_interceptors.dart
|
| index 5ae912e81d0baa0b4698bff409c298eb1ecb024b..a4552008bb5ec2c3a74d4b562e96831b610ffe44 100644
|
| --- a/pkg/compiler/lib/src/cps_ir/share_interceptors.dart
|
| +++ b/pkg/compiler/lib/src/cps_ir/share_interceptors.dart
|
| @@ -94,8 +94,10 @@ class ShareInterceptors extends RecursiveVisitor implements Pass {
|
| existing.interceptedClasses.addAll(interceptor.interceptedClasses);
|
| }
|
| existing.substituteFor(interceptor);
|
| - interceptor.destroy();
|
| - node.remove();
|
| + InteriorNode parent = node.parent;
|
| + parent.body = node.body;
|
| + node.body.parent = parent;
|
| + interceptor.input.unlink();
|
| return next;
|
| }
|
|
|
| @@ -107,8 +109,10 @@ class ShareInterceptors extends RecursiveVisitor implements Pass {
|
| existing = sharedConstantFor[constant];
|
| if (existing != null) {
|
| existing.substituteFor(interceptor);
|
| - interceptor.destroy();
|
| - node.remove();
|
| + InteriorNode parent = node.parent;
|
| + parent.body = node.body;
|
| + node.body.parent = parent;
|
| + interceptor.input.unlink();
|
| return next;
|
| }
|
|
|
| @@ -118,7 +122,7 @@ class ShareInterceptors extends RecursiveVisitor implements Pass {
|
| constantPrim.hint = interceptor.hint;
|
| constantPrim.type = interceptor.type;
|
| constantPrim.substituteFor(interceptor);
|
| - interceptor.destroy();
|
| + interceptor.input.unlink();
|
| sharedConstantFor[constant] = constantPrim;
|
| } else {
|
| interceptorFor[input] = interceptor;
|
| @@ -143,10 +147,18 @@ class ShareInterceptors extends RecursiveVisitor implements Pass {
|
| }
|
| assert(loop != null);
|
|
|
| - // Move the LetPrim above the loop binding.
|
| + // Remove LetPrim from its current position.
|
| + InteriorNode parent = node.parent;
|
| + parent.body = node.body;
|
| + node.body.parent = parent;
|
| +
|
| + // Insert the LetPrim immediately before the loop.
|
| LetCont loopBinding = loop.parent;
|
| - node.remove();
|
| - node.insertAbove(loopBinding);
|
| + InteriorNode newParent = loopBinding.parent;
|
| + newParent.body = node;
|
| + node.body = loopBinding;
|
| + loopBinding.parent = node;
|
| + node.parent = newParent;
|
|
|
| // A different loop now contains the interceptor.
|
| loopHeaderFor[node.primitive] = enclosing;
|
|
|