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

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: Unbreak long line. 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 '../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
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
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
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 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart ('k') | pkg/compiler/lib/src/tree_ir/tree_ir_tracer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698