Chromium Code Reviews| 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; |