[dart2js] Minor cleanup of classes needed for rti computation.

Change-Id: I641ed8f7c91f8b0d52b4542559a13b60d82e42e8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/205244
Commit-Queue: Joshua Litt <joshualitt@google.com>
Reviewed-by: Mayank Patke <fishythefish@google.com>
This commit is contained in:
Joshua Litt
2021-06-29 19:06:29 +00:00
committed by commit-bot@chromium.org
parent 46189bcb19
commit fc7aa585ea
3 changed files with 6 additions and 47 deletions
@@ -79,9 +79,6 @@ class CodeEmitterTask extends CompilerTask {
// 'is$' method.
typeTestRegistry.computeRequiredTypeChecks(
_backendStrategy.rtiChecksBuilder, codegenWorld);
// Compute the classes needed by RTI.
typeTestRegistry.computeRtiNeededClasses(
codegen.rtiSubstitutions, _backendStrategy.generatedCode.keys);
}
/// Creates the [Emitter] for this task.
@@ -104,8 +101,7 @@ class CodeEmitterTask extends CompilerTask {
_generateSourceMap);
metadataCollector = new MetadataCollector(
_compiler.reporter, _emitter, codegen.rtiRecipeEncoder);
typeTestRegistry = new TypeTestRegistry(
_compiler.options, closedWorld.elementEnvironment);
typeTestRegistry = new TypeTestRegistry(_compiler.options);
});
}
@@ -175,9 +175,7 @@ class Collector {
// 4. Find all class types needed for rti.
for (ClassEntity cls in _rtiNeededClasses) {
if (backendTypeHelpers.contains(cls)) continue;
while (cls != null && neededClassTypes.add(cls)) {
cls = _elementEnvironment.getSuperClass(cls);
}
neededClassTypes.add(cls);
}
// 5. Sort classes and add them to their respective OutputUnits.
@@ -5,27 +5,20 @@
library dart2js.js_emitter.type_test_registry;
import '../common.dart';
import '../common_elements.dart';
import '../elements/entities.dart';
import '../js_backend/runtime_types.dart'
show RuntimeTypesChecks, RuntimeTypesChecksBuilder;
import '../js_backend/runtime_types_codegen.dart'
show RuntimeTypesSubstitutions;
import '../options.dart';
import '../universe/codegen_world_builder.dart';
/// TODO(joshualitt): Delete this class and store [RuntimeTypeChecks] on
/// [CodeEmitterTask] directly.
class TypeTestRegistry {
final ElementEnvironment _elementEnvironment;
/// After [computeNeededClasses] this set only contains classes that are only
/// used for RTI.
Set<ClassEntity> _rtiNeededClasses;
final CompilerOptions _options;
RuntimeTypesChecks _rtiChecks;
TypeTestRegistry(this._options, this._elementEnvironment);
TypeTestRegistry(this._options);
RuntimeTypesChecks get rtiChecks {
assert(
@@ -36,35 +29,7 @@ class TypeTestRegistry {
}
Iterable<ClassEntity> get rtiNeededClasses {
assert(
_rtiNeededClasses != null,
failedAt(NO_LOCATION_SPANNABLE,
"rtiNeededClasses has not been computed yet."));
return _rtiNeededClasses;
}
void computeRtiNeededClasses(RuntimeTypesSubstitutions rtiSubstitutions,
Iterable<MemberEntity> liveMembers) {
_rtiNeededClasses = new Set<ClassEntity>();
void addClassWithSuperclasses(ClassEntity cls) {
_rtiNeededClasses.add(cls);
for (ClassEntity superclass = _elementEnvironment.getSuperClass(cls);
superclass != null;
superclass = _elementEnvironment.getSuperClass(superclass)) {
_rtiNeededClasses.add(superclass);
}
}
void addClassesWithSuperclasses(Iterable<ClassEntity> classes) {
for (ClassEntity cls in classes) {
addClassWithSuperclasses(cls);
}
}
// Add classes that are referenced by type arguments or substitutions in
// argument checks.
addClassesWithSuperclasses(rtiChecks.requiredClasses);
return rtiChecks.requiredClasses;
}
void computeRequiredTypeChecks(