Index: pkg/compiler/lib/src/kernel/kernel_strategy.dart |
diff --git a/pkg/compiler/lib/src/kernel/kernel_strategy.dart b/pkg/compiler/lib/src/kernel/kernel_strategy.dart |
index 842b3e331d653fece8ebd4932ea39353f8087775..457f89639024eade683d564dc1719f2ffdd22de6 100644 |
--- a/pkg/compiler/lib/src/kernel/kernel_strategy.dart |
+++ b/pkg/compiler/lib/src/kernel/kernel_strategy.dart |
@@ -13,12 +13,14 @@ import '../common/codegen.dart' show CodegenRegistry, CodegenWorkItem; |
import '../common/resolution.dart'; |
import '../common/tasks.dart'; |
import '../common/work.dart'; |
+import '../compiler.dart'; |
import '../elements/elements.dart'; |
import '../elements/entities.dart'; |
import '../elements/types.dart'; |
import '../environment.dart' as env; |
import '../enqueue.dart'; |
import '../frontend_strategy.dart'; |
+import '../io/source_information.dart'; |
import '../js_backend/backend.dart'; |
import '../js_backend/backend_usage.dart'; |
import '../js_backend/custom_elements_analysis.dart'; |
@@ -32,6 +34,8 @@ import '../js_emitter/sorter.dart'; |
import '../library_loader.dart'; |
import '../native/resolver.dart'; |
import '../serialization/task.dart'; |
+import '../ssa/builder_kernel.dart'; |
+import '../ssa/ssa.dart'; |
import '../patch_parser.dart'; |
import '../resolved_uri_translator.dart'; |
import '../universe/world_builder.dart'; |
@@ -243,6 +247,10 @@ class MirrorsResolutionAnalysisImpl implements MirrorsResolutionAnalysis { |
// TODO(johnniwinther): Replace this with a strategy based on the J-element |
// model. |
class KernelBackendStrategy implements BackendStrategy { |
+ final Compiler _compiler; |
+ |
+ KernelBackendStrategy(this._compiler); |
+ |
@override |
ClosedWorldRefiner createClosedWorldRefiner(KernelClosedWorld closedWorld) { |
return closedWorld; |
@@ -260,7 +268,7 @@ class KernelBackendStrategy implements BackendStrategy { |
@override |
WorkItemBuilder createCodegenWorkItemBuilder(ClosedWorld closedWorld) { |
- return new KernelCodegenWorkItemBuilder(); |
+ return new KernelCodegenWorkItemBuilder(_compiler.backend, closedWorld); |
} |
@override |
@@ -268,8 +276,14 @@ class KernelBackendStrategy implements BackendStrategy { |
NativeBasicData nativeBasicData, |
ClosedWorld closedWorld, |
SelectorConstraintsStrategy selectorConstraintsStrategy) { |
- return new KernelCodegenWorldBuilder( |
- null, nativeBasicData, closedWorld, selectorConstraintsStrategy); |
+ return new KernelCodegenWorldBuilder(_compiler.elementEnvironment, |
+ nativeBasicData, closedWorld, selectorConstraintsStrategy); |
+ } |
+ |
+ @override |
+ SsaBuilderTask createSsaBuilderTask(JavaScriptBackend backend, |
+ SourceInformationStrategy sourceInformationStrategy) { |
+ return new KernelSsaBuilderTask(backend.compiler.measurer); |
} |
} |
@@ -287,21 +301,28 @@ class MirrorsCodegenAnalysisImpl implements MirrorsCodegenAnalysis { |
} |
class KernelCodegenWorkItemBuilder implements WorkItemBuilder { |
+ final JavaScriptBackend _backend; |
+ final ClosedWorld _closedWorld; |
+ |
+ KernelCodegenWorkItemBuilder(this._backend, this._closedWorld); |
+ |
@override |
CodegenWorkItem createWorkItem(MemberEntity entity) { |
- return new KernelCodegenWorkItem(entity); |
+ return new KernelCodegenWorkItem(_backend, _closedWorld, entity); |
} |
} |
class KernelCodegenWorkItem extends CodegenWorkItem { |
+ final JavaScriptBackend _backend; |
+ final ClosedWorld _closedWorld; |
final MemberEntity element; |
final CodegenRegistry registry; |
- KernelCodegenWorkItem(this.element) : registry = new CodegenRegistry(element); |
+ KernelCodegenWorkItem(this._backend, this._closedWorld, this.element) |
+ : registry = new CodegenRegistry(element); |
@override |
WorldImpact run() { |
- // TODO(johnniwinther): Build SSA graph from kernel and run codegen on it. |
- return const WorldImpact(); |
+ return _backend.codegen(this, _closedWorld); |
} |
} |