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

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

Issue 2942863002: Compile and run Hello World! (Closed)
Patch Set: Rebased Created 3 years, 6 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 | « pkg/compiler/lib/src/ssa/builder.dart ('k') | pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 9eed251738e2a1a60f7453d2e3e6e62a19e6f78c..3b99d41a9118892dca5ed2581417a263c1eec67b 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -41,11 +41,13 @@ 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';
-class KernelSsaGraphBuilder extends ir.Visitor with GraphBuilder {
+class KernelSsaGraphBuilder extends ir.Visitor
+ with GraphBuilder, SsaBuilderFieldMixin {
final ir.Node target;
final bool _targetIsConstructorBody;
final MemberEntity targetElement;
@@ -138,6 +140,13 @@ class KernelSsaGraphBuilder extends ir.Visitor with GraphBuilder {
_targetFunction = (target as ir.Procedure).function;
buildFunctionNode(_targetFunction);
} else if (target is ir.Field) {
+ if (handleConstantField(targetElement, registry, closedWorld)) {
+ // No code is generated for `targetElement`: All references inline the
+ // constant value.
+ return null;
+ } else if (targetElement.isStatic || targetElement.isTopLevel) {
+ backend.constants.registerLazyStatic(targetElement);
+ }
buildField(target);
} else if (target is ir.Constructor) {
if (_targetIsConstructorBody) {
@@ -160,6 +169,12 @@ class KernelSsaGraphBuilder extends ir.Visitor with GraphBuilder {
});
}
+ @override
+ ConstantValue getFieldInitialConstantValue(FieldEntity field) {
+ assert(field == targetElement);
+ return _elementMap.getFieldConstantValue(target);
+ }
+
void buildField(ir.Field field) {
openFunction();
if (field.initializer != null) {
@@ -1289,7 +1304,9 @@ class KernelSsaGraphBuilder extends ir.Visitor with GraphBuilder {
null,
loopEntryBlock.loopInformation.target,
loopEntryBlock.loopInformation.labels,
- sourceInformationBuilder.buildLoop(astAdapter.getNode(doStatement)));
+ // TODO(johnniwinther): Provide source information like:
+ // sourceInformationBuilder.buildLoop(astAdapter.getNode(doStatement))
+ null);
loopEntryBlock.setBlockFlow(loopBlockInfo, current);
loopInfo.loopBlockInformation = loopBlockInfo;
} else {
@@ -1431,7 +1448,6 @@ class KernelSsaGraphBuilder extends ir.Visitor with GraphBuilder {
/// continue statements from simple switch statements.
JumpHandler createJumpHandler(ir.TreeNode node, {bool isLoopJump: false}) {
JumpTarget target = localsMap.getJumpTarget(node);
- assert(target is KernelJumpTarget);
if (target == null) {
// No breaks or continues to this node.
return new NullJumpHandler(reporter);
@@ -2593,7 +2609,7 @@ class KernelSsaGraphBuilder extends ir.Visitor with GraphBuilder {
if (instruction is HConstant) {
js.Name name =
- astAdapter.getNameForJsGetName(argument, instruction.constant);
+ _elementMap.getNameForJsGetName(instruction.constant, namer);
stack.add(graph.addConstantStringFromName(name, closedWorld));
return;
}
@@ -2645,7 +2661,8 @@ class KernelSsaGraphBuilder extends ir.Visitor with GraphBuilder {
js.Template template;
if (instruction is HConstant) {
- template = astAdapter.getJsBuiltinTemplate(instruction.constant);
+ template =
+ _elementMap.getJsBuiltinTemplate(instruction.constant, emitter);
}
if (template == null) {
reporter.reportErrorMessage(
@@ -2709,8 +2726,8 @@ class KernelSsaGraphBuilder extends ir.Visitor with GraphBuilder {
if (argumentInstruction is HConstant) {
ConstantValue argumentConstant = argumentInstruction.constant;
if (argumentConstant is TypeConstantValue &&
- argumentConstant.representedType is ResolutionInterfaceType) {
- ResolutionInterfaceType type = argumentConstant.representedType;
+ argumentConstant.representedType is InterfaceType) {
+ InterfaceType type = argumentConstant.representedType;
// TODO(sra): Check that type is a subclass of [Interceptor].
ConstantValue constant = new InterceptorConstantValue(type.element);
HInstruction instruction = graph.addConstant(constant, closedWorld);
@@ -3033,7 +3050,11 @@ class KernelSsaGraphBuilder extends ir.Visitor with GraphBuilder {
_addTypeArguments(arguments, invocation.arguments);
}
TypeMask typeMask = new TypeMask.nonNullExact(cls, closedWorld);
+ InterfaceType type = _elementMap.createInterfaceType(
+ target.enclosingClass, invocation.arguments.types);
+ addImplicitInstantiation(type);
_pushStaticInvocation(constructor, arguments, typeMask);
+ removeImplicitInstantiation(type);
}
@override
« no previous file with comments | « pkg/compiler/lib/src/ssa/builder.dart ('k') | pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698