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

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

Issue 2738513007: Split NativeDataImpl (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 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 '../elements/elements.dart'; 8 import '../elements/elements.dart';
9 import '../elements/resolution_types.dart'; 9 import '../elements/resolution_types.dart';
10 import '../elements/types.dart'; 10 import '../elements/types.dart';
(...skipping 16 matching lines...) Expand all
27 const Key CODE_TEMPLATE = const Key('codeTemplate'); 27 const Key CODE_TEMPLATE = const Key('codeTemplate');
28 const Key SIDE_EFFECTS = const Key('sideEffects'); 28 const Key SIDE_EFFECTS = const Key('sideEffects');
29 const Key THROW_BEHAVIOR = const Key('throwBehavior'); 29 const Key THROW_BEHAVIOR = const Key('throwBehavior');
30 const Key IS_ALLOCATION = const Key('isAllocation'); 30 const Key IS_ALLOCATION = const Key('isAllocation');
31 const Key USE_GVN = const Key('useGvn'); 31 const Key USE_GVN = const Key('useGvn');
32 32
33 class JavaScriptBackendSerialization implements BackendSerialization { 33 class JavaScriptBackendSerialization implements BackendSerialization {
34 final JavaScriptBackendSerializer serializer; 34 final JavaScriptBackendSerializer serializer;
35 final JavaScriptBackendDeserializer deserializer; 35 final JavaScriptBackendDeserializer deserializer;
36 36
37 JavaScriptBackendSerialization(NativeData nativeData) 37 JavaScriptBackendSerialization(
38 : serializer = new JavaScriptBackendSerializer(nativeData), 38 NativeClassData nativeClassData, NativeData nativeData)
39 deserializer = new JavaScriptBackendDeserializer(nativeData); 39 : serializer =
40 new JavaScriptBackendSerializer(nativeClassData, nativeData),
41 deserializer =
42 new JavaScriptBackendDeserializer(nativeClassData, nativeData);
40 } 43 }
41 44
42 const Key JS_INTEROP_LIBRARY_NAME = const Key('jsInteropLibraryName'); 45 const Key JS_INTEROP_LIBRARY_NAME = const Key('jsInteropLibraryName');
43 const Key JS_INTEROP_CLASS_NAME = const Key('jsInteropClassName'); 46 const Key JS_INTEROP_CLASS_NAME = const Key('jsInteropClassName');
44 const Key JS_INTEROP_MEMBER_NAME = const Key('jsInteropMemberName'); 47 const Key JS_INTEROP_MEMBER_NAME = const Key('jsInteropMemberName');
45 const Key NATIVE_MEMBER_NAME = const Key('nativeMemberName'); 48 const Key NATIVE_MEMBER_NAME = const Key('nativeMemberName');
46 const Key NATIVE_CLASS_TAG_INFO = const Key('nativeClassTagInfo'); 49 const Key NATIVE_CLASS_TAG_INFO = const Key('nativeClassTagInfo');
47 const Key NATIVE_METHOD_BEHAVIOR = const Key('nativeMethodBehavior'); 50 const Key NATIVE_METHOD_BEHAVIOR = const Key('nativeMethodBehavior');
48 const Key NATIVE_FIELD_LOAD_BEHAVIOR = const Key('nativeFieldLoadBehavior'); 51 const Key NATIVE_FIELD_LOAD_BEHAVIOR = const Key('nativeFieldLoadBehavior');
49 const Key NATIVE_FIELD_STORE_BEHAVIOR = const Key('nativeFieldStoreBehavior'); 52 const Key NATIVE_FIELD_STORE_BEHAVIOR = const Key('nativeFieldStoreBehavior');
50 53
51 class JavaScriptBackendSerializer implements SerializerPlugin { 54 class JavaScriptBackendSerializer implements SerializerPlugin {
55 final NativeClassDataImpl nativeClassData;
52 final NativeDataImpl nativeData; 56 final NativeDataImpl nativeData;
53 57
54 JavaScriptBackendSerializer(this.nativeData); 58 JavaScriptBackendSerializer(this.nativeClassData, this.nativeData);
55 59
56 @override 60 @override
57 void onElement(Element element, ObjectEncoder createEncoder(String tag)) { 61 void onElement(Element element, ObjectEncoder createEncoder(String tag)) {
58 ObjectEncoder encoder; 62 ObjectEncoder encoder;
59 ObjectEncoder getEncoder() { 63 ObjectEncoder getEncoder() {
60 return encoder ??= createEncoder(_BACKEND_DATA_TAG); 64 return encoder ??= createEncoder(_BACKEND_DATA_TAG);
61 } 65 }
62 66
63 String jsInteropLibraryName = nativeData.jsInteropLibraryNames[element]; 67 String jsInteropLibraryName = nativeData.jsInteropLibraryNames[element];
64 if (jsInteropLibraryName != null) { 68 if (jsInteropLibraryName != null) {
65 getEncoder().setString(JS_INTEROP_LIBRARY_NAME, jsInteropLibraryName); 69 getEncoder().setString(JS_INTEROP_LIBRARY_NAME, jsInteropLibraryName);
66 } 70 }
67 String jsInteropClassName = nativeData.jsInteropClassNames[element]; 71 String jsInteropClassName = nativeData.jsInteropClassNames[element];
68 if (jsInteropClassName != null) { 72 if (jsInteropClassName != null) {
69 getEncoder().setString(JS_INTEROP_CLASS_NAME, jsInteropClassName); 73 getEncoder().setString(JS_INTEROP_CLASS_NAME, jsInteropClassName);
70 } 74 }
71 String jsInteropMemberName = nativeData.jsInteropMemberNames[element]; 75 String jsInteropMemberName = nativeData.jsInteropMemberNames[element];
72 if (jsInteropMemberName != null) { 76 if (jsInteropMemberName != null) {
73 getEncoder().setString(JS_INTEROP_MEMBER_NAME, jsInteropMemberName); 77 getEncoder().setString(JS_INTEROP_MEMBER_NAME, jsInteropMemberName);
74 } 78 }
75 String nativeMemberName = nativeData.nativeMemberName[element]; 79 String nativeMemberName = nativeData.nativeMemberName[element];
76 if (nativeMemberName != null) { 80 if (nativeMemberName != null) {
77 getEncoder().setString(NATIVE_MEMBER_NAME, nativeMemberName); 81 getEncoder().setString(NATIVE_MEMBER_NAME, nativeMemberName);
78 } 82 }
79 String nativeClassTagInfo = nativeData.nativeClassTagInfo[element]; 83 NativeClassTag nativeClassTagInfo =
84 nativeClassData.nativeClassTagInfo[element];
80 if (nativeClassTagInfo != null) { 85 if (nativeClassTagInfo != null) {
81 getEncoder().setString(NATIVE_CLASS_TAG_INFO, nativeClassTagInfo); 86 getEncoder().setString(NATIVE_CLASS_TAG_INFO, nativeClassTagInfo.text);
82 } 87 }
83 NativeBehavior nativeMethodBehavior = 88 NativeBehavior nativeMethodBehavior =
84 nativeData.nativeMethodBehavior[element]; 89 nativeData.nativeMethodBehavior[element];
85 if (nativeMethodBehavior != null) { 90 if (nativeMethodBehavior != null) {
86 NativeBehaviorSerialization.serializeNativeBehavior(nativeMethodBehavior, 91 NativeBehaviorSerialization.serializeNativeBehavior(nativeMethodBehavior,
87 getEncoder().createObject(NATIVE_METHOD_BEHAVIOR)); 92 getEncoder().createObject(NATIVE_METHOD_BEHAVIOR));
88 } 93 }
89 NativeBehavior nativeFieldLoadBehavior = 94 NativeBehavior nativeFieldLoadBehavior =
90 nativeData.nativeFieldLoadBehavior[element]; 95 nativeData.nativeFieldLoadBehavior[element];
91 if (nativeFieldLoadBehavior != null) { 96 if (nativeFieldLoadBehavior != null) {
(...skipping 10 matching lines...) Expand all
102 } 107 }
103 } 108 }
104 109
105 @override 110 @override
106 void onData(NativeBehavior behavior, ObjectEncoder encoder) { 111 void onData(NativeBehavior behavior, ObjectEncoder encoder) {
107 NativeBehaviorSerialization.serializeNativeBehavior(behavior, encoder); 112 NativeBehaviorSerialization.serializeNativeBehavior(behavior, encoder);
108 } 113 }
109 } 114 }
110 115
111 class JavaScriptBackendDeserializer implements DeserializerPlugin { 116 class JavaScriptBackendDeserializer implements DeserializerPlugin {
117 final NativeClassDataImpl nativeClassData;
112 final NativeDataImpl nativeData; 118 final NativeDataImpl nativeData;
113 119
114 JavaScriptBackendDeserializer(this.nativeData); 120 JavaScriptBackendDeserializer(this.nativeClassData, this.nativeData);
115 121
116 @override 122 @override
117 void onElement(Element element, ObjectDecoder getDecoder(String tag)) { 123 void onElement(Element element, ObjectDecoder getDecoder(String tag)) {
118 ObjectDecoder decoder = getDecoder(_BACKEND_DATA_TAG); 124 ObjectDecoder decoder = getDecoder(_BACKEND_DATA_TAG);
119 if (decoder != null) { 125 if (decoder != null) {
120 if (element is LibraryElement) { 126 if (element is LibraryElement) {
121 String jsInteropLibraryName = 127 String jsInteropLibraryName =
122 decoder.getString(JS_INTEROP_LIBRARY_NAME, isOptional: true); 128 decoder.getString(JS_INTEROP_LIBRARY_NAME, isOptional: true);
123 if (jsInteropLibraryName != null) { 129 if (jsInteropLibraryName != null) {
124 nativeData.jsInteropLibraryNames[element] = jsInteropLibraryName; 130 nativeData.jsInteropLibraryNames[element] = jsInteropLibraryName;
125 } 131 }
126 } else if (element is ClassElement) { 132 } else if (element is ClassElement) {
127 String jsInteropClassName = 133 String jsInteropClassName =
128 decoder.getString(JS_INTEROP_CLASS_NAME, isOptional: true); 134 decoder.getString(JS_INTEROP_CLASS_NAME, isOptional: true);
129 if (jsInteropClassName != null) { 135 if (jsInteropClassName != null) {
130 nativeData.jsInteropClassNames[element] = jsInteropClassName; 136 nativeData.jsInteropClassNames[element] = jsInteropClassName;
131 } 137 }
132 String nativeClassTagInfo = 138 String nativeClassTagInfo =
133 decoder.getString(NATIVE_CLASS_TAG_INFO, isOptional: true); 139 decoder.getString(NATIVE_CLASS_TAG_INFO, isOptional: true);
134 if (nativeClassTagInfo != null) { 140 if (nativeClassTagInfo != null) {
135 nativeData.nativeClassTagInfo[element] = nativeClassTagInfo; 141 nativeClassData.nativeClassTagInfo[element] =
142 new NativeClassTag(nativeClassTagInfo);
136 } 143 }
137 } else if (element is MemberElement) { 144 } else if (element is MemberElement) {
138 String jsInteropMemberName = 145 String jsInteropMemberName =
139 decoder.getString(JS_INTEROP_MEMBER_NAME, isOptional: true); 146 decoder.getString(JS_INTEROP_MEMBER_NAME, isOptional: true);
140 if (jsInteropMemberName != null) { 147 if (jsInteropMemberName != null) {
141 nativeData.jsInteropMemberNames[element] = jsInteropMemberName; 148 nativeData.jsInteropMemberNames[element] = jsInteropMemberName;
142 } 149 }
143 String nativeMemberName = 150 String nativeMemberName =
144 decoder.getString(NATIVE_MEMBER_NAME, isOptional: true); 151 decoder.getString(NATIVE_MEMBER_NAME, isOptional: true);
145 if (nativeMemberName != null) { 152 if (nativeMemberName != null) {
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 behavior.codeTemplate = js.js.parseForeignJS(behavior.codeTemplateText); 286 behavior.codeTemplate = js.js.parseForeignJS(behavior.codeTemplateText);
280 } 287 }
281 288
282 behavior.throwBehavior = 289 behavior.throwBehavior =
283 decoder.getEnum(THROW_BEHAVIOR, NativeThrowBehavior.values); 290 decoder.getEnum(THROW_BEHAVIOR, NativeThrowBehavior.values);
284 behavior.isAllocation = decoder.getBool(IS_ALLOCATION); 291 behavior.isAllocation = decoder.getBool(IS_ALLOCATION);
285 behavior.useGvn = decoder.getBool(USE_GVN); 292 behavior.useGvn = decoder.getBool(USE_GVN);
286 return behavior; 293 return behavior;
287 } 294 }
288 } 295 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_backend/backend.dart ('k') | pkg/compiler/lib/src/js_backend/native_data.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698