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

Unified Diff: pkg/compiler/lib/src/js/rewrite_async.dart

Issue 1916863002: dart2js: Avoid empty else clauses in generators. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Fix test Created 4 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tests/compiler/dart2js/async_await_js_transform_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/js/rewrite_async.dart
diff --git a/pkg/compiler/lib/src/js/rewrite_async.dart b/pkg/compiler/lib/src/js/rewrite_async.dart
index 2a9d8bff3080d0e70493a338fd830305793f5e34..9578f3f7c541dadeb2e1857f563a9968926db271 100644
--- a/pkg/compiler/lib/src/js/rewrite_async.dart
+++ b/pkg/compiler/lib/src/js/rewrite_async.dart
@@ -283,7 +283,7 @@ abstract class AsyncRewriterBase extends js.NodeVisitor {
/// Each buffer ends up as its own case part in the big state-switch.
void beginLabel(int label) {
assert(!labelledParts.containsKey(label));
- currentStatementBuffer = new List<js.Statement>();
+ currentStatementBuffer = <js.Statement>[];
labelledParts[label] = currentStatementBuffer;
addStatement(new js.Comment(labelComments[label]));
}
@@ -967,7 +967,7 @@ abstract class AsyncRewriterBase extends js.NodeVisitor {
bool oldInsideUntranslatedBreakable = insideUntranslatedBreakable;
insideUntranslatedBreakable = true;
addStatement(js.js.statement('do {#} while (#)',
- [translateInBlock(node.body), visitExpression(node.condition)]));
+ [translateToStatement(node.body), visitExpression(node.condition)]));
insideUntranslatedBreakable = oldInsideUntranslatedBreakable;
return;
}
@@ -1013,7 +1013,7 @@ abstract class AsyncRewriterBase extends js.NodeVisitor {
withExpressions([node.init, node.condition, node.update],
(List<js.Expression> transformed) {
addStatement(new js.For(transformed[0], transformed[1], transformed[2],
- translateInBlock(node.body)));
+ translateToStatement(node.body)));
});
insideUntranslatedBreakable = oldInsideUntranslated;
return;
@@ -1063,23 +1063,34 @@ abstract class AsyncRewriterBase extends js.NodeVisitor {
unsupported(node);
}
- // Only used for code where `!shouldTransform(node)`.
- js.Block translateInBlock(js.Statement node) {
+ List<js.Statement> translateToStatementSequence(js.Statement node) {
assert(!shouldTransform(node));
List<js.Statement> oldBuffer = currentStatementBuffer;
- currentStatementBuffer = new List();
+ currentStatementBuffer = <js.Statement>[];
List<js.Statement> resultBuffer = currentStatementBuffer;
visitStatement(node);
currentStatementBuffer = oldBuffer;
- return new js.Block(resultBuffer);
+ return resultBuffer;
+ }
+
+ js.Statement translateToStatement(js.Statement node) {
+ List<js.Statement> statements = translateToStatementSequence(node);
+ if (statements.length == 1)
+ return statements.single;
+ return new js.Block(statements);
+ }
+
+ js.Block translateToBlock(js.Statement node) {
+ return new js.Block(translateToStatementSequence(node));
}
@override
void visitIf(js.If node) {
if (!shouldTransform(node.then) && !shouldTransform(node.otherwise)) {
withExpression(node.condition, (js.Expression condition) {
- addStatement(new js.If(condition, translateInBlock(node.then),
- translateInBlock(node.otherwise)));
+ js.Statement translatedThen = translateToStatement(node.then);
+ js.Statement translatedElse = translateToStatement(node.otherwise);
+ addStatement(new js.If(condition, translatedThen, translatedElse));
}, store: false);
return;
}
@@ -1137,7 +1148,7 @@ abstract class AsyncRewriterBase extends js.NodeVisitor {
void visitLabeledStatement(js.LabeledStatement node) {
if (!shouldTransform(node)) {
addStatement(
- new js.LabeledStatement(node.label, translateInBlock(node.body)));
+ new js.LabeledStatement(node.label, translateToStatement(node.body)));
return;
}
// `continue label` is really continuing the nested loop.
@@ -1302,9 +1313,9 @@ abstract class AsyncRewriterBase extends js.NodeVisitor {
List<js.SwitchClause> cases = node.cases.map((js.SwitchClause clause) {
if (clause is js.Case) {
return new js.Case(
- clause.expression, translateInBlock(clause.body));
+ clause.expression, translateToBlock(clause.body));
} else if (clause is js.Default) {
- return new js.Default(translateInBlock(clause.body));
+ return new js.Default(translateToBlock(clause.body));
}
}).toList();
addStatement(new js.Switch(key, cases));
@@ -1426,14 +1437,14 @@ abstract class AsyncRewriterBase extends js.NodeVisitor {
/// See the comments of [rewriteFunction] for more explanation.
void visitTry(js.Try node) {
if (!shouldTransform(node)) {
- js.Block body = translateInBlock(node.body);
+ js.Block body = translateToBlock(node.body);
js.Catch catchPart = (node.catchPart == null)
? null
: new js.Catch(node.catchPart.declaration,
- translateInBlock(node.catchPart.body));
+ translateToBlock(node.catchPart.body));
js.Block finallyPart = (node.finallyPart == null)
? null
- : translateInBlock(node.finallyPart);
+ : translateToBlock(node.finallyPart);
addStatement(new js.Try(body, catchPart, finallyPart));
return;
}
@@ -1576,7 +1587,7 @@ abstract class AsyncRewriterBase extends js.NodeVisitor {
bool oldInsideUntranslated = insideUntranslatedBreakable;
insideUntranslatedBreakable = true;
withExpression(node.condition, (js.Expression condition) {
- addStatement(new js.While(condition, translateInBlock(node.body)));
+ addStatement(new js.While(condition, translateToStatement(node.body)));
}, store: false);
insideUntranslatedBreakable = oldInsideUntranslated;
return;
« no previous file with comments | « no previous file | tests/compiler/dart2js/async_await_js_transform_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698