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 41a84661af3be219797ab4975d6421f025ff78da..27c001b6d52b096c9c3a013a8ef740ec6bcedbfd 100644 |
| --- a/pkg/compiler/lib/src/js/rewrite_async.dart |
| +++ b/pkg/compiler/lib/src/js/rewrite_async.dart |
| @@ -1281,12 +1281,18 @@ abstract class AsyncRewriterBase extends js.NodeVisitor { |
| @override |
| void visitReturn(js.Return node) { |
| - assert(node.value == null || (!isSyncStar && !isAsyncStar)); |
| js.Node target = analysis.targets[node]; |
| if (node.value != null) { |
| - withExpression(node.value, (js.Expression value) { |
| - addStatement(js.js.statement("# = #;", [returnValue, value])); |
| - }, store: false); |
| + if(isSyncStar || isAsyncStar) { |
| + // Even though `return expr;` is not allowed in the dart sync* and |
| + // async* code, the backend sometimes generated code like this. |
| + // It is interpreted as `expr; return;` |
|
floitsch
2015/07/15 14:03:16
Add more comment of why this could ever be legal.
|
| + visitExpressionIgnoreResult(node.value); |
| + } else { |
| + withExpression(node.value, (js.Expression value) { |
| + addStatement(js.js.statement("# = #;", [returnValue, value])); |
| + }, store: false); |
| + } |
| } |
| translateJump(target, exitLabel); |
| } |