| 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 '../dart_types.dart' show DartType, GenericType; | 9 import '../dart_types.dart' show DartType, GenericType, TypeVariableType; |
| 10 import '../elements/elements.dart'; | 10 import '../elements/elements.dart'; |
| 11 import '../io/source_information.dart' show SourceInformation; | 11 import '../io/source_information.dart' show SourceInformation; |
| 12 import '../universe/universe.dart'; | 12 import '../universe/universe.dart'; |
| 13 import '../universe/universe.dart' show Selector; | 13 import '../universe/universe.dart' show Selector; |
| 14 import 'optimization/optimization.dart'; | 14 import 'optimization/optimization.dart'; |
| 15 | 15 |
| 16 // The Tree language is the target of translation out of the CPS-based IR. | 16 // The Tree language is the target of translation out of the CPS-based IR. |
| 17 // | 17 // |
| 18 // The translation from CPS to Dart consists of several stages. Among the | 18 // The translation from CPS to Dart consists of several stages. Among the |
| 19 // stages are translation to direct style, translation out of SSA, eliminating | 19 // stages are translation to direct style, translation out of SSA, eliminating |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 251 accept1(ExpressionVisitor1 visitor, arg) => visitor.visitConstant(this, arg); | 251 accept1(ExpressionVisitor1 visitor, arg) => visitor.visitConstant(this, arg); |
| 252 | 252 |
| 253 values.ConstantValue get value => expression.value; | 253 values.ConstantValue get value => expression.value; |
| 254 } | 254 } |
| 255 | 255 |
| 256 class This extends Expression { | 256 class This extends Expression { |
| 257 accept(ExpressionVisitor visitor) => visitor.visitThis(this); | 257 accept(ExpressionVisitor visitor) => visitor.visitThis(this); |
| 258 accept1(ExpressionVisitor1 visitor, arg) => visitor.visitThis(this, arg); | 258 accept1(ExpressionVisitor1 visitor, arg) => visitor.visitThis(this, arg); |
| 259 } | 259 } |
| 260 | 260 |
| 261 class ReifyTypeVar extends Expression { | 261 class ReifyTypeVar extends Expression implements DartSpecificNode { |
| 262 TypeVariableElement typeVariable; | 262 TypeVariableElement typeVariable; |
| 263 | 263 |
| 264 ReifyTypeVar(this.typeVariable); | 264 ReifyTypeVar(this.typeVariable); |
| 265 | 265 |
| 266 accept(ExpressionVisitor visitor) => visitor.visitReifyTypeVar(this); | 266 accept(ExpressionVisitor visitor) => visitor.visitReifyTypeVar(this); |
| 267 accept1(ExpressionVisitor1 visitor, arg) { | 267 accept1(ExpressionVisitor1 visitor, arg) { |
| 268 return visitor.visitReifyTypeVar(this, arg); | 268 return visitor.visitReifyTypeVar(this, arg); |
| 269 } | 269 } |
| 270 } | 270 } |
| 271 | 271 |
| (...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 748 Element field; | 748 Element field; |
| 749 Expression value; | 749 Expression value; |
| 750 Statement next; | 750 Statement next; |
| 751 | 751 |
| 752 SetField(this.object, this.field, this.value, this.next); | 752 SetField(this.object, this.field, this.value, this.next); |
| 753 | 753 |
| 754 accept(StatementVisitor visitor) => visitor.visitSetField(this); | 754 accept(StatementVisitor visitor) => visitor.visitSetField(this); |
| 755 accept1(StatementVisitor1 visitor, arg) => visitor.visitSetField(this, arg); | 755 accept1(StatementVisitor1 visitor, arg) => visitor.visitSetField(this, arg); |
| 756 } | 756 } |
| 757 | 757 |
| 758 class ReifyRuntimeType extends Expression implements JsSpecificNode { |
| 759 Expression value; |
| 760 |
| 761 ReifyRuntimeType(this.value); |
| 762 |
| 763 accept(ExpressionVisitor visitor) { |
| 764 return visitor.visitReifyRuntimeType(this); |
| 765 } |
| 766 |
| 767 accept1(ExpressionVisitor1 visitor, arg) { |
| 768 return visitor.visitReifyRuntimeType(this, arg); |
| 769 } |
| 770 } |
| 771 |
| 772 class ReadTypeVariable extends Expression implements JsSpecificNode { |
| 773 final TypeVariableType variable; |
| 774 Expression target; |
| 775 |
| 776 ReadTypeVariable(this.variable, this.target); |
| 777 |
| 778 accept(ExpressionVisitor visitor) { |
| 779 return visitor.visitReadTypeVariable(this); |
| 780 } |
| 781 |
| 782 accept1(ExpressionVisitor1 visitor, arg) { |
| 783 return visitor.visitReadTypeVariable(this, arg); |
| 784 } |
| 785 } |
| 786 |
| 758 abstract class ExpressionVisitor<E> { | 787 abstract class ExpressionVisitor<E> { |
| 759 E visitExpression(Expression e) => e.accept(this); | 788 E visitExpression(Expression e) => e.accept(this); |
| 760 E visitVariableUse(VariableUse node); | 789 E visitVariableUse(VariableUse node); |
| 761 E visitInvokeStatic(InvokeStatic node); | 790 E visitInvokeStatic(InvokeStatic node); |
| 762 E visitInvokeMethod(InvokeMethod node); | 791 E visitInvokeMethod(InvokeMethod node); |
| 763 E visitInvokeMethodDirectly(InvokeMethodDirectly node); | 792 E visitInvokeMethodDirectly(InvokeMethodDirectly node); |
| 764 E visitInvokeConstructor(InvokeConstructor node); | 793 E visitInvokeConstructor(InvokeConstructor node); |
| 765 E visitConcatenateStrings(ConcatenateStrings node); | 794 E visitConcatenateStrings(ConcatenateStrings node); |
| 766 E visitConstant(Constant node); | 795 E visitConstant(Constant node); |
| 767 E visitThis(This node); | 796 E visitThis(This node); |
| 768 E visitReifyTypeVar(ReifyTypeVar node); | 797 E visitReifyTypeVar(ReifyTypeVar node); |
| 769 E visitConditional(Conditional node); | 798 E visitConditional(Conditional node); |
| 770 E visitLogicalOperator(LogicalOperator node); | 799 E visitLogicalOperator(LogicalOperator node); |
| 771 E visitNot(Not node); | 800 E visitNot(Not node); |
| 772 E visitLiteralList(LiteralList node); | 801 E visitLiteralList(LiteralList node); |
| 773 E visitLiteralMap(LiteralMap node); | 802 E visitLiteralMap(LiteralMap node); |
| 774 E visitTypeOperator(TypeOperator node); | 803 E visitTypeOperator(TypeOperator node); |
| 775 E visitFunctionExpression(FunctionExpression node); | 804 E visitFunctionExpression(FunctionExpression node); |
| 776 E visitFieldInitializer(FieldInitializer node); | 805 E visitFieldInitializer(FieldInitializer node); |
| 777 E visitSuperInitializer(SuperInitializer node); | 806 E visitSuperInitializer(SuperInitializer node); |
| 778 E visitGetField(GetField node); | 807 E visitGetField(GetField node); |
| 779 E visitCreateBox(CreateBox node); | 808 E visitCreateBox(CreateBox node); |
| 780 E visitCreateInstance(CreateInstance node); | 809 E visitCreateInstance(CreateInstance node); |
| 810 E visitReifyRuntimeType(ReifyRuntimeType node); |
| 811 E visitReadTypeVariable(ReadTypeVariable node); |
| 781 } | 812 } |
| 782 | 813 |
| 783 abstract class ExpressionVisitor1<E, A> { | 814 abstract class ExpressionVisitor1<E, A> { |
| 784 E visitExpression(Expression e, A arg) => e.accept1(this, arg); | 815 E visitExpression(Expression e, A arg) => e.accept1(this, arg); |
| 785 E visitVariableUse(VariableUse node, A arg); | 816 E visitVariableUse(VariableUse node, A arg); |
| 786 E visitInvokeStatic(InvokeStatic node, A arg); | 817 E visitInvokeStatic(InvokeStatic node, A arg); |
| 787 E visitInvokeMethod(InvokeMethod node, A arg); | 818 E visitInvokeMethod(InvokeMethod node, A arg); |
| 788 E visitInvokeMethodDirectly(InvokeMethodDirectly node, A arg); | 819 E visitInvokeMethodDirectly(InvokeMethodDirectly node, A arg); |
| 789 E visitInvokeConstructor(InvokeConstructor node, A arg); | 820 E visitInvokeConstructor(InvokeConstructor node, A arg); |
| 790 E visitConcatenateStrings(ConcatenateStrings node, A arg); | 821 E visitConcatenateStrings(ConcatenateStrings node, A arg); |
| 791 E visitConstant(Constant node, A arg); | 822 E visitConstant(Constant node, A arg); |
| 792 E visitThis(This node, A arg); | 823 E visitThis(This node, A arg); |
| 793 E visitReifyTypeVar(ReifyTypeVar node, A arg); | 824 E visitReifyTypeVar(ReifyTypeVar node, A arg); |
| 794 E visitConditional(Conditional node, A arg); | 825 E visitConditional(Conditional node, A arg); |
| 795 E visitLogicalOperator(LogicalOperator node, A arg); | 826 E visitLogicalOperator(LogicalOperator node, A arg); |
| 796 E visitNot(Not node, A arg); | 827 E visitNot(Not node, A arg); |
| 797 E visitLiteralList(LiteralList node, A arg); | 828 E visitLiteralList(LiteralList node, A arg); |
| 798 E visitLiteralMap(LiteralMap node, A arg); | 829 E visitLiteralMap(LiteralMap node, A arg); |
| 799 E visitTypeOperator(TypeOperator node, A arg); | 830 E visitTypeOperator(TypeOperator node, A arg); |
| 800 E visitFunctionExpression(FunctionExpression node, A arg); | 831 E visitFunctionExpression(FunctionExpression node, A arg); |
| 801 E visitFieldInitializer(FieldInitializer node, A arg); | 832 E visitFieldInitializer(FieldInitializer node, A arg); |
| 802 E visitSuperInitializer(SuperInitializer node, A arg); | 833 E visitSuperInitializer(SuperInitializer node, A arg); |
| 803 E visitGetField(GetField node, A arg); | 834 E visitGetField(GetField node, A arg); |
| 804 E visitCreateBox(CreateBox node, A arg); | 835 E visitCreateBox(CreateBox node, A arg); |
| 805 E visitCreateInstance(CreateInstance node, A arg); | 836 E visitCreateInstance(CreateInstance node, A arg); |
| 837 E visitReifyRuntimeType(ReifyRuntimeType reifyRuntimeType, A arg); |
| 838 E visitReadTypeVariable(ReadTypeVariable readTypeVariable, A arg); |
| 806 } | 839 } |
| 807 | 840 |
| 808 abstract class StatementVisitor<S> { | 841 abstract class StatementVisitor<S> { |
| 809 S visitStatement(Statement s) => s.accept(this); | 842 S visitStatement(Statement s) => s.accept(this); |
| 810 S visitLabeledStatement(LabeledStatement node); | 843 S visitLabeledStatement(LabeledStatement node); |
| 811 S visitAssign(Assign node); | 844 S visitAssign(Assign node); |
| 812 S visitReturn(Return node); | 845 S visitReturn(Return node); |
| 813 S visitBreak(Break node); | 846 S visitBreak(Break node); |
| 814 S visitContinue(Continue node); | 847 S visitContinue(Continue node); |
| 815 S visitIf(If node); | 848 S visitIf(If node); |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 990 visitExpression(node.value); | 1023 visitExpression(node.value); |
| 991 visitStatement(node.next); | 1024 visitStatement(node.next); |
| 992 } | 1025 } |
| 993 | 1026 |
| 994 visitCreateBox(CreateBox node) { | 1027 visitCreateBox(CreateBox node) { |
| 995 } | 1028 } |
| 996 | 1029 |
| 997 visitCreateInstance(CreateInstance node) { | 1030 visitCreateInstance(CreateInstance node) { |
| 998 node.arguments.forEach(visitExpression); | 1031 node.arguments.forEach(visitExpression); |
| 999 } | 1032 } |
| 1033 |
| 1034 visitReifyRuntimeType(ReifyRuntimeType node) { |
| 1035 visitExpression(node.value); |
| 1036 } |
| 1037 |
| 1038 visitReadTypeVariable(ReadTypeVariable node) { |
| 1039 visitExpression(node.target); |
| 1040 } |
| 1000 } | 1041 } |
| OLD | NEW |