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

Unified Diff: pkg/compiler/lib/src/native/enqueue.dart

Issue 2498403002: Compute WorldImpact in NativeEnqueuer. (Closed)
Patch Set: dartfmt Created 4 years, 1 month 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
« no previous file with comments | « pkg/compiler/lib/src/compiler.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/native/enqueue.dart
diff --git a/pkg/compiler/lib/src/native/enqueue.dart b/pkg/compiler/lib/src/native/enqueue.dart
index 44d3be38efe79babbd177b20d6c70f5f8b9f2a6c..eec9100ce5f6718a6513739aa055ebac6a3f3c36 100644
--- a/pkg/compiler/lib/src/native/enqueue.dart
+++ b/pkg/compiler/lib/src/native/enqueue.dart
@@ -22,7 +22,8 @@ import '../tokens/token.dart' show BeginGroupToken, Token;
import '../tokens/token_constants.dart' as Tokens show EOF_TOKEN;
import '../tree/tree.dart';
import '../universe/use.dart' show StaticUse, TypeUse;
-import '../universe/world_impact.dart' show WorldImpactBuilder;
+import '../universe/world_impact.dart'
+ show WorldImpact, WorldImpactBuilder, WorldImpactBuilderImpl;
import 'behavior.dart';
/**
@@ -33,8 +34,8 @@ class NativeEnqueuer {
void onInstantiatedType(InterfaceType type) {}
/// Initial entry point to native enqueuer.
- void processNativeClasses(
- WorldImpactBuilder impactBuilder, Iterable<LibraryElement> libraries) {}
+ WorldImpact processNativeClasses(Iterable<LibraryElement> libraries) =>
+ const WorldImpact();
/// Registers the [nativeBehavior]. Adds the liveness of its instantiated
/// types to the world.
@@ -68,31 +69,19 @@ class NativeEnqueuer {
abstract class NativeEnqueuerBase implements NativeEnqueuer {
static final RegExp _identifier = new RegExp(r'^[a-zA-Z_$][a-zA-Z0-9_$]*$');
- /**
- * The set of all native classes. Each native class is in [nativeClasses] and
- * exactly one of [unusedClasses], [pendingClasses] and [registeredClasses].
- */
- final Set<ClassElement> nativeClasses = new Set<ClassElement>();
+ /// The set of all native classes. Each native class is in [nativeClasses]
+ /// and exactly one of [unusedClasses] and [registeredClasses].
+ final Set<ClassElement> _nativeClasses = new Set<ClassElement>();
- final Set<ClassElement> registeredClasses = new Set<ClassElement>();
- final Set<ClassElement> pendingClasses = new Set<ClassElement>();
- final Set<ClassElement> unusedClasses = new Set<ClassElement>();
+ final Set<ClassElement> _registeredClasses = new Set<ClassElement>();
+ final Set<ClassElement> _unusedClasses = new Set<ClassElement>();
final Set<LibraryElement> processedLibraries;
- bool get hasInstantiatedNativeClasses => !registeredClasses.isEmpty;
+ bool get hasInstantiatedNativeClasses => !_registeredClasses.isEmpty;
final Set<ClassElement> nativeClassesAndSubclasses = new Set<ClassElement>();
- final Map<ClassElement, Set<ClassElement>> nonNativeSubclasses =
- new Map<ClassElement, Set<ClassElement>>();
Johnni Winther 2016/11/15 15:21:56 Unused
-
- /**
- * Records matched constraints ([SpecialType] or [DartType]). Once a type
- * constraint has been matched, there is no need to match it again.
- */
- final Set matchedTypeConstraints = new Set();
Johnni Winther 2016/11/15 15:21:56 We cannot do this anymore, since we might not appl
-
final Compiler compiler;
final bool enableLiveTypeAnalysis;
@@ -113,12 +102,18 @@ abstract class NativeEnqueuerBase implements NativeEnqueuer {
CoreTypes get coreTypes => compiler.coreTypes;
void onInstantiatedType(InterfaceType type) {
- if (unusedClasses.remove(type.element)) {
- registeredClasses.add(type.element);
+ if (_unusedClasses.remove(type.element)) {
+ _registeredClasses.add(type.element);
}
}
- void processNativeClasses(
+ WorldImpact processNativeClasses(Iterable<LibraryElement> libraries) {
+ WorldImpactBuilderImpl impactBuilder = new WorldImpactBuilderImpl();
+ _processNativeClasses(impactBuilder, libraries);
+ return impactBuilder;
+ }
+
+ void _processNativeClasses(
WorldImpactBuilder impactBuilder, Iterable<LibraryElement> libraries) {
if (compiler.options.hasIncrementalSupport) {
// Since [Set.add] returns bool if an element was added, this restricts
@@ -132,7 +127,7 @@ abstract class NativeEnqueuerBase implements NativeEnqueuer {
}
processSubclassesOfNativeClasses(libraries);
if (!enableLiveTypeAnalysis) {
- _registerTypeUses(impactBuilder, nativeClasses, 'forced');
+ _registerTypeUses(impactBuilder, _nativeClasses, 'forced');
}
}
@@ -146,8 +141,8 @@ abstract class NativeEnqueuerBase implements NativeEnqueuer {
}
void processNativeClass(ClassElement classElement) {
- nativeClasses.add(classElement);
- unusedClasses.add(classElement);
+ _nativeClasses.add(classElement);
+ _unusedClasses.add(classElement);
// Resolve class to ensure the class has valid inheritance info.
classElement.ensureResolved(resolution);
}
@@ -190,11 +185,6 @@ abstract class NativeEnqueuerBase implements NativeEnqueuer {
ClassElement nativeSuperclass = nativeSuperclassOf(element);
if (nativeSuperclass != null) {
nativeClassesAndSubclasses.add(element);
- if (!backend.isNative(element)) {
- nonNativeSubclasses
- .putIfAbsent(nativeSuperclass, () => new Set<ClassElement>())
- .add(element);
- }
Set<ClassElement> potentialSubclasses = potentialExtends[element.name];
if (potentialSubclasses != null) {
potentialSubclasses.forEach(walkPotentialSubclasses);
@@ -202,10 +192,10 @@ abstract class NativeEnqueuerBase implements NativeEnqueuer {
}
}
- nativeClasses.forEach(walkPotentialSubclasses);
+ _nativeClasses.forEach(walkPotentialSubclasses);
- nativeClasses.addAll(nativeClassesAndSubclasses);
- unusedClasses.addAll(nativeClassesAndSubclasses);
+ _nativeClasses.addAll(nativeClassesAndSubclasses);
+ _unusedClasses.addAll(nativeClassesAndSubclasses);
}
/**
@@ -344,7 +334,7 @@ abstract class NativeEnqueuerBase implements NativeEnqueuer {
void _registerTypeUses(
WorldImpactBuilder impactBuilder, Set<ClassElement> classes, cause) {
for (ClassElement cls in classes) {
- if (!unusedClasses.contains(cls)) {
+ if (!_unusedClasses.contains(cls)) {
// No need to add [classElement] to [impactBuilder]: it has already been
// instantiated and we don't track origins of native instantiations
// precisely.
@@ -446,11 +436,9 @@ abstract class NativeEnqueuerBase implements NativeEnqueuer {
impactBuilder.registerTypeUse(new TypeUse.nativeInstantiation(type));
}
- int unusedBefore = unusedClasses.length;
+ int unusedBefore = _unusedClasses.length;
Set<ClassElement> matchingClasses = new Set<ClassElement>();
for (var type in behavior.typesInstantiated) {
- if (matchedTypeConstraints.contains(type)) continue;
- matchedTypeConstraints.add(type);
if (type is SpecialType) {
if (type == SpecialType.JsObject) {
registerInstantiation(compiler.coreTypes.objectType);
@@ -489,12 +477,12 @@ abstract class NativeEnqueuerBase implements NativeEnqueuer {
return compiler.types.isSubtype(nativeType, specType);
}));
} else if (type.isDynamic) {
- matchingClasses.addAll(unusedClasses);
+ matchingClasses.addAll(_unusedClasses);
} else {
assert(type is VoidType);
}
}
- if (matchingClasses.isNotEmpty && registeredClasses.isEmpty) {
+ if (matchingClasses.isNotEmpty && _registeredClasses.isEmpty) {
matchingClasses.addAll(_onFirstNativeClass(impactBuilder));
}
_registerTypeUses(impactBuilder, matchingClasses, cause);
@@ -508,7 +496,7 @@ abstract class NativeEnqueuerBase implements NativeEnqueuer {
Iterable<ClassElement> _findUnusedClassesMatching(
bool predicate(classElement)) {
- return unusedClasses.where(predicate);
+ return _unusedClasses.where(predicate);
}
Iterable<ClassElement> _onFirstNativeClass(WorldImpactBuilder impactBuilder) {
@@ -564,8 +552,8 @@ class NativeResolutionEnqueuer extends NativeEnqueuerBase {
}
void logSummary(log(message)) {
- log('Resolved ${registeredClasses.length} native elements used, '
- '${unusedClasses.length} native elements dead.');
+ log('Resolved ${_registeredClasses.length} native elements used, '
+ '${_unusedClasses.length} native elements dead.');
}
/**
@@ -620,19 +608,19 @@ class NativeCodegenEnqueuer extends NativeEnqueuerBase {
NativeCodegenEnqueuer(Compiler compiler, this.emitter)
: super(compiler, compiler.options.enableNativeLiveTypeAnalysis);
- void processNativeClasses(
+ void _processNativeClasses(
WorldImpactBuilder impactBuilder, Iterable<LibraryElement> libraries) {
- super.processNativeClasses(impactBuilder, libraries);
+ super._processNativeClasses(impactBuilder, libraries);
// HACK HACK - add all the resolved classes.
NativeEnqueuerBase enqueuer = compiler.enqueuer.resolution.nativeEnqueuer;
Set<ClassElement> matchingClasses = new Set<ClassElement>();
- for (final classElement in enqueuer.registeredClasses) {
- if (unusedClasses.contains(classElement)) {
+ for (final classElement in enqueuer._registeredClasses) {
+ if (_unusedClasses.contains(classElement)) {
matchingClasses.add(classElement);
}
}
- if (matchingClasses.isNotEmpty && registeredClasses.isEmpty) {
+ if (matchingClasses.isNotEmpty && _registeredClasses.isEmpty) {
matchingClasses.addAll(_onFirstNativeClass(impactBuilder));
}
_registerTypeUses(impactBuilder, matchingClasses, 'was resolved');
@@ -679,7 +667,7 @@ class NativeCodegenEnqueuer extends NativeEnqueuerBase {
}
void logSummary(log(message)) {
- log('Compiled ${registeredClasses.length} native classes, '
- '${unusedClasses.length} native classes omitted.');
+ log('Compiled ${_registeredClasses.length} native classes, '
+ '${_unusedClasses.length} native classes omitted.');
}
}
« no previous file with comments | « pkg/compiler/lib/src/compiler.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698