Index: pkg/compiler/lib/src/cps_ir/optimize_interceptors.dart |
diff --git a/pkg/compiler/lib/src/cps_ir/optimize_interceptors.dart b/pkg/compiler/lib/src/cps_ir/optimize_interceptors.dart |
index 689dac67fdd02e4163c1c5dd72904b3bcd08b059..d9c59b683884b5b28e91fc14dde1e8edcb8c3c9c 100644 |
--- a/pkg/compiler/lib/src/cps_ir/optimize_interceptors.dart |
+++ b/pkg/compiler/lib/src/cps_ir/optimize_interceptors.dart |
@@ -137,7 +137,7 @@ class OptimizeInterceptors extends TrampolineRecursiveVisitor implements Pass { |
for (Reference ref = node.firstRef; ref != null; ref = ref.next) { |
if (ref.parent is InvokeMethod) { |
InvokeMethod invoke = ref.parent; |
- if (invoke.receiver != ref) return false; |
+ if (invoke.receiverRef != ref) return false; |
var interceptedClasses = |
backend.getInterceptedClassesOn(invoke.selector.name); |
if (interceptedClasses.contains(helpers.jsDoubleClass)) return false; |
@@ -173,7 +173,7 @@ class OptimizeInterceptors extends TrampolineRecursiveVisitor implements Pass { |
// TODO(asgerf): This could be more precise if we used the use-site type, |
// since the interceptor may have been hoisted out of a loop, where a less |
// precise type is known. |
- Primitive input = node.input.definition; |
+ Primitive input = node.input; |
TypeMask type = input.type; |
if (canInterceptNull(node)) return null; |
type = type.nonNullable(); |
@@ -198,7 +198,7 @@ class OptimizeInterceptors extends TrampolineRecursiveVisitor implements Pass { |
/// successful. |
bool constifyInterceptor(Interceptor interceptor) { |
LetPrim let = interceptor.parent; |
- Primitive input = interceptor.input.definition; |
+ Primitive input = interceptor.input; |
ClassElement classElement = getSingleInterceptorClass(interceptor); |
if (classElement == null) return false; |
@@ -261,7 +261,7 @@ class OptimizeInterceptors extends TrampolineRecursiveVisitor implements Pass { |
@override |
void visitInvokeMethod(InvokeMethod node) { |
if (node.callingConvention != CallingConvention.Intercepted) return; |
- Primitive interceptor = node.receiver.definition; |
+ Primitive interceptor = node.receiver; |
if (interceptor is! Interceptor || |
interceptor.hasMultipleUses || |
loopHeaderFor[interceptor] != currentLoopHeader) { |
@@ -270,12 +270,12 @@ class OptimizeInterceptors extends TrampolineRecursiveVisitor implements Pass { |
// TODO(asgerf): Consider heuristics for when to use one-shot interceptors. |
// E.g. using only one-shot interceptors with a fast path. |
node.callingConvention = CallingConvention.OneShotIntercepted; |
- node..receiver.unlink()..receiver = node.arguments.removeAt(0); |
+ node..receiverRef.unlink()..receiverRef = node.argumentRefs.removeAt(0); |
} |
@override |
void visitTypeTestViaFlag(TypeTestViaFlag node) { |
- Primitive interceptor = node.interceptor.definition; |
+ Primitive interceptor = node.interceptor; |
if (interceptor is! Interceptor || |
interceptor.hasMultipleUses || |
loopHeaderFor[interceptor] != currentLoopHeader || |
@@ -283,7 +283,7 @@ class OptimizeInterceptors extends TrampolineRecursiveVisitor implements Pass { |
return; |
} |
Interceptor inter = interceptor; |
- Primitive value = inter.input.definition; |
+ Primitive value = inter.input; |
node.replaceWith(new TypeTest(value, node.dartType, [])..type = node.type); |
} |
} |