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

Unified Diff: pkg/compiler/lib/src/ssa/builder_kernel.dart

Issue 2280133002: implement kernel -> ssa for literals (Closed)
Patch Set: Created 4 years, 4 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
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));
+ }
}
« no previous file with comments | « pkg/compiler/lib/src/kernel/kernel_visitor.dart ('k') | tests/compiler/dart2js/kernel/simple_function_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698