Index: pkg/compiler/lib/src/ssa/ssa.dart |
diff --git a/pkg/compiler/lib/src/ssa/ssa.dart b/pkg/compiler/lib/src/ssa/ssa.dart |
index 555b82c14273844fc64d69659e08fe286faaaac7..587ce890e57ffeb7597a10a116bdb6ce024cc03b 100644 |
--- a/pkg/compiler/lib/src/ssa/ssa.dart |
+++ b/pkg/compiler/lib/src/ssa/ssa.dart |
@@ -4,4 +4,56 @@ |
library ssa; |
-export 'builder.dart' show SsaFunctionCompiler; |
+import '../common/codegen.dart' show CodegenWorkItem; |
+import '../common/tasks.dart' show CompilerTask; |
+import '../elements/elements.dart' show Element, FunctionElement; |
+import '../io/source_information.dart'; |
+import '../js/js.dart' as js; |
+import '../js_backend/backend.dart' show JavaScriptBackend, FunctionCompiler; |
+ |
+import 'builder.dart'; |
+import 'builder_kernel.dart'; |
+import 'codegen.dart'; |
+import 'nodes.dart'; |
+import 'optimize.dart'; |
+import 'types.dart'; |
+ |
+class SsaFunctionCompiler implements FunctionCompiler { |
+ final SsaCodeGeneratorTask generator; |
+ final SsaBuilderTask builder; |
+ final SsaKernelBuilderTask builderKernel; |
+ final SsaOptimizerTask optimizer; |
+ final JavaScriptBackend backend; |
+ final bool useKernel; |
+ |
+ SsaFunctionCompiler(JavaScriptBackend backend, |
+ SourceInformationStrategy sourceInformationFactory, this.useKernel) |
+ : generator = new SsaCodeGeneratorTask(backend, sourceInformationFactory), |
+ builder = new SsaBuilderTask(backend, sourceInformationFactory), |
+ builderKernel = |
+ new SsaKernelBuilderTask(backend, sourceInformationFactory), |
+ optimizer = new SsaOptimizerTask(backend), |
+ backend = backend; |
+ |
+ /// Generates JavaScript code for `work.element`. |
+ /// Using the ssa builder, optimizer and codegenerator. |
+ js.Fun compile(CodegenWorkItem work) { |
+ HGraph graph = useKernel ? builderKernel.build(work) : builder.build(work); |
+ optimizer.optimize(work, graph); |
+ Element element = work.element; |
+ js.Expression result = generator.generateCode(work, graph); |
+ if (element is FunctionElement) { |
+ // TODO(sigmund): replace by kernel transformer when `useKernel` is true. |
+ result = backend.rewriteAsync(element, result); |
+ } |
+ return result; |
+ } |
+ |
+ Iterable<CompilerTask> get tasks { |
+ return <CompilerTask>[ |
+ useKernel ? builderKernel : builder, |
+ optimizer, |
+ generator |
+ ]; |
+ } |
+} |