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

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

Issue 2732793002: Add NativeDataResolver (Closed)
Patch Set: Fix. 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
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 a97b24537ec4862c9215031bdadce4973911dd7c..82710ac16931a27bd78d0ece82d8c887cf671ea5 100644
--- a/pkg/compiler/lib/src/js_backend/backend.dart
+++ b/pkg/compiler/lib/src/js_backend/backend.dart
@@ -47,8 +47,7 @@ import '../js_emitter/js_emitter.dart' show CodeEmitterTask;
import '../kernel/task.dart';
import '../library_loader.dart' show LibraryLoader, LoadedLibraries;
import '../native/native.dart' as native;
-import '../patch_parser.dart'
- show checkNativeAnnotation, checkJsInteropAnnotation;
+import '../native/resolver.dart';
import '../ssa/ssa.dart' show SsaFunctionCompiler;
import '../tracer.dart';
import '../tree/tree.dart';
@@ -436,6 +435,7 @@ class JavaScriptBackend {
NativeData get nativeData => _nativeData;
NativeClassDataBuilder get nativeClassDataBuilder => _nativeData;
NativeDataBuilder get nativeDataBuilder => _nativeData;
+ final NativeDataResolver _nativeDataResolver;
InterceptorDataBuilder _interceptorDataBuilder;
InterceptorData _interceptorData;
OneShotInterceptorData _oneShotInterceptorData;
@@ -486,7 +486,7 @@ class JavaScriptBackend {
}
}
- JavaScriptBackend(Compiler compiler,
+ JavaScriptBackend(this.compiler,
{bool generateSourceMap: true,
bool useStartupEmitter: false,
bool useMultiSourceInfo: false,
@@ -500,7 +500,7 @@ class JavaScriptBackend {
useNewSourceInfo: useNewSourceInfo),
frontend = new JSFrontendAccess(compiler),
constantCompilerTask = new JavaScriptConstantTask(compiler),
- this.compiler = compiler {
+ _nativeDataResolver = new NativeDataResolverImpl(compiler) {
_target = new JavaScriptBackendTarget(this);
helpers = new BackendHelpers(compiler.elementEnvironment, commonElements);
impacts = new BackendImpacts(compiler.options, commonElements, helpers);
@@ -664,7 +664,7 @@ class JavaScriptBackend {
if (isForeign(element)) {
return element;
}
- if (nativeData.isJsInterop(element)) {
+ if (_nativeDataResolver.isJsInteropMember(element)) {
Siggi Cherem (dart-lang) 2017/03/14 04:09:15 was the jsinterop check within patchResolver.resol
Johnni Winther 2017/03/15 10:55:13 Yes.
if (element.memberName == const PublicName('[]') ||
element.memberName == const PublicName('[]=')) {
reporter.reportErrorMessage(
@@ -743,40 +743,6 @@ class JavaScriptBackend {
return aliasedSuperMembers.contains(member);
}
- void resolveNativeElement(MemberElement element, NativeRegistry registry) {
- if (element.isFunction ||
- element.isConstructor ||
- element.isGetter ||
- element.isSetter) {
- _nativeResolutionEnqueuer.handleMethodAnnotations(element);
- if (nativeClassData.isNativeMember(element)) {
- native.NativeBehavior behavior =
- native.NativeBehavior.ofMethodElement(element, compiler);
- nativeDataBuilder.setNativeMethodBehavior(element, behavior);
- registry.registerNativeData(behavior);
- }
- } else if (element.isField) {
- _nativeResolutionEnqueuer.handleFieldAnnotations(element);
- if (nativeClassData.isNativeMember(element)) {
- native.NativeBehavior fieldLoadBehavior =
- native.NativeBehavior.ofFieldElementLoad(element, compiler);
- native.NativeBehavior fieldStoreBehavior =
- native.NativeBehavior.ofFieldElementStore(element, compiler);
- nativeDataBuilder.setNativeFieldLoadBehavior(
- element, fieldLoadBehavior);
- nativeDataBuilder.setNativeFieldStoreBehavior(
- element, fieldStoreBehavior);
-
- // TODO(sra): Process fields for storing separately.
- // We have to handle both loading and storing to the field because we
- // only get one look at each member and there might be a load or store
- // we have not seen yet.
- registry.registerNativeData(fieldLoadBehavior);
- registry.registerNativeData(fieldStoreBehavior);
- }
- }
- }
-
/// Maps compile-time classes to their runtime class. The runtime class is
/// always a superclass or the class itself.
ClassElement getRuntimeClass(ClassElement class_) {
@@ -1153,20 +1119,11 @@ class JavaScriptBackend {
if (canLibraryUseNative(library)) {
library.forEachLocalMember((Element element) {
if (element.isClass) {
- checkNativeAnnotation(compiler, element);
+ checkNativeAnnotation(compiler, element, nativeClassDataBuilder);
}
});
}
- checkJsInteropAnnotation(compiler, library);
- library.forEachLocalMember((Element element) {
- checkJsInteropAnnotation(compiler, element);
- if (element.isClass && nativeData.isJsInterop(element)) {
- ClassElement classElement = element;
- classElement.forEachMember((_, memberElement) {
- checkJsInteropAnnotation(compiler, memberElement);
- });
- }
- });
+ checkJsInteropClassAnnotations(compiler, library, nativeClassDataBuilder);
}
if (library.isPlatformLibrary &&
// Don't patch library currently disallowed.
@@ -1595,11 +1552,6 @@ class JavaScriptBackendClasses implements BackendClasses {
return _nativeData.isNativeClass(element);
}
- @override
- bool isNativeMember(MemberEntity element) {
- return _nativeData.isNativeMember(element);
- }
-
InterfaceType getConstantMapTypeFor(InterfaceType sourceType,
{bool hasProtoKey: false, bool onlyStringKeys: false}) {
ClassElement classElement = onlyStringKeys
@@ -1635,8 +1587,8 @@ class JavaScriptBackendTarget extends Target {
}
@override
- void resolveNativeElement(MemberElement element, NativeRegistry registry) {
- return _backend.resolveNativeElement(element, registry);
+ void resolveNativeMember(MemberElement element, NativeRegistry registry) {
+ return _backend._nativeDataResolver.resolveNativeMember(element, registry);
}
@override

Powered by Google App Engine
This is Rietveld 408576698