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

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

Issue 946353003: Use more js templates in async rewrite. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 10 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 bb8739483e4c802437cac9506fb8771371296a1f..0d65bac76ac0e2506ca501bc29e71ad8adc4f843 100644
--- a/pkg/compiler/lib/src/js/rewrite_async.dart
+++ b/pkg/compiler/lib/src/js/rewrite_async.dart
@@ -405,8 +405,7 @@ class AsyncRewriter extends js.NodeVisitor {
/// This should be followed by a break for the goto to be executed. Use
/// [gotoWithBreak] or [addGoto] for this.
js.Statement setGotoVariable(int label) {
- return new js.ExpressionStatement(
- new js.Assignment(new js.VariableUse(gotoName), js.number(label)));
+ return js.js.statement('# = #', [gotoName, js.number(label)]);
}
/// Returns a block that has a goto to [label] including the break.
@@ -507,7 +506,7 @@ class AsyncRewriter extends js.NodeVisitor {
// [js.Literal]s.
if (result is js.Literal) return result;
js.Expression tempVar = useTempVar(allocateTempVar());
- addExpressionStatement(new js.Assignment(tempVar, result));
+ addStatement(js.js.statement('# = #;', [tempVar, result]));
floitsch 2015/02/23 16:15:34 apparently you don't need the ";". (At least you d
sigurdm 2015/02/24 13:16:20 I'll add it everywhere
return tempVar;
}
@@ -607,7 +606,7 @@ class AsyncRewriter extends js.NodeVisitor {
"completer": completerName}));
break;
case const js.AsyncModifier.syncStar():
- addStatement(new js.Return(new js.Call(endOfIteration, [])));
+ addStatement(js.js.statement('return #();', [endOfIteration]));
break;
case const js.AsyncModifier.asyncStar():
addStatement(js.js.statement(
@@ -631,8 +630,8 @@ class AsyncRewriter extends js.NodeVisitor {
} else {
assert(isSyncStar);
beginLabel(rethrowLabel);
- addStatement(new js.Return(new js.Call(uncaughtErrorExpression,
- [new js.VariableUse(currentErrorName)])));
+ addStatement(js.js.statement('return #(#);',
+ [uncaughtErrorExpression, currentErrorName]));
}
}
@@ -841,7 +840,7 @@ class AsyncRewriter extends js.NodeVisitor {
inits.add(makeInit(completerName, new js.New(newCompleter, [])));
} else if (isAsyncStar) {
inits.add(makeInit(controllerName,
- new js.Call(newController, [new js.VariableUse(bodyName)])));
+ js.js('#(#)', [newController, bodyName])));
}
inits.add(makeInit(handlerName, js.number(rethrowLabel)));
inits.add(makeInit(currentErrorName, null));
@@ -857,7 +856,7 @@ class AsyncRewriter extends js.NodeVisitor {
if (analysis.hasThis && !isSyncStar) {
// Sync* functions must remember `this` on the level of the outer
// function.
- inits.add(makeInit(selfName, new js.This()));
+ inits.add(makeInit(selfName, js.js('this')));
}
inits.addAll(localVariables.map((js.VariableDeclaration decl) {
return new js.VariableInitialization(decl, null);
@@ -874,7 +873,7 @@ class AsyncRewriter extends js.NodeVisitor {
return new #newIterable(function () {
#varDecl;
return function #body(#errorCode, #result) {
- if (#errorCode == #ERROR) {
+ if (#errorCode === #ERROR) {
#currentError = #result;
#goto = #handler;
}
@@ -914,7 +913,7 @@ class AsyncRewriter extends js.NodeVisitor {
#goto = #handler;
}
else
- if (#errorCode == #ERROR) {
+ if (#errorCode === #ERROR) {
#currentError = #result;
#goto = #handler;
}
@@ -944,7 +943,7 @@ class AsyncRewriter extends js.NodeVisitor {
@override
js.Expression visitAccess(js.PropertyAccess node) {
return withExpression2(node.receiver, node.selector,
- (receiver, selector) => new js.PropertyAccess(receiver, selector));
+ (receiver, selector) => js.js('#[#]', [receiver, selector]));
}
@override
@@ -1029,21 +1028,21 @@ class AsyncRewriter extends js.NodeVisitor {
withExpression(node.left, (js.Expression left) {
js.Statement assignLeft = isResult(left)
? new js.Block.empty()
- : new js.ExpressionStatement(
- new js.Assignment(new js.VariableUse(resultName), left));
+ : js.js.statement('# = #', [resultName, left]);
floitsch 2015/02/23 16:15:34 ditto.
sigurdm 2015/02/24 13:16:20 Acknowledged.
if (node.op == "||") {
- addStatement(new js.If(left, gotoAndBreak(thenLabel), assignLeft));
+ addStatement(js.js.statement('if (#) {#} else #',
floitsch 2015/02/23 16:15:34 you don't need the "{}" around the 'then' block.
sigurdm 2015/02/24 13:16:20 Yes, otherwise the js parser sees # else as a hole
+ [left, gotoAndBreak(thenLabel), assignLeft]));
} else {
assert(node.op == "&&");
- addStatement(new js.If(left, assignLeft, gotoAndBreak(thenLabel)));
+ addStatement(js.js.statement('if (#) {#} else #',
floitsch 2015/02/23 16:15:34 ditto
sigurdm 2015/02/24 13:16:20 Acknowledged.
+ [left, assignLeft, gotoAndBreak(thenLabel)]));
}
}, store: true);
addGoto(joinLabel);
beginLabel(thenLabel);
withExpression(node.right, (js.Expression value) {
if (!isResult(value)) {
- addExpressionStatement(
- new js.Assignment(new js.VariableUse(resultName), value));
+ addStatement(js.js.statement('# = #', [resultName, value]));
floitsch 2015/02/23 16:15:34 ";" or not. (depending on above).
sigurdm 2015/02/24 13:16:20 Done.
}
}, store: false);
beginLabel(joinLabel);
@@ -1100,31 +1099,28 @@ class AsyncRewriter extends js.NodeVisitor {
js.Expression visitConditional(js.Conditional node) {
if (!shouldTransform(node.then) && !shouldTransform(node.otherwise)) {
return withExpression(node.condition, (js.Expression condition) {
- return new js.Conditional(condition, node.then, node.otherwise);
+ return js.js('# ? # : #', [condition, node.then, node.otherwise]);
});
}
int thenLabel = newLabel("then");
int joinLabel = newLabel("join");
int elseLabel = newLabel("else");
withExpression(node.condition, (js.Expression condition) {
- addExpressionStatement(new js.Assignment(new js.VariableUse(gotoName),
- new js.Conditional(
- condition, js.number(thenLabel), js.number(elseLabel))));
+ addStatement(js.js.statement('# = # ? # : #;',
+ [gotoName, condition, js.number(thenLabel), js.number(elseLabel)]));
}, store: false);
addBreak();
beginLabel(thenLabel);
withExpression(node.then, (js.Expression value) {
if (!isResult(value)) {
- addExpressionStatement(
- new js.Assignment(new js.VariableUse(resultName), value));
+ addStatement(js.js.statement('# = #', [resultName, value]));
}
}, store: false);
addGoto(joinLabel);
beginLabel(elseLabel);
withExpression(node.otherwise, (js.Expression value) {
if (!isResult(value)) {
- addExpressionStatement(
- new js.Assignment(new js.VariableUse(resultName), value));
+ addStatement(js.js.statement('# = #', [resultName, value]));
}
}, store: false);
beginLabel(joinLabel);
@@ -1193,7 +1189,7 @@ class AsyncRewriter extends js.NodeVisitor {
bool oldInsideUntranslatedBreakable = insideUntranslatedBreakable;
insideUntranslatedBreakable = true;
withExpression(node.condition, (js.Expression condition) {
- addStatement(new js.Do(translateInBlock(node.body), condition));
+ addStatement(js.js.statement('do {#} while #', [node.body, condition]));
floitsch 2015/02/23 16:15:34 no need for "{ }".
sigurdm 2015/02/24 13:16:20 Ditto
}, store: false);
insideUntranslatedBreakable = oldInsideUntranslatedBreakable;
return;
@@ -1214,7 +1210,8 @@ class AsyncRewriter extends js.NodeVisitor {
beginLabel(continueLabel);
withExpression(node.condition, (js.Expression condition) {
- addStatement(new js.If.noElse(condition, gotoAndBreak(startLabel)));
+ addStatement(js.js.statement('if (#) #',
+ [condition, gotoAndBreak(startLabel)]));
}, store: false);
beginLabel(afterLabel);
}
@@ -1251,7 +1248,7 @@ class AsyncRewriter extends js.NodeVisitor {
node.update
], (List<js.Expression> transformed) {
addStatement(new js.For(transformed[0], transformed[1], transformed[2],
- translateInBlock(node.body)));
+ translateInBlock(node.body)));
});
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