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

Unified Diff: pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart

Issue 2843283004: Use more entities in program_builder, collector and registry (Closed)
Patch Set: Updated cf. comments. Created 3 years, 8 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/js_emitter/full_emitter/emitter.dart
diff --git a/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
index 44e9c8820070ffe7740544fe73515c110b61c3ea..8de85da9afb87abaa85d4cfba6691fbdb4abb57b 100644
--- a/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
@@ -28,8 +28,7 @@ import '../../elements/elements.dart'
FunctionSignature,
LibraryElement,
MethodElement,
- TypedefElement,
- VariableElement;
+ TypedefElement;
import '../../elements/entities.dart';
import '../../hash/sha1.dart' show Hasher;
import '../../io/code_output.dart';
@@ -56,6 +55,7 @@ import '../js_emitter.dart' hide Emitter, EmitterFactory;
import '../js_emitter.dart' as js_emitter show Emitter, EmitterFactory;
import '../model.dart';
import '../program_builder/program_builder.dart';
+import '../sorter.dart';
import 'class_builder.dart';
import 'class_emitter.dart';
@@ -85,8 +85,8 @@ class EmitterFactory implements js_emitter.EmitterFactory {
@override
Emitter createEmitter(
CodeEmitterTask task, Namer namer, ClosedWorld closedWorld) {
- return new Emitter(
- task.compiler, namer, closedWorld, generateSourceMap, task);
+ return new Emitter(task.compiler, namer, closedWorld, generateSourceMap,
+ task, task.sorter);
}
}
@@ -96,14 +96,15 @@ class Emitter implements js_emitter.Emitter {
// The following fields will be set to copies of the program-builder's
// collector.
- Map<OutputUnit, List<VariableElement>> outputStaticNonFinalFieldLists;
- Map<OutputUnit, Set<LibraryElement>> outputLibraryLists;
+ Map<OutputUnit, List<FieldEntity>> outputStaticNonFinalFieldLists;
+ Map<OutputUnit, Set<LibraryEntity>> outputLibraryLists;
List<TypedefElement> typedefsNeededForReflection;
final ContainerBuilder containerBuilder = new ContainerBuilder();
final ClassEmitter classEmitter;
final NsmEmitter nsmEmitter;
final InterceptorEmitter interceptorEmitter;
+ final Sorter _sorter;
// TODO(johnniwinther): Wrap these fields in a caching strategy.
final List<jsAst.Statement> cachedEmittedConstantsAst = <jsAst.Statement>[];
@@ -171,7 +172,7 @@ class Emitter implements js_emitter.Emitter {
final bool generateSourceMap;
Emitter(Compiler compiler, Namer namer, ClosedWorld closedWorld,
- this.generateSourceMap, this.task)
+ this.generateSourceMap, this.task, this._sorter)
: this.compiler = compiler,
this.namer = namer,
classEmitter = new ClassEmitter(closedWorld),
@@ -597,7 +598,7 @@ class Emitter implements js_emitter.Emitter {
jsAst.Statement buildStaticNonFinalFieldInitializations(
OutputUnit outputUnit) {
jsAst.Statement buildInitialization(
- Element element, jsAst.Expression initialValue) {
+ FieldElement element, jsAst.Expression initialValue) {
return js.statement('${namer.staticStateHolder}.# = #',
[namer.globalPropertyName(element), initialValue]);
}
@@ -606,7 +607,7 @@ class Emitter implements js_emitter.Emitter {
JavaScriptConstantCompiler handler = backend.constants;
List<jsAst.Statement> parts = <jsAst.Statement>[];
- Iterable<Element> fields = outputStaticNonFinalFieldLists[outputUnit];
+ Iterable<FieldEntity> fields = outputStaticNonFinalFieldLists[outputUnit];
// If the outputUnit does not contain any static non-final fields, then
// [fields] is `null`.
if (fields != null) {
@@ -621,10 +622,10 @@ class Emitter implements js_emitter.Emitter {
if (inMainUnit && outputStaticNonFinalFieldLists.length > 1) {
// In the main output-unit we output a stub initializer for deferred
// variables, so that `isolateProperties` stays a fast object.
- outputStaticNonFinalFieldLists.forEach(
- (OutputUnit fieldsOutputUnit, Iterable<VariableElement> fields) {
+ outputStaticNonFinalFieldLists
+ .forEach((OutputUnit fieldsOutputUnit, Iterable<FieldEntity> fields) {
if (fieldsOutputUnit == outputUnit) return; // Skip the main unit.
- for (Element element in fields) {
+ for (FieldEntity element in fields) {
reporter.withCurrentElement(element, () {
parts.add(buildInitialization(element, jsAst.number(0)));
});
@@ -1347,11 +1348,11 @@ class Emitter implements js_emitter.Emitter {
checkEverythingEmitted(descriptors.keys);
- Iterable<LibraryElement> libraries = outputLibraryLists[mainOutputUnit];
+ Iterable<LibraryEntity> libraries = outputLibraryLists[mainOutputUnit];
if (libraries == null) libraries = <LibraryElement>[];
List<jsAst.Expression> parts = <jsAst.Expression>[];
- for (LibraryElement library in Elements.sortedByPosition(libraries)) {
+ for (LibraryEntity library in _sorter.sortLibraries(libraries)) {
parts.add(generateLibraryDescriptor(library, mainFragment));
descriptors.remove(library);
}
@@ -1568,12 +1569,12 @@ class Emitter implements js_emitter.Emitter {
Map<Element, ClassBuilder> descriptors = elementDescriptors[fragment];
if (descriptors != null && descriptors.isNotEmpty) {
- Iterable<LibraryElement> libraries = outputLibraryLists[outputUnit];
+ Iterable<LibraryEntity> libraries = outputLibraryLists[outputUnit];
if (libraries == null) libraries = [];
// TODO(johnniwinther): Avoid creating [CodeBuffer]s.
List<jsAst.Expression> parts = <jsAst.Expression>[];
- for (LibraryElement library in Elements.sortedByPosition(libraries)) {
+ for (LibraryEntity library in _sorter.sortLibraries(libraries)) {
parts.add(generateLibraryDescriptor(library, fragment));
descriptors.remove(library);
}
« no previous file with comments | « pkg/compiler/lib/src/js_emitter/code_emitter_task.dart ('k') | pkg/compiler/lib/src/js_emitter/program_builder/collector.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698