Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3756)

Unified Diff: lib/compiler/implementation/compiler.dart

Issue 10398044: Reverting 7667 (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | lib/compiler/implementation/emitter.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/compiler/implementation/compiler.dart
===================================================================
--- lib/compiler/implementation/compiler.dart (revision 7672)
+++ lib/compiler/implementation/compiler.dart (working copy)
@@ -29,50 +29,6 @@
}
}
-class Backend {
- final Compiler compiler;
-
- Backend(this.compiler);
-
- abstract String codegen(WorkItem work);
- abstract void processNativeClasses(libraries);
- abstract void assembleProgram();
-}
-
-class JavaScriptBackend extends Backend {
- SsaBuilderTask builder;
- SsaOptimizerTask optimizer;
- SsaCodeGeneratorTask generator;
- CodeEmitterTask emitter;
-
- JavaScriptBackend(Compiler compiler)
- : emitter = new CodeEmitterTask(compiler),
- super(compiler) {
- builder = new SsaBuilderTask(this);
- optimizer = new SsaOptimizerTask(this);
- generator = new SsaCodeGeneratorTask(this);
- }
-
- 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);
- }
-
- void processNativeClasses(libraries) {
- native.processNativeClasses(emitter, libraries);
- }
-
- void assembleProgram() => emitter.assembleProgram();
-}
-
class Compiler implements DiagnosticListener {
Queue<WorkItem> codegenQueue;
Universe universe;
@@ -123,7 +79,10 @@
TreeValidatorTask validator;
ResolverTask resolver;
TypeCheckerTask checker;
- Backend backend;
+ SsaBuilderTask builder;
+ SsaOptimizerTask optimizer;
+ SsaCodeGeneratorTask generator;
+ CodeEmitterTask emitter;
ConstantHandler constantHandler;
EnqueueTask enqueuer;
@@ -152,10 +111,14 @@
validator = new TreeValidatorTask(this);
resolver = new ResolverTask(this);
checker = new TypeCheckerTask(this);
- backend = new JavaScriptBackend(this);
+ builder = new SsaBuilderTask(this);
+ optimizer = new SsaOptimizerTask(this);
+ generator = new SsaCodeGeneratorTask(this);
+ emitter = new CodeEmitterTask(this);
enqueuer = new EnqueueTask(this);
tasks = [scanner, dietParser, parser, resolver, checker,
- constantHandler, enqueuer];
+ builder, optimizer, generator,
+ emitter, constantHandler, enqueuer];
}
void ensure(bool condition) {
@@ -342,7 +305,7 @@
});
}
Collection<LibraryElement> libraries = universe.libraries.getValues();
- backend.processNativeClasses(libraries);
+ native.processNativeClasses(this, libraries);
world.populate(this, libraries);
addToWorkList(main);
codegenProgress.reset();
@@ -353,7 +316,7 @@
codegenQueueIsClosed = true;
assert(enqueuer.checkNoEnqueuedInvokedInstanceMethods());
enqueuer.registerFieldClosureInvocations();
- backend.assembleProgram();
+ emitter.assembleProgram();
if (!codegenQueue.isEmpty()) {
internalErrorOnElement(codegenQueue.first().element,
"work list is not empty");
@@ -385,9 +348,22 @@
constantHandler.compileWorkItem(work);
return null;
} else {
- String code = backend.codegen(work);
- universe.addGeneratedCode(work, code);
- return code;
+ 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;
+ }
}
}
« no previous file with comments | « no previous file | lib/compiler/implementation/emitter.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698