Index: pkg/compiler/lib/src/js_emitter/program_builder.dart |
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder.dart b/pkg/compiler/lib/src/js_emitter/program_builder.dart |
index 4e29010edad732233073de543205ec97b49a831c..ca997d27bf3f63dddf14e1742cbc9a2e1a184dd7 100644 |
--- a/pkg/compiler/lib/src/js_emitter/program_builder.dart |
+++ b/pkg/compiler/lib/src/js_emitter/program_builder.dart |
@@ -104,21 +104,24 @@ class ProgramBuilder { |
_unneededNativeClasses = |
_task.nativeEmitter.prepareNativeClasses(nativeClasses); |
- MainFragment mainOutput = _buildMainOutput(_registry.mainLibrariesMap); |
- Iterable<Fragment> deferredOutputs = _registry.deferredLibrariesMap |
- .map((librariesMap) => _buildDeferredOutput(mainOutput, librariesMap)); |
+ MainFragment mainFragment = _buildMainFragment(_registry.mainLibrariesMap); |
+ Iterable<Fragment> deferredFragments = |
+ _registry.deferredLibrariesMap.map(_buildDeferredFragment); |
- List<Fragment> outputs = new List<Fragment>(_registry.librariesMapCount); |
- outputs[0] = mainOutput; |
- outputs.setAll(1, deferredOutputs); |
+ List<Fragment> fragments = new List<Fragment>(_registry.librariesMapCount); |
+ fragments[0] = mainFragment; |
+ fragments.setAll(1, deferredFragments); |
_markEagerClasses(); |
bool containsNativeClasses = |
nativeClasses.length != _unneededNativeClasses.length; |
+ List<Holder> holders = _registry.holders.toList(growable: false); |
+ |
return new Program( |
- outputs, |
+ fragments, |
+ holders, |
_buildLoadMap(), |
_buildTypeToInterceptorMap(), |
_task.metadataCollector, |
@@ -149,7 +152,7 @@ class ProgramBuilder { |
return stubGenerator.generateTypeToInterceptorMap(); |
} |
- MainFragment _buildMainOutput(LibrariesMap librariesMap) { |
+ MainFragment _buildMainFragment(LibrariesMap librariesMap) { |
// Construct the main output from the libraries and the registered holders. |
MainFragment result = new MainFragment( |
librariesMap.outputUnit, |
@@ -158,8 +161,7 @@ class ProgramBuilder { |
_buildLibraries(librariesMap), |
_buildStaticNonFinalFields(librariesMap), |
_buildStaticLazilyInitializedFields(librariesMap), |
- _buildConstants(librariesMap), |
- _registry.holders.toList(growable: false)); |
+ _buildConstants(librariesMap)); |
_outputs[librariesMap.outputUnit] = result; |
return result; |
} |
@@ -170,13 +172,11 @@ class ProgramBuilder { |
return generator.generateInvokeMain(); |
} |
- DeferredFragment _buildDeferredOutput(MainFragment mainOutput, |
- LibrariesMap librariesMap) { |
+ DeferredFragment _buildDeferredFragment(LibrariesMap librariesMap) { |
DeferredFragment result = new DeferredFragment( |
librariesMap.outputUnit, |
backend.deferredPartFileName(librariesMap.name, addExtension: false), |
librariesMap.name, |
- mainOutput, |
_buildLibraries(librariesMap), |
_buildStaticNonFinalFields(librariesMap), |
_buildStaticLazilyInitializedFields(librariesMap), |
@@ -213,6 +213,10 @@ class ProgramBuilder { |
String name = namer.getNameOfGlobalField(element); |
bool isFinal = false; |
bool isLazy = false; |
+ |
+ // TODO(floitsch): we shouldn't update the registry in the middle of |
+ // building a static field. (Note that the $ holder is already registered |
+ // earlier). |
return new StaticField(element, |
name, _registry.registerHolder(r'$'), code, |
isFinal, isLazy); |
@@ -245,6 +249,9 @@ class ProgramBuilder { |
String name = namer.getNameOfGlobalField(element); |
bool isFinal = element.isFinal; |
bool isLazy = true; |
+ // TODO(floitsch): we shouldn't update the registry in the middle of |
+ // building a static field. (Note that the $ holder is already registered |
+ // earlier). |
return new StaticField(element, |
name, _registry.registerHolder(r'$'), code, |
isFinal, isLazy); |
@@ -375,6 +382,8 @@ class ProgramBuilder { |
String name = namer.getNameOfClass(element); |
String holderName = namer.globalObjectFor(element); |
+ // TODO(floitsch): we shouldn't update the registry in the middle of |
+ // building a class. |
Holder holder = _registry.registerHolder(holderName); |
bool isInstantiated = |
_compiler.codegenWorld.directlyInstantiatedClasses.contains(element); |
@@ -540,6 +549,8 @@ class ProgramBuilder { |
new InterceptorStubGenerator(_compiler, namer, backend); |
String holderName = namer.globalObjectFor(backend.interceptorsLibrary); |
+ // TODO(floitsch): we shouldn't update the registry in the middle of |
+ // generating the interceptor methods. |
Holder holder = _registry.registerHolder(holderName); |
Map<String, Set<ClassElement>> specializedGetInterceptors = |
@@ -603,6 +614,8 @@ class ProgramBuilder { |
new InterceptorStubGenerator(_compiler, namer, backend); |
String holderName = namer.globalObjectFor(backend.interceptorsLibrary); |
+ // TODO(floitsch): we shouldn't update the registry in the middle of |
+ // generating the interceptor methods. |
Holder holder = _registry.registerHolder(holderName); |
List<String> names = backend.oneShotInterceptors.keys.toList()..sort(); |
@@ -635,6 +648,8 @@ class ProgramBuilder { |
callName = namer.invocationName(callSelector); |
} |
+ // TODO(floitsch): we shouldn't update the registry in the middle of |
+ // building a static method. |
return new StaticDartMethod(element, |
name, _registry.registerHolder(holder), code, |
_generateParameterStubs(element, needsTearOff), |