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 d38d11993d39e11b415917e2ff160cb7b7812f3a..09a34940d74b3891cca16270514ae3e5fcc7f788 100644 |
--- a/pkg/compiler/lib/src/js_backend/backend.dart |
+++ b/pkg/compiler/lib/src/js_backend/backend.dart |
@@ -444,6 +444,9 @@ class JavaScriptBackend { |
ResolutionEnqueuerListener _resolutionEnqueuerListener; |
CodegenEnqueuerListener _codegenEnqueuerListener; |
+ native.NativeResolutionEnqueuer _nativeResolutionEnqueuer; |
+ native.NativeCodegenEnqueuer _nativeCodegenEnqueuer; |
+ |
BackendHelpers helpers; |
BackendImpacts impacts; |
@@ -508,6 +511,10 @@ class JavaScriptBackend { |
_checkedModeHelpers = new CheckedModeHelpers(commonElements, helpers); |
emitter = |
new CodeEmitterTask(compiler, generateSourceMap, useStartupEmitter); |
+ _nativeResolutionEnqueuer = new native.NativeResolutionEnqueuer(compiler); |
+ _nativeCodegenEnqueuer = new native.NativeCodegenEnqueuer( |
+ compiler, emitter, _nativeResolutionEnqueuer); |
+ |
typeVariableAnalysis = new TypeVariableAnalysis( |
compiler.elementEnvironment, impacts, backendUsageBuilder); |
typeVariableHandler = new TypeVariableHandler(this, helpers, mirrorsData); |
@@ -557,7 +564,8 @@ class JavaScriptBackend { |
noSuchMethodRegistry, |
customElementsResolutionAnalysis, |
lookupMapLibraryAccess, |
- mirrorsAnalysis); |
+ mirrorsAnalysis, |
+ _nativeResolutionEnqueuer); |
_codegenEnqueuerListener = new CodegenEnqueuerListener( |
this, |
compiler.elementEnvironment, |
@@ -568,7 +576,8 @@ class JavaScriptBackend { |
customElementsCodegenAnalysis, |
typeVariableHandler, |
lookupMapAnalysis, |
- mirrorsAnalysis); |
+ mirrorsAnalysis, |
+ _nativeCodegenEnqueuer); |
} |
/// The [ConstantSystem] used to interpret compile-time constants for this |
@@ -742,8 +751,7 @@ class JavaScriptBackend { |
element.isConstructor || |
element.isGetter || |
element.isSetter) { |
- compiler.enqueuer.resolution.nativeEnqueuer |
- .handleMethodAnnotations(element); |
+ _nativeResolutionEnqueuer.handleMethodAnnotations(element); |
if (nativeData.isNativeMember(element)) { |
native.NativeBehavior behavior = |
native.NativeBehavior.ofMethodElement(element, compiler); |
@@ -751,8 +759,7 @@ class JavaScriptBackend { |
registry.registerNativeData(behavior); |
} |
} else if (element.isField) { |
- compiler.enqueuer.resolution.nativeEnqueuer |
- .handleFieldAnnotations(element); |
+ _nativeResolutionEnqueuer.handleFieldAnnotations(element); |
if (nativeData.isNativeMember(element)) { |
native.NativeBehavior fieldLoadBehavior = |
native.NativeBehavior.ofFieldElementLoad(element, compiler); |
@@ -926,14 +933,13 @@ class JavaScriptBackend { |
/// Called when resolving a call to a foreign function. |
native.NativeBehavior resolveForeignCall(Send node, Element element, |
CallStructure callStructure, ForeignResolver resolver) { |
- native.NativeResolutionEnqueuer nativeEnqueuer = |
- compiler.enqueuer.resolution.nativeEnqueuer; |
if (element.name == BackendHelpers.JS) { |
- return nativeEnqueuer.resolveJsCall(node, resolver); |
+ return _nativeResolutionEnqueuer.resolveJsCall(node, resolver); |
} else if (element.name == BackendHelpers.JS_EMBEDDED_GLOBAL) { |
- return nativeEnqueuer.resolveJsEmbeddedGlobalCall(node, resolver); |
+ return _nativeResolutionEnqueuer.resolveJsEmbeddedGlobalCall( |
+ node, resolver); |
} else if (element.name == BackendHelpers.JS_BUILTIN) { |
- return nativeEnqueuer.resolveJsBuiltinCall(node, resolver); |
+ return _nativeResolutionEnqueuer.resolveJsBuiltinCall(node, resolver); |
} else if (element.name == BackendHelpers.JS_INTERCEPTOR_CONSTANT) { |
// The type constant that is an argument to JS_INTERCEPTOR_CONSTANT names |
// a class that will be instantiated outside the program by attaching a |
@@ -1040,13 +1046,10 @@ class JavaScriptBackend { |
return worldImpact; |
} |
- native.NativeEnqueuer nativeResolutionEnqueuer() { |
- return new native.NativeResolutionEnqueuer(compiler); |
- } |
+ native.NativeEnqueuer get nativeResolutionEnqueuer => |
+ _nativeResolutionEnqueuer; |
- native.NativeEnqueuer nativeCodegenEnqueuer() { |
- return new native.NativeCodegenEnqueuer(compiler, emitter); |
- } |
+ native.NativeEnqueuer get nativeCodegenEnqueuer => _nativeCodegenEnqueuer; |
ClassElement defaultSuperclass(ClassElement element) { |
if (nativeData.isJsInterop(element)) { |