OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 #include "vm/dart_api_message.h" | 5 #include "vm/dart_api_message.h" |
6 #include "vm/object.h" | 6 #include "vm/object.h" |
7 #include "vm/snapshot_ids.h" | 7 #include "vm/snapshot_ids.h" |
8 #include "vm/symbols.h" | 8 #include "vm/symbols.h" |
9 #include "vm/unicode.h" | 9 #include "vm/unicode.h" |
10 | 10 |
(...skipping 663 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
674 } | 674 } |
675 case kSendPortCid: { | 675 case kSendPortCid: { |
676 int64_t value64 = Read<int64_t>(); | 676 int64_t value64 = Read<int64_t>(); |
677 int64_t originId = Read<uint64_t>(); | 677 int64_t originId = Read<uint64_t>(); |
678 Dart_CObject* object = AllocateDartCObject(Dart_CObject_kSendPort); | 678 Dart_CObject* object = AllocateDartCObject(Dart_CObject_kSendPort); |
679 object->value.as_send_port.id = value64; | 679 object->value.as_send_port.id = value64; |
680 object->value.as_send_port.origin_id = originId; | 680 object->value.as_send_port.origin_id = originId; |
681 AddBackRef(object_id, object, kIsDeserialized); | 681 AddBackRef(object_id, object, kIsDeserialized); |
682 return object; | 682 return object; |
683 } | 683 } |
| 684 case kCapabilityCid: { |
| 685 int64_t id = Read<int64_t>(); |
| 686 Dart_CObject* object = AllocateDartCObject(Dart_CObject_kCapability); |
| 687 object->value.as_capability.id = id; |
| 688 AddBackRef(object_id, object, kIsDeserialized); |
| 689 return object; |
| 690 } |
684 | 691 |
685 #define READ_TYPED_DATA_HEADER(type) \ | 692 #define READ_TYPED_DATA_HEADER(type) \ |
686 intptr_t len = ReadSmiValue(); \ | 693 intptr_t len = ReadSmiValue(); \ |
687 Dart_CObject* object = \ | 694 Dart_CObject* object = \ |
688 AllocateDartCObjectTypedData(Dart_TypedData_k##type, len); \ | 695 AllocateDartCObjectTypedData(Dart_TypedData_k##type, len); \ |
689 AddBackRef(object_id, object, kIsDeserialized); \ | 696 AddBackRef(object_id, object, kIsDeserialized); \ |
690 | 697 |
691 | 698 |
692 #define READ_TYPED_DATA(type, ctype) \ | 699 #define READ_TYPED_DATA(type, ctype) \ |
693 { \ | 700 { \ |
(...skipping 567 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1261 uint8_t* data = object->value.as_external_typed_data.data; | 1268 uint8_t* data = object->value.as_external_typed_data.data; |
1262 void* peer = object->value.as_external_typed_data.peer; | 1269 void* peer = object->value.as_external_typed_data.peer; |
1263 Dart_WeakPersistentHandleFinalizer callback = | 1270 Dart_WeakPersistentHandleFinalizer callback = |
1264 object->value.as_external_typed_data.callback; | 1271 object->value.as_external_typed_data.callback; |
1265 WriteSmi(length); | 1272 WriteSmi(length); |
1266 WriteRawPointerValue(reinterpret_cast<intptr_t>(data)); | 1273 WriteRawPointerValue(reinterpret_cast<intptr_t>(data)); |
1267 WriteRawPointerValue(reinterpret_cast<intptr_t>(peer)); | 1274 WriteRawPointerValue(reinterpret_cast<intptr_t>(peer)); |
1268 WriteRawPointerValue(reinterpret_cast<intptr_t>(callback)); | 1275 WriteRawPointerValue(reinterpret_cast<intptr_t>(callback)); |
1269 break; | 1276 break; |
1270 } | 1277 } |
| 1278 case Dart_CObject_kCapability: { |
| 1279 WriteInlinedHeader(object); |
| 1280 WriteIndexedObject(kCapabilityCid); |
| 1281 WriteTags(0); |
| 1282 Write<uint64_t>(object->value.as_capability.id); |
| 1283 break; |
| 1284 } |
1271 default: | 1285 default: |
1272 UNREACHABLE(); | 1286 UNREACHABLE(); |
1273 } | 1287 } |
1274 | 1288 |
1275 return true; | 1289 return true; |
1276 } | 1290 } |
1277 | 1291 |
1278 | 1292 |
1279 bool ApiMessageWriter::WriteCMessage(Dart_CObject* object) { | 1293 bool ApiMessageWriter::WriteCMessage(Dart_CObject* object) { |
1280 bool success = WriteCObject(object); | 1294 bool success = WriteCObject(object); |
1281 if (!success) { | 1295 if (!success) { |
1282 UnmarkAllCObjects(object); | 1296 UnmarkAllCObjects(object); |
1283 return false; | 1297 return false; |
1284 } | 1298 } |
1285 // Write out all objects that were added to the forward list and have | 1299 // Write out all objects that were added to the forward list and have |
1286 // not been serialized yet. These would typically be fields of arrays. | 1300 // not been serialized yet. These would typically be fields of arrays. |
1287 // NOTE: The forward list might grow as we process the list. | 1301 // NOTE: The forward list might grow as we process the list. |
1288 for (intptr_t i = 0; i < forward_id_; i++) { | 1302 for (intptr_t i = 0; i < forward_id_; i++) { |
1289 success = WriteForwardedCObject(forward_list_[i]); | 1303 success = WriteForwardedCObject(forward_list_[i]); |
1290 if (!success) { | 1304 if (!success) { |
1291 UnmarkAllCObjects(object); | 1305 UnmarkAllCObjects(object); |
1292 return false; | 1306 return false; |
1293 } | 1307 } |
1294 } | 1308 } |
1295 UnmarkAllCObjects(object); | 1309 UnmarkAllCObjects(object); |
1296 return true; | 1310 return true; |
1297 } | 1311 } |
1298 | 1312 |
1299 } // namespace dart | 1313 } // namespace dart |
OLD | NEW |