Chromium Code Reviews| Index: runtime/vm/dart_api_message.cc |
| diff --git a/runtime/vm/dart_api_message.cc b/runtime/vm/dart_api_message.cc |
| index cef65c67e1b7dcba785bc5d613ed87adaa6799f4..e125b0565a204f4037077e41b3360b64f0c71e02 100644 |
| --- a/runtime/vm/dart_api_message.cc |
| +++ b/runtime/vm/dart_api_message.cc |
| @@ -100,6 +100,25 @@ Dart_CObject* ApiMessageReader::AllocateDartCObjectString(intptr_t length) { |
| } |
| +Dart_CObject* ApiMessageReader::AllocateDartCObjectByteArray(intptr_t length) { |
| + // Allocate a Dart_CObject structure followed by an array of bytes |
| + // for the byte array content. The pointer to the byte array content |
| + // is set up to this area. |
| + Dart_CObject* value = |
| + reinterpret_cast<Dart_CObject*>( |
| + alloc_(NULL, 0, sizeof(Dart_CObject) + length + 1)); |
|
siva
2012/02/09 01:58:57
(sizeof(Dart_Cobject) + length + 1)
what is the +
Søren Gjesse
2012/02/09 09:34:16
Removed the + 1 (copy/paset from string allocation
|
| + value->type = Dart_CObject::kByteArray; |
| + value->value.as_array.length = length; |
| + if (length > 0) { |
| + value->value.as_byte_array.values = |
| + reinterpret_cast<uint8_t*>(value) + sizeof(*value); |
| + } else { |
| + value->value.as_byte_array.values = NULL; |
| + } |
| + return value; |
| +} |
| + |
| + |
| Dart_CObject* ApiMessageReader::AllocateDartCObjectArray(intptr_t length) { |
| // Allocate a Dart_CObject structure followed by an array of |
| // pointers to Dart_CObject structures. The pointer to the array |
| @@ -197,6 +216,20 @@ Dart_CObject* ApiMessageReader::ReadInlinedObject(intptr_t object_id) { |
| // Four byte strings not supported. |
| return NULL; |
| break; |
| + case ObjectStore::kInternalByteArrayClass: { |
| + intptr_t len = ReadSmiValue(); |
| + Dart_CObject* object = AllocateDartCObjectByteArray(len); |
| + AddBackwardReference(object_id, object); |
| + if (len > 0) { |
| + uint8_t* p = object->value.as_byte_array.values; |
| + for (intptr_t i = 0; i < len; i++) { |
| + *p = Read<uint8_t>(); |
|
siva
2012/02/09 01:58:57
p[i] = Read<uint8_t>();
would avoid the need for
Søren Gjesse
2012/02/09 09:34:16
Done (for string as well).
|
| + p++; |
| + } |
| + } |
| + return object; |
| + break; |
| + } |
| default: |
| // Everything else not supported. |
| return NULL; |
| @@ -215,7 +248,8 @@ Dart_CObject* ApiMessageReader::ReadIndexedObject(intptr_t object_id) { |
| object_id == ObjectStore::kDoubleInterface || |
| object_id == ObjectStore::kIntInterface || |
| object_id == ObjectStore::kBoolInterface || |
| - object_id == ObjectStore::kStringInterface) { |
| + object_id == ObjectStore::kStringInterface || |
| + object_id == ObjectStore::kByteArrayInterface) { |
| // Always return dynamic type (this is only a marker). |
| return &dynamic_type_marker; |
| } else { |