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

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

Issue 2756103003: Split NativeBasicDataImpl (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/impact_transformer.dart ('k') | pkg/compiler/lib/src/native/enqueue.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/native_data.dart
diff --git a/pkg/compiler/lib/src/js_backend/native_data.dart b/pkg/compiler/lib/src/js_backend/native_data.dart
index 50b2f050e95b458a25f3e3af8085beabd0e8e263..c8403f58f3b2ab69f6d4d570991ad0f313c432cb 100644
--- a/pkg/compiler/lib/src/js_backend/native_data.dart
+++ b/pkg/compiler/lib/src/js_backend/native_data.dart
@@ -105,6 +105,8 @@ abstract class NativeBasicDataBuilder {
/// Marks [element] as an explicit part of JsInterop. The js interop name is
/// expected to be computed later.
void markAsJsInteropClass(ClassEntity element);
+
+ NativeBasicData close();
}
abstract class NativeDataBuilder {
@@ -135,7 +137,7 @@ abstract class NativeDataBuilder {
void setJsInteropMemberName(MemberEntity element, String name);
}
-class NativeBasicDataImpl implements NativeBasicDataBuilder, NativeBasicData {
+class NativeBasicDataBuilderImpl implements NativeBasicDataBuilder {
/// Tag info for native JavaScript classes names. See
/// [setNativeClassTagInfo].
Map<ClassEntity, NativeClassTag> nativeClassTagInfo =
@@ -178,6 +180,26 @@ class NativeBasicDataImpl implements NativeBasicDataBuilder, NativeBasicData {
jsInteropClasses.add(element);
}
+ NativeBasicData close() {
+ return new NativeBasicDataImpl(
+ nativeClassTagInfo, jsInteropLibraries, jsInteropClasses);
+ }
+}
+
+class NativeBasicDataImpl implements NativeBasicData {
+ /// Tag info for native JavaScript classes names. See
+ /// [setNativeClassTagInfo].
+ final Map<ClassEntity, NativeClassTag> nativeClassTagInfo;
+
+ /// The JavaScript libraries implemented via typed JavaScript interop.
+ final Set<LibraryEntity> jsInteropLibraries;
+
+ /// The JavaScript classes implemented via typed JavaScript interop.
+ final Set<ClassEntity> jsInteropClasses;
+
+ NativeBasicDataImpl(
+ this.nativeClassTagInfo, this.jsInteropLibraries, this.jsInteropClasses);
+
/// Returns `true` if [cls] is a native class.
bool isNativeClass(ClassEntity element) {
if (isJsInteropClass(element)) return true;
@@ -220,7 +242,7 @@ class NativeDataImpl implements NativeDataBuilder, NativeData {
/// when using JSInterop.
static const String _jsInteropEscapePrefix = r'JS$';
- final NativeBasicData _nativeBaseData;
+ final NativeBasicData _nativeBasicData;
/// The JavaScript names for native JavaScript elements implemented.
Map<MemberEntity, String> nativeMemberName = <MemberEntity, String>{};
@@ -246,7 +268,7 @@ class NativeDataImpl implements NativeDataBuilder, NativeData {
/// interop.
Map<MemberEntity, String> jsInteropMemberNames = <MemberEntity, String>{};
- NativeDataImpl(this._nativeBaseData);
+ NativeDataImpl(this._nativeBasicData);
/// Sets the native [name] for the member [element]. This name is used for
/// [element] in the generated JavaScript.
@@ -279,7 +301,7 @@ class NativeDataImpl implements NativeDataBuilder, NativeData {
/// Sets the explicit js interop [name] for the library [element].
void setJsInteropLibraryName(LibraryEntity element, String name) {
- assert(invariant(element, _nativeBaseData.isJsInteropLibrary(element),
+ assert(invariant(element, _nativeBasicData.isJsInteropLibrary(element),
message:
'Library $element is not js interop but given a js interop name.'));
jsInteropLibraryNames[element] = name;
@@ -287,7 +309,7 @@ class NativeDataImpl implements NativeDataBuilder, NativeData {
/// Sets the explicit js interop [name] for the class [element].
void setJsInteropClassName(ClassEntity element, String name) {
- assert(invariant(element, _nativeBaseData.isJsInteropClass(element),
+ assert(invariant(element, _nativeBasicData.isJsInteropClass(element),
message:
'Class $element is not js interop but given a js interop name.'));
jsInteropClassNames[element] = name;
@@ -313,27 +335,27 @@ class NativeDataImpl implements NativeDataBuilder, NativeData {
/// Returns `true` if [cls] is a native class.
bool isNativeClass(ClassEntity element) =>
- _nativeBaseData.isNativeClass(element);
+ _nativeBasicData.isNativeClass(element);
/// Returns the list of non-directive native tag words for [cls].
List<String> getNativeTagsOfClass(ClassEntity cls) =>
- _nativeBaseData.getNativeTagsOfClass(cls);
+ _nativeBasicData.getNativeTagsOfClass(cls);
/// Returns `true` if [cls] has a `!nonleaf` tag word.
bool hasNativeTagsForcedNonLeaf(ClassEntity cls) =>
- _nativeBaseData.hasNativeTagsForcedNonLeaf(cls);
+ _nativeBasicData.hasNativeTagsForcedNonLeaf(cls);
/// Returns `true` if [element] is a JsInterop library.
bool isJsInteropLibrary(LibraryEntity element) =>
- _nativeBaseData.isJsInteropLibrary(element);
+ _nativeBasicData.isJsInteropLibrary(element);
/// Returns `true` if [element] is a JsInterop class.
bool isJsInteropClass(ClassEntity element) =>
- _nativeBaseData.isJsInteropClass(element);
+ _nativeBasicData.isJsInteropClass(element);
/// Returns `true` if [element] or any of its superclasses is native.
bool isNativeOrExtendsNative(ClassEntity element) =>
- _nativeBaseData.isNativeOrExtendsNative(element);
+ _nativeBasicData.isNativeOrExtendsNative(element);
/// Returns the explicit js interop name for library [element].
String getJsInteropLibraryName(LibraryEntity element) {
« no previous file with comments | « pkg/compiler/lib/src/js_backend/impact_transformer.dart ('k') | pkg/compiler/lib/src/native/enqueue.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698