| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library tree_ir_nodes; | 5 library tree_ir_nodes; |
| 6 | 6 |
| 7 import '../constants/expressions.dart'; | 7 import '../constants/expressions.dart'; |
| 8 import '../constants/values.dart' as values; | 8 import '../constants/values.dart' as values; |
| 9 import '../cps_ir/cps_ir_nodes.dart' as cps_ir; | 9 import '../cps_ir/cps_ir_nodes.dart' as cps_ir; |
| 10 import '../dart_types.dart' show DartType, GenericType; | 10 import '../dart_types.dart' show DartType, GenericType; |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 152 InvokeMethod(this.receiver, this.selector, this.arguments) { | 152 InvokeMethod(this.receiver, this.selector, this.arguments) { |
| 153 assert(receiver != null); | 153 assert(receiver != null); |
| 154 } | 154 } |
| 155 | 155 |
| 156 accept(ExpressionVisitor visitor) => visitor.visitInvokeMethod(this); | 156 accept(ExpressionVisitor visitor) => visitor.visitInvokeMethod(this); |
| 157 accept1(ExpressionVisitor1 visitor, arg) { | 157 accept1(ExpressionVisitor1 visitor, arg) { |
| 158 return visitor.visitInvokeMethod(this, arg); | 158 return visitor.visitInvokeMethod(this, arg); |
| 159 } | 159 } |
| 160 } | 160 } |
| 161 | 161 |
| 162 class InvokeSuperMethod extends Expression implements Invoke { | 162 /// Invoke [target] on [receiver], bypassing ordinary dispatch semantics. |
| 163 class InvokeMethodDirectly extends Expression implements Invoke { |
| 164 Expression receiver; |
| 165 final Element target; |
| 163 final Selector selector; | 166 final Selector selector; |
| 164 final List<Expression> arguments; | 167 final List<Expression> arguments; |
| 165 | 168 |
| 166 InvokeSuperMethod(this.selector, this.arguments); | 169 InvokeMethodDirectly(this.receiver, this.target, this.selector, |
| 170 this.arguments); |
| 167 | 171 |
| 168 accept(ExpressionVisitor visitor) => visitor.visitInvokeSuperMethod(this); | 172 accept(ExpressionVisitor visitor) => visitor.visitInvokeMethodDirectly(this); |
| 169 accept1(ExpressionVisitor1 visitor, arg) { | 173 accept1(ExpressionVisitor1 visitor, arg) { |
| 170 return visitor.visitInvokeSuperMethod(this, arg); | 174 return visitor.visitInvokeMethodDirectly(this, arg); |
| 171 } | 175 } |
| 172 } | 176 } |
| 173 | 177 |
| 174 /** | 178 /** |
| 175 * Call to a factory or generative constructor. | 179 * Call to a factory or generative constructor. |
| 176 */ | 180 */ |
| 177 class InvokeConstructor extends Expression implements Invoke { | 181 class InvokeConstructor extends Expression implements Invoke { |
| 178 final DartType type; | 182 final DartType type; |
| 179 final FunctionElement target; | 183 final FunctionElement target; |
| 180 final List<Expression> arguments; | 184 final List<Expression> arguments; |
| (...skipping 509 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 690 | 694 |
| 691 accept(StatementVisitor visitor) => visitor.visitSetField(this); | 695 accept(StatementVisitor visitor) => visitor.visitSetField(this); |
| 692 accept1(StatementVisitor1 visitor, arg) => visitor.visitSetField(this, arg); | 696 accept1(StatementVisitor1 visitor, arg) => visitor.visitSetField(this, arg); |
| 693 } | 697 } |
| 694 | 698 |
| 695 abstract class ExpressionVisitor<E> { | 699 abstract class ExpressionVisitor<E> { |
| 696 E visitExpression(Expression e) => e.accept(this); | 700 E visitExpression(Expression e) => e.accept(this); |
| 697 E visitVariable(Variable node); | 701 E visitVariable(Variable node); |
| 698 E visitInvokeStatic(InvokeStatic node); | 702 E visitInvokeStatic(InvokeStatic node); |
| 699 E visitInvokeMethod(InvokeMethod node); | 703 E visitInvokeMethod(InvokeMethod node); |
| 700 E visitInvokeSuperMethod(InvokeSuperMethod node); | 704 E visitInvokeMethodDirectly(InvokeMethodDirectly node); |
| 701 E visitInvokeConstructor(InvokeConstructor node); | 705 E visitInvokeConstructor(InvokeConstructor node); |
| 702 E visitConcatenateStrings(ConcatenateStrings node); | 706 E visitConcatenateStrings(ConcatenateStrings node); |
| 703 E visitConstant(Constant node); | 707 E visitConstant(Constant node); |
| 704 E visitThis(This node); | 708 E visitThis(This node); |
| 705 E visitReifyTypeVar(ReifyTypeVar node); | 709 E visitReifyTypeVar(ReifyTypeVar node); |
| 706 E visitConditional(Conditional node); | 710 E visitConditional(Conditional node); |
| 707 E visitLogicalOperator(LogicalOperator node); | 711 E visitLogicalOperator(LogicalOperator node); |
| 708 E visitNot(Not node); | 712 E visitNot(Not node); |
| 709 E visitLiteralList(LiteralList node); | 713 E visitLiteralList(LiteralList node); |
| 710 E visitLiteralMap(LiteralMap node); | 714 E visitLiteralMap(LiteralMap node); |
| 711 E visitTypeOperator(TypeOperator node); | 715 E visitTypeOperator(TypeOperator node); |
| 712 E visitFunctionExpression(FunctionExpression node); | 716 E visitFunctionExpression(FunctionExpression node); |
| 713 E visitFieldInitializer(FieldInitializer node); | 717 E visitFieldInitializer(FieldInitializer node); |
| 714 E visitSuperInitializer(SuperInitializer node); | 718 E visitSuperInitializer(SuperInitializer node); |
| 715 E visitGetField(GetField node); | 719 E visitGetField(GetField node); |
| 716 E visitCreateBox(CreateBox node); | 720 E visitCreateBox(CreateBox node); |
| 717 E visitCreateClosureClass(CreateClosureClass node); | 721 E visitCreateClosureClass(CreateClosureClass node); |
| 718 } | 722 } |
| 719 | 723 |
| 720 abstract class ExpressionVisitor1<E, A> { | 724 abstract class ExpressionVisitor1<E, A> { |
| 721 E visitExpression(Expression e, A arg) => e.accept1(this, arg); | 725 E visitExpression(Expression e, A arg) => e.accept1(this, arg); |
| 722 E visitVariable(Variable node, A arg); | 726 E visitVariable(Variable node, A arg); |
| 723 E visitInvokeStatic(InvokeStatic node, A arg); | 727 E visitInvokeStatic(InvokeStatic node, A arg); |
| 724 E visitInvokeMethod(InvokeMethod node, A arg); | 728 E visitInvokeMethod(InvokeMethod node, A arg); |
| 725 E visitInvokeSuperMethod(InvokeSuperMethod node, A arg); | 729 E visitInvokeMethodDirectly(InvokeMethodDirectly node, A arg); |
| 726 E visitInvokeConstructor(InvokeConstructor node, A arg); | 730 E visitInvokeConstructor(InvokeConstructor node, A arg); |
| 727 E visitConcatenateStrings(ConcatenateStrings node, A arg); | 731 E visitConcatenateStrings(ConcatenateStrings node, A arg); |
| 728 E visitConstant(Constant node, A arg); | 732 E visitConstant(Constant node, A arg); |
| 729 E visitThis(This node, A arg); | 733 E visitThis(This node, A arg); |
| 730 E visitReifyTypeVar(ReifyTypeVar node, A arg); | 734 E visitReifyTypeVar(ReifyTypeVar node, A arg); |
| 731 E visitConditional(Conditional node, A arg); | 735 E visitConditional(Conditional node, A arg); |
| 732 E visitLogicalOperator(LogicalOperator node, A arg); | 736 E visitLogicalOperator(LogicalOperator node, A arg); |
| 733 E visitNot(Not node, A arg); | 737 E visitNot(Not node, A arg); |
| 734 E visitLiteralList(LiteralList node, A arg); | 738 E visitLiteralList(LiteralList node, A arg); |
| 735 E visitLiteralMap(LiteralMap node, A arg); | 739 E visitLiteralMap(LiteralMap node, A arg); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 793 | 797 |
| 794 visitInvokeStatic(InvokeStatic node) { | 798 visitInvokeStatic(InvokeStatic node) { |
| 795 node.arguments.forEach(visitExpression); | 799 node.arguments.forEach(visitExpression); |
| 796 } | 800 } |
| 797 | 801 |
| 798 visitInvokeMethod(InvokeMethod node) { | 802 visitInvokeMethod(InvokeMethod node) { |
| 799 visitExpression(node.receiver); | 803 visitExpression(node.receiver); |
| 800 node.arguments.forEach(visitExpression); | 804 node.arguments.forEach(visitExpression); |
| 801 } | 805 } |
| 802 | 806 |
| 803 visitInvokeSuperMethod(InvokeSuperMethod node) { | 807 visitInvokeMethodDirectly(InvokeMethodDirectly node) { |
| 808 visitExpression(node.receiver); |
| 804 node.arguments.forEach(visitExpression); | 809 node.arguments.forEach(visitExpression); |
| 805 } | 810 } |
| 806 | 811 |
| 807 visitInvokeConstructor(InvokeConstructor node) { | 812 visitInvokeConstructor(InvokeConstructor node) { |
| 808 node.arguments.forEach(visitExpression); | 813 node.arguments.forEach(visitExpression); |
| 809 } | 814 } |
| 810 | 815 |
| 811 visitConcatenateStrings(ConcatenateStrings node) { | 816 visitConcatenateStrings(ConcatenateStrings node) { |
| 812 node.arguments.forEach(visitExpression); | 817 node.arguments.forEach(visitExpression); |
| 813 } | 818 } |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 915 visitStatement(node.next); | 920 visitStatement(node.next); |
| 916 } | 921 } |
| 917 | 922 |
| 918 visitCreateBox(CreateBox node) { | 923 visitCreateBox(CreateBox node) { |
| 919 } | 924 } |
| 920 | 925 |
| 921 visitCreateClosureClass(CreateClosureClass node) { | 926 visitCreateClosureClass(CreateClosureClass node) { |
| 922 node.arguments.forEach(visitExpression); | 927 node.arguments.forEach(visitExpression); |
| 923 } | 928 } |
| 924 } | 929 } |
| OLD | NEW |