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 dc58408e7dae17b779b2c74a876d2f29f6ea61f9..15ba1b1c20d463e9d1b852d05a1b39a943cd71a0 100644 |
| --- a/pkg/compiler/lib/src/ssa/builder_kernel.dart |
| +++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart |
| @@ -2,9 +2,11 @@ |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| +import 'package:compiler/src/constants/values.dart'; |
| +import 'package:compiler/src/diagnostics/invariant.dart'; |
| import 'package:kernel/ast.dart' as ir; |
| -import '../common/codegen.dart' show CodegenWorkItem; |
| +import '../common/codegen.dart' show CodegenRegistry, CodegenWorkItem; |
| import '../common/tasks.dart' show CompilerTask; |
| import '../compiler.dart'; |
| import '../diagnostics/spannable.dart'; |
| @@ -14,6 +16,7 @@ import '../js_backend/backend.dart' show JavaScriptBackend; |
| import '../kernel/kernel.dart'; |
| import '../kernel/kernel_visitor.dart'; |
| import '../resolution/tree_elements.dart'; |
| +import '../tree/tree.dart' as ast; |
| import 'graph_builder.dart'; |
| import 'locals_handler.dart'; |
| import 'nodes.dart'; |
| @@ -45,8 +48,10 @@ class SsaKernelBuilderTask extends CompilerTask { |
| element, |
| work.resolvedAst, |
| backend.compiler, |
| + work.registry, |
| sourceInformationFactory, |
| - visitor.nodeToElement); |
| + visitor.nodeToElement, |
| + visitor.nodeToAst); |
| return builder.build(); |
| }); |
| } |
| @@ -57,7 +62,9 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder { |
| final FunctionElement functionElement; |
| final ResolvedAst resolvedAst; |
| final Compiler compiler; |
| + final CodegenRegistry registry; |
| final Map<ir.Node, Element> nodeToElement; |
| + final Map<ir.Node, ast.Node> nodeToAst; |
| JavaScriptBackend get backend => compiler.backend; |
| @@ -69,8 +76,10 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder { |
| this.functionElement, |
| this.resolvedAst, |
| this.compiler, |
| + this.registry, |
| SourceInformationStrategy sourceInformationFactory, |
| - this.nodeToElement) { |
| + this.nodeToElement, |
| + this.nodeToAst) { |
| graph.element = functionElement; |
| // TODO(het): Should sourceInformationBuilder be in GraphBuilder? |
| this.sourceInformationBuilder = |
| @@ -118,6 +127,14 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder { |
| graph.finalize(); |
| } |
| + ConstantValue getConstantForNode(ast.Node node) { |
|
Siggi Cherem (dart-lang)
2016/08/26 18:15:57
Let's create a library and a class with the ir->as
Harry Terkelsen
2016/08/26 19:52:57
Done.
|
| + ConstantValue constantValue = |
| + backend.constants.getConstantValueForNode(node, resolvedAst.elements); |
| + assert(invariant(node, constantValue != null, |
| + message: 'No constant computed for $node')); |
| + return constantValue; |
| + } |
| + |
| @override |
| void visitBlock(ir.Block block) { |
| assert(!isAborted()); |
| @@ -159,4 +176,32 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder { |
| void visitIntLiteral(ir.IntLiteral intLiteral) { |
| stack.add(graph.addConstantInt(intLiteral.value, compiler)); |
| } |
| + |
| + @override |
| + visitDoubleLiteral(ir.DoubleLiteral doubleLiteral) { |
| + stack.add(graph.addConstantDouble(doubleLiteral.value, compiler)); |
| + } |
| + |
| + @override |
| + visitBoolLiteral(ir.BoolLiteral boolLiteral) { |
| + stack.add(graph.addConstantBool(boolLiteral.value, compiler)); |
| + } |
| + |
| + @override |
| + visitStringLiteral(ir.StringLiteral stringLiteral) { |
| + stack.add(graph.addConstantString( |
| + new ast.DartString.literal(stringLiteral.value), compiler)); |
|
Siggi Cherem (dart-lang)
2016/08/26 18:15:57
for now because DartString is pretty independent o
Harry Terkelsen
2016/08/26 19:52:58
Done.
|
| + } |
| + |
| + @override |
| + visitSymbolLiteral(ir.SymbolLiteral symbolLiteral) { |
| + stack.add(graph.addConstant( |
| + getConstantForNode(nodeToAst[symbolLiteral]), compiler)); |
| + registry?.registerConstSymbol(symbolLiteral.value); |
| + } |
| + |
| + @override |
| + visitNullLiteral(ir.NullLiteral nullLiteral) { |
| + stack.add(graph.addConstantNull(compiler)); |
| + } |
| } |