OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 part of _isolate_helper; | 5 part of _isolate_helper; |
6 | 6 |
7 /// Serialize [message]. | 7 /// Serialize [message]. |
8 _serializeMessage(message) { | 8 _serializeMessage(message) { |
9 return new _Serializer().serialize(message); | 9 return new _Serializer().serialize(message); |
10 } | 10 } |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 | 158 |
159 serializeClosure(Closure x) { | 159 serializeClosure(Closure x) { |
160 final name = IsolateNatives._getJSFunctionName(x); | 160 final name = IsolateNatives._getJSFunctionName(x); |
161 if (name == null) { | 161 if (name == null) { |
162 unsupported(x, "Closures can't be transmitted:"); | 162 unsupported(x, "Closures can't be transmitted:"); |
163 } | 163 } |
164 return ['function', name]; | 164 return ['function', name]; |
165 } | 165 } |
166 | 166 |
167 serializeDartObject(x) { | 167 serializeDartObject(x) { |
| 168 if (!isDartObject(x)) unsupported(x); |
168 var classExtractor = JS_EMBEDDED_GLOBAL('', CLASS_ID_EXTRACTOR); | 169 var classExtractor = JS_EMBEDDED_GLOBAL('', CLASS_ID_EXTRACTOR); |
169 var fieldsExtractor = JS_EMBEDDED_GLOBAL('', CLASS_FIELDS_EXTRACTOR); | 170 var fieldsExtractor = JS_EMBEDDED_GLOBAL('', CLASS_FIELDS_EXTRACTOR); |
170 String classId = JS('String', '#(#)', classExtractor, x); | 171 String classId = JS('String', '#(#)', classExtractor, x); |
171 List fields = JS('JSArray', '#(#)', fieldsExtractor, x); | 172 List fields = JS('JSArray', '#(#)', fieldsExtractor, x); |
172 return ['dart', classId, serializeArrayInPlace(fields)]; | 173 return ['dart', classId, serializeArrayInPlace(fields)]; |
173 } | 174 } |
174 } | 175 } |
175 | 176 |
176 class _Deserializer { | 177 class _Deserializer { |
177 /// When `true`, encodes sendports specially so that they can be adjusted on | 178 /// When `true`, encodes sendports specially so that they can be adjusted on |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
352 var instanceFromClassId = JS_EMBEDDED_GLOBAL('', INSTANCE_FROM_CLASS_ID); | 353 var instanceFromClassId = JS_EMBEDDED_GLOBAL('', INSTANCE_FROM_CLASS_ID); |
353 var initializeObject = JS_EMBEDDED_GLOBAL('', INITIALIZE_EMPTY_INSTANCE); | 354 var initializeObject = JS_EMBEDDED_GLOBAL('', INITIALIZE_EMPTY_INSTANCE); |
354 | 355 |
355 var emptyInstance = JS('', '#(#)', instanceFromClassId, classId); | 356 var emptyInstance = JS('', '#(#)', instanceFromClassId, classId); |
356 deserializedObjects.add(emptyInstance); | 357 deserializedObjects.add(emptyInstance); |
357 deserializeArrayInPlace(fields); | 358 deserializeArrayInPlace(fields); |
358 return JS('', '#(#, #, #)', | 359 return JS('', '#(#, #, #)', |
359 initializeObject, classId, emptyInstance, fields); | 360 initializeObject, classId, emptyInstance, fields); |
360 } | 361 } |
361 } | 362 } |
OLD | NEW |