| Index: pkg/compiler/lib/src/ssa/builder.dart
|
| diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart
|
| index 435b4bbecdad2b69f0d54d0e9d5c1d4632d5ab91..a1ba74f70cd04597f3dde51bba1428291591b45e 100644
|
| --- a/pkg/compiler/lib/src/ssa/builder.dart
|
| +++ b/pkg/compiler/lib/src/ssa/builder.dart
|
| @@ -5,15 +5,17 @@
|
| part of ssa;
|
|
|
| class SsaFunctionCompiler implements FunctionCompiler {
|
| - SsaCodeGeneratorTask generator;
|
| - SsaBuilderTask builder;
|
| - SsaOptimizerTask optimizer;
|
| + final SsaCodeGeneratorTask generator;
|
| + final SsaBuilderTask builder;
|
| + final SsaOptimizerTask optimizer;
|
| + final JavaScriptBackend backend;
|
|
|
| SsaFunctionCompiler(JavaScriptBackend backend,
|
| SourceInformationStrategy sourceInformationFactory)
|
| : generator = new SsaCodeGeneratorTask(backend, sourceInformationFactory),
|
| builder = new SsaBuilderTask(backend, sourceInformationFactory),
|
| - optimizer = new SsaOptimizerTask(backend);
|
| + optimizer = new SsaOptimizerTask(backend),
|
| + backend = backend;
|
|
|
| /// Generates JavaScript code for `work.element`.
|
| /// Using the ssa builder, optimizer and codegenerator.
|
| @@ -23,55 +25,7 @@ class SsaFunctionCompiler implements FunctionCompiler {
|
| Element element = work.element;
|
| js.Expression result = generator.generateCode(work, graph);
|
| if (element is FunctionElement) {
|
| - JavaScriptBackend backend = builder.backend;
|
| -
|
| - AsyncRewriterBase rewriter = null;
|
| - js.Name name = backend.namer.methodPropertyName(element);
|
| - if (element.asyncMarker == AsyncMarker.ASYNC) {
|
| - rewriter = new AsyncRewriter(
|
| - backend.compiler,
|
| - backend.compiler.currentElement,
|
| - asyncHelper:
|
| - backend.emitter.staticFunctionAccess(backend.getAsyncHelper()),
|
| - newCompleter: backend.emitter.staticFunctionAccess(
|
| - backend.getCompleterConstructor()),
|
| - safeVariableName: backend.namer.safeVariablePrefixForAsyncRewrite,
|
| - bodyName: backend.namer.deriveAsyncBodyName(name));
|
| - } else if (element.asyncMarker == AsyncMarker.SYNC_STAR) {
|
| - rewriter = new SyncStarRewriter(
|
| - backend.compiler,
|
| - backend.compiler.currentElement,
|
| - endOfIteration: backend.emitter.staticFunctionAccess(
|
| - backend.getEndOfIteration()),
|
| - newIterable: backend.emitter.staticFunctionAccess(
|
| - backend.getSyncStarIterableConstructor()),
|
| - yieldStarExpression: backend.emitter.staticFunctionAccess(
|
| - backend.getYieldStar()),
|
| - uncaughtErrorExpression: backend.emitter.staticFunctionAccess(
|
| - backend.getSyncStarUncaughtError()),
|
| - safeVariableName: backend.namer.safeVariablePrefixForAsyncRewrite,
|
| - bodyName: backend.namer.deriveAsyncBodyName(name));
|
| - }
|
| - else if (element.asyncMarker == AsyncMarker.ASYNC_STAR) {
|
| - rewriter = new AsyncStarRewriter(
|
| - backend.compiler,
|
| - backend.compiler.currentElement,
|
| - asyncStarHelper: backend.emitter.staticFunctionAccess(
|
| - backend.getAsyncStarHelper()),
|
| - streamOfController: backend.emitter.staticFunctionAccess(
|
| - backend.getStreamOfController()),
|
| - newController: backend.emitter.staticFunctionAccess(
|
| - backend.getASyncStarControllerConstructor()),
|
| - safeVariableName: backend.namer.safeVariablePrefixForAsyncRewrite,
|
| - yieldExpression: backend.emitter.staticFunctionAccess(
|
| - backend.getYieldSingle()),
|
| - yieldStarExpression: backend.emitter.staticFunctionAccess(
|
| - backend.getYieldStar()),
|
| - bodyName: backend.namer.deriveAsyncBodyName(name));
|
| - }
|
| - if (rewriter != null) {
|
| - result = rewriter.rewrite(result);
|
| - }
|
| + result = backend.rewriteAsync(element, result);
|
| }
|
| return result;
|
| }
|
|
|