| Index: pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart
|
| diff --git a/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart b/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart
|
| index dedff76507627ac406cea759de645d2cc208a723..215cf3ae74021c00eb6d418bf3115a24631acb35 100644
|
| --- a/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart
|
| +++ b/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart
|
| @@ -268,6 +268,26 @@ class InvokeConstructor extends Expression implements Invoke {
|
| }
|
| }
|
|
|
| +/// Call a method using a one-shot interceptor.
|
| +///
|
| +/// There is no explicit receiver, the first argument serves that purpose.
|
| +class OneShotInterceptor extends Expression implements Invoke {
|
| + final Selector selector;
|
| + final TypeMask mask;
|
| + final List<Expression> arguments;
|
| + final SourceInformation sourceInformation;
|
| +
|
| + OneShotInterceptor(this.selector,
|
| + this.mask,
|
| + this.arguments,
|
| + this.sourceInformation);
|
| +
|
| + accept(ExpressionVisitor visitor) => visitor.visitOneShotInterceptor(this);
|
| + accept1(ExpressionVisitor1 visitor, arg) {
|
| + return visitor.visitOneShotInterceptor(this, arg);
|
| + }
|
| +}
|
| +
|
| /**
|
| * A constant.
|
| */
|
| @@ -993,6 +1013,7 @@ abstract class ExpressionVisitor<E> {
|
| E visitInvokeMethod(InvokeMethod node);
|
| E visitInvokeMethodDirectly(InvokeMethodDirectly node);
|
| E visitInvokeConstructor(InvokeConstructor node);
|
| + E visitOneShotInterceptor(OneShotInterceptor node);
|
| E visitConstant(Constant node);
|
| E visitThis(This node);
|
| E visitConditional(Conditional node);
|
| @@ -1030,6 +1051,7 @@ abstract class ExpressionVisitor1<E, A> {
|
| E visitInvokeMethod(InvokeMethod node, A arg);
|
| E visitInvokeMethodDirectly(InvokeMethodDirectly node, A arg);
|
| E visitInvokeConstructor(InvokeConstructor node, A arg);
|
| + E visitOneShotInterceptor(OneShotInterceptor node, A arg);
|
| E visitConstant(Constant node, A arg);
|
| E visitThis(This node, A arg);
|
| E visitConditional(Conditional node, A arg);
|
| @@ -1130,6 +1152,10 @@ abstract class RecursiveVisitor implements StatementVisitor, ExpressionVisitor {
|
| node.arguments.forEach(visitExpression);
|
| }
|
|
|
| + visitOneShotInterceptor(OneShotInterceptor node) {
|
| + node.arguments.forEach(visitExpression);
|
| + }
|
| +
|
| visitConstant(Constant node) {}
|
|
|
| visitThis(This node) {}
|
| @@ -1357,6 +1383,11 @@ class RecursiveTransformer extends Transformer {
|
| return node;
|
| }
|
|
|
| + visitOneShotInterceptor(OneShotInterceptor node) {
|
| + _replaceExpressions(node.arguments);
|
| + return node;
|
| + }
|
| +
|
| visitConstant(Constant node) => node;
|
|
|
| visitThis(This node) => node;
|
|
|