Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(406)

Side by Side Diff: pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart

Issue 968843003: Implement type argument access and reification of runtime types. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 '../universe/universe.dart'; 11 import '../universe/universe.dart';
12 import '../universe/universe.dart' show Selector; 12 import '../universe/universe.dart' show Selector;
13 import 'optimization/optimization.dart'; 13 import 'optimization/optimization.dart';
14 14
15 // The Tree language is the target of translation out of the CPS-based IR. 15 // The Tree language is the target of translation out of the CPS-based IR.
16 // 16 //
17 // The translation from CPS to Dart consists of several stages. Among the 17 // The translation from CPS to Dart consists of several stages. Among the
18 // stages are translation to direct style, translation out of SSA, eliminating 18 // stages are translation to direct style, translation out of SSA, eliminating
19 // unnecessary names, recognizing high-level control constructs. Combining 19 // unnecessary names, recognizing high-level control constructs. Combining
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 accept1(ExpressionVisitor1 visitor, arg) => visitor.visitConstant(this, arg); 223 accept1(ExpressionVisitor1 visitor, arg) => visitor.visitConstant(this, arg);
224 224
225 values.ConstantValue get value => expression.value; 225 values.ConstantValue get value => expression.value;
226 } 226 }
227 227
228 class This extends Expression { 228 class This extends Expression {
229 accept(ExpressionVisitor visitor) => visitor.visitThis(this); 229 accept(ExpressionVisitor visitor) => visitor.visitThis(this);
230 accept1(ExpressionVisitor1 visitor, arg) => visitor.visitThis(this, arg); 230 accept1(ExpressionVisitor1 visitor, arg) => visitor.visitThis(this, arg);
231 } 231 }
232 232
233 class ReifyTypeVar extends Expression { 233 class ReifyTypeVar extends Expression implements DartSpecificNode {
234 TypeVariableElement typeVariable; 234 TypeVariableElement typeVariable;
235 235
236 ReifyTypeVar(this.typeVariable); 236 ReifyTypeVar(this.typeVariable);
237 237
238 accept(ExpressionVisitor visitor) => visitor.visitReifyTypeVar(this); 238 accept(ExpressionVisitor visitor) => visitor.visitReifyTypeVar(this);
239 accept1(ExpressionVisitor1 visitor, arg) { 239 accept1(ExpressionVisitor1 visitor, arg) {
240 return visitor.visitReifyTypeVar(this, arg); 240 return visitor.visitReifyTypeVar(this, arg);
241 } 241 }
242 } 242 }
243 243
(...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 Element field; 710 Element field;
711 Expression value; 711 Expression value;
712 Statement next; 712 Statement next;
713 713
714 SetField(this.object, this.field, this.value, this.next); 714 SetField(this.object, this.field, this.value, this.next);
715 715
716 accept(StatementVisitor visitor) => visitor.visitSetField(this); 716 accept(StatementVisitor visitor) => visitor.visitSetField(this);
717 accept1(StatementVisitor1 visitor, arg) => visitor.visitSetField(this, arg); 717 accept1(StatementVisitor1 visitor, arg) => visitor.visitSetField(this, arg);
718 } 718 }
719 719
720 class ReifyRuntimeType extends Expression implements JsSpecificNode {
721 Expression value;
722
723 ReifyRuntimeType(this.value);
724
725 accept(ExpressionVisitor visitor) {
726 return visitor.visitReifyRuntimeType(this);
727 }
728
729 accept1(ExpressionVisitor1 visitor, arg) {
730 return visitor.visitReifyRuntimeType(this, arg);
731 }
732 }
733
734 class ReadTypeVariable extends Expression implements JsSpecificNode {
735 final TypeVariableType variable;
736 final ClassElement context;
737 Expression target;
738
739 ReadTypeVariable(this.variable, this.context, this.target);
740
741 accept(ExpressionVisitor visitor) {
742 return visitor.visitReadTypeVariable(this);
743 }
744
745 accept1(ExpressionVisitor1 visitor, arg) {
746 return visitor.visitReadTypeVariable(this, arg);
747 }
748 }
749
720 abstract class ExpressionVisitor<E> { 750 abstract class ExpressionVisitor<E> {
721 E visitExpression(Expression e) => e.accept(this); 751 E visitExpression(Expression e) => e.accept(this);
722 E visitVariable(Variable node); 752 E visitVariable(Variable node);
723 E visitInvokeStatic(InvokeStatic node); 753 E visitInvokeStatic(InvokeStatic node);
724 E visitInvokeMethod(InvokeMethod node); 754 E visitInvokeMethod(InvokeMethod node);
725 E visitInvokeMethodDirectly(InvokeMethodDirectly node); 755 E visitInvokeMethodDirectly(InvokeMethodDirectly node);
726 E visitInvokeConstructor(InvokeConstructor node); 756 E visitInvokeConstructor(InvokeConstructor node);
727 E visitConcatenateStrings(ConcatenateStrings node); 757 E visitConcatenateStrings(ConcatenateStrings node);
728 E visitConstant(Constant node); 758 E visitConstant(Constant node);
729 E visitThis(This node); 759 E visitThis(This node);
730 E visitReifyTypeVar(ReifyTypeVar node); 760 E visitReifyTypeVar(ReifyTypeVar node);
731 E visitConditional(Conditional node); 761 E visitConditional(Conditional node);
732 E visitLogicalOperator(LogicalOperator node); 762 E visitLogicalOperator(LogicalOperator node);
733 E visitNot(Not node); 763 E visitNot(Not node);
734 E visitLiteralList(LiteralList node); 764 E visitLiteralList(LiteralList node);
735 E visitLiteralMap(LiteralMap node); 765 E visitLiteralMap(LiteralMap node);
736 E visitTypeOperator(TypeOperator node); 766 E visitTypeOperator(TypeOperator node);
737 E visitFunctionExpression(FunctionExpression node); 767 E visitFunctionExpression(FunctionExpression node);
738 E visitFieldInitializer(FieldInitializer node); 768 E visitFieldInitializer(FieldInitializer node);
739 E visitSuperInitializer(SuperInitializer node); 769 E visitSuperInitializer(SuperInitializer node);
740 E visitGetField(GetField node); 770 E visitGetField(GetField node);
741 E visitCreateBox(CreateBox node); 771 E visitCreateBox(CreateBox node);
742 E visitCreateInstance(CreateInstance node); 772 E visitCreateInstance(CreateInstance node);
773 E visitReifyRuntimeType(ReifyRuntimeType node);
774 E visitReadTypeVariable(ReadTypeVariable node);
743 } 775 }
744 776
745 abstract class ExpressionVisitor1<E, A> { 777 abstract class ExpressionVisitor1<E, A> {
746 E visitExpression(Expression e, A arg) => e.accept1(this, arg); 778 E visitExpression(Expression e, A arg) => e.accept1(this, arg);
747 E visitVariable(Variable node, A arg); 779 E visitVariable(Variable node, A arg);
748 E visitInvokeStatic(InvokeStatic node, A arg); 780 E visitInvokeStatic(InvokeStatic node, A arg);
749 E visitInvokeMethod(InvokeMethod node, A arg); 781 E visitInvokeMethod(InvokeMethod node, A arg);
750 E visitInvokeMethodDirectly(InvokeMethodDirectly node, A arg); 782 E visitInvokeMethodDirectly(InvokeMethodDirectly node, A arg);
751 E visitInvokeConstructor(InvokeConstructor node, A arg); 783 E visitInvokeConstructor(InvokeConstructor node, A arg);
752 E visitConcatenateStrings(ConcatenateStrings node, A arg); 784 E visitConcatenateStrings(ConcatenateStrings node, A arg);
753 E visitConstant(Constant node, A arg); 785 E visitConstant(Constant node, A arg);
754 E visitThis(This node, A arg); 786 E visitThis(This node, A arg);
755 E visitReifyTypeVar(ReifyTypeVar node, A arg); 787 E visitReifyTypeVar(ReifyTypeVar node, A arg);
756 E visitConditional(Conditional node, A arg); 788 E visitConditional(Conditional node, A arg);
757 E visitLogicalOperator(LogicalOperator node, A arg); 789 E visitLogicalOperator(LogicalOperator node, A arg);
758 E visitNot(Not node, A arg); 790 E visitNot(Not node, A arg);
759 E visitLiteralList(LiteralList node, A arg); 791 E visitLiteralList(LiteralList node, A arg);
760 E visitLiteralMap(LiteralMap node, A arg); 792 E visitLiteralMap(LiteralMap node, A arg);
761 E visitTypeOperator(TypeOperator node, A arg); 793 E visitTypeOperator(TypeOperator node, A arg);
762 E visitFunctionExpression(FunctionExpression node, A arg); 794 E visitFunctionExpression(FunctionExpression node, A arg);
763 E visitFieldInitializer(FieldInitializer node, A arg); 795 E visitFieldInitializer(FieldInitializer node, A arg);
764 E visitSuperInitializer(SuperInitializer node, A arg); 796 E visitSuperInitializer(SuperInitializer node, A arg);
765 E visitGetField(GetField node, A arg); 797 E visitGetField(GetField node, A arg);
766 E visitCreateBox(CreateBox node, A arg); 798 E visitCreateBox(CreateBox node, A arg);
767 E visitCreateInstance(CreateInstance node, A arg); 799 E visitCreateInstance(CreateInstance node, A arg);
800 E visitReifyRuntimeType(ReifyRuntimeType reifyRuntimeType, A arg);
801 E visitReadTypeVariable(ReadTypeVariable readTypeVariable, A arg);
768 } 802 }
769 803
770 abstract class StatementVisitor<S> { 804 abstract class StatementVisitor<S> {
771 S visitStatement(Statement s) => s.accept(this); 805 S visitStatement(Statement s) => s.accept(this);
772 S visitLabeledStatement(LabeledStatement node); 806 S visitLabeledStatement(LabeledStatement node);
773 S visitAssign(Assign node); 807 S visitAssign(Assign node);
774 S visitReturn(Return node); 808 S visitReturn(Return node);
775 S visitBreak(Break node); 809 S visitBreak(Break node);
776 S visitContinue(Continue node); 810 S visitContinue(Continue node);
777 S visitIf(If node); 811 S visitIf(If node);
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
947 visitExpression(node.value); 981 visitExpression(node.value);
948 visitStatement(node.next); 982 visitStatement(node.next);
949 } 983 }
950 984
951 visitCreateBox(CreateBox node) { 985 visitCreateBox(CreateBox node) {
952 } 986 }
953 987
954 visitCreateInstance(CreateInstance node) { 988 visitCreateInstance(CreateInstance node) {
955 node.arguments.forEach(visitExpression); 989 node.arguments.forEach(visitExpression);
956 } 990 }
991
992 visitReifyRuntimeType(ReifyRuntimeType node) {
993 visitExpression(node.value);
994 }
995
996 visitReadTypeVariable(ReadTypeVariable node) {
997 visitExpression(node.target);
998 }
957 } 999 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698