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

Side by Side Diff: pkg/compiler/lib/src/ssa/builder.dart

Issue 2938193003: Revert "Towards compiling Hello World!" and "Compile and run Hello World!" (Closed)
Patch Set: 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import 'dart:collection'; 5 import 'dart:collection';
6 6
7 import 'package:js_runtime/shared/embedded_names.dart'; 7 import 'package:js_runtime/shared/embedded_names.dart';
8 8
9 import '../closure.dart'; 9 import '../closure.dart';
10 import '../common.dart'; 10 import '../common.dart';
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 import 'locals_handler.dart'; 48 import 'locals_handler.dart';
49 import 'loop_handler.dart'; 49 import 'loop_handler.dart';
50 import 'nodes.dart'; 50 import 'nodes.dart';
51 import 'optimize.dart'; 51 import 'optimize.dart';
52 import 'ssa.dart'; 52 import 'ssa.dart';
53 import 'ssa_branch_builder.dart'; 53 import 'ssa_branch_builder.dart';
54 import 'type_builder.dart'; 54 import 'type_builder.dart';
55 import 'types.dart'; 55 import 'types.dart';
56 56
57 abstract class SsaAstBuilderBase extends CompilerTask 57 abstract class SsaAstBuilderBase extends CompilerTask
58 with SsaBuilderFieldMixin
59 implements SsaBuilderTask { 58 implements SsaBuilderTask {
60 final JavaScriptBackend backend; 59 final JavaScriptBackend backend;
61 60
62 SsaAstBuilderBase(this.backend) : super(backend.compiler.measurer); 61 SsaAstBuilderBase(this.backend) : super(backend.compiler.measurer);
63 62
64 ConstantValue getFieldInitialConstantValue(FieldElement field) { 63 /// Handle field initializer of `work.element`. Returns `true` if no code
65 ConstantExpression constant = field.constant; 64 /// is needed for the field.
66 if (constant != null) { 65 ///
67 ConstantValue initialValue = backend.constants.getConstantValue(constant); 66 /// If `work.element` is a field with a constant initializer, the value is
68 if (initialValue == null) { 67 /// registered with the world impact. Otherwise the cyclic-throw helper is
69 assert( 68 /// registered for the lazy value computation.
70 field.isInstanceMember || 69 ///
71 constant.isImplicit || 70 /// If the field is constant, no code is needed for the field and the method
72 constant.isPotential, 71 /// return `true`.
73 failedAt( 72 bool handleConstantField(
74 field, 73 ElementCodegenWorkItem work, ClosedWorld closedWorld) {
75 "Constant expression without value: " 74 MemberElement element = work.element;
76 "${constant.toStructuredText()}.")); 75 if (element.isField) {
76 FieldElement field = element;
77 ConstantExpression constant = field.constant;
78 if (constant != null) {
79 ConstantValue initialValue =
80 backend.constants.getConstantValue(constant);
81 if (initialValue != null) {
82 work.registry.worldImpact
83 .registerConstantUse(new ConstantUse.init(initialValue));
84 // We don't need to generate code for static or top-level
85 // variables. For instance variables, we may need to generate
86 // the checked setter.
87 if (field.isStatic || field.isTopLevel) {
88 /// No code is created for this field.
89 return true;
90 }
91 } else {
92 assert(
93 field.isInstanceMember ||
94 constant.isImplicit ||
95 constant.isPotential,
96 failedAt(
97 field,
98 "Constant expression without value: "
99 "${constant.toStructuredText()}."));
100 }
101 } else {
102 // If the constant-handler was not able to produce a result we have to
103 // go through the builder (below) to generate the lazy initializer for
104 // the static variable.
105 // We also need to register the use of the cyclic-error helper.
106 work.registry.worldImpact.registerStaticUse(new StaticUse.staticInvoke(
107 closedWorld.commonElements.cyclicThrowHelper,
108 CallStructure.ONE_ARG));
77 } 109 }
78 return initialValue;
79 } 110 }
80 return null; 111 return false;
81 } 112 }
82 } 113 }
83 114
84 class SsaAstBuilderTask extends SsaAstBuilderBase { 115 class SsaAstBuilderTask extends SsaAstBuilderBase {
85 final CodeEmitterTask emitter; 116 final CodeEmitterTask emitter;
86 final SourceInformationStrategy sourceInformationFactory; 117 final SourceInformationStrategy sourceInformationFactory;
87 118
88 String get name => 'SSA builder'; 119 String get name => 'SSA builder';
89 120
90 SsaAstBuilderTask(JavaScriptBackend backend, this.sourceInformationFactory) 121 SsaAstBuilderTask(JavaScriptBackend backend, this.sourceInformationFactory)
91 : emitter = backend.emitter, 122 : emitter = backend.emitter,
92 super(backend); 123 super(backend);
93 124
94 DiagnosticReporter get reporter => backend.reporter; 125 DiagnosticReporter get reporter => backend.reporter;
95 126
96 HGraph build(ElementCodegenWorkItem work, ClosedWorld closedWorld) { 127 HGraph build(ElementCodegenWorkItem work, ClosedWorld closedWorld) {
97 return measure(() { 128 return measure(() {
98 if (handleConstantField(work.element, work.registry, closedWorld)) { 129 if (handleConstantField(work, closedWorld)) {
99 // No code is generated for `work.element`. 130 // No code is generated for `work.element`.
100 return null; 131 return null;
101 } 132 }
102 MemberElement element = work.element.implementation; 133 MemberElement element = work.element.implementation;
103 return reporter.withCurrentElement(element, () { 134 return reporter.withCurrentElement(element, () {
104 SsaBuilder builder = new SsaBuilder( 135 SsaBuilder builder = new SsaBuilder(
105 work.element.implementation, 136 work.element.implementation,
106 work.resolvedAst, 137 work.resolvedAst,
107 work.registry, 138 work.registry,
108 backend, 139 backend,
(...skipping 6735 matching lines...) Expand 10 before | Expand all | Expand 10 after
6844 this.oldReturnLocal, 6875 this.oldReturnLocal,
6845 this.oldReturnType, 6876 this.oldReturnType,
6846 this.oldResolvedAst, 6877 this.oldResolvedAst,
6847 this.oldStack, 6878 this.oldStack,
6848 this.oldLocalsHandler, 6879 this.oldLocalsHandler,
6849 this.inTryStatement, 6880 this.inTryStatement,
6850 this.allFunctionsCalledOnce, 6881 this.allFunctionsCalledOnce,
6851 this.oldElementInferenceResults) 6882 this.oldElementInferenceResults)
6852 : super(function); 6883 : super(function);
6853 } 6884 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/serialization/system.dart ('k') | pkg/compiler/lib/src/ssa/builder_kernel.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698