| 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);
|
| }
|
| }
|
|
|