| Index: runtime/vm/dart_api_message.cc
|
| diff --git a/runtime/vm/dart_api_message.cc b/runtime/vm/dart_api_message.cc
|
| index 69fb8919b44a160b31f143fac915f42834c0f913..d9debad474484c9590dddc4194942e3549df0b66 100644
|
| --- a/runtime/vm/dart_api_message.cc
|
| +++ b/runtime/vm/dart_api_message.cc
|
| @@ -12,14 +12,16 @@ namespace dart {
|
|
|
| static const int kNumInitialReferences = 4;
|
|
|
| -ApiMessageReader::ApiMessageReader(const uint8_t* buffer,
|
| - intptr_t length,
|
| - ReAlloc alloc)
|
| +ApiMessageReader::ApiMessageReader(const uint8_t* buffer, intptr_t length)
|
| : BaseReader(buffer, length),
|
| - alloc_(alloc),
|
| + zone_(NULL),
|
| backward_references_(kNumInitialReferences),
|
| vm_isolate_references_(kNumInitialReferences),
|
| vm_symbol_references_(NULL) {
|
| + // We need to have an enclosing ApiNativeScope.
|
| + ASSERT(ApiNativeScope::Current() != NULL);
|
| + zone_ = ApiNativeScope::Current()->zone();
|
| + ASSERT(zone_ != NULL);
|
| Init();
|
| }
|
|
|
| @@ -54,7 +56,7 @@ intptr_t ApiMessageReader::LookupInternalClass(intptr_t class_header) {
|
|
|
| Dart_CObject* ApiMessageReader::AllocateDartCObject(Dart_CObject_Type type) {
|
| Dart_CObject* value =
|
| - reinterpret_cast<Dart_CObject*>(alloc_(NULL, 0, sizeof(Dart_CObject)));
|
| + reinterpret_cast<Dart_CObject*>(allocator(sizeof(Dart_CObject)));
|
| ASSERT(value != NULL);
|
| value->type = type;
|
| return value;
|
| @@ -121,7 +123,7 @@ Dart_CObject* ApiMessageReader::AllocateDartCObjectString(intptr_t length) {
|
| // up to this area.
|
| Dart_CObject* value =
|
| reinterpret_cast<Dart_CObject*>(
|
| - alloc_(NULL, 0, sizeof(Dart_CObject) + length + 1));
|
| + allocator(sizeof(Dart_CObject) + length + 1));
|
| ASSERT(value != NULL);
|
| value->value.as_string = reinterpret_cast<char*>(value) + sizeof(*value);
|
| value->type = Dart_CObject_kString;
|
| @@ -162,7 +164,7 @@ Dart_CObject* ApiMessageReader::AllocateDartCObjectTypedData(
|
| intptr_t length_in_bytes = GetTypedDataSizeInBytes(type) * length;
|
| Dart_CObject* value =
|
| reinterpret_cast<Dart_CObject*>(
|
| - alloc_(NULL, 0, sizeof(Dart_CObject) + length_in_bytes));
|
| + allocator(sizeof(Dart_CObject) + length_in_bytes));
|
| ASSERT(value != NULL);
|
| value->type = Dart_CObject_kTypedData;
|
| value->value.as_typed_data.type = type;
|
| @@ -183,7 +185,7 @@ Dart_CObject* ApiMessageReader::AllocateDartCObjectArray(intptr_t length) {
|
| // content is set up to this area.
|
| Dart_CObject* value =
|
| reinterpret_cast<Dart_CObject*>(
|
| - alloc_(NULL, 0, sizeof(Dart_CObject) + length * sizeof(value)));
|
| + allocator(sizeof(Dart_CObject) + length * sizeof(value)));
|
| ASSERT(value != NULL);
|
| value->type = Dart_CObject_kArray;
|
| value->value.as_array.length = length;
|
| @@ -239,7 +241,7 @@ Dart_CObject_Internal* ApiMessageReader::AllocateDartCObjectInternal(
|
| Dart_CObject_Internal::Type type) {
|
| Dart_CObject_Internal* value =
|
| reinterpret_cast<Dart_CObject_Internal*>(
|
| - alloc_(NULL, 0, sizeof(Dart_CObject_Internal)));
|
| + allocator(sizeof(Dart_CObject_Internal)));
|
| ASSERT(value != NULL);
|
| value->type = static_cast<Dart_CObject_Type>(type);
|
| return value;
|
| @@ -255,7 +257,7 @@ ApiMessageReader::BackRefNode* ApiMessageReader::AllocateBackRefNode(
|
| Dart_CObject* reference,
|
| DeserializeState state) {
|
| BackRefNode* value =
|
| - reinterpret_cast<BackRefNode*>(alloc_(NULL, 0, sizeof(BackRefNode)));
|
| + reinterpret_cast<BackRefNode*>(allocator(sizeof(BackRefNode)));
|
| value->set_reference(reference);
|
| value->set_state(state);
|
| return value;
|
| @@ -405,7 +407,7 @@ Dart_CObject* ApiMessageReader::ReadVMSymbol(intptr_t object_id) {
|
| intptr_t size =
|
| (sizeof(*vm_symbol_references_) * Symbols::kMaxPredefinedId);
|
| vm_symbol_references_ =
|
| - reinterpret_cast<Dart_CObject**>(alloc_(NULL, 0, size));
|
| + reinterpret_cast<Dart_CObject**>(allocator(size));
|
| memset(vm_symbol_references_, 0, size);
|
| }
|
|
|
| @@ -621,7 +623,7 @@ Dart_CObject* ApiMessageReader::ReadInternalVMObject(intptr_t class_id,
|
| intptr_t hash = ReadSmiValue();
|
| USE(hash);
|
| uint8_t *latin1 =
|
| - reinterpret_cast<uint8_t*>(::malloc(len * sizeof(uint8_t)));
|
| + reinterpret_cast<uint8_t*>(allocator(len * sizeof(uint8_t)));
|
| intptr_t utf8_len = 0;
|
| for (intptr_t i = 0; i < len; i++) {
|
| latin1[i] = Read<uint8_t>();
|
| @@ -635,15 +637,14 @@ Dart_CObject* ApiMessageReader::ReadInternalVMObject(intptr_t class_id,
|
| }
|
| *p = '\0';
|
| ASSERT(p == (object->value.as_string + utf8_len));
|
| - ::free(latin1);
|
| return object;
|
| }
|
| case kTwoByteStringCid: {
|
| intptr_t len = ReadSmiValue();
|
| intptr_t hash = ReadSmiValue();
|
| USE(hash);
|
| - uint16_t *utf16 =
|
| - reinterpret_cast<uint16_t*>(::malloc(len * sizeof(uint16_t)));
|
| + uint16_t *utf16 = reinterpret_cast<uint16_t*>(
|
| + allocator(len * sizeof(uint16_t)));
|
| intptr_t utf8_len = 0;
|
| // Read all the UTF-16 code units.
|
| for (intptr_t i = 0; i < len; i++) {
|
| @@ -670,7 +671,6 @@ Dart_CObject* ApiMessageReader::ReadInternalVMObject(intptr_t class_id,
|
| }
|
| *p = '\0';
|
| ASSERT(p == (object->value.as_string + utf8_len));
|
| - ::free(utf16);
|
| return object;
|
| }
|
| case kSendPortCid: {
|
|
|