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 191fe70d3fbc64d207acda6a503364a57c1a9c63..b1bbb484bf3c4c05d920abf1a2ea158f152a27d7 100644 |
--- a/pkg/compiler/lib/src/ssa/ssa.dart |
+++ b/pkg/compiler/lib/src/ssa/ssa.dart |
@@ -4,6 +4,7 @@ |
library ssa; |
+import '../common/codegen.dart' show CodegenWorkItem; |
import '../common/tasks.dart' show CompilerTask; |
import '../elements/elements.dart' show Element, FunctionElement; |
import '../io/source_information.dart'; |
@@ -20,27 +21,24 @@ import 'optimize.dart'; |
class SsaFunctionCompiler implements FunctionCompiler { |
final SsaCodeGeneratorTask generator; |
- final SsaBuilderTask builder; |
- final SsaKernelBuilderTask builderKernel; |
+ final SsaBuilderTask _builder; |
final SsaOptimizerTask optimizer; |
final JavaScriptBackend backend; |
- final bool useKernel; |
SsaFunctionCompiler(JavaScriptBackend backend, |
- SourceInformationStrategy sourceInformationFactory, this.useKernel) |
+ SourceInformationStrategy sourceInformationFactory, bool useKernel) |
: generator = new SsaCodeGeneratorTask(backend, sourceInformationFactory), |
- builder = new SsaBuilderTask(backend, sourceInformationFactory), |
- builderKernel = |
- new SsaKernelBuilderTask(backend, sourceInformationFactory), |
+ _builder = useKernel |
+ ? new SsaKernelBuilderTask(backend, sourceInformationFactory) |
+ : new SsaAstBuilderTask(backend, sourceInformationFactory), |
optimizer = new SsaOptimizerTask(backend), |
backend = backend; |
/// Generates JavaScript code for `work.element`. |
/// Using the ssa builder, optimizer and codegenerator. |
js.Fun compile(ElementCodegenWorkItem work, ClosedWorld closedWorld) { |
- HGraph graph = useKernel |
- ? builderKernel.build(work, closedWorld) |
- : builder.build(work, closedWorld); |
+ HGraph graph = _builder.build(work, closedWorld); |
+ if (graph == null) return null; |
optimizer.optimize(work, graph, closedWorld); |
Element element = work.element; |
js.Expression result = generator.generateCode(work, graph, closedWorld); |
@@ -52,10 +50,12 @@ class SsaFunctionCompiler implements FunctionCompiler { |
} |
Iterable<CompilerTask> get tasks { |
- return <CompilerTask>[ |
- useKernel ? builderKernel : builder, |
- optimizer, |
- generator |
- ]; |
+ return <CompilerTask>[_builder, optimizer, generator]; |
} |
} |
+ |
+abstract class SsaBuilderTask implements CompilerTask { |
+ /// Creates the [HGraph] for [work] or returns `null` if no code is needed |
+ /// for [work]. |
+ HGraph build(CodegenWorkItem work, ClosedWorld closedWorld); |
+} |