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

Side by Side Diff: pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart

Issue 1233263003: dart2js: add isConstantsHolder to Holder class. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Address comments. Created 5 years, 5 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) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 library dart2js.js_emitter.program_builder; 5 library dart2js.js_emitter.program_builder;
6 6
7 import '../js_emitter.dart' show computeMixinClass, Emitter; 7 import '../js_emitter.dart' show computeMixinClass, Emitter;
8 import '../model.dart'; 8 import '../model.dart';
9 9
10 import '../../common.dart'; 10 import '../../common.dart';
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 // to check that the library has been loaded. 93 // to check that the library has been loaded.
94 _compiler.deferredLoadTask.allOutputUnits.forEach( 94 _compiler.deferredLoadTask.allOutputUnits.forEach(
95 _registry.registerOutputUnit); 95 _registry.registerOutputUnit);
96 collector.outputClassLists.forEach(_registry.registerElements); 96 collector.outputClassLists.forEach(_registry.registerElements);
97 collector.outputStaticLists.forEach(_registry.registerElements); 97 collector.outputStaticLists.forEach(_registry.registerElements);
98 collector.outputConstantLists.forEach(_registerConstants); 98 collector.outputConstantLists.forEach(_registerConstants);
99 collector.outputStaticNonFinalFieldLists.forEach( 99 collector.outputStaticNonFinalFieldLists.forEach(
100 _registry.registerElements); 100 _registry.registerElements);
101 101
102 // We always add the current isolate holder. 102 // We always add the current isolate holder.
103 _registry.registerHolder( 103 _registerStaticStateHolder();
104 namer.staticStateHolder, isStaticStateHolder: true);
105 104
106 // We need to run the native-preparation before we build the output. The 105 // We need to run the native-preparation before we build the output. The
107 // preparation code, in turn needs the classes to be set up. 106 // preparation code, in turn needs the classes to be set up.
108 // We thus build the classes before building their containers. 107 // We thus build the classes before building their containers.
109 collector.outputClassLists.forEach((OutputUnit _, List<ClassElement> classes ) { 108 collector.outputClassLists.forEach((OutputUnit _, List<ClassElement> classes ) {
110 classes.forEach(_buildClass); 109 classes.forEach(_buildClass);
111 }); 110 });
112 111
113 // Resolve the superclass references after we've processed all the classes. 112 // Resolve the superclass references after we've processed all the classes.
114 _classes.forEach((ClassElement element, Class c) { 113 _classes.forEach((ClassElement element, Class c) {
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 return staticNonFinalFields 243 return staticNonFinalFields
245 .map(_buildStaticField) 244 .map(_buildStaticField)
246 .toList(growable: false); 245 .toList(growable: false);
247 } 246 }
248 247
249 StaticField _buildStaticField(Element element) { 248 StaticField _buildStaticField(Element element) {
250 JavaScriptConstantCompiler handler = backend.constants; 249 JavaScriptConstantCompiler handler = backend.constants;
251 ConstantValue initialValue = handler.getInitialValueFor(element); 250 ConstantValue initialValue = handler.getInitialValueFor(element);
252 // TODO(zarah): The holder should not be registered during building of 251 // TODO(zarah): The holder should not be registered during building of
253 // a static field. 252 // a static field.
254 _registry.registerHolder(namer.globalObjectForConstant(initialValue)); 253 _registry.registerHolder(
254 namer.globalObjectForConstant(initialValue), isConstantsHolder: true);
255 js.Expression code = _task.emitter.constantReference(initialValue); 255 js.Expression code = _task.emitter.constantReference(initialValue);
256 js.Name name = namer.globalPropertyName(element); 256 js.Name name = namer.globalPropertyName(element);
257 bool isFinal = false; 257 bool isFinal = false;
258 bool isLazy = false; 258 bool isLazy = false;
259 259
260 // TODO(floitsch): we shouldn't update the registry in the middle of 260 // TODO(floitsch): we shouldn't update the registry in the middle of
261 // building a static field. (Note that the $ holder is already registered 261 // building a static field. (Note that the static-state holder was
262 // earlier). 262 // already registered earlier, and that we just call the register to get
263 // the holder-instance.
263 return new StaticField(element, 264 return new StaticField(element,
264 name, _registry.registerHolder(r'$'), code, 265 name, _registerStaticStateHolder(), code,
265 isFinal, isLazy); 266 isFinal, isLazy);
266 } 267 }
267 268
268 List<StaticField> _buildStaticLazilyInitializedFields( 269 List<StaticField> _buildStaticLazilyInitializedFields(
269 LibrariesMap librariesMap) { 270 LibrariesMap librariesMap) {
270 // TODO(floitsch): lazy fields should just be in their respective 271 // TODO(floitsch): lazy fields should just be in their respective
271 // libraries. 272 // libraries.
272 if (librariesMap != _registry.mainLibrariesMap) { 273 if (librariesMap != _registry.mainLibrariesMap) {
273 return const <StaticField>[]; 274 return const <StaticField>[];
274 } 275 }
(...skipping 11 matching lines...) Expand all
286 js.Expression code = backend.generatedCode[element]; 287 js.Expression code = backend.generatedCode[element];
287 // The code is null if we ended up not needing the lazily 288 // The code is null if we ended up not needing the lazily
288 // initialized field after all because of constant folding 289 // initialized field after all because of constant folding
289 // before code generation. 290 // before code generation.
290 if (code == null) return null; 291 if (code == null) return null;
291 292
292 js.Name name = namer.globalPropertyName(element); 293 js.Name name = namer.globalPropertyName(element);
293 bool isFinal = element.isFinal; 294 bool isFinal = element.isFinal;
294 bool isLazy = true; 295 bool isLazy = true;
295 // TODO(floitsch): we shouldn't update the registry in the middle of 296 // TODO(floitsch): we shouldn't update the registry in the middle of
296 // building a static field. (Note that the $ holder is already registered 297 // building a static field. (Note that the static-state holder was
297 // earlier). 298 // already registered earlier, and that we just call the register to get
299 // the holder-instance.
298 return new StaticField(element, 300 return new StaticField(element,
299 name, _registry.registerHolder(r'$'), code, 301 name, _registerStaticStateHolder(), code,
300 isFinal, isLazy); 302 isFinal, isLazy);
301 } 303 }
302 304
303 List<Library> _buildLibraries(LibrariesMap librariesMap) { 305 List<Library> _buildLibraries(LibrariesMap librariesMap) {
304 List<Library> libraries = new List<Library>(librariesMap.length); 306 List<Library> libraries = new List<Library>(librariesMap.length);
305 int count = 0; 307 int count = 0;
306 librariesMap.forEach((LibraryElement library, List<Element> elements) { 308 librariesMap.forEach((LibraryElement library, List<Element> elements) {
307 libraries[count++] = _buildLibrary(library, elements); 309 libraries[count++] = _buildLibrary(library, elements);
308 }); 310 });
309 return libraries; 311 return libraries;
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after
786 788
787 void _registerConstants(OutputUnit outputUnit, 789 void _registerConstants(OutputUnit outputUnit,
788 Iterable<ConstantValue> constantValues) { 790 Iterable<ConstantValue> constantValues) {
789 // `constantValues` is null if an outputUnit doesn't contain any constants. 791 // `constantValues` is null if an outputUnit doesn't contain any constants.
790 if (constantValues == null) return; 792 if (constantValues == null) return;
791 for (ConstantValue constantValue in constantValues) { 793 for (ConstantValue constantValue in constantValues) {
792 _registry.registerConstant(outputUnit, constantValue); 794 _registry.registerConstant(outputUnit, constantValue);
793 assert(!_constants.containsKey(constantValue)); 795 assert(!_constants.containsKey(constantValue));
794 js.Name name = namer.constantName(constantValue); 796 js.Name name = namer.constantName(constantValue);
795 String constantObject = namer.globalObjectForConstant(constantValue); 797 String constantObject = namer.globalObjectForConstant(constantValue);
796 Holder holder = _registry.registerHolder(constantObject); 798 Holder holder =
799 _registry.registerHolder(constantObject, isConstantsHolder: true);
797 Constant constant = new Constant(name, holder, constantValue); 800 Constant constant = new Constant(name, holder, constantValue);
798 _constants[constantValue] = constant; 801 _constants[constantValue] = constant;
799 } 802 }
800 } 803 }
804
805 Holder _registerStaticStateHolder() {
806 return _registry.registerHolder(
807 namer.staticStateHolder, isStaticStateHolder: true);
808 }
801 } 809 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_emitter/model.dart ('k') | pkg/compiler/lib/src/js_emitter/program_builder/registry.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698