Rename the inner function of async functions.

Before they were all named `body`, now they have the same name as their
enclosing function.

BUG= dartbug.com/22942
R=floitsch@google.com

Review URL: https://codereview.chromium.org//1018393003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@44682 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
sigurdm@google.com 2015-03-25 12:37:47 +00:00
parent bb0a3b8216
commit 2008f189ad
3 changed files with 25 additions and 13 deletions

View file

@ -117,6 +117,7 @@ abstract class AsyncRewriterBase extends js.NodeVisitor {
/// or error case.
String errorCodeName;
final String suggestedBodyName;
/// The inner function that is scheduled to do each await/yield,
/// and called to do a new iteration for sync*.
js.VariableUse get body => new js.VariableUse(bodyName);
@ -179,7 +180,8 @@ abstract class AsyncRewriterBase extends js.NodeVisitor {
AsyncRewriterBase(this.diagnosticListener,
spannable,
this.safeVariableName)
this.safeVariableName,
this.suggestedBodyName)
: _spannable = spannable;
/// Initialize names used by the subClass.
@ -199,7 +201,7 @@ abstract class AsyncRewriterBase extends js.NodeVisitor {
// generated after the analysis.
resultName = freshName("result");
errorCodeName = freshName("errorCode");
bodyName = freshName("body");
bodyName = freshName(suggestedBodyName);
gotoName = freshName("goto");
handlerName = freshName("handler");
nextName = freshName("next");
@ -1674,10 +1676,12 @@ class AsyncRewriter extends AsyncRewriterBase {
spannable,
{this.asyncHelper,
this.newCompleter,
safeVariableName})
String safeVariableName(String proposedName),
String bodyName})
: super(diagnosticListener,
spannable,
safeVariableName);
safeVariableName,
bodyName);
@override
void addYield(js.DartYield node, js.Expression expression) {
@ -1804,10 +1808,12 @@ class SyncStarRewriter extends AsyncRewriterBase {
this.newIterable,
this.yieldStarExpression,
this.uncaughtErrorExpression,
safeVariableName})
String safeVariableName(String proposedName),
String bodyName})
: super(diagnosticListener,
spannable,
safeVariableName);
safeVariableName,
bodyName);
/// Translates a yield/yield* in an sync*.
///
@ -1972,10 +1978,12 @@ class AsyncStarRewriter extends AsyncRewriterBase {
this.newController,
this.yieldExpression,
this.yieldStarExpression,
String safeVariableName(String original)})
String safeVariableName(String proposedName),
String bodyName})
: super(diagnosticListener,
spannable,
safeVariableName);
safeVariableName,
bodyName);
/// Translates a yield/yield* in an async* function.

View file

@ -25,7 +25,7 @@ class SsaFunctionCompiler implements FunctionCompiler {
JavaScriptBackend backend = builder.backend;
AsyncRewriterBase rewriter = null;
String name = backend.namer.methodPropertyName(element);
if (element.asyncMarker == AsyncMarker.ASYNC) {
rewriter = new AsyncRewriter(
backend.compiler,
@ -34,7 +34,8 @@ class SsaFunctionCompiler implements FunctionCompiler {
backend.emitter.staticFunctionAccess(backend.getAsyncHelper()),
newCompleter: backend.emitter.staticFunctionAccess(
backend.getCompleterConstructor()),
safeVariableName: backend.namer.safeVariableName);
safeVariableName: backend.namer.safeVariableName,
bodyName: name);
} else if (element.asyncMarker == AsyncMarker.SYNC_STAR) {
rewriter = new SyncStarRewriter(
backend.compiler,
@ -47,7 +48,8 @@ class SsaFunctionCompiler implements FunctionCompiler {
backend.getYieldStar()),
uncaughtErrorExpression: backend.emitter.staticFunctionAccess(
backend.getSyncStarUncaughtError()),
safeVariableName: backend.namer.safeVariableName);
safeVariableName: backend.namer.safeVariableName,
bodyName: name);
}
else if (element.asyncMarker == AsyncMarker.ASYNC_STAR) {
rewriter = new AsyncStarRewriter(
@ -63,7 +65,8 @@ class SsaFunctionCompiler implements FunctionCompiler {
yieldExpression: backend.emitter.staticFunctionAccess(
backend.getYieldSingle()),
yieldStarExpression: backend.emitter.staticFunctionAccess(
backend.getYieldStar()));
backend.getYieldStar()),
bodyName: name);
}
if (rewriter != null) {
result = rewriter.rewrite(result);

View file

@ -15,7 +15,8 @@ void testTransform(String source, String expected) {
null,
asyncHelper: new VariableUse("thenHelper"),
newCompleter: new VariableUse("Completer"),
safeVariableName: (String name) => "__$name").rewrite(fun);
safeVariableName: (String name) => "__$name",
bodyName: "body").rewrite(fun);
JavaScriptPrintingOptions options = new JavaScriptPrintingOptions();
SimpleJavaScriptPrintingContext context =