Chromium Code Reviews| Index: pkg/compiler/lib/src/ssa/builder_kernel.dart |
| diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart |
| index a3879ecf2a86df97217705c1fc996a24224eb8d1..042e32f67466eab8d174e6e8f028ca35876cb16e 100644 |
| --- a/pkg/compiler/lib/src/ssa/builder_kernel.dart |
| +++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart |
| @@ -6,9 +6,8 @@ import 'package:kernel/ast.dart' as ir; |
| import '../closure.dart'; |
| import '../common.dart'; |
| -import '../common/codegen.dart' show CodegenWorkItem, CodegenRegistry; |
| +import '../common/codegen.dart' show CodegenRegistry; |
| import '../common/names.dart'; |
| -import '../common/tasks.dart'; |
| import '../compiler.dart'; |
| import '../constants/values.dart' |
| show |
| @@ -22,8 +21,6 @@ import '../elements/resolution_types.dart'; |
| import '../io/source_information.dart'; |
| import '../js/js.dart' as js; |
| import '../js_backend/backend.dart' show JavaScriptBackend; |
| -import '../js_backend/element_strategy.dart' show ElementCodegenWorkItem; |
| -import '../kernel/kernel.dart'; |
| import '../native/native.dart' as native; |
| import '../resolution/tree_elements.dart'; |
| import '../tree/nodes.dart' show Node; |
| @@ -32,7 +29,6 @@ import '../universe/selector.dart'; |
| import '../universe/side_effects.dart' show SideEffects; |
| import '../universe/use.dart' show DynamicUse; |
| import '../world.dart'; |
| -import 'builder.dart'; |
| import 'graph_builder.dart'; |
| import 'jump_handler.dart'; |
| import 'kernel_ast_adapter.dart'; |
| @@ -40,74 +36,21 @@ import 'kernel_string_builder.dart'; |
| import 'locals_handler.dart'; |
| import 'loop_handler.dart'; |
| import 'nodes.dart'; |
| -import 'ssa.dart'; |
| import 'ssa_branch_builder.dart'; |
| import 'switch_continue_analysis.dart'; |
| import 'type_builder.dart'; |
| import 'types.dart' show TypeMaskFactory; |
| -class SsaAstKernelBuilderTask extends SsaAstBuilderBase { |
| - final SourceInformationStrategy sourceInformationFactory; |
| - |
| - String get name => 'SSA kernel builder'; |
| - |
| - SsaAstKernelBuilderTask( |
| - JavaScriptBackend backend, this.sourceInformationFactory) |
| - : super(backend); |
| - |
| - HGraph build(ElementCodegenWorkItem work, ClosedWorld closedWorld) { |
| - return measure(() { |
| - if (handleConstantField(work)) { |
| - // No code is generated for `work.element`. |
| - return null; |
| - } |
| - MemberElement element = work.element.implementation; |
| - Kernel kernel = backend.kernelTask.kernel; |
| - KernelSsaBuilder builder = new KernelSsaBuilder( |
| - element, |
| - work.resolvedAst, |
| - backend.compiler, |
| - closedWorld, |
| - work.registry, |
| - sourceInformationFactory, |
| - kernel); |
| - HGraph graph = builder.build(); |
| - |
| - if (backend.tracer.isEnabled) { |
| - String name; |
| - if (element.isClassMember) { |
| - String className = element.enclosingClass.name; |
| - String memberName = element.name; |
| - name = "$className.$memberName"; |
| - if (element.isGenerativeConstructorBody) { |
| - name = "$name (body)"; |
| - } |
| - } else { |
| - name = "${element.name}"; |
| - } |
| - backend.tracer.traceCompilation(name); |
| - backend.tracer.traceGraph('builder', graph); |
| - } |
| - |
| - return graph; |
| - }); |
| - } |
| -} |
| - |
| -class KernelSsaBuilderTask extends CompilerTask implements SsaBuilderTask { |
| - KernelSsaBuilderTask(Measurer measurer) : super(measurer); |
| - |
| - @override |
| - HGraph build(CodegenWorkItem work, ClosedWorld closedWorld) { |
| - throw new UnimplementedError("KernelSsaBuilderTask.build"); |
| - } |
| -} |
| - |
| class KernelSsaBuilder extends ir.Visitor with GraphBuilder { |
| ir.Node target; |
| bool _targetIsConstructorBody = false; |
| final MemberElement targetElement; |
| - final ResolvedAst resolvedAst; |
| + |
| + /// The root node of [targetElement]. This is used as the key into the |
| + /// [startFunction] of the locals handler. |
| + // TODO(johnniwinther,efortuna): Avoid the need for AST nodes in the locals |
|
Siggi Cherem (dart-lang)
2017/05/23 21:23:31
can we really avoid it?
Johnni Winther
2017/05/24 08:07:09
They are just used as keys to fetch the correspond
|
| + // handler. |
| + final Node functionNode; |
| final ClosedWorld closedWorld; |
| final CodegenRegistry registry; |
| @@ -150,24 +93,20 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder { |
| KernelSsaBuilder( |
| this.targetElement, |
| - this.resolvedAst, |
| this.compiler, |
| + this.astAdapter, |
| this.closedWorld, |
| this.registry, |
| - SourceInformationStrategy sourceInformationFactory, |
| - Kernel kernel) { |
| + // TODO(het): Should sourceInformationBuilder be in GraphBuilder? |
| + this.sourceInformationBuilder, |
| + this.functionNode) { |
| this.loopHandler = new KernelLoopHandler(this); |
| typeBuilder = new TypeBuilder(this); |
| graph.element = targetElement; |
| - // TODO(het): Should sourceInformationBuilder be in GraphBuilder? |
| - this.sourceInformationBuilder = |
| - sourceInformationFactory.createBuilderForContext(resolvedAst); |
| graph.sourceInformation = |
| sourceInformationBuilder.buildVariableDeclaration(); |
| this.localsHandler = new LocalsHandler( |
| this, targetElement, null, nativeData, interceptorData); |
| - this.astAdapter = new KernelAstAdapter(kernel, compiler.backend, |
| - resolvedAst, kernel.nodeToAst, kernel.nodeToElement); |
| target = astAdapter.getInitialKernelNode(targetElement); |
| if (targetElement is ConstructorBodyElement) { |
| _targetIsConstructorBody = true; |
| @@ -421,7 +360,7 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder { |
| } |
| withCurrentIrNode(ir.Node node, f()) { |
| - compiler.reporter.withCurrentElement(astAdapter.getElement(node), f); |
| + astAdapter.reporter.withCurrentElement(astAdapter.getElement(node), f); |
| } |
| /// Sets context for generating code that is the result of inlining |
| @@ -713,11 +652,7 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder { |
| HBasicBlock block = graph.addNewBlock(); |
| open(graph.entry); |
| - Node function; |
| - if (resolvedAst.kind == ResolvedAstKind.PARSED) { |
| - function = resolvedAst.node; |
| - } |
| - localsHandler.startFunction(targetElement, function); |
| + localsHandler.startFunction(targetElement, functionNode); |
| close(new HGoto()).addSuccessor(block); |
| open(block); |