Index: runtime/vm/dart_api_impl.cc |
=================================================================== |
--- runtime/vm/dart_api_impl.cc (revision 10253) |
+++ runtime/vm/dart_api_impl.cc (working copy) |
@@ -176,7 +176,7 @@ |
const Error& err = Error::Handle(isolate->object_store()->sticky_error()); |
const char* errmsg = err.ToErrorCString(); |
intptr_t errlen = strlen(errmsg) + 1; |
- char* msg = reinterpret_cast<char*>(Api::Allocate(isolate, errlen)); |
+ char* msg = Api::TopScope(isolate)->zone()->Alloc<char>(errlen); |
OS::SNPrint(msg, errlen, "%s", errmsg); |
return msg; |
} |
@@ -189,12 +189,7 @@ |
Dart_Handle Api::NewHandle(Isolate* isolate, RawObject* raw) { |
- ASSERT(isolate != NULL); |
- ApiState* state = isolate->api_state(); |
- ASSERT(state != NULL); |
- ApiLocalScope* scope = state->top_scope(); |
- ASSERT(scope != NULL); |
- LocalHandles* local_handles = scope->local_handles(); |
+ LocalHandles* local_handles = Api::TopScope(isolate)->local_handles(); |
ASSERT(local_handles != NULL); |
LocalHandle* ref = local_handles->AllocateHandle(); |
ref->set_raw(raw); |
@@ -284,7 +279,7 @@ |
intptr_t len = OS::VSNPrint(NULL, 0, format, args); |
va_end(args); |
- char* buffer = reinterpret_cast<char*>(zone.Allocate(len + 1)); |
+ char* buffer = zone.Alloc<char>(len + 1); |
va_list args2; |
va_start(args2, format); |
OS::VSNPrint(buffer, (len + 1), format, args2); |
@@ -322,29 +317,16 @@ |
} |
-uword Api::Allocate(Isolate* isolate, intptr_t size) { |
+ApiLocalScope* Api::TopScope(Isolate* isolate) { |
ASSERT(isolate != NULL); |
ApiState* state = isolate->api_state(); |
ASSERT(state != NULL); |
ApiLocalScope* scope = state->top_scope(); |
ASSERT(scope != NULL); |
- return scope->zone()->Allocate(size); |
+ return scope; |
} |
-uword Api::Reallocate(Isolate* isolate, |
- uword ptr, |
- intptr_t old_size, |
- intptr_t new_size) { |
- ASSERT(isolate != NULL); |
- ApiState* state = isolate->api_state(); |
- ASSERT(state != NULL); |
- ApiLocalScope* scope = state->top_scope(); |
- ASSERT(scope != NULL); |
- return scope->zone()->Reallocate(ptr, old_size, new_size); |
-} |
- |
- |
void Api::InitOnce() { |
ASSERT(api_native_key_ == Thread::kUnsetThreadLocalKey); |
api_native_key_ = Thread::CreateThreadLocal(); |
@@ -388,7 +370,7 @@ |
const Error& error = Error::Cast(obj); |
const char* str = error.ToErrorCString(); |
intptr_t len = strlen(str) + 1; |
- char* str_copy = reinterpret_cast<char*>(Api::Allocate(isolate, len)); |
+ char* str_copy = Api::TopScope(isolate)->zone()->Alloc<char>(len); |
strncpy(str_copy, str, len); |
// Strip a possible trailing '\n'. |
if ((len > 1) && (str_copy[len - 2] == '\n')) { |
@@ -450,7 +432,7 @@ |
intptr_t len = OS::VSNPrint(NULL, 0, format, args); |
va_end(args); |
- char* buffer = reinterpret_cast<char*>(zone.Allocate(len + 1)); |
+ char* buffer = zone.Alloc<char>(len + 1); |
va_list args2; |
va_start(args2, format); |
OS::VSNPrint(buffer, (len + 1), format, args2); |
@@ -472,7 +454,7 @@ |
intptr_t len = OS::VSNPrint(NULL, 0, format, args); |
va_end(args); |
- char* buffer = reinterpret_cast<char*>(zone.Allocate(len + 1)); |
+ char* buffer = zone.Alloc<char>(len + 1); |
va_list args2; |
va_start(args2, format); |
OS::VSNPrint(buffer, (len + 1), format, args2); |
@@ -891,11 +873,8 @@ |
static uint8_t* ApiReallocate(uint8_t* ptr, |
intptr_t old_size, |
intptr_t new_size) { |
- uword new_ptr = Api::Reallocate(Isolate::Current(), |
- reinterpret_cast<uword>(ptr), |
- old_size, |
- new_size); |
- return reinterpret_cast<uint8_t*>(new_ptr); |
+ return Api::TopScope(Isolate::Current())->zone()->Realloc<uint8_t>( |
+ ptr, old_size, new_size); |
} |
@@ -1195,7 +1174,7 @@ |
if (scope == NULL) return NULL; |
zone = scope->zone(); |
} |
- return reinterpret_cast<uint8_t*>(zone->Allocate(size)); |
+ return reinterpret_cast<uint8_t*>(zone->AllocUnsafe(size)); |
} |
@@ -1448,8 +1427,8 @@ |
} |
-static uword ApiAllocate(intptr_t size) { |
- return Api::Allocate(Isolate::Current(), size); |
+static uword BigintAllocate(intptr_t size) { |
+ return Api::TopScope(Isolate::Current())->zone()->AllocUnsafe(size); |
} |
@@ -1464,9 +1443,10 @@ |
if (int_obj.IsSmi() || int_obj.IsMint()) { |
const Bigint& bigint = Bigint::Handle(isolate, |
BigintOperations::NewFromInt64(int_obj.AsInt64Value())); |
- *value = BigintOperations::ToHexCString(bigint, ApiAllocate); |
+ *value = BigintOperations::ToHexCString(bigint, BigintAllocate); |
} else { |
- *value = BigintOperations::ToHexCString(Bigint::Cast(int_obj), ApiAllocate); |
+ *value = BigintOperations::ToHexCString(Bigint::Cast(int_obj), |
+ BigintAllocate); |
} |
return Api::Success(isolate); |
} |
@@ -1762,8 +1742,7 @@ |
RETURN_TYPE_ERROR(isolate, object, String); |
} |
intptr_t string_length = Utf8::Length(str_obj); |
- char* res = |
- reinterpret_cast<char*>(Api::Allocate(isolate, string_length + 1)); |
+ char* res = Api::TopScope(isolate)->zone()->Alloc<char>(string_length + 1); |
if (res == NULL) { |
return Api::NewError("Unable to allocate memory"); |
} |
@@ -1792,7 +1771,7 @@ |
} |
const char* cstring = str.ToCString(); |
*length = Utf8::Length(str); |
- uint8_t* result = reinterpret_cast<uint8_t*>(Api::Allocate(isolate, *length)); |
+ uint8_t* result = Api::TopScope(isolate)->zone()->Alloc<uint8_t>(*length); |
if (result == NULL) { |
return Api::NewError("Unable to allocate memory"); |
} |
@@ -4185,7 +4164,8 @@ |
pprof_symbol_generator->WriteToMemory(debug_region); |
*buffer_size = debug_region->size(); |
if (*buffer_size != 0) { |
- *buffer = reinterpret_cast<void*>(Api::Allocate(isolate, *buffer_size)); |
+ ApiZone* zone = Api::TopScope(isolate)->zone(); |
+ *buffer = reinterpret_cast<void*>(zone->AllocUnsafe(*buffer_size)); |
memmove(*buffer, debug_region->data(), *buffer_size); |
} else { |
*buffer = NULL; |