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

Unified Diff: pkg/compiler/lib/src/js_emitter/program_builder/collector.dart

Issue 2843283004: Use more entities in program_builder, collector and registry (Closed)
Patch Set: Fix. 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/program_builder/collector.dart
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/collector.dart b/pkg/compiler/lib/src/js_emitter/program_builder/collector.dart
index 5bc3f77db384b6e1bc9c4fc0690d3f5b7c46f6df..0b062330b1ba78b12618a08e357c719d225ff511 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder/collector.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/collector.dart
@@ -24,22 +24,23 @@ class Collector {
final OneShotInterceptorData _oneShotInterceptorData;
final MirrorsData _mirrorsData;
final ClosedWorld _closedWorld;
- final Set<ClassElement> _rtiNeededClasses;
+ final Set<ClassEntity> _rtiNeededClasses;
final Map<MemberElement, js.Expression> _generatedCode;
+ final Sorter _sorter;
- final Set<ClassElement> neededClasses = new Set<ClassElement>();
+ final Set<ClassEntity> neededClasses = new Set<ClassEntity>();
// This field is set in [computeNeededDeclarations].
- Set<ClassElement> classesOnlyNeededForRti;
- final Map<OutputUnit, List<ClassElement>> outputClassLists =
- new Map<OutputUnit, List<ClassElement>>();
+ Set<ClassEntity> classesOnlyNeededForRti;
+ final Map<OutputUnit, List<ClassEntity>> outputClassLists =
+ new Map<OutputUnit, List<ClassEntity>>();
final Map<OutputUnit, List<ConstantValue>> outputConstantLists =
new Map<OutputUnit, List<ConstantValue>>();
- final Map<OutputUnit, List<Element>> outputStaticLists =
- new Map<OutputUnit, List<Element>>();
- final Map<OutputUnit, List<VariableElement>> outputStaticNonFinalFieldLists =
- new Map<OutputUnit, List<VariableElement>>();
- final Map<OutputUnit, Set<LibraryElement>> outputLibraryLists =
- new Map<OutputUnit, Set<LibraryElement>>();
+ final Map<OutputUnit, List<MemberEntity>> outputStaticLists =
+ new Map<OutputUnit, List<MemberEntity>>();
+ final Map<OutputUnit, List<FieldEntity>> outputStaticNonFinalFieldLists =
+ new Map<OutputUnit, List<FieldEntity>>();
+ final Map<OutputUnit, Set<LibraryEntity>> outputLibraryLists =
+ new Map<OutputUnit, Set<LibraryEntity>>();
/// True, if the output contains a constant list.
///
@@ -64,7 +65,8 @@ class Collector {
this._mirrorsData,
this._closedWorld,
this._rtiNeededClasses,
- this._generatedCode);
+ this._generatedCode,
+ this._sorter);
Set<ClassElement> computeInterceptorsReferencedFromConstants() {
Set<ClassElement> classes = new Set<ClassElement>();
@@ -271,51 +273,52 @@ class Collector {
}
// 4. Finally, sort the classes.
- List<ClassElement> sortedClasses = Elements.sortedByPosition(neededClasses);
+ List<ClassEntity> sortedClasses = _sorter.sortClasses(neededClasses);
- for (ClassElement element in sortedClasses) {
- if (_nativeData.isNativeOrExtendsNative(element) &&
- !classesOnlyNeededForRti.contains(element)) {
+ for (ClassEntity cls in sortedClasses) {
+ if (_nativeData.isNativeOrExtendsNative(cls) &&
+ !classesOnlyNeededForRti.contains(cls)) {
// For now, native classes and related classes cannot be deferred.
- nativeClassesAndSubclasses.add(element);
- assert(invariant(element, !_deferredLoadTask.isDeferred(element)));
+ nativeClassesAndSubclasses.add(cls);
+ assert(invariant(cls, !_deferredLoadTask.isDeferredClass(cls)));
outputClassLists
.putIfAbsent(_deferredLoadTask.mainOutputUnit,
() => new List<ClassElement>())
- .add(element);
+ .add(cls);
} else {
outputClassLists
- .putIfAbsent(_deferredLoadTask.outputUnitForElement(element),
+ .putIfAbsent(_deferredLoadTask.outputUnitForClass(cls),
() => new List<ClassElement>())
- .add(element);
+ .add(cls);
}
}
}
void computeNeededStatics() {
- bool isStaticFunction(MemberElement element) =>
+ bool isStaticFunction(MemberEntity element) =>
!element.isInstanceMember && !element.isField;
- Iterable<MemberElement> elements =
+ Iterable<MemberEntity> elements =
_generatedCode.keys.where(isStaticFunction);
- for (Element element in Elements.sortedByPosition(elements)) {
- List<Element> list = outputStaticLists.putIfAbsent(
- _deferredLoadTask.outputUnitForElement(element),
- () => new List<Element>());
- list.add(element);
+ for (MemberEntity member in _sorter.sortMembers(elements)) {
+ List<MemberEntity> list = outputStaticLists.putIfAbsent(
+ _deferredLoadTask.outputUnitForMember(member),
+ () => new List<MemberEntity>());
+ list.add(member);
}
}
void computeNeededStaticNonFinalFields() {
- addToOutputUnit(Element element) {
- List<VariableElement> list = outputStaticNonFinalFieldLists.putIfAbsent(
- _deferredLoadTask.outputUnitForElement(element),
- () => new List<VariableElement>());
+ addToOutputUnit(FieldEntity element) {
+ List<FieldEntity> list = outputStaticNonFinalFieldLists.putIfAbsent(
+ // ignore: UNNECESSARY_CAST
+ _deferredLoadTask.outputUnitForMember(element as MemberEntity),
+ () => new List<FieldEntity>());
list.add(element);
}
- Iterable<FieldElement> fields =
+ Iterable<FieldEntity> fields =
// TODO(johnniwinther): This should be accessed from a codegen closed
// world.
_worldBuilder.allReferencedStaticFields.where((FieldElement field) {
@@ -331,20 +334,24 @@ class Collector {
}
});
- Elements.sortedByPosition(fields).forEach(addToOutputUnit);
+ _sorter.sortMembers(fields).forEach(addToOutputUnit);
}
void computeNeededLibraries() {
- void addSurroundingLibraryToSet(Element element) {
- OutputUnit unit = _deferredLoadTask.outputUnitForElement(element);
- LibraryElement library = element.library;
+ _generatedCode.keys.forEach((MemberEntity element) {
+ OutputUnit unit = _deferredLoadTask.outputUnitForMember(element);
+ LibraryEntity library = element.library;
outputLibraryLists
- .putIfAbsent(unit, () => new Set<LibraryElement>())
+ .putIfAbsent(unit, () => new Set<LibraryEntity>())
.add(library);
- }
-
- _generatedCode.keys.forEach(addSurroundingLibraryToSet);
- neededClasses.forEach(addSurroundingLibraryToSet);
+ });
+ neededClasses.forEach((ClassEntity element) {
+ OutputUnit unit = _deferredLoadTask.outputUnitForClass(element);
+ LibraryEntity library = element.library;
+ outputLibraryLists
+ .putIfAbsent(unit, () => new Set<LibraryEntity>())
+ .add(library);
+ });
}
void collect() {

Powered by Google App Engine
This is Rietveld 408576698