OLD | NEW |
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 21 matching lines...) Expand all Loading... |
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(NativeData nativeData) |
38 : serializer = new JavaScriptBackendSerializer(nativeData), | 38 : serializer = new JavaScriptBackendSerializer(nativeData), |
39 deserializer = new JavaScriptBackendDeserializer(nativeData); | 39 deserializer = new JavaScriptBackendDeserializer(nativeData); |
40 } | 40 } |
41 | 41 |
42 const Key JS_INTEROP_NAME = const Key('jsInteropName'); | 42 const Key JS_INTEROP_LIBRARY_NAME = const Key('jsInteropLibraryName'); |
| 43 const Key JS_INTEROP_CLASS_NAME = const Key('jsInteropClassName'); |
| 44 const Key JS_INTEROP_MEMBER_NAME = const Key('jsInteropMemberName'); |
43 const Key NATIVE_MEMBER_NAME = const Key('nativeMemberName'); | 45 const Key NATIVE_MEMBER_NAME = const Key('nativeMemberName'); |
44 const Key NATIVE_CLASS_TAG_INFO = const Key('nativeClassTagInfo'); | 46 const Key NATIVE_CLASS_TAG_INFO = const Key('nativeClassTagInfo'); |
45 const Key NATIVE_METHOD_BEHAVIOR = const Key('nativeMethodBehavior'); | 47 const Key NATIVE_METHOD_BEHAVIOR = const Key('nativeMethodBehavior'); |
46 const Key NATIVE_FIELD_LOAD_BEHAVIOR = const Key('nativeFieldLoadBehavior'); | 48 const Key NATIVE_FIELD_LOAD_BEHAVIOR = const Key('nativeFieldLoadBehavior'); |
47 const Key NATIVE_FIELD_STORE_BEHAVIOR = const Key('nativeFieldStoreBehavior'); | 49 const Key NATIVE_FIELD_STORE_BEHAVIOR = const Key('nativeFieldStoreBehavior'); |
48 | 50 |
49 class JavaScriptBackendSerializer implements SerializerPlugin { | 51 class JavaScriptBackendSerializer implements SerializerPlugin { |
50 final NativeDataImpl nativeData; | 52 final NativeDataImpl nativeData; |
51 | 53 |
52 JavaScriptBackendSerializer(this.nativeData); | 54 JavaScriptBackendSerializer(this.nativeData); |
53 | 55 |
54 @override | 56 @override |
55 void onElement(Element element, ObjectEncoder createEncoder(String tag)) { | 57 void onElement(Element element, ObjectEncoder createEncoder(String tag)) { |
56 ObjectEncoder encoder; | 58 ObjectEncoder encoder; |
57 ObjectEncoder getEncoder() { | 59 ObjectEncoder getEncoder() { |
58 return encoder ??= createEncoder(_BACKEND_DATA_TAG); | 60 return encoder ??= createEncoder(_BACKEND_DATA_TAG); |
59 } | 61 } |
60 | 62 |
61 String jsInteropName = nativeData.jsInteropNames[element]; | 63 String jsInteropLibraryName = nativeData.jsInteropLibraryNames[element]; |
62 if (jsInteropName != null) { | 64 if (jsInteropLibraryName != null) { |
63 getEncoder().setString(JS_INTEROP_NAME, jsInteropName); | 65 getEncoder().setString(JS_INTEROP_LIBRARY_NAME, jsInteropLibraryName); |
| 66 } |
| 67 String jsInteropClassName = nativeData.jsInteropClassNames[element]; |
| 68 if (jsInteropClassName != null) { |
| 69 getEncoder().setString(JS_INTEROP_CLASS_NAME, jsInteropClassName); |
| 70 } |
| 71 String jsInteropMemberName = nativeData.jsInteropMemberNames[element]; |
| 72 if (jsInteropMemberName != null) { |
| 73 getEncoder().setString(JS_INTEROP_MEMBER_NAME, jsInteropMemberName); |
64 } | 74 } |
65 String nativeMemberName = nativeData.nativeMemberName[element]; | 75 String nativeMemberName = nativeData.nativeMemberName[element]; |
66 if (nativeMemberName != null) { | 76 if (nativeMemberName != null) { |
67 getEncoder().setString(NATIVE_MEMBER_NAME, nativeMemberName); | 77 getEncoder().setString(NATIVE_MEMBER_NAME, nativeMemberName); |
68 } | 78 } |
69 String nativeClassTagInfo = nativeData.nativeClassTagInfo[element]; | 79 String nativeClassTagInfo = nativeData.nativeClassTagInfo[element]; |
70 if (nativeClassTagInfo != null) { | 80 if (nativeClassTagInfo != null) { |
71 getEncoder().setString(NATIVE_CLASS_TAG_INFO, nativeClassTagInfo); | 81 getEncoder().setString(NATIVE_CLASS_TAG_INFO, nativeClassTagInfo); |
72 } | 82 } |
73 NativeBehavior nativeMethodBehavior = | 83 NativeBehavior nativeMethodBehavior = |
(...skipping 26 matching lines...) Expand all Loading... |
100 | 110 |
101 class JavaScriptBackendDeserializer implements DeserializerPlugin { | 111 class JavaScriptBackendDeserializer implements DeserializerPlugin { |
102 final NativeDataImpl nativeData; | 112 final NativeDataImpl nativeData; |
103 | 113 |
104 JavaScriptBackendDeserializer(this.nativeData); | 114 JavaScriptBackendDeserializer(this.nativeData); |
105 | 115 |
106 @override | 116 @override |
107 void onElement(Element element, ObjectDecoder getDecoder(String tag)) { | 117 void onElement(Element element, ObjectDecoder getDecoder(String tag)) { |
108 ObjectDecoder decoder = getDecoder(_BACKEND_DATA_TAG); | 118 ObjectDecoder decoder = getDecoder(_BACKEND_DATA_TAG); |
109 if (decoder != null) { | 119 if (decoder != null) { |
110 String jsInteropName = | 120 String jsInteropLibraryName = |
111 decoder.getString(JS_INTEROP_NAME, isOptional: true); | 121 decoder.getString(JS_INTEROP_LIBRARY_NAME, isOptional: true); |
112 if (jsInteropName != null) { | 122 if (jsInteropLibraryName != null) { |
113 nativeData.jsInteropNames[element] = jsInteropName; | 123 nativeData.jsInteropLibraryNames[element] = jsInteropLibraryName; |
| 124 } |
| 125 String jsInteropClassName = |
| 126 decoder.getString(JS_INTEROP_CLASS_NAME, isOptional: true); |
| 127 if (jsInteropClassName != null) { |
| 128 nativeData.jsInteropClassNames[element] = jsInteropClassName; |
| 129 } |
| 130 String jsInteropMemberName = |
| 131 decoder.getString(JS_INTEROP_MEMBER_NAME, isOptional: true); |
| 132 if (jsInteropMemberName != null) { |
| 133 nativeData.jsInteropMemberNames[element] = jsInteropMemberName; |
114 } | 134 } |
115 String nativeMemberName = | 135 String nativeMemberName = |
116 decoder.getString(NATIVE_MEMBER_NAME, isOptional: true); | 136 decoder.getString(NATIVE_MEMBER_NAME, isOptional: true); |
117 if (nativeMemberName != null) { | 137 if (nativeMemberName != null) { |
118 nativeData.nativeMemberName[element] = nativeMemberName; | 138 nativeData.nativeMemberName[element] = nativeMemberName; |
119 } | 139 } |
120 String nativeClassTagInfo = | 140 String nativeClassTagInfo = |
121 decoder.getString(NATIVE_CLASS_TAG_INFO, isOptional: true); | 141 decoder.getString(NATIVE_CLASS_TAG_INFO, isOptional: true); |
122 if (nativeClassTagInfo != null) { | 142 if (nativeClassTagInfo != null) { |
123 nativeData.nativeClassTagInfo[element] = nativeClassTagInfo; | 143 nativeData.nativeClassTagInfo[element] = nativeClassTagInfo; |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
250 behavior.codeTemplate = js.js.parseForeignJS(behavior.codeTemplateText); | 270 behavior.codeTemplate = js.js.parseForeignJS(behavior.codeTemplateText); |
251 } | 271 } |
252 | 272 |
253 behavior.throwBehavior = | 273 behavior.throwBehavior = |
254 decoder.getEnum(THROW_BEHAVIOR, NativeThrowBehavior.values); | 274 decoder.getEnum(THROW_BEHAVIOR, NativeThrowBehavior.values); |
255 behavior.isAllocation = decoder.getBool(IS_ALLOCATION); | 275 behavior.isAllocation = decoder.getBool(IS_ALLOCATION); |
256 behavior.useGvn = decoder.getBool(USE_GVN); | 276 behavior.useGvn = decoder.getBool(USE_GVN); |
257 return behavior; | 277 return behavior; |
258 } | 278 } |
259 } | 279 } |
OLD | NEW |