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

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

Issue 2057993003: Serialize NativeBehavior for elements (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Cleanup. Created 4 years, 6 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 | « no previous file | pkg/compiler/lib/src/js_backend/native_data.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/backend_serialization.dart
diff --git a/pkg/compiler/lib/src/js_backend/backend_serialization.dart b/pkg/compiler/lib/src/js_backend/backend_serialization.dart
index d0594f4ae4d30c2d85c18cadf3548279383df948..97da2f5a2d2a8cf30bfbbe5acaca1a35511243f3 100644
--- a/pkg/compiler/lib/src/js_backend/backend_serialization.dart
+++ b/pkg/compiler/lib/src/js_backend/backend_serialization.dart
@@ -4,6 +4,7 @@
library js_backend.serialization;
+import '../common.dart';
import '../common/backend_api.dart' show BackendSerialization;
import '../dart_types.dart';
import '../elements/elements.dart';
@@ -38,6 +39,9 @@ class JavaScriptBackendSerialization implements BackendSerialization {
const Key JS_INTEROP_NAME = const Key('jsInteropName');
const Key NATIVE_MEMBER_NAME = const Key('nativeMemberName');
const Key NATIVE_CLASS_TAG_INFO = const Key('nativeClassTagInfo');
+const Key NATIVE_METHOD_BEHAVIOR = const Key('nativeMethodBehavior');
+const Key NATIVE_FIELD_LOAD_BEHAVIOR = const Key('nativeFieldLoadBehavior');
+const Key NATIVE_FIELD_STORE_BEHAVIOR = const Key('nativeFieldStoreBehavior');
class JavaScriptBackendSerializer implements SerializerPlugin {
final JavaScriptBackend backend;
@@ -63,41 +67,31 @@ class JavaScriptBackendSerializer implements SerializerPlugin {
if (nativeClassTagInfo != null) {
getEncoder().setString(NATIVE_CLASS_TAG_INFO, nativeClassTagInfo);
}
- }
-
- /// Returns a list of the [DartType]s in [types].
- static List<DartType> filterDartTypes(List types) {
- return types.where((type) => type is DartType).toList();
- }
-
- /// Returns a list of the names of the [SpecialType]s in [types].
- static List<String> filterSpecialTypes(List types) {
- return types
- .where((type) => type is SpecialType)
- .map((SpecialType type) => type.name)
- .toList();
+ NativeBehavior nativeMethodBehavior =
+ backend.nativeData.nativeMethodBehavior[element];
+ if (nativeMethodBehavior != null) {
+ NativeBehaviorSerialization.serializeNativeBehavior(nativeMethodBehavior,
+ getEncoder().createObject(NATIVE_METHOD_BEHAVIOR));
+ }
+ NativeBehavior nativeFieldLoadBehavior =
+ backend.nativeData.nativeFieldLoadBehavior[element];
+ if (nativeFieldLoadBehavior != null) {
+ NativeBehaviorSerialization.serializeNativeBehavior(
+ nativeFieldLoadBehavior,
+ getEncoder().createObject(NATIVE_FIELD_LOAD_BEHAVIOR));
+ }
+ NativeBehavior nativeFieldStoreBehavior =
+ backend.nativeData.nativeFieldStoreBehavior[element];
+ if (nativeFieldStoreBehavior != null) {
+ NativeBehaviorSerialization.serializeNativeBehavior(
+ nativeFieldStoreBehavior,
+ getEncoder().createObject(NATIVE_FIELD_STORE_BEHAVIOR));
+ }
}
@override
void onData(NativeBehavior behavior, ObjectEncoder encoder) {
- encoder.setTypes(
- DART_TYPES_RETURNED, filterDartTypes(behavior.typesReturned));
- encoder.setStrings(
- SPECIAL_TYPES_RETURNED, filterSpecialTypes(behavior.typesReturned));
-
- encoder.setTypes(
- DART_TYPES_INSTANTIATED, filterDartTypes(behavior.typesInstantiated));
- encoder.setStrings(SPECIAL_TYPES_INSTANTIATED,
- filterSpecialTypes(behavior.typesInstantiated));
-
- if (behavior.codeTemplateText != null) {
- encoder.setString(CODE_TEMPLATE, behavior.codeTemplateText);
- }
-
- encoder.setInt(SIDE_EFFECTS, behavior.sideEffects.flags);
- encoder.setEnum(THROW_BEHAVIOR, behavior.throwBehavior);
- encoder.setBool(IS_ALLOCATION, behavior.isAllocation);
- encoder.setBool(USE_GVN, behavior.useGvn);
+ NativeBehaviorSerialization.serializeNativeBehavior(behavior, encoder);
}
}
@@ -125,11 +119,73 @@ class JavaScriptBackendDeserializer implements DeserializerPlugin {
if (nativeClassTagInfo != null) {
backend.nativeData.nativeClassTagInfo[element] = nativeClassTagInfo;
}
+ ObjectDecoder nativeMethodBehavior =
+ decoder.getObject(NATIVE_METHOD_BEHAVIOR, isOptional: true);
+ if (nativeMethodBehavior != null) {
+ backend.nativeData.nativeMethodBehavior[element] =
+ NativeBehaviorSerialization
+ .deserializeNativeBehavior(nativeMethodBehavior);
+ }
+ ObjectDecoder nativeFieldLoadBehavior =
+ decoder.getObject(NATIVE_FIELD_LOAD_BEHAVIOR, isOptional: true);
+ if (nativeFieldLoadBehavior != null) {
+ backend.nativeData.nativeFieldLoadBehavior[element] =
+ NativeBehaviorSerialization
+ .deserializeNativeBehavior(nativeFieldLoadBehavior);
+ }
+ ObjectDecoder nativeFieldStoreBehavior =
+ decoder.getObject(NATIVE_FIELD_STORE_BEHAVIOR, isOptional: true);
+ if (nativeFieldStoreBehavior != null) {
+ backend.nativeData.nativeFieldStoreBehavior[element] =
+ NativeBehaviorSerialization
+ .deserializeNativeBehavior(nativeFieldStoreBehavior);
+ }
}
}
@override
NativeBehavior onData(ObjectDecoder decoder) {
+ return NativeBehaviorSerialization.deserializeNativeBehavior(decoder);
+ }
+}
+
+class NativeBehaviorSerialization {
+ /// Returns a list of the [DartType]s in [types].
+ static List<DartType> filterDartTypes(List types) {
+ return types.where((type) => type is DartType).toList();
+ }
+
+ /// Returns a list of the names of the [SpecialType]s in [types].
+ static List<String> filterSpecialTypes(List types) {
+ return types
+ .where((type) => type is SpecialType)
+ .map((SpecialType type) => type.name)
+ .toList();
+ }
+
+ static void serializeNativeBehavior(
+ NativeBehavior behavior, ObjectEncoder encoder) {
+ encoder.setTypes(
+ DART_TYPES_RETURNED, filterDartTypes(behavior.typesReturned));
+ encoder.setStrings(
+ SPECIAL_TYPES_RETURNED, filterSpecialTypes(behavior.typesReturned));
+
+ encoder.setTypes(
+ DART_TYPES_INSTANTIATED, filterDartTypes(behavior.typesInstantiated));
+ encoder.setStrings(SPECIAL_TYPES_INSTANTIATED,
+ filterSpecialTypes(behavior.typesInstantiated));
+
+ if (behavior.codeTemplateText != null) {
+ encoder.setString(CODE_TEMPLATE, behavior.codeTemplateText);
+ }
+
+ encoder.setInt(SIDE_EFFECTS, behavior.sideEffects.flags);
+ encoder.setEnum(THROW_BEHAVIOR, behavior.throwBehavior);
+ encoder.setBool(IS_ALLOCATION, behavior.isAllocation);
+ encoder.setBool(USE_GVN, behavior.useGvn);
+ }
+
+ static NativeBehavior deserializeNativeBehavior(ObjectDecoder decoder) {
SideEffects sideEffects =
new SideEffects.fromFlags(decoder.getInt(SIDE_EFFECTS));
NativeBehavior behavior = new NativeBehavior.internal(sideEffects);
« no previous file with comments | « no previous file | pkg/compiler/lib/src/js_backend/native_data.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698