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

Side by Side Diff: pkg/compiler/lib/src/js_backend/backend_serialization.dart

Issue 1902753002: Serialize more native data. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library js_backend.serialization; 5 library js_backend.serialization;
6 6
7 import '../common/backend_api.dart' show BackendSerialization; 7 import '../common/backend_api.dart' show BackendSerialization;
8 import '../dart_types.dart'; 8 import '../dart_types.dart';
9 import '../elements/elements.dart'; 9 import '../elements/elements.dart';
10 import '../js/js.dart' as js; 10 import '../js/js.dart' as js;
(...skipping 17 matching lines...) Expand all
28 28
29 class JavaScriptBackendSerialization implements BackendSerialization { 29 class JavaScriptBackendSerialization implements BackendSerialization {
30 final JavaScriptBackendSerializer serializer; 30 final JavaScriptBackendSerializer serializer;
31 final JavaScriptBackendDeserializer deserializer; 31 final JavaScriptBackendDeserializer deserializer;
32 32
33 JavaScriptBackendSerialization(JavaScriptBackend backend) 33 JavaScriptBackendSerialization(JavaScriptBackend backend)
34 : serializer = new JavaScriptBackendSerializer(backend), 34 : serializer = new JavaScriptBackendSerializer(backend),
35 deserializer = new JavaScriptBackendDeserializer(backend); 35 deserializer = new JavaScriptBackendDeserializer(backend);
36 } 36 }
37 37
38 const Key JS_INTEROP_NAME = const Key('jsInteropName');
39 const Key NATIVE_MEMBER_NAME = const Key('nativeMemberName');
40 const Key NATIVE_CLASS_TAG_INFO = const Key('nativeClassTagInfo');
41
38 class JavaScriptBackendSerializer implements SerializerPlugin { 42 class JavaScriptBackendSerializer implements SerializerPlugin {
39 final JavaScriptBackend backend; 43 final JavaScriptBackend backend;
40 44
41 JavaScriptBackendSerializer(this.backend); 45 JavaScriptBackendSerializer(this.backend);
42 46
43 @override 47 @override
44 void onElement(Element element, ObjectEncoder createEncoder(String tag)) { 48 void onElement(Element element, ObjectEncoder createEncoder(String tag)) {
45 // TODO(johnniwinther): Add more data, e.g. js-interop names, native tags, 49 ObjectEncoder encoder;
46 // etc. 50 ObjectEncoder getEncoder() {
47 String nativeName = backend.nativeData.nativeMemberName[element]; 51 return encoder ??= createEncoder(_BACKEND_DATA_TAG);
48 if (nativeName != null) { 52 }
49 ObjectEncoder encoder = createEncoder(_BACKEND_DATA_TAG); 53
50 encoder.setString(Key.NAME, nativeName); 54 String jsInteropName = backend.nativeData.jsInteropNames[element];
55 if (jsInteropName != null) {
56 getEncoder().setString(JS_INTEROP_NAME, jsInteropName);
57 }
58 String nativeMemberName = backend.nativeData.nativeMemberName[element];
59 if (nativeMemberName != null) {
60 getEncoder().setString(NATIVE_MEMBER_NAME, nativeMemberName);
61 }
62 String nativeClassTagInfo = backend.nativeData.nativeClassTagInfo[element];
63 if (nativeClassTagInfo != null) {
64 getEncoder().setString(NATIVE_CLASS_TAG_INFO, nativeClassTagInfo);
51 } 65 }
52 } 66 }
53 67
54 /// Returns a list of the [DartType]s in [types]. 68 /// Returns a list of the [DartType]s in [types].
55 static List<DartType> filterDartTypes(List types) { 69 static List<DartType> filterDartTypes(List types) {
56 return types.where((type) => type is DartType).toList(); 70 return types.where((type) => type is DartType).toList();
57 } 71 }
58 72
59 /// Returns a list of the names of the [SpecialType]s in [types]. 73 /// Returns a list of the names of the [SpecialType]s in [types].
60 static List<String> filterSpecialTypes(List types) { 74 static List<String> filterSpecialTypes(List types) {
(...skipping 28 matching lines...) Expand all
89 103
90 class JavaScriptBackendDeserializer implements DeserializerPlugin { 104 class JavaScriptBackendDeserializer implements DeserializerPlugin {
91 final JavaScriptBackend backend; 105 final JavaScriptBackend backend;
92 106
93 JavaScriptBackendDeserializer(this.backend); 107 JavaScriptBackendDeserializer(this.backend);
94 108
95 @override 109 @override
96 void onElement(Element element, ObjectDecoder getDecoder(String tag)) { 110 void onElement(Element element, ObjectDecoder getDecoder(String tag)) {
97 ObjectDecoder decoder = getDecoder(_BACKEND_DATA_TAG); 111 ObjectDecoder decoder = getDecoder(_BACKEND_DATA_TAG);
98 if (decoder != null) { 112 if (decoder != null) {
99 String nativeName = decoder.getString(Key.NAME); 113 String jsInteropName =
100 backend.nativeData.nativeMemberName[element] = nativeName; 114 decoder.getString(JS_INTEROP_NAME, isOptional: true);
115 if (jsInteropName != null) {
116 backend.nativeData.jsInteropNames[element] = jsInteropName;
117 }
118 String nativeMemberName =
119 decoder.getString(NATIVE_MEMBER_NAME, isOptional: true);
120 if (nativeMemberName != null) {
121 backend.nativeData.nativeMemberName[element] = nativeMemberName;
122 }
123 String nativeClassTagInfo =
124 decoder.getString(NATIVE_CLASS_TAG_INFO, isOptional: true);
125 if (nativeClassTagInfo != null) {
126 backend.nativeData.nativeClassTagInfo[element] = nativeClassTagInfo;
127 }
101 } 128 }
102 } 129 }
103 130
104 @override 131 @override
105 NativeBehavior onData(ObjectDecoder decoder) { 132 NativeBehavior onData(ObjectDecoder decoder) {
106 SideEffects sideEffects = 133 SideEffects sideEffects =
107 new SideEffects.fromFlags(decoder.getInt(SIDE_EFFECTS)); 134 new SideEffects.fromFlags(decoder.getInt(SIDE_EFFECTS));
108 NativeBehavior behavior = new NativeBehavior.internal(sideEffects); 135 NativeBehavior behavior = new NativeBehavior.internal(sideEffects);
109 136
110 behavior.typesReturned 137 behavior.typesReturned
(...skipping 14 matching lines...) Expand all
125 behavior.codeTemplate = js.js.parseForeignJS(behavior.codeTemplateText); 152 behavior.codeTemplate = js.js.parseForeignJS(behavior.codeTemplateText);
126 } 153 }
127 154
128 behavior.throwBehavior = 155 behavior.throwBehavior =
129 decoder.getEnum(THROW_BEHAVIOR, NativeThrowBehavior.values); 156 decoder.getEnum(THROW_BEHAVIOR, NativeThrowBehavior.values);
130 behavior.isAllocation = decoder.getBool(IS_ALLOCATION); 157 behavior.isAllocation = decoder.getBool(IS_ALLOCATION);
131 behavior.useGvn = decoder.getBool(USE_GVN); 158 behavior.useGvn = decoder.getBool(USE_GVN);
132 return behavior; 159 return behavior;
133 } 160 }
134 } 161 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698