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

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

Issue 1353843002: dart2js cps: Support sync* and yield. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 3 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
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/values.dart' as values; 7 import '../constants/values.dart' as values;
8 import '../dart_types.dart' show DartType, InterfaceType, TypeVariableType; 8 import '../dart_types.dart' show DartType, InterfaceType, TypeVariableType;
9 import '../elements/elements.dart'; 9 import '../elements/elements.dart';
10 import '../io/source_information.dart' show SourceInformation; 10 import '../io/source_information.dart' show SourceInformation;
(...skipping 920 matching lines...) Expand 10 before | Expand all | Expand 10 after
931 931
932 accept(ExpressionVisitor visitor) { 932 accept(ExpressionVisitor visitor) {
933 return visitor.visitAwait(this); 933 return visitor.visitAwait(this);
934 } 934 }
935 935
936 accept1(ExpressionVisitor1 visitor, arg) { 936 accept1(ExpressionVisitor1 visitor, arg) {
937 return visitor.visitAwait(this, arg); 937 return visitor.visitAwait(this, arg);
938 } 938 }
939 } 939 }
940 940
941 class Yield extends Statement {
942 Statement next;
943 Expression input;
944 final bool hasStar;
945
946 Yield(this.input, this.hasStar, this.next);
947
948 accept(StatementVisitor visitor) {
949 return visitor.visitYield(this);
950 }
951
952 accept1(StatementVisitor1 visitor, arg) {
953 return visitor.visitYield(this, arg);
954 }
955 }
956
941 abstract class ExpressionVisitor<E> { 957 abstract class ExpressionVisitor<E> {
942 E visitExpression(Expression node) => node.accept(this); 958 E visitExpression(Expression node) => node.accept(this);
943 E visitVariableUse(VariableUse node); 959 E visitVariableUse(VariableUse node);
944 E visitAssign(Assign node); 960 E visitAssign(Assign node);
945 E visitInvokeStatic(InvokeStatic node); 961 E visitInvokeStatic(InvokeStatic node);
946 E visitInvokeMethod(InvokeMethod node); 962 E visitInvokeMethod(InvokeMethod node);
947 E visitInvokeMethodDirectly(InvokeMethodDirectly node); 963 E visitInvokeMethodDirectly(InvokeMethodDirectly node);
948 E visitInvokeConstructor(InvokeConstructor node); 964 E visitInvokeConstructor(InvokeConstructor node);
949 E visitConstant(Constant node); 965 E visitConstant(Constant node);
950 E visitThis(This node); 966 E visitThis(This node);
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1020 S visitRethrow(Rethrow node); 1036 S visitRethrow(Rethrow node);
1021 S visitBreak(Break node); 1037 S visitBreak(Break node);
1022 S visitContinue(Continue node); 1038 S visitContinue(Continue node);
1023 S visitIf(If node); 1039 S visitIf(If node);
1024 S visitWhileTrue(WhileTrue node); 1040 S visitWhileTrue(WhileTrue node);
1025 S visitFor(For node); 1041 S visitFor(For node);
1026 S visitExpressionStatement(ExpressionStatement node); 1042 S visitExpressionStatement(ExpressionStatement node);
1027 S visitTry(Try node); 1043 S visitTry(Try node);
1028 S visitUnreachable(Unreachable node); 1044 S visitUnreachable(Unreachable node);
1029 S visitForeignStatement(ForeignStatement node); 1045 S visitForeignStatement(ForeignStatement node);
1046 S visitYield(Yield node);
1030 } 1047 }
1031 1048
1032 abstract class StatementVisitor1<S, A> { 1049 abstract class StatementVisitor1<S, A> {
1033 S visitStatement(Statement node, A arg) => node.accept1(this, arg); 1050 S visitStatement(Statement node, A arg) => node.accept1(this, arg);
1034 S visitLabeledStatement(LabeledStatement node, A arg); 1051 S visitLabeledStatement(LabeledStatement node, A arg);
1035 S visitReturn(Return node, A arg); 1052 S visitReturn(Return node, A arg);
1036 S visitThrow(Throw node, A arg); 1053 S visitThrow(Throw node, A arg);
1037 S visitRethrow(Rethrow node, A arg); 1054 S visitRethrow(Rethrow node, A arg);
1038 S visitBreak(Break node, A arg); 1055 S visitBreak(Break node, A arg);
1039 S visitContinue(Continue node, A arg); 1056 S visitContinue(Continue node, A arg);
1040 S visitIf(If node, A arg); 1057 S visitIf(If node, A arg);
1041 S visitWhileTrue(WhileTrue node, A arg); 1058 S visitWhileTrue(WhileTrue node, A arg);
1042 S visitFor(For node, A arg); 1059 S visitFor(For node, A arg);
1043 S visitExpressionStatement(ExpressionStatement node, A arg); 1060 S visitExpressionStatement(ExpressionStatement node, A arg);
1044 S visitTry(Try node, A arg); 1061 S visitTry(Try node, A arg);
1045 S visitUnreachable(Unreachable node, A arg); 1062 S visitUnreachable(Unreachable node, A arg);
1046 S visitForeignStatement(ForeignStatement node, A arg); 1063 S visitForeignStatement(ForeignStatement node, A arg);
1064 S visitYield(Yield node, A arg);
1047 } 1065 }
1048 1066
1049 abstract class RecursiveVisitor implements StatementVisitor, ExpressionVisitor { 1067 abstract class RecursiveVisitor implements StatementVisitor, ExpressionVisitor {
1050 visitExpression(Expression e) => e.accept(this); 1068 visitExpression(Expression e) => e.accept(this);
1051 visitStatement(Statement s) => s.accept(this); 1069 visitStatement(Statement s) => s.accept(this);
1052 1070
1053 visitInnerFunction(FunctionDefinition node); 1071 visitInnerFunction(FunctionDefinition node);
1054 1072
1055 visitVariable(Variable variable) {} 1073 visitVariable(Variable variable) {}
1056 1074
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
1246 1264
1247 visitSetIndex(SetIndex node) { 1265 visitSetIndex(SetIndex node) {
1248 visitExpression(node.object); 1266 visitExpression(node.object);
1249 visitExpression(node.index); 1267 visitExpression(node.index);
1250 visitExpression(node.value); 1268 visitExpression(node.value);
1251 } 1269 }
1252 1270
1253 visitAwait(Await node) { 1271 visitAwait(Await node) {
1254 visitExpression(node.input); 1272 visitExpression(node.input);
1255 } 1273 }
1274
1275 visitYield(Yield node) {
1276 visitExpression(node.input);
1277 visitStatement(node.next);
1278 }
1256 } 1279 }
1257 1280
1258 abstract class Transformer implements ExpressionVisitor<Expression>, 1281 abstract class Transformer implements ExpressionVisitor<Expression>,
1259 StatementVisitor<Statement> { 1282 StatementVisitor<Statement> {
1260 Expression visitExpression(Expression e) => e.accept(this); 1283 Expression visitExpression(Expression e) => e.accept(this);
1261 Statement visitStatement(Statement s) => s.accept(this); 1284 Statement visitStatement(Statement s) => s.accept(this);
1262 } 1285 }
1263 1286
1264 class RecursiveTransformer extends Transformer { 1287 class RecursiveTransformer extends Transformer {
1265 void visitInnerFunction(FunctionDefinition node) { 1288 void visitInnerFunction(FunctionDefinition node) {
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
1500 node.object = visitExpression(node.object); 1523 node.object = visitExpression(node.object);
1501 node.index = visitExpression(node.index); 1524 node.index = visitExpression(node.index);
1502 node.value = visitExpression(node.value); 1525 node.value = visitExpression(node.value);
1503 return node; 1526 return node;
1504 } 1527 }
1505 1528
1506 visitAwait(Await node) { 1529 visitAwait(Await node) {
1507 node.input = visitExpression(node.input); 1530 node.input = visitExpression(node.input);
1508 return node; 1531 return node;
1509 } 1532 }
1533
1534 visitYield(Yield node) {
1535 node.input = visitExpression(node.input);
1536 return node;
1537 }
1510 } 1538 }
1511 1539
1512 class FallthroughTarget { 1540 class FallthroughTarget {
1513 final Statement target; 1541 final Statement target;
1514 int useCount = 0; 1542 int useCount = 0;
1515 1543
1516 FallthroughTarget(this.target); 1544 FallthroughTarget(this.target);
1517 } 1545 }
1518 1546
1519 /// A stack machine for tracking fallthrough while traversing the Tree IR. 1547 /// A stack machine for tracking fallthrough while traversing the Tree IR.
(...skipping 17 matching lines...) Expand all
1537 1565
1538 /// Number of uses of the current fallthrough target. 1566 /// Number of uses of the current fallthrough target.
1539 int get useCount => _stack.last.useCount; 1567 int get useCount => _stack.last.useCount;
1540 1568
1541 /// Indicate that a statement will fall through to the current fallthrough 1569 /// Indicate that a statement will fall through to the current fallthrough
1542 /// target. 1570 /// target.
1543 void use() { 1571 void use() {
1544 ++_stack.last.useCount; 1572 ++_stack.last.useCount;
1545 } 1573 }
1546 } 1574 }
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