| Index: pkg/compiler/lib/src/js_backend/backend.dart
|
| diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
|
| index f829fd48de645d889d2d1f2111a00234a8181bf0..eb224066f1191485869cf72429e91ea1e5e29b31 100644
|
| --- a/pkg/compiler/lib/src/js_backend/backend.dart
|
| +++ b/pkg/compiler/lib/src/js_backend/backend.dart
|
| @@ -79,7 +79,7 @@ import 'checked_mode_helpers.dart';
|
| import 'constant_handler_javascript.dart';
|
| import 'custom_elements_analysis.dart';
|
| import 'enqueuer.dart';
|
| -import 'interceptor_data.dart' show InterceptorData;
|
| +import 'interceptor_data.dart';
|
| import 'js_interop_analysis.dart' show JsInteropAnalysis;
|
| import 'lookup_map_analysis.dart' show LookupMapAnalysis;
|
| import 'mirrors_analysis.dart';
|
| @@ -439,7 +439,9 @@ class JavaScriptBackend extends Target {
|
| new StagedWorldImpactBuilder();
|
|
|
| final NativeData nativeData = new NativeData();
|
| + InterceptorDataBuilder _interceptorDataBuilder;
|
| InterceptorData _interceptorData;
|
| + OneShotInterceptorData _oneShotInterceptorData;
|
| BackendUsageImpl _backendUsage;
|
| final MirrorsData mirrorsData;
|
| CheckedModeHelpers _checkedModeHelpers;
|
| @@ -494,9 +496,10 @@ class JavaScriptBackend extends Target {
|
| functionCompiler =
|
| new SsaFunctionCompiler(this, sourceInformationStrategy, useKernel);
|
| serialization = new JavaScriptBackendSerialization(this);
|
| - _interceptorData = new InterceptorData(nativeData, helpers, commonElements);
|
| + _interceptorDataBuilder =
|
| + new InterceptorDataBuilderImpl(nativeData, helpers, commonElements);
|
| backendClasses = new JavaScriptBackendClasses(
|
| - compiler.elementEnvironment, helpers, nativeData, _interceptorData);
|
| + compiler.elementEnvironment, helpers, nativeData);
|
| _resolutionEnqueuerListener = new ResolutionEnqueuerListener(this);
|
| _codegenEnqueuerListener = new CodegenEnqueuerListener(this);
|
| }
|
| @@ -511,7 +514,17 @@ class JavaScriptBackend extends Target {
|
|
|
| Resolution get resolution => compiler.resolution;
|
|
|
| - InterceptorData get interceptorData => _interceptorData;
|
| + InterceptorData get interceptorData {
|
| + assert(invariant(NO_LOCATION_SPANNABLE, _interceptorData != null,
|
| + message: "InterceptorData has not been computed yet."));
|
| + return _interceptorData;
|
| + }
|
| +
|
| + OneShotInterceptorData get oneShotInterceptorData {
|
| + assert(invariant(NO_LOCATION_SPANNABLE, _oneShotInterceptorData != null,
|
| + message: "OneShotInterceptorData has not been prepared yet."));
|
| + return _oneShotInterceptorData;
|
| + }
|
|
|
| BackendUsage get backendUsage => _backendUsage;
|
|
|
| @@ -786,7 +799,10 @@ class JavaScriptBackend extends Target {
|
| rti.computeClassesNeedingRti(
|
| compiler.enqueuer.resolution.worldBuilder, closedWorld);
|
| _registeredMetadata.clear();
|
| - interceptorData.onResolutionComplete(closedWorld);
|
| + _interceptorData =
|
| + _interceptorDataBuilder.onResolutionComplete(closedWorld);
|
| + _oneShotInterceptorData =
|
| + new OneShotInterceptorData(interceptorData, helpers);
|
| }
|
|
|
| void onTypeInferenceComplete() {
|
| @@ -2124,7 +2140,7 @@ class JavaScriptImpactTransformer extends ImpactTransformer {
|
| }
|
|
|
| for (Set<ClassElement> classes in impact.specializedGetInterceptors) {
|
| - backend.interceptorData
|
| + backend.oneShotInterceptorData
|
| .registerSpecializedGetInterceptor(classes, backend.namer);
|
| }
|
|
|
| @@ -2219,10 +2235,8 @@ class JavaScriptBackendClasses implements BackendClasses {
|
| final ElementEnvironment _env;
|
| final BackendHelpers helpers;
|
| final NativeData _nativeData;
|
| - final InterceptorData _interceptorData;
|
|
|
| - JavaScriptBackendClasses(
|
| - this._env, this.helpers, this._nativeData, this._interceptorData);
|
| + JavaScriptBackendClasses(this._env, this.helpers, this._nativeData);
|
|
|
| ClassElement get intClass => helpers.jsIntClass;
|
| ClassElement get uint32Class => helpers.jsUInt32Class;
|
| @@ -2261,11 +2275,6 @@ class JavaScriptBackendClasses implements BackendClasses {
|
| }
|
|
|
| @override
|
| - bool isInterceptorClass(ClassElement cls) {
|
| - return _interceptorData.isInterceptorClass(cls);
|
| - }
|
| -
|
| - @override
|
| bool isNativeClass(ClassElement element) {
|
| return _nativeData.isNative(element);
|
| }
|
| @@ -2313,7 +2322,8 @@ abstract class EnqueuerListenerBase implements EnqueuerListener {
|
| CustomElementsAnalysis get customElementsAnalysis =>
|
| _backend.customElementsAnalysis;
|
| NativeData get nativeData => _backend.nativeData;
|
| - InterceptorData get interceptorData => _backend.interceptorData;
|
| + InterceptorDataBuilder get interceptorData =>
|
| + _backend._interceptorDataBuilder;
|
| RuntimeTypes get rti => _backend.rti;
|
| TypeVariableHandler get typeVariableHandler => _backend.typeVariableHandler;
|
| Resolution get resolution => _backend.resolution;
|
|
|