| 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 9ea66a2a73e77221f38d4782a9fb324fa7329bed..be1f26a204a5e5dce8f5b2a4f67e5a73d6416eee 100644
|
| --- a/pkg/compiler/lib/src/js/rewrite_async.dart
|
| +++ b/pkg/compiler/lib/src/js/rewrite_async.dart
|
| @@ -1671,11 +1671,13 @@ class AsyncRewriter extends AsyncRewriterBase {
|
| /// Specific to async methods.
|
| final js.Expression newCompleter;
|
|
|
| + final js.Expression wrapBody;
|
|
|
| AsyncRewriter(DiagnosticListener diagnosticListener,
|
| spannable,
|
| {this.asyncHelper,
|
| this.newCompleter,
|
| + this.wrapBody,
|
| String safeVariableName(String proposedName),
|
| String bodyName})
|
| : super(diagnosticListener,
|
| @@ -1756,13 +1758,13 @@ class AsyncRewriter extends AsyncRewriterBase {
|
| return js.js("""
|
| function (#parameters) {
|
| #variableDeclarations;
|
| - function #bodyName(#errorCode, #result) {
|
| + var #bodyName = #wrapBody(function (#errorCode, #result) {
|
| if (#errorCode === #ERROR) {
|
| #currentError = #result;
|
| #goto = #handler;
|
| }
|
| #rewrittenBody;
|
| - }
|
| + });
|
| return #asyncHelper(null, #bodyName, #completer, null);
|
| }""", {
|
| "parameters": parameters,
|
| @@ -1777,6 +1779,7 @@ class AsyncRewriter extends AsyncRewriterBase {
|
| "result": resultName,
|
| "asyncHelper": asyncHelper,
|
| "completer": completer,
|
| + "wrapBody": wrapBody,
|
| });
|
| }
|
| }
|
| @@ -1971,6 +1974,8 @@ class AsyncStarRewriter extends AsyncRewriterBase {
|
| /// Called with the stream to yield from.
|
| final js.Expression yieldStarExpression;
|
|
|
| + final js.Expression wrapBody;
|
| +
|
| AsyncStarRewriter(DiagnosticListener diagnosticListener,
|
| spannable,
|
| {this.asyncStarHelper,
|
| @@ -1978,6 +1983,7 @@ class AsyncStarRewriter extends AsyncRewriterBase {
|
| this.newController,
|
| this.yieldExpression,
|
| this.yieldStarExpression,
|
| + this.wrapBody,
|
| String safeVariableName(String proposedName),
|
| String bodyName})
|
| : super(diagnosticListener,
|
| @@ -2023,8 +2029,7 @@ class AsyncStarRewriter extends AsyncRewriterBase {
|
| js.VariableDeclarationList variableDeclarations) {
|
| return js.js("""
|
| function (#parameters) {
|
| - #variableDeclarations;
|
| - function #bodyName(#errorCode, #result) {
|
| + var #bodyName = #wrapBody(function (#errorCode, #result) {
|
| if (#hasYield) {
|
| switch (#errorCode) {
|
| case #STREAM_WAS_CANCELED:
|
| @@ -2042,7 +2047,8 @@ class AsyncStarRewriter extends AsyncRewriterBase {
|
| }
|
| }
|
| #rewrittenBody;
|
| - }
|
| + });
|
| + #variableDeclarations;
|
| return #streamOfController(#controller);
|
| }""", {
|
| "parameters": parameters,
|
| @@ -2061,6 +2067,7 @@ class AsyncStarRewriter extends AsyncRewriterBase {
|
| "result": resultName,
|
| "streamOfController": streamOfController,
|
| "controller": controllerName,
|
| + "wrapBody": wrapBody,
|
| });
|
| }
|
|
|
| @@ -2093,7 +2100,8 @@ class AsyncStarRewriter extends AsyncRewriterBase {
|
| List<js.VariableInitialization> variables =
|
| new List<js.VariableInitialization>();
|
| variables.add(_makeVariableInitializer(controller,
|
| - js.js('#(#)', [newController, bodyName])));
|
| + js.js('#(#)',
|
| + [newController, bodyName])));
|
| if (analysis.hasYield) {
|
| variables.add(_makeVariableInitializer(nextWhenCanceled, null));
|
| }
|
|
|