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

Unified Diff: pkg/compiler/lib/src/js_backend/backend_usage.dart

Issue 2776383002: Use InterceptorDataBuilderImpl and BackendUsageBuilderImpl for kernel/closed_world_test (Closed)
Patch Set: Created 3 years, 9 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
« no previous file with comments | « pkg/compiler/lib/src/js_backend/backend.dart ('k') | pkg/compiler/lib/src/js_backend/interceptor_data.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/js_backend/backend_usage.dart
diff --git a/pkg/compiler/lib/src/js_backend/backend_usage.dart b/pkg/compiler/lib/src/js_backend/backend_usage.dart
index 1eb7887dc3d1bc1d081ed0d64783c2bf70a11f6e..869833e43e4f3eea378c9840ba8ff1e6f34d853e 100644
--- a/pkg/compiler/lib/src/js_backend/backend_usage.dart
+++ b/pkg/compiler/lib/src/js_backend/backend_usage.dart
@@ -4,7 +4,7 @@
import '../common.dart';
import '../common_elements.dart';
-import '../elements/elements.dart';
+import '../elements/elements.dart' show Element;
import '../elements/entities.dart';
import '../elements/types.dart';
import '../util/util.dart' show Setlet;
@@ -87,7 +87,6 @@ abstract class BackendUsageBuilder {
}
class BackendUsageBuilderImpl implements BackendUsageBuilder {
- final ElementEnvironment _elementEnvironment;
final CommonElements _commonElements;
final BackendHelpers _helpers;
// TODO(johnniwinther): Remove the need for these.
@@ -121,27 +120,48 @@ class BackendUsageBuilderImpl implements BackendUsageBuilder {
/// `true` if `noSuchMethod` is used.
bool isNoSuchMethodUsed = false;
- BackendUsageBuilderImpl(
- this._elementEnvironment, this._commonElements, this._helpers);
+ BackendUsageBuilderImpl(this._commonElements, this._helpers);
@override
- void registerBackendFunctionUse(MethodElement element) {
+ void registerBackendFunctionUse(FunctionEntity element) {
assert(invariant(element, _isValidBackendUse(element),
message: "Backend use of $element is not allowed."));
_helperFunctionsUsed.add(element);
}
@override
- void registerBackendClassUse(ClassElement element) {
+ void registerBackendClassUse(ClassEntity element) {
assert(invariant(element, _isValidBackendUse(element),
message: "Backend use of $element is not allowed."));
_helperClassesUsed.add(element);
}
- bool _isValidBackendUse(Element element) {
- assert(invariant(element, element.isDeclaration,
- message: "Backend use $element must be the declaration."));
- if (element is ConstructorElement &&
+ bool _isValidBackendUse(Entity element) {
+ if (_isValidEntity(element)) return true;
+ if (element is Element) {
+ assert(invariant(element, element.isDeclaration,
+ message: "Backend use $element must be the declaration."));
+ if (element.implementationLibrary.isPatch ||
+ // Needed to detect deserialized injected elements, that is
+ // element declared in patch files.
+ (element.library.isPlatformLibrary &&
+ element.sourcePosition.uri.path
+ .contains('_internal/js_runtime/lib/')) ||
+ element.library == _helpers.jsHelperLibrary ||
+ element.library == _helpers.interceptorsLibrary ||
+ element.library == _helpers.isolateHelperLibrary) {
+ // TODO(johnniwinther): We should be more precise about these.
+ return true;
+ } else {
+ return false;
+ }
+ }
+ // TODO(johnniwinther): Support remaining checks on [Entity]s.
+ return true;
+ }
+
+ bool _isValidEntity(Entity element) {
+ if (element is ConstructorEntity &&
(element == _helpers.streamIteratorConstructor ||
_commonElements.isSymbolConstructor(element) ||
_helpers.isSymbolValidatedConstructor(element) ||
@@ -152,17 +172,6 @@ class BackendUsageBuilderImpl implements BackendUsageBuilder {
element == _helpers.objectNoSuchMethod) {
// TODO(johnniwinther): These are valid but we could be more precise.
return true;
- } else if (element.implementationLibrary.isPatch ||
- // Needed to detect deserialized injected elements, that is
- // element declared in patch files.
- (element.library.isPlatformLibrary &&
- element.sourcePosition.uri.path
- .contains('_internal/js_runtime/lib/')) ||
- element.library == _helpers.jsHelperLibrary ||
- element.library == _helpers.interceptorsLibrary ||
- element.library == _helpers.isolateHelperLibrary) {
- // TODO(johnniwinther): We should be more precise about these.
- return true;
} else if (element == _commonElements.listClass ||
element == _helpers.mapLiteralClass ||
element == _commonElements.functionClass ||
@@ -225,7 +234,7 @@ class BackendUsageBuilderImpl implements BackendUsageBuilder {
}
}
- void registerUsedMember(MemberElement member) {
+ void registerUsedMember(MemberEntity member) {
if (member == _helpers.getIsolateAffinityTagMarker) {
_needToInitializeIsolateAffinityTag = true;
} else if (member == _helpers.requiresPreambleMarker) {
@@ -240,7 +249,7 @@ class BackendUsageBuilderImpl implements BackendUsageBuilder {
void registerGlobalFunctionDependency(FunctionEntity element) {
assert(element != null);
if (_globalFunctionDependencies == null) {
- _globalFunctionDependencies = new Setlet<MethodElement>();
+ _globalFunctionDependencies = new Setlet<FunctionEntity>();
}
_globalFunctionDependencies.add(element);
}
@@ -321,12 +330,12 @@ class BackendUsageImpl implements BackendUsage {
this._helperClassesUsed = helperClassesUsed;
@override
- bool isFunctionUsedByBackend(MethodElement element) {
+ bool isFunctionUsedByBackend(FunctionEntity element) {
return _helperFunctionsUsed.contains(element);
}
@override
- bool isFieldUsedByBackend(FieldElement element) {
+ bool isFieldUsedByBackend(FieldEntity element) {
return _helperClassesUsed.contains(element.enclosingClass);
}
« no previous file with comments | « pkg/compiler/lib/src/js_backend/backend.dart ('k') | pkg/compiler/lib/src/js_backend/interceptor_data.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698