| Index: sdk/lib/_internal/compiler/implementation/ssa/nodes.dart
|
| ===================================================================
|
| --- sdk/lib/_internal/compiler/implementation/ssa/nodes.dart (revision 19306)
|
| +++ sdk/lib/_internal/compiler/implementation/ssa/nodes.dart (working copy)
|
| @@ -1316,6 +1316,9 @@
|
| toString() => 'invoke dynamic: $selector';
|
| HInstruction get receiver => inputs[0];
|
|
|
| + /**
|
| + * Returns whether this call is on an intercepted method.
|
| + */
|
| bool get isInterceptorCall {
|
| // We know it's a selector call if it follows the interceptor
|
| // calling convention, which adds the actual receiver as a
|
| @@ -1323,6 +1326,18 @@
|
| return inputs.length - 2 == selector.argumentCount;
|
| }
|
|
|
| + /**
|
| + * Returns whether this call is on an interceptor object.
|
| + */
|
| + bool get isCallOnInterceptor {
|
| + // When the optimizers know this call does not need an
|
| + // interceptor, they udpate the receiver of the call to be the
|
| + // actual receiver.
|
| + // TODO(ngeoffray): This is very fragile and we should inspect the
|
| + // receiver instead.
|
| + return isInterceptorCall && inputs[0] != inputs[1];
|
| + }
|
| +
|
| int typeCode() => HInstruction.INVOKE_DYNAMIC_TYPECODE;
|
| bool typeEquals(other) => other is HInvokeDynamic;
|
| bool dataEquals(HInvokeDynamic other) {
|
|
|