| 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 e7612f993f587a61ae47e7834fad81ab9e132d5f..fb9b74c8f892523d182221aac6747c8ab5c01fdb 100644
|
| --- a/pkg/compiler/lib/src/js_backend/backend.dart
|
| +++ b/pkg/compiler/lib/src/js_backend/backend.dart
|
| @@ -387,11 +387,11 @@ class JavaScriptBackend {
|
|
|
| /// Resolution support for generating table of interceptors and
|
| /// constructors for custom elements.
|
| - CustomElementsResolutionAnalysis customElementsResolutionAnalysis;
|
| + CustomElementsResolutionAnalysis _customElementsResolutionAnalysis;
|
|
|
| /// Codegen support for generating table of interceptors and
|
| /// constructors for custom elements.
|
| - CustomElementsCodegenAnalysis customElementsCodegenAnalysis;
|
| + CustomElementsCodegenAnalysis _customElementsCodegenAnalysis;
|
|
|
| /// Resolution support for tree-shaking entries of `LookupMap`.
|
| LookupMapResolutionAnalysis lookupMapResolutionAnalysis;
|
| @@ -432,10 +432,10 @@ class JavaScriptBackend {
|
| JavaScriptBackendSerialization serialization;
|
|
|
| NativeDataImpl _nativeData;
|
| - final NativeBasicDataImpl _nativeBaseData = new NativeBasicDataImpl();
|
| - NativeBasicData get nativeBaseData => _nativeBaseData;
|
| + final NativeBasicDataBuilderImpl _nativeBasicDataBuilder =
|
| + new NativeBasicDataBuilderImpl();
|
| + NativeBasicDataImpl _nativeBasicData;
|
| NativeData get nativeData => _nativeData;
|
| - NativeBasicDataBuilder get nativeBaseDataBuilder => _nativeBaseData;
|
| NativeDataBuilder get nativeDataBuilder => _nativeData;
|
| final NativeDataResolver _nativeDataResolver;
|
| InterceptorDataBuilder _interceptorDataBuilder;
|
| @@ -453,7 +453,7 @@ class JavaScriptBackend {
|
| BackendImpacts impacts;
|
|
|
| /// Common classes used by the backend.
|
| - BackendClasses backendClasses;
|
| + BackendClasses _backendClasses;
|
|
|
| /// Backend access to the front-end.
|
| final JSFrontendAccess frontend;
|
| @@ -501,12 +501,9 @@ class JavaScriptBackend {
|
| frontend = new JSFrontendAccess(compiler),
|
| constantCompilerTask = new JavaScriptConstantTask(compiler),
|
| _nativeDataResolver = new NativeDataResolverImpl(compiler) {
|
| - _nativeData = new NativeDataImpl(nativeBaseData);
|
| _target = new JavaScriptBackendTarget(this);
|
| helpers = new BackendHelpers(compiler.elementEnvironment, commonElements);
|
| impacts = new BackendImpacts(compiler.options, commonElements, helpers);
|
| - backendClasses = new JavaScriptBackendClasses(
|
| - compiler.elementEnvironment, helpers, nativeBaseData);
|
| _mirrorsData = new MirrorsDataImpl(
|
| compiler, compiler.options, commonElements, helpers, constants);
|
| _backendUsageBuilder = new BackendUsageBuilderImpl(
|
| @@ -520,21 +517,6 @@ class JavaScriptBackend {
|
|
|
| _typeVariableResolutionAnalysis = new TypeVariableResolutionAnalysis(
|
| compiler.elementEnvironment, impacts, backendUsageBuilder);
|
| - customElementsResolutionAnalysis = new CustomElementsResolutionAnalysis(
|
| - compiler.resolution,
|
| - constantSystem,
|
| - commonElements,
|
| - backendClasses,
|
| - helpers,
|
| - nativeBaseData,
|
| - backendUsageBuilder);
|
| - customElementsCodegenAnalysis = new CustomElementsCodegenAnalysis(
|
| - compiler.resolution,
|
| - constantSystem,
|
| - commonElements,
|
| - backendClasses,
|
| - helpers,
|
| - nativeBaseData);
|
| jsInteropAnalysis = new JsInteropAnalysis(this);
|
| _mirrorsResolutionAnalysis =
|
| new MirrorsResolutionAnalysisImpl(this, compiler.resolution);
|
| @@ -543,25 +525,10 @@ class JavaScriptBackend {
|
|
|
| noSuchMethodRegistry = new NoSuchMethodRegistry(this);
|
| kernelTask = new KernelTask(compiler);
|
| - impactTransformer = new JavaScriptImpactTransformer(
|
| - compiler.options,
|
| - compiler.resolution,
|
| - compiler.elementEnvironment,
|
| - commonElements,
|
| - impacts,
|
| - nativeBaseData,
|
| - nativeResolutionEnqueuer,
|
| - backendUsageBuilder,
|
| - mirrorsDataBuilder,
|
| - customElementsResolutionAnalysis,
|
| - rtiNeedBuilder);
|
| patchResolverTask = new PatchResolverTask(compiler);
|
| functionCompiler =
|
| new SsaFunctionCompiler(this, sourceInformationStrategy, useKernel);
|
| - serialization =
|
| - new JavaScriptBackendSerialization(nativeBaseData, nativeData);
|
| - _interceptorDataBuilder = new InterceptorDataBuilderImpl(
|
| - nativeBaseData, helpers, commonElements, compiler.resolution);
|
| + serialization = new JavaScriptBackendSerialization(this);
|
| }
|
|
|
| /// The [ConstantSystem] used to interpret compile-time constants for this
|
| @@ -576,6 +543,39 @@ class JavaScriptBackend {
|
|
|
| Target get target => _target;
|
|
|
| + /// Resolution support for generating table of interceptors and
|
| + /// constructors for custom elements.
|
| + CustomElementsResolutionAnalysis get customElementsResolutionAnalysis {
|
| + assert(invariant(
|
| + NO_LOCATION_SPANNABLE, _customElementsResolutionAnalysis != null,
|
| + message: "CustomElementsResolutionAnalysis has not been created yet."));
|
| + return _customElementsResolutionAnalysis;
|
| + }
|
| +
|
| + /// Codegen support for generating table of interceptors and
|
| + /// constructors for custom elements.
|
| + CustomElementsCodegenAnalysis get customElementsCodegenAnalysis {
|
| + assert(invariant(
|
| + NO_LOCATION_SPANNABLE, _customElementsCodegenAnalysis != null,
|
| + message: "CustomElementsCodegenAnalysis has not been created yet."));
|
| + return _customElementsCodegenAnalysis;
|
| + }
|
| +
|
| + /// Common classes used by the backend.
|
| + BackendClasses get backendClasses {
|
| + assert(invariant(NO_LOCATION_SPANNABLE, _backendClasses != null,
|
| + message: "BackendClasses has not been created yet."));
|
| + return _backendClasses;
|
| + }
|
| +
|
| + NativeBasicData get nativeBasicData {
|
| + assert(invariant(NO_LOCATION_SPANNABLE, _nativeBasicData != null,
|
| + message: "NativeBasicData has not been computed yet."));
|
| + return _nativeBasicData;
|
| + }
|
| +
|
| + NativeBasicDataBuilder get nativeBasicDataBuilder => _nativeBasicDataBuilder;
|
| +
|
| /// Resolution analysis for tracking reflective access to type variables.
|
| TypeVariableResolutionAnalysis get typeVariableResolutionAnalysis {
|
| assert(invariant(
|
| @@ -889,6 +889,32 @@ class JavaScriptBackend {
|
|
|
| ResolutionEnqueuer createResolutionEnqueuer(
|
| CompilerTask task, Compiler compiler) {
|
| + _nativeBasicData = nativeBasicDataBuilder.close();
|
| + _nativeData = new NativeDataImpl(nativeBasicData);
|
| + _backendClasses = new JavaScriptBackendClasses(
|
| + compiler.elementEnvironment, helpers, nativeBasicData);
|
| + _customElementsResolutionAnalysis = new CustomElementsResolutionAnalysis(
|
| + compiler.resolution,
|
| + constantSystem,
|
| + commonElements,
|
| + backendClasses,
|
| + helpers,
|
| + nativeBasicData,
|
| + backendUsageBuilder);
|
| + impactTransformer = new JavaScriptImpactTransformer(
|
| + compiler.options,
|
| + compiler.resolution,
|
| + compiler.elementEnvironment,
|
| + commonElements,
|
| + impacts,
|
| + nativeBasicData,
|
| + nativeResolutionEnqueuer,
|
| + backendUsageBuilder,
|
| + mirrorsDataBuilder,
|
| + customElementsResolutionAnalysis,
|
| + rtiNeedBuilder);
|
| + _interceptorDataBuilder = new InterceptorDataBuilderImpl(
|
| + nativeBasicData, helpers, commonElements, compiler.resolution);
|
| return new ResolutionEnqueuer(
|
| task,
|
| compiler.options,
|
| @@ -904,7 +930,7 @@ class JavaScriptBackend {
|
| helpers,
|
| impacts,
|
| backendClasses,
|
| - nativeBaseData,
|
| + nativeBasicData,
|
| _interceptorDataBuilder,
|
| _backendUsageBuilder,
|
| _rtiNeedBuilder,
|
| @@ -935,12 +961,19 @@ class JavaScriptBackend {
|
| backendClasses,
|
| lookupMapResolutionAnalysis);
|
| _mirrorsCodegenAnalysis = mirrorsResolutionAnalysis.close();
|
| + _customElementsCodegenAnalysis = new CustomElementsCodegenAnalysis(
|
| + compiler.resolution,
|
| + constantSystem,
|
| + commonElements,
|
| + backendClasses,
|
| + helpers,
|
| + nativeBasicData);
|
| return new CodegenEnqueuer(
|
| task,
|
| compiler.options,
|
| const TreeShakingEnqueuerStrategy(),
|
| new CodegenWorldBuilderImpl(
|
| - nativeBaseData, closedWorld, constants, const TypeMaskStrategy()),
|
| + nativeBasicData, closedWorld, constants, const TypeMaskStrategy()),
|
| new CodegenWorkItemBuilder(this, compiler.options),
|
| new CodegenEnqueuerListener(
|
| compiler.elementEnvironment,
|
| @@ -1033,11 +1066,11 @@ class JavaScriptBackend {
|
| native.NativeEnqueuer get nativeCodegenEnqueuer => _nativeCodegenEnqueuer;
|
|
|
| ClassElement defaultSuperclass(ClassElement element) {
|
| - if (nativeBaseData.isJsInteropClass(element)) {
|
| + if (nativeBasicData.isJsInteropClass(element)) {
|
| return helpers.jsJavaScriptObjectClass;
|
| }
|
| // Native classes inherit from Interceptor.
|
| - return nativeBaseData.isNativeClass(element)
|
| + return nativeBasicData.isNativeClass(element)
|
| ? helpers.jsInterceptorClass
|
| : commonElements.objectClass;
|
| }
|
| @@ -1119,11 +1152,11 @@ class JavaScriptBackend {
|
| if (canLibraryUseNative(library)) {
|
| library.forEachLocalMember((Element element) {
|
| if (element.isClass) {
|
| - checkNativeAnnotation(compiler, element, nativeBaseDataBuilder);
|
| + checkNativeAnnotation(compiler, element, nativeBasicDataBuilder);
|
| }
|
| });
|
| }
|
| - checkJsInteropClassAnnotations(compiler, library, nativeBaseDataBuilder);
|
| + checkJsInteropClassAnnotations(compiler, library, nativeBasicDataBuilder);
|
| }
|
| if (library.isPlatformLibrary &&
|
| // Don't patch library currently disallowed.
|
| @@ -1621,7 +1654,7 @@ class JavaScriptBackendTarget extends Target {
|
|
|
| @override
|
| bool isNativeClass(ClassEntity element) =>
|
| - _backend.nativeBaseData.isNativeClass(element);
|
| + _backend.nativeBasicData.isNativeClass(element);
|
|
|
| @override
|
| bool isForeign(Element element) => _backend.isForeign(element);
|
|
|