Chromium Code Reviews| Index: pkg/compiler/lib/src/js_backend/backend.dart |
| diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart |
| index 0f01f9c86572926652e2c1bf78a4637cc4c23fd5..e5317f6602764b981c8f9d01bc5594b9c3bb2b26 100644 |
| --- a/pkg/compiler/lib/src/js_backend/backend.dart |
| +++ b/pkg/compiler/lib/src/js_backend/backend.dart |
| @@ -97,7 +97,8 @@ class JavaScriptBackend extends Backend { |
| return [closureClass, jsIndexableClass]; |
| } |
| - SsaBuilderTask builder; |
| + SsaBuilderTask ssaBuilder; |
| + CodeGenTask cpsBuilder; |
| SsaOptimizerTask optimizer; |
| SsaCodeGeneratorTask generator; |
| CodeEmitterTask emitter; |
| @@ -330,7 +331,7 @@ class JavaScriptBackend extends Backend { |
| new Setlet<FunctionElement>(); |
| List<CompilerTask> get tasks { |
| - return <CompilerTask>[builder, optimizer, generator, emitter]; |
| + return <CompilerTask>[ssaBuilder, optimizer, generator, emitter]; |
| } |
| final RuntimeTypes rti; |
| @@ -445,9 +446,12 @@ class JavaScriptBackend extends Backend { |
| specializedGetInterceptors = new Map<String, Set<ClassElement>>(), |
| super(compiler) { |
| emitter = new CodeEmitterTask(compiler, namer, generateSourceMap); |
| - builder = new SsaBuilderTask(this); |
| + ssaBuilder = new SsaBuilderTask(this); |
| optimizer = new SsaOptimizerTask(this); |
| generator = new SsaCodeGeneratorTask(this); |
| + cpsBuilder = Compiler.USE_CPS_IR |
| + ? new CodeGenTask(compiler) |
|
floitsch
2014/11/12 11:03:20
I prefer "Codegen", but I can see why the "G" shou
sigurdm
2014/11/13 08:29:42
It is renamed to CodeGenerator in the next CL.
|
| + : null; |
| typeVariableHandler = new TypeVariableHandler(this); |
| customElementsAnalysis = new CustomElementsAnalysis(this); |
| constantCompilerTask = new JavaScriptConstantTask(compiler); |
| @@ -1203,9 +1207,20 @@ class JavaScriptBackend extends Backend { |
| compiler.enqueuer.codegen.registerStaticUse(getCyclicThrowHelper()); |
| } |
| } |
| - HGraph graph = builder.build(work); |
| - optimizer.optimize(work, graph); |
| - jsAst.Expression code = generator.generateCode(work, graph); |
| + jsAst.Expression code; |
|
floitsch
2014/11/12 11:03:20
Alternatively we could:
- have one "CodegenTask" i
sigurdm
2014/11/13 08:29:41
Done.
|
| + if (Compiler.USE_CPS_IR) { |
| + if(!work.element.isGenerativeConstructorBody && |
| + work.element.enclosingClass is! ClosureClassElement) { |
| + // First try to compile with the new backend. |
| + // Will return null if it failed to compile. |
| + code = cpsBuilder.build(work); |
| + } |
| + } |
| + if (code == null) { |
| + HGraph graph = ssaBuilder.build(work); |
| + optimizer.optimize(work, graph); |
| + code = generator.generateCode(work, graph); |
| + } |
| generatedCode[element] = code; |
| } |