Chromium Code Reviews| Index: lib/compiler/implementation/compiler.dart |
| diff --git a/lib/compiler/implementation/compiler.dart b/lib/compiler/implementation/compiler.dart |
| index 781c4847ce9dfdee073b640a8811f8c3db025b24..e6bb94055b32d835b4b9879d8b4677b9c9e18a97 100644 |
| --- a/lib/compiler/implementation/compiler.dart |
| +++ b/lib/compiler/implementation/compiler.dart |
| @@ -30,6 +30,36 @@ class WorkItem { |
| } |
| } |
| +interface Backend { |
|
ahe
2012/05/11 11:39:48
This looks reasonable, but I would prefer to have
floitsch
2012/05/11 13:51:04
Personally I prefer an interface over an empty cla
Anton Muhin
2012/05/12 15:48:43
I erred to interface for as of now I'd rather move
|
| + String codegen(WorkItem work); |
| +} |
| + |
| +class JsBackend implements Backend { |
|
ahe
2012/05/11 11:39:48
Personally, I prefer JavaScriptBackend instead of
Anton Muhin
2012/05/12 15:48:43
Done.
|
| + Compiler compiler; |
| + SsaBuilderTask builder; |
| + SsaOptimizerTask optimizer; |
| + SsaCodeGeneratorTask generator; |
| + |
| + JsBackend(Compiler compiler) |
| + : this.compiler = compiler, |
| + builder = new SsaBuilderTask(compiler), |
| + optimizer = new SsaOptimizerTask(compiler), |
| + generator = new SsaCodeGeneratorTask(compiler); |
| + |
| + String codegen(WorkItem work) { |
| + HGraph graph = builder.build(work); |
| + optimizer.optimize(work, graph); |
| + if (work.allowSpeculativeOptimization |
| + && optimizer.trySpeculativeOptimizations(work, graph)) { |
| + String code = generator.generateBailoutMethod(work, graph); |
| + compiler.universe.addBailoutCode(work, code); |
| + optimizer.prepareForSpeculativeOptimizations(work, graph); |
| + optimizer.optimize(work, graph); |
| + } |
| + return generator.generateMethod(work, graph); |
| + } |
| +} |
| + |
| class Compiler implements DiagnosticListener { |
| Queue<WorkItem> worklist; |
| Universe universe; |
| @@ -80,9 +110,7 @@ class Compiler implements DiagnosticListener { |
| TreeValidatorTask validator; |
| ResolverTask resolver; |
| TypeCheckerTask checker; |
| - SsaBuilderTask builder; |
| - SsaOptimizerTask optimizer; |
| - SsaCodeGeneratorTask generator; |
| + Backend backend; |
| CodeEmitterTask emitter; |
| ConstantHandler constantHandler; |
| EnqueueTask enqueuer; |
| @@ -112,13 +140,10 @@ class Compiler implements DiagnosticListener { |
| validator = new TreeValidatorTask(this); |
| resolver = new ResolverTask(this); |
| checker = new TypeCheckerTask(this); |
| - builder = new SsaBuilderTask(this); |
| - optimizer = new SsaOptimizerTask(this); |
| - generator = new SsaCodeGeneratorTask(this); |
| + backend = new JsBackend(this); |
| emitter = new CodeEmitterTask(this); |
| enqueuer = new EnqueueTask(this); |
| tasks = [scanner, dietParser, parser, resolver, checker, |
| - builder, optimizer, generator, |
| emitter, constantHandler, enqueuer]; |
| } |
| @@ -345,22 +370,9 @@ class Compiler implements DiagnosticListener { |
| constantHandler.compileWorkItem(work); |
| return null; |
| } else { |
| - HGraph graph = builder.build(work); |
| - optimizer.optimize(work, graph); |
| - if (work.allowSpeculativeOptimization |
| - && optimizer.trySpeculativeOptimizations(work, graph)) { |
| - String code = generator.generateBailoutMethod(work, graph); |
| - universe.addBailoutCode(work, code); |
| - optimizer.prepareForSpeculativeOptimizations(work, graph); |
| - optimizer.optimize(work, graph); |
| - code = generator.generateMethod(work, graph); |
| - universe.addGeneratedCode(work, code); |
| - return code; |
| - } else { |
| - String code = generator.generateMethod(work, graph); |
| - universe.addGeneratedCode(work, code); |
| - return code; |
| - } |
| + String code = backend.codegen(work); |
| + universe.addGeneratedCode(work, code); |
| + return code; |
| } |
| } |