Index: runtime/vm/dart_api_impl.cc |
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc |
index 4f910ccf0746e61db070e5746ccd2e12a1b53495..1e53e6ace4b5fc6ceb0eba32bf68089f4d552bce 100644 |
--- a/runtime/vm/dart_api_impl.cc |
+++ b/runtime/vm/dart_api_impl.cc |
@@ -174,16 +174,14 @@ static bool GetNativeStringArgument(NativeArguments* arguments, |
return true; |
} |
Thread* thread = arguments->thread(); |
- Isolate* isolate = thread->isolate(); |
- ASSERT(isolate == Isolate::Current()); |
+ ASSERT(thread == Thread::Current()); |
*peer = NULL; |
REUSABLE_OBJECT_HANDLESCOPE(thread); |
Object& obj = thread->ObjectHandle(); |
obj = arguments->NativeArgAt(arg_index); |
if (RawObject::IsStringClassId(obj.GetClassId())) { |
- ASSERT(isolate->api_state() && |
- isolate->api_state()->top_scope() != NULL); |
- *str = Api::NewHandle(isolate, obj.raw()); |
+ ASSERT(thread->api_top_scope() != NULL); |
+ *str = Api::NewHandle(thread, obj.raw()); |
return true; |
} |
if (obj.IsNull()) { |
@@ -301,8 +299,8 @@ static Dart_Handle GetNativeFieldsOfArgument(NativeArguments* arguments, |
} |
-Heap::Space SpaceForExternal(Isolate* isolate, intptr_t size) { |
- Heap* heap = isolate->heap(); |
+Heap::Space SpaceForExternal(Thread* thread, intptr_t size) { |
+ Heap* heap = thread->heap(); |
// If 'size' would be a significant fraction of new space, then use old. |
static const int kExtNewRatio = 16; |
if (size > (heap->CapacityInWords(Heap::kNew) * kWordSize) / kExtNewRatio) { |
@@ -347,8 +345,8 @@ static RawObject* Send1Arg(const Instance& receiver, |
} |
-Dart_Handle Api::InitNewHandle(Isolate* isolate, RawObject* raw) { |
- LocalHandles* local_handles = Api::TopScope(isolate)->local_handles(); |
+Dart_Handle Api::InitNewHandle(Thread* thread, RawObject* raw) { |
+ LocalHandles* local_handles = Api::TopScope(thread)->local_handles(); |
ASSERT(local_handles != NULL); |
LocalHandle* ref = local_handles->AllocateHandle(); |
ref->set_raw(raw); |
@@ -356,7 +354,7 @@ Dart_Handle Api::InitNewHandle(Isolate* isolate, RawObject* raw) { |
} |
-Dart_Handle Api::NewHandle(Isolate* isolate, RawObject* raw) { |
+Dart_Handle Api::NewHandle(Thread* thread, RawObject* raw) { |
if (raw == Object::null()) { |
return Null(); |
} |
@@ -366,19 +364,17 @@ Dart_Handle Api::NewHandle(Isolate* isolate, RawObject* raw) { |
if (raw == Bool::False().raw()) { |
return False(); |
} |
- return InitNewHandle(isolate, raw); |
+ return InitNewHandle(thread, raw); |
} |
RawObject* Api::UnwrapHandle(Dart_Handle object) { |
#if defined(DEBUG) |
- ASSERT(Thread::Current()->IsMutatorThread()); |
- Isolate* isolate = Isolate::Current(); |
- ASSERT(isolate != NULL); |
- ApiState* state = isolate->api_state(); |
- ASSERT(state != NULL); |
+ Thread* thread = Thread::Current(); |
+ ASSERT(thread->IsMutatorThread()); |
+ ASSERT(thread->isolate() != NULL); |
ASSERT(!FLAG_verify_handles || |
- state->IsValidLocalHandle(object) || |
+ thread->IsValidLocalHandle(object) || |
Dart::IsReadOnlyApiHandle(object)); |
ASSERT(FinalizablePersistentHandle::raw_offset() == 0 && |
PersistentHandle::raw_offset() == 0 && |
@@ -423,7 +419,8 @@ const Instance& Api::UnwrapInstanceHandle( |
} |
-Dart_Handle Api::CheckAndFinalizePendingClasses(Isolate* isolate) { |
+Dart_Handle Api::CheckAndFinalizePendingClasses(Thread* thread) { |
+ Isolate* isolate = thread->isolate(); |
if (!isolate->AllowClassFinalization()) { |
// Class finalization is blocked for the isolate. Do nothing. |
return Api::Success(); |
@@ -432,7 +429,7 @@ Dart_Handle Api::CheckAndFinalizePendingClasses(Isolate* isolate) { |
return Api::Success(); |
} |
ASSERT(isolate->object_store()->sticky_error() != Object::null()); |
- return Api::NewHandle(isolate, isolate->object_store()->sticky_error()); |
+ return Api::NewHandle(thread, isolate->object_store()->sticky_error()); |
} |
@@ -457,7 +454,7 @@ Dart_Handle Api::NewError(const char* format, ...) { |
va_end(args2); |
const String& message = String::Handle(Z, String::New(buffer)); |
- return Api::NewHandle(I, ApiError::New(message)); |
+ return Api::NewHandle(T, ApiError::New(message)); |
} |
@@ -478,11 +475,9 @@ Dart_Handle Api::AcquiredError(Isolate* isolate) { |
} |
-ApiLocalScope* Api::TopScope(Isolate* isolate) { |
- ASSERT(isolate != NULL); |
- ApiState* state = isolate->api_state(); |
- ASSERT(state != NULL); |
- ApiLocalScope* scope = state->top_scope(); |
+ApiLocalScope* Api::TopScope(Thread* thread) { |
+ ASSERT(thread != NULL); |
+ ApiLocalScope* scope = thread->api_top_scope(); |
ASSERT(scope != NULL); |
return scope; |
} |
@@ -749,7 +744,7 @@ DART_EXPORT const char* Dart_GetError(Dart_Handle handle) { |
const Error& error = Error::Cast(obj); |
const char* str = error.ToErrorCString(); |
intptr_t len = strlen(str) + 1; |
- char* str_copy = Api::TopScope(I)->zone()->Alloc<char>(len); |
+ char* str_copy = Api::TopScope(T)->zone()->Alloc<char>(len); |
strncpy(str_copy, str, len); |
// Strip a possible trailing '\n'. |
if ((len > 1) && (str_copy[len - 2] == '\n')) { |
@@ -774,7 +769,7 @@ DART_EXPORT Dart_Handle Dart_ErrorGetException(Dart_Handle handle) { |
const Object& obj = Object::Handle(Z, Api::UnwrapHandle(handle)); |
if (obj.IsUnhandledException()) { |
const UnhandledException& error = UnhandledException::Cast(obj); |
- return Api::NewHandle(I, error.exception()); |
+ return Api::NewHandle(T, error.exception()); |
} else if (obj.IsError()) { |
return Api::NewError("This error is not an unhandled exception error."); |
} else { |
@@ -788,7 +783,7 @@ DART_EXPORT Dart_Handle Dart_ErrorGetStacktrace(Dart_Handle handle) { |
const Object& obj = Object::Handle(Z, Api::UnwrapHandle(handle)); |
if (obj.IsUnhandledException()) { |
const UnhandledException& error = UnhandledException::Cast(obj); |
- return Api::NewHandle(I, error.stacktrace()); |
+ return Api::NewHandle(T, error.stacktrace()); |
} else if (obj.IsError()) { |
return Api::NewError("This error is not an unhandled exception error."); |
} else { |
@@ -804,7 +799,7 @@ DART_EXPORT Dart_Handle Dart_NewApiError(const char* error) { |
CHECK_CALLBACK_STATE(T); |
const String& message = String::Handle(Z, String::New(error)); |
- return Api::NewHandle(I, ApiError::New(message)); |
+ return Api::NewHandle(T, ApiError::New(message)); |
} |
@@ -823,13 +818,12 @@ DART_EXPORT Dart_Handle Dart_NewUnhandledExceptionError(Dart_Handle exception) { |
} |
} |
const Stacktrace& stacktrace = Stacktrace::Handle(Z); |
- return Api::NewHandle(I, UnhandledException::New(obj, stacktrace)); |
+ return Api::NewHandle(T, UnhandledException::New(obj, stacktrace)); |
} |
DART_EXPORT Dart_Handle Dart_PropagateError(Dart_Handle handle) { |
Thread* thread = Thread::Current(); |
- Isolate* isolate = thread->isolate(); |
{ |
const Object& obj = Object::Handle(thread->zone(), |
Api::UnwrapHandle(handle)); |
@@ -847,8 +841,6 @@ DART_EXPORT Dart_Handle Dart_PropagateError(Dart_Handle handle) { |
} |
// Unwind all the API scopes till the exit frame before propagating. |
- ApiState* state = isolate->api_state(); |
- ASSERT(state != NULL); |
const Error* error; |
{ |
// We need to preserve the error object across the destruction of zones |
@@ -857,7 +849,7 @@ DART_EXPORT Dart_Handle Dart_PropagateError(Dart_Handle handle) { |
// handle for it in the surviving zone. |
NoSafepointScope no_safepoint; |
RawError* raw_error = Api::UnwrapErrorHandle(thread->zone(), handle).raw(); |
- state->UnwindScopes(thread->top_exit_frame_info()); |
+ thread->UnwindScopes(thread->top_exit_frame_info()); |
// Note that thread's zone is different here than at the beginning of this |
// function. |
error = &Error::Handle(thread->zone(), raw_error); |
@@ -882,15 +874,15 @@ DART_EXPORT Dart_Handle Dart_ToString(Dart_Handle object) { |
DARTSCOPE(Thread::Current()); |
const Object& obj = Object::Handle(Z, Api::UnwrapHandle(object)); |
if (obj.IsString()) { |
- return Api::NewHandle(I, obj.raw()); |
+ return Api::NewHandle(T, obj.raw()); |
} else if (obj.IsInstance()) { |
CHECK_CALLBACK_STATE(T); |
const Instance& receiver = Instance::Cast(obj); |
- return Api::NewHandle(I, DartLibraryCalls::ToString(receiver)); |
+ return Api::NewHandle(T, DartLibraryCalls::ToString(receiver)); |
} else { |
CHECK_CALLBACK_STATE(T); |
// This is a VM internal object. Call the C++ method of printing. |
- return Api::NewHandle(I, String::New(obj.ToCString())); |
+ return Api::NewHandle(T, String::New(obj.ToCString())); |
} |
} |
@@ -956,29 +948,32 @@ DART_EXPORT uint64_t Dart_IdentityHash(Dart_Handle obj) { |
DART_EXPORT Dart_Handle Dart_HandleFromPersistent( |
Dart_PersistentHandle object) { |
- Isolate* isolate = Isolate::Current(); |
+ Thread* thread = Thread::Current(); |
+ Isolate* isolate = thread->isolate(); |
CHECK_ISOLATE(isolate); |
ApiState* state = isolate->api_state(); |
ASSERT(state != NULL); |
PersistentHandle* ref = PersistentHandle::Cast(object); |
- return Api::NewHandle(isolate, ref->raw()); |
+ return Api::NewHandle(thread, ref->raw()); |
} |
DART_EXPORT Dart_Handle Dart_HandleFromWeakPersistent( |
Dart_WeakPersistentHandle object) { |
- Isolate* isolate = Isolate::Current(); |
+ Thread* thread = Thread::Current(); |
+ Isolate* isolate = thread->isolate(); |
CHECK_ISOLATE(isolate); |
ApiState* state = isolate->api_state(); |
ASSERT(state != NULL); |
FinalizablePersistentHandle* weak_ref = |
FinalizablePersistentHandle::Cast(object); |
- return Api::NewHandle(isolate, weak_ref->raw()); |
+ return Api::NewHandle(thread, weak_ref->raw()); |
} |
DART_EXPORT Dart_PersistentHandle Dart_NewPersistentHandle(Dart_Handle object) { |
DARTSCOPE(Thread::Current()); |
+ Isolate* I = T->isolate(); |
ApiState* state = I->api_state(); |
ASSERT(state != NULL); |
const Object& old_ref = Object::Handle(Z, Api::UnwrapHandle(object)); |
@@ -991,6 +986,7 @@ DART_EXPORT Dart_PersistentHandle Dart_NewPersistentHandle(Dart_Handle object) { |
DART_EXPORT void Dart_SetPersistentHandle(Dart_PersistentHandle obj1, |
Dart_Handle obj2) { |
DARTSCOPE(Thread::Current()); |
+ Isolate* I = T->isolate(); |
ApiState* state = I->api_state(); |
ASSERT(state != NULL); |
ASSERT(state->IsValidPersistentHandle(obj1)); |
@@ -1288,7 +1284,8 @@ DART_EXPORT void* Dart_IsolateData(Dart_Isolate isolate) { |
DART_EXPORT Dart_Handle Dart_DebugName() { |
DARTSCOPE(Thread::Current()); |
- return Api::NewHandle(I, String::New(I->name())); |
+ Isolate* I = T->isolate(); |
+ return Api::NewHandle(T, String::New(I->name())); |
} |
@@ -1348,7 +1345,7 @@ DART_EXPORT Dart_Handle Dart_IsolateSetStrictCompilation(bool value) { |
static uint8_t* ApiReallocate(uint8_t* ptr, |
intptr_t old_size, |
intptr_t new_size) { |
- return Api::TopScope(Isolate::Current())->zone()->Realloc<uint8_t>( |
+ return Api::TopScope(Thread::Current())->zone()->Realloc<uint8_t>( |
ptr, old_size, new_size); |
} |
@@ -1360,6 +1357,7 @@ DART_EXPORT Dart_Handle Dart_CreateSnapshot( |
intptr_t* isolate_snapshot_size) { |
ASSERT(FLAG_load_deferred_eagerly); |
DARTSCOPE(Thread::Current()); |
+ Isolate* I = T->isolate(); |
if (vm_isolate_snapshot_buffer != NULL && |
vm_isolate_snapshot_size == NULL) { |
RETURN_NULL_ERROR(vm_isolate_snapshot_size); |
@@ -1371,7 +1369,7 @@ DART_EXPORT Dart_Handle Dart_CreateSnapshot( |
RETURN_NULL_ERROR(isolate_snapshot_size); |
} |
// Finalize all classes if needed. |
- Dart_Handle state = Api::CheckAndFinalizePendingClasses(I); |
+ Dart_Handle state = Api::CheckAndFinalizePendingClasses(T); |
if (::Dart_IsError(state)) { |
return state; |
} |
@@ -1400,6 +1398,7 @@ static Dart_Handle createLibrarySnapshot(Dart_Handle library, |
uint8_t** buffer, |
intptr_t* size) { |
DARTSCOPE(Thread::Current()); |
+ Isolate* I = T->isolate(); |
if (buffer == NULL) { |
RETURN_NULL_ERROR(buffer); |
} |
@@ -1407,7 +1406,7 @@ static Dart_Handle createLibrarySnapshot(Dart_Handle library, |
RETURN_NULL_ERROR(size); |
} |
// Finalize all classes if needed. |
- Dart_Handle state = Api::CheckAndFinalizePendingClasses(I); |
+ Dart_Handle state = Api::CheckAndFinalizePendingClasses(T); |
if (::Dart_IsError(state)) { |
return state; |
} |
@@ -1496,7 +1495,7 @@ static void RunLoopDone(uword param) { |
DART_EXPORT Dart_Handle Dart_RunLoop() { |
Thread* T = Thread::Current(); |
Isolate* I = T->isolate(); |
- CHECK_ISOLATE_SCOPE(I); |
+ CHECK_API_SCOPE(T); |
CHECK_CALLBACK_STATE(T); |
Monitor monitor; |
MonitorLocker ml(&monitor); |
@@ -1516,7 +1515,7 @@ DART_EXPORT Dart_Handle Dart_RunLoop() { |
Thread::EnterIsolate(I); |
} |
if (I->object_store()->sticky_error() != Object::null()) { |
- Dart_Handle error = Api::NewHandle(I, I->object_store()->sticky_error()); |
+ Dart_Handle error = Api::NewHandle(T, I->object_store()->sticky_error()); |
I->object_store()->clear_sticky_error(); |
return error; |
} |
@@ -1529,14 +1528,14 @@ DART_EXPORT Dart_Handle Dart_RunLoop() { |
DART_EXPORT Dart_Handle Dart_HandleMessage() { |
- Thread* thread = Thread::Current(); |
- Isolate* isolate = thread->isolate(); |
- CHECK_ISOLATE_SCOPE(isolate); |
- CHECK_CALLBACK_STATE(thread); |
- if (isolate->message_handler()->HandleNextMessage() != MessageHandler::kOK) { |
- Dart_Handle error = Api::NewHandle(isolate, |
- isolate->object_store()->sticky_error()); |
- isolate->object_store()->clear_sticky_error(); |
+ Thread* T = Thread::Current(); |
+ Isolate* I = T->isolate(); |
+ CHECK_API_SCOPE(T); |
+ CHECK_CALLBACK_STATE(T); |
+ if (I->message_handler()->HandleNextMessage() != MessageHandler::kOK) { |
+ Dart_Handle error = Api::NewHandle(T, |
+ I->object_store()->sticky_error()); |
+ I->object_store()->clear_sticky_error(); |
return error; |
} |
return Api::Success(); |
@@ -1544,15 +1543,15 @@ DART_EXPORT Dart_Handle Dart_HandleMessage() { |
DART_EXPORT bool Dart_HandleServiceMessages() { |
- Thread* thread = Thread::Current(); |
- Isolate* isolate = thread->isolate(); |
- CHECK_ISOLATE_SCOPE(isolate); |
- CHECK_CALLBACK_STATE(thread); |
+ Thread* T = Thread::Current(); |
+ Isolate* I = T->isolate(); |
+ CHECK_API_SCOPE(T); |
+ CHECK_CALLBACK_STATE(T); |
- ASSERT(isolate->GetAndClearResumeRequest() == false); |
+ ASSERT(I->GetAndClearResumeRequest() == false); |
MessageHandler::MessageStatus status = |
- isolate->message_handler()->HandleOOBMessages(); |
- bool resume = isolate->GetAndClearResumeRequest(); |
+ I->message_handler()->HandleOOBMessages(); |
+ bool resume = I->GetAndClearResumeRequest(); |
return (status != MessageHandler::kOK) || resume; |
} |
@@ -1600,7 +1599,7 @@ DART_EXPORT Dart_Handle Dart_NewSendPort(Dart_Port port_id) { |
CURRENT_FUNC, |
port_id); |
} |
- return Api::NewHandle(I, SendPort::New(port_id)); |
+ return Api::NewHandle(T, SendPort::New(port_id)); |
} |
@@ -1633,34 +1632,30 @@ DART_EXPORT void Dart_EnterScope() { |
Thread* thread = Thread::Current(); |
Isolate* isolate = thread->isolate(); |
CHECK_ISOLATE(isolate); |
- ApiState* state = isolate->api_state(); |
- ASSERT(state != NULL); |
- ApiLocalScope* new_scope = state->reusable_scope(); |
+ ApiLocalScope* new_scope = thread->api_reusable_scope(); |
if (new_scope == NULL) { |
- new_scope = new ApiLocalScope(state->top_scope(), |
+ new_scope = new ApiLocalScope(thread->api_top_scope(), |
thread->top_exit_frame_info()); |
ASSERT(new_scope != NULL); |
} else { |
new_scope->Reinit(thread, |
- state->top_scope(), |
+ thread->api_top_scope(), |
thread->top_exit_frame_info()); |
- state->set_reusable_scope(NULL); |
+ thread->set_api_reusable_scope(NULL); |
} |
- state->set_top_scope(new_scope); // New scope is now the top scope. |
+ thread->set_api_top_scope(new_scope); // New scope is now the top scope. |
} |
DART_EXPORT void Dart_ExitScope() { |
- Thread* thread = Thread::Current(); |
- Isolate* isolate = thread->isolate(); |
- CHECK_ISOLATE_SCOPE(isolate); |
- ApiState* state = isolate->api_state(); |
- ApiLocalScope* scope = state->top_scope(); |
- ApiLocalScope* reusable_scope = state->reusable_scope(); |
- state->set_top_scope(scope->previous()); // Reset top scope to previous. |
+ Thread* T = Thread::Current(); |
+ CHECK_API_SCOPE(T); |
+ ApiLocalScope* scope = T->api_top_scope(); |
+ ApiLocalScope* reusable_scope = T->api_reusable_scope(); |
+ T->set_api_top_scope(scope->previous()); // Reset top scope to previous. |
if (reusable_scope == NULL) { |
- scope->Reset(thread); // Reset the old scope which we just exited. |
- state->set_reusable_scope(scope); |
+ scope->Reset(T); // Reset the old scope which we just exited. |
+ T->set_api_reusable_scope(scope); |
} else { |
ASSERT(reusable_scope != scope); |
delete scope; |
@@ -1670,11 +1665,9 @@ DART_EXPORT void Dart_ExitScope() { |
DART_EXPORT uint8_t* Dart_ScopeAllocate(intptr_t size) { |
Zone* zone; |
- Isolate* isolate = Isolate::Current(); |
- if (isolate != NULL) { |
- ApiState* state = isolate->api_state(); |
- if (state == NULL) return NULL; |
- ApiLocalScope* scope = state->top_scope(); |
+ Thread* thread = Thread::Current(); |
+ if (thread != NULL) { |
+ ApiLocalScope* scope = thread->api_top_scope(); |
zone = scope->zone(); |
} else { |
ApiNativeScope* scope = ApiNativeScope::Current(); |
@@ -1718,7 +1711,7 @@ DART_EXPORT Dart_Handle Dart_ObjectEquals(Dart_Handle obj1, Dart_Handle obj2, |
*value = Bool::Cast(result).value(); |
return Api::Success(); |
} else if (result.IsError()) { |
- return Api::NewHandle(I, result.raw()); |
+ return Api::NewHandle(T, result.raw()); |
} else { |
return Api::NewError("Expected boolean result from =="); |
} |
@@ -1893,6 +1886,7 @@ DART_EXPORT bool Dart_IsByteBuffer(Dart_Handle handle) { |
DART_EXPORT bool Dart_IsFuture(Dart_Handle handle) { |
TRACE_API_CALL(CURRENT_FUNC); |
DARTSCOPE(Thread::Current()); |
+ Isolate* I = T->isolate(); |
const Object& obj = Object::Handle(Z, Api::UnwrapHandle(handle)); |
if (obj.IsInstance()) { |
const Class& future_class = |
@@ -1915,15 +1909,16 @@ DART_EXPORT bool Dart_IsFuture(Dart_Handle handle) { |
DART_EXPORT Dart_Handle Dart_InstanceGetType(Dart_Handle instance) { |
DARTSCOPE(Thread::Current()); |
+ Isolate* I = T->isolate(); |
const Object& obj = Object::Handle(Z, Api::UnwrapHandle(instance)); |
if (obj.IsNull()) { |
- return Api::NewHandle(I, I->object_store()->null_type()); |
+ return Api::NewHandle(T, I->object_store()->null_type()); |
} |
if (!obj.IsInstance()) { |
RETURN_TYPE_ERROR(Z, instance, Instance); |
} |
const Type& type = Type::Handle(Instance::Cast(obj).GetType()); |
- return Api::NewHandle(I, type.Canonicalize()); |
+ return Api::NewHandle(T, type.Canonicalize()); |
} |
@@ -1985,19 +1980,19 @@ DART_EXPORT Dart_Handle Dart_NewInteger(int64_t value) { |
CHECK_ISOLATE(isolate); |
if (Smi::IsValid(value)) { |
NOHANDLESCOPE(thread); |
- return Api::NewHandle(isolate, Smi::New(static_cast<intptr_t>(value))); |
+ return Api::NewHandle(thread, Smi::New(static_cast<intptr_t>(value))); |
} |
// Slow path for Mints and Bigints. |
DARTSCOPE(thread); |
CHECK_CALLBACK_STATE(thread); |
- return Api::NewHandle(isolate, Integer::New(value)); |
+ return Api::NewHandle(thread, Integer::New(value)); |
} |
DART_EXPORT Dart_Handle Dart_NewIntegerFromUint64(uint64_t value) { |
DARTSCOPE(Thread::Current()); |
CHECK_CALLBACK_STATE(T); |
- return Api::NewHandle(I, Integer::NewFromUint64(value)); |
+ return Api::NewHandle(T, Integer::NewFromUint64(value)); |
} |
@@ -2005,7 +2000,7 @@ DART_EXPORT Dart_Handle Dart_NewIntegerFromHexCString(const char* str) { |
DARTSCOPE(Thread::Current()); |
CHECK_CALLBACK_STATE(T); |
const String& str_obj = String::Handle(Z, String::New(str)); |
- return Api::NewHandle(I, Integer::New(str_obj)); |
+ return Api::NewHandle(T, Integer::New(str_obj)); |
} |
@@ -2078,7 +2073,7 @@ DART_EXPORT Dart_Handle Dart_IntegerToUint64(Dart_Handle integer, |
static uword BigintAllocate(intptr_t size) { |
- return Api::TopScope(Isolate::Current())->zone()->AllocUnsafe(size); |
+ return Api::TopScope(Thread::Current())->zone()->AllocUnsafe(size); |
} |
@@ -2103,7 +2098,7 @@ DART_EXPORT Dart_Handle Dart_IntegerToHexCString(Dart_Handle integer, |
DART_EXPORT Dart_Handle Dart_NewDouble(double value) { |
DARTSCOPE(Thread::Current()); |
CHECK_CALLBACK_STATE(T); |
- return Api::NewHandle(I, Double::New(value)); |
+ return Api::NewHandle(T, Double::New(value)); |
} |
@@ -2174,7 +2169,7 @@ DART_EXPORT Dart_Handle Dart_NewStringFromCString(const char* str) { |
RETURN_NULL_ERROR(str); |
} |
CHECK_CALLBACK_STATE(T); |
- return Api::NewHandle(I, String::New(str)); |
+ return Api::NewHandle(T, String::New(str)); |
} |
@@ -2190,7 +2185,7 @@ DART_EXPORT Dart_Handle Dart_NewStringFromUTF8(const uint8_t* utf8_array, |
CURRENT_FUNC); |
} |
CHECK_CALLBACK_STATE(T); |
- return Api::NewHandle(I, String::FromUTF8(utf8_array, length)); |
+ return Api::NewHandle(T, String::FromUTF8(utf8_array, length)); |
} |
@@ -2202,7 +2197,7 @@ DART_EXPORT Dart_Handle Dart_NewStringFromUTF16(const uint16_t* utf16_array, |
} |
CHECK_LENGTH(length, String::kMaxElements); |
CHECK_CALLBACK_STATE(T); |
- return Api::NewHandle(I, String::FromUTF16(utf16_array, length)); |
+ return Api::NewHandle(T, String::FromUTF16(utf16_array, length)); |
} |
@@ -2214,7 +2209,7 @@ DART_EXPORT Dart_Handle Dart_NewStringFromUTF32(const int32_t* utf32_array, |
} |
CHECK_LENGTH(length, String::kMaxElements); |
CHECK_CALLBACK_STATE(T); |
- return Api::NewHandle(I, String::FromUTF32(utf32_array, length)); |
+ return Api::NewHandle(T, String::FromUTF32(utf32_array, length)); |
} |
@@ -2229,12 +2224,12 @@ DART_EXPORT Dart_Handle Dart_NewExternalLatin1String( |
} |
CHECK_LENGTH(length, String::kMaxElements); |
CHECK_CALLBACK_STATE(T); |
- return Api::NewHandle(I, |
+ return Api::NewHandle(T, |
String::NewExternal(latin1_array, |
length, |
peer, |
cback, |
- SpaceForExternal(I, length))); |
+ SpaceForExternal(T, length))); |
} |
@@ -2249,12 +2244,12 @@ DART_EXPORT Dart_Handle Dart_NewExternalUTF16String(const uint16_t* utf16_array, |
CHECK_LENGTH(length, String::kMaxElements); |
CHECK_CALLBACK_STATE(T); |
intptr_t bytes = length * sizeof(*utf16_array); |
- return Api::NewHandle(I, |
+ return Api::NewHandle(T, |
String::NewExternal(utf16_array, |
length, |
peer, |
cback, |
- SpaceForExternal(I, bytes))); |
+ SpaceForExternal(T, bytes))); |
} |
@@ -2269,7 +2264,7 @@ DART_EXPORT Dart_Handle Dart_StringToCString(Dart_Handle object, |
RETURN_TYPE_ERROR(Z, object, String); |
} |
intptr_t string_length = Utf8::Length(str_obj); |
- char* res = Api::TopScope(I)->zone()->Alloc<char>(string_length + 1); |
+ char* res = Api::TopScope(T)->zone()->Alloc<char>(string_length + 1); |
if (res == NULL) { |
return Api::NewError("Unable to allocate memory"); |
} |
@@ -2296,7 +2291,7 @@ DART_EXPORT Dart_Handle Dart_StringToUTF8(Dart_Handle str, |
RETURN_TYPE_ERROR(Z, str, String); |
} |
intptr_t str_len = Utf8::Length(str_obj); |
- *utf8_array = Api::TopScope(I)->zone()->Alloc<uint8_t>(str_len); |
+ *utf8_array = Api::TopScope(T)->zone()->Alloc<uint8_t>(str_len); |
if (*utf8_array == NULL) { |
return Api::NewError("Unable to allocate memory"); |
} |
@@ -2416,7 +2411,7 @@ DART_EXPORT Dart_Handle Dart_MakeExternalString(Dart_Handle str, |
} |
return str; |
} |
- return Api::NewHandle(I, str_obj.MakeExternal(array, length, peer, cback)); |
+ return Api::NewHandle(T, str_obj.MakeExternal(array, length, peer, cback)); |
} |
@@ -2450,7 +2445,7 @@ DART_EXPORT Dart_Handle Dart_NewList(intptr_t length) { |
DARTSCOPE(Thread::Current()); |
CHECK_LENGTH(length, Array::kMaxElements); |
CHECK_CALLBACK_STATE(T); |
- return Api::NewHandle(I, Array::New(length)); |
+ return Api::NewHandle(T, Array::New(length)); |
} |
@@ -2524,17 +2519,17 @@ DART_EXPORT Dart_Handle Dart_ListLength(Dart_Handle list, intptr_t* len) { |
return Api::NewError("Length of List object is greater than the " |
"maximum value that 'len' parameter can hold"); |
} else if (retval.IsError()) { |
- return Api::NewHandle(I, retval.raw()); |
+ return Api::NewHandle(T, retval.raw()); |
} else { |
return Api::NewError("Length of List object is not an integer"); |
} |
} |
-#define GET_LIST_ELEMENT(isolate, type, obj, index) \ |
+#define GET_LIST_ELEMENT(thread, type, obj, index) \ |
const type& array_obj = type::Cast(obj); \ |
if ((index >= 0) && (index < array_obj.Length())) { \ |
- return Api::NewHandle(isolate, array_obj.At(index)); \ |
+ return Api::NewHandle(thread, array_obj.At(index)); \ |
} \ |
return Api::NewError("Invalid index passed in to access list element"); \ |
@@ -2543,9 +2538,9 @@ DART_EXPORT Dart_Handle Dart_ListGetAt(Dart_Handle list, intptr_t index) { |
DARTSCOPE(Thread::Current()); |
const Object& obj = Object::Handle(Z, Api::UnwrapHandle(list)); |
if (obj.IsArray()) { |
- GET_LIST_ELEMENT(I, Array, obj, index); |
+ GET_LIST_ELEMENT(T, Array, obj, index); |
} else if (obj.IsGrowableObjectArray()) { |
- GET_LIST_ELEMENT(I, GrowableObjectArray, obj, index); |
+ GET_LIST_ELEMENT(T, GrowableObjectArray, obj, index); |
} else if (obj.IsError()) { |
return list; |
} else { |
@@ -2553,7 +2548,7 @@ DART_EXPORT Dart_Handle Dart_ListGetAt(Dart_Handle list, intptr_t index) { |
// Check and handle a dart object that implements the List interface. |
const Instance& instance = Instance::Handle(Z, GetListInstance(Z, obj)); |
if (!instance.IsNull()) { |
- return Api::NewHandle(I, Send1Arg( |
+ return Api::NewHandle(T, Send1Arg( |
instance, |
Symbols::IndexToken(), |
Instance::Handle(Z, Integer::New(index)))); |
@@ -2563,11 +2558,11 @@ DART_EXPORT Dart_Handle Dart_ListGetAt(Dart_Handle list, intptr_t index) { |
} |
-#define GET_LIST_RANGE(isolate, type, obj, offset, length) \ |
+#define GET_LIST_RANGE(thread, type, obj, offset, length) \ |
const type& array_obj = type::Cast(obj); \ |
if ((offset >= 0) && (offset + length <= array_obj.Length())) { \ |
for (intptr_t index = 0; index < length; ++index) { \ |
- result[index] = Api::NewHandle(isolate, array_obj.At(index + offset)); \ |
+ result[index] = Api::NewHandle(thread, array_obj.At(index + offset)); \ |
} \ |
return Api::Success(); \ |
} \ |
@@ -2584,9 +2579,9 @@ DART_EXPORT Dart_Handle Dart_ListGetRange(Dart_Handle list, |
} |
const Object& obj = Object::Handle(Z, Api::UnwrapHandle(list)); |
if (obj.IsArray()) { |
- GET_LIST_RANGE(I, Array, obj, offset, length); |
+ GET_LIST_RANGE(T, Array, obj, offset, length); |
} else if (obj.IsGrowableObjectArray()) { |
- GET_LIST_RANGE(I, GrowableObjectArray, obj, offset, length); |
+ GET_LIST_RANGE(T, GrowableObjectArray, obj, offset, length); |
} else if (obj.IsError()) { |
return list; |
} else { |
@@ -2608,7 +2603,7 @@ DART_EXPORT Dart_Handle Dart_ListGetRange(Dart_Handle list, |
for (intptr_t i = 0; i < length; ++i) { |
index = Integer::New(i); |
args.SetAt(1, index); |
- Dart_Handle value = Api::NewHandle(I, |
+ Dart_Handle value = Api::NewHandle(T, |
DartEntry::InvokeFunction(function, args)); |
if (::Dart_IsError(value)) |
return value; |
@@ -2671,8 +2666,8 @@ DART_EXPORT Dart_Handle Dart_ListSetAt(Dart_Handle list, |
args.SetAt(0, instance); |
args.SetAt(1, index_obj); |
args.SetAt(2, value_obj); |
- return Api::NewHandle(I, DartEntry::InvokeFunction(function, |
- args)); |
+ return Api::NewHandle( |
+ T, DartEntry::InvokeFunction(function, args)); |
} |
} |
return Api::NewError("Object does not implement the 'List' interface"); |
@@ -2689,7 +2684,6 @@ static RawObject* ResolveConstructor(const char* current_func, |
static RawObject* ThrowArgumentError(const char* exception_message) { |
Thread* thread = Thread::Current(); |
- Isolate* isolate = thread->isolate(); |
Zone* zone = thread->zone(); |
// Lookup the class ArgumentError in dart:core. |
const String& lib_url = String::Handle(String::New("dart:core")); |
@@ -2738,13 +2732,11 @@ static RawObject* ThrowArgumentError(const char* exception_message) { |
} |
// Unwind all the API scopes till the exit frame before throwing an |
// exception. |
- ApiState* state = isolate->api_state(); |
- ASSERT(state != NULL); |
const Instance* saved_exception; |
{ |
NoSafepointScope no_safepoint; |
RawInstance* raw_exception = exception.raw(); |
- state->UnwindScopes(thread->top_exit_frame_info()); |
+ thread->UnwindScopes(thread->top_exit_frame_info()); |
saved_exception = &Instance::Handle(raw_exception); |
} |
Exceptions::Throw(thread, *saved_exception); |
@@ -2761,7 +2753,7 @@ static RawObject* ThrowArgumentError(const char* exception_message) { |
for (int i = 0; i < length; i++) { \ |
element = array.At(offset + i); \ |
if (!element.IsInteger()) { \ |
- return Api::NewHandle(I, \ |
+ return Api::NewHandle(T, \ |
ThrowArgumentError("List contains non-int elements")); \ |
\ |
} \ |
@@ -2866,7 +2858,7 @@ DART_EXPORT Dart_Handle Dart_ListGetAsBytes(Dart_Handle list, |
args.SetAt(1, intobj); |
result = DartEntry::InvokeFunction(function, args); |
if (result.IsError()) { |
- return Api::NewHandle(I, result.raw()); |
+ return Api::NewHandle(T, result.raw()); |
} |
if (!result.IsInteger()) { |
return Api::NewError("%s expects the argument 'list' to be " |
@@ -2955,7 +2947,7 @@ DART_EXPORT Dart_Handle Dart_ListSetAsBytes(Dart_Handle list, |
const Object& result = Object::Handle(Z, |
DartEntry::InvokeFunction(function, args)); |
if (result.IsError()) { |
- return Api::NewHandle(I, result.raw()); |
+ return Api::NewHandle(T, result.raw()); |
} |
} |
return Api::Success(); |
@@ -2977,7 +2969,7 @@ DART_EXPORT Dart_Handle Dart_MapGetAt(Dart_Handle map, Dart_Handle key) { |
if (!(key_obj.IsInstance() || key_obj.IsNull())) { |
return Api::NewError("Key is not an instance"); |
} |
- return Api::NewHandle(I, |
+ return Api::NewHandle(T, |
Send1Arg(instance, Symbols::IndexToken(), Instance::Cast(key_obj))); |
} |
return Api::NewError("Object does not implement the 'Map' interface"); |
@@ -2994,7 +2986,7 @@ DART_EXPORT Dart_Handle Dart_MapContainsKey(Dart_Handle map, Dart_Handle key) { |
if (!(key_obj.IsInstance() || key_obj.IsNull())) { |
return Api::NewError("Key is not an instance"); |
} |
- return Api::NewHandle(I, Send1Arg( |
+ return Api::NewHandle(T, Send1Arg( |
instance, |
String::Handle(Z, String::New("containsKey")), |
Instance::Cast(key_obj))); |
@@ -3012,9 +3004,9 @@ DART_EXPORT Dart_Handle Dart_MapKeys(Dart_Handle map) { |
const Object& iterator = Object::Handle(Send0Arg( |
instance, String::Handle(Z, String::New("get:keys")))); |
if (!iterator.IsInstance()) { |
- return Api::NewHandle(I, iterator.raw()); |
+ return Api::NewHandle(T, iterator.raw()); |
} |
- return Api::NewHandle(I, Send0Arg( |
+ return Api::NewHandle(T, Send0Arg( |
Instance::Cast(iterator), |
String::Handle(String::New("toList")))); |
} |
@@ -3151,7 +3143,6 @@ static RawObject* GetByteDataConstructor(Thread* thread, |
static Dart_Handle NewByteData(Thread* thread, intptr_t length) { |
CHECK_LENGTH(length, TypedData::MaxElements(kTypedDataInt8ArrayCid)); |
- Isolate* isolate = thread->isolate(); |
Zone* zone = thread->zone(); |
Object& result = Object::Handle(zone); |
result = GetByteDataConstructor(thread, Symbols::ByteDataDot(), 1); |
@@ -3169,22 +3160,21 @@ static Dart_Handle NewByteData(Thread* thread, intptr_t length) { |
// Invoke the constructor and return the new object. |
result = DartEntry::InvokeFunction(factory, args); |
ASSERT(result.IsInstance() || result.IsNull() || result.IsError()); |
- return Api::NewHandle(isolate, result.raw()); |
+ return Api::NewHandle(thread, result.raw()); |
} |
-static Dart_Handle NewTypedData(Isolate* isolate, |
+static Dart_Handle NewTypedData(Thread* thread, |
intptr_t cid, |
intptr_t length) { |
CHECK_LENGTH(length, TypedData::MaxElements(cid)); |
- return Api::NewHandle(isolate, TypedData::New(cid, length)); |
+ return Api::NewHandle(thread, TypedData::New(cid, length)); |
} |
static Dart_Handle NewExternalTypedData( |
Thread* thread, intptr_t cid, void* data, intptr_t length) { |
CHECK_LENGTH(length, ExternalTypedData::MaxElements(cid)); |
- Isolate* isolate = thread->isolate(); |
Zone* zone = thread->zone(); |
intptr_t bytes = length * ExternalTypedData::ElementSizeInBytes(cid); |
const ExternalTypedData& result = ExternalTypedData::Handle( |
@@ -3192,15 +3182,14 @@ static Dart_Handle NewExternalTypedData( |
ExternalTypedData::New(cid, |
reinterpret_cast<uint8_t*>(data), |
length, |
- SpaceForExternal(isolate, bytes))); |
- return Api::NewHandle(isolate, result.raw()); |
+ SpaceForExternal(thread, bytes))); |
+ return Api::NewHandle(thread, result.raw()); |
} |
static Dart_Handle NewExternalByteData( |
Thread* thread, void* data, intptr_t length) { |
Zone* zone = thread->zone(); |
- Isolate* isolate = thread->isolate(); |
Dart_Handle ext_data = NewExternalTypedData( |
thread, kExternalTypedDataUint8ArrayCid, data, length); |
if (::Dart_IsError(ext_data)) { |
@@ -3230,7 +3219,7 @@ static Dart_Handle NewExternalByteData( |
// Invoke the constructor and return the new object. |
result = DartEntry::InvokeFunction(factory, args); |
ASSERT(result.IsNull() || result.IsInstance() || result.IsError()); |
- return Api::NewHandle(isolate, result.raw()); |
+ return Api::NewHandle(thread, result.raw()); |
} |
@@ -3242,29 +3231,29 @@ DART_EXPORT Dart_Handle Dart_NewTypedData(Dart_TypedData_Type type, |
case Dart_TypedData_kByteData : |
return NewByteData(T, length); |
case Dart_TypedData_kInt8 : |
- return NewTypedData(I, kTypedDataInt8ArrayCid, length); |
+ return NewTypedData(T, kTypedDataInt8ArrayCid, length); |
case Dart_TypedData_kUint8 : |
- return NewTypedData(I, kTypedDataUint8ArrayCid, length); |
+ return NewTypedData(T, kTypedDataUint8ArrayCid, length); |
case Dart_TypedData_kUint8Clamped : |
- return NewTypedData(I, kTypedDataUint8ClampedArrayCid, length); |
+ return NewTypedData(T, kTypedDataUint8ClampedArrayCid, length); |
case Dart_TypedData_kInt16 : |
- return NewTypedData(I, kTypedDataInt16ArrayCid, length); |
+ return NewTypedData(T, kTypedDataInt16ArrayCid, length); |
case Dart_TypedData_kUint16 : |
- return NewTypedData(I, kTypedDataUint16ArrayCid, length); |
+ return NewTypedData(T, kTypedDataUint16ArrayCid, length); |
case Dart_TypedData_kInt32 : |
- return NewTypedData(I, kTypedDataInt32ArrayCid, length); |
+ return NewTypedData(T, kTypedDataInt32ArrayCid, length); |
case Dart_TypedData_kUint32 : |
- return NewTypedData(I, kTypedDataUint32ArrayCid, length); |
+ return NewTypedData(T, kTypedDataUint32ArrayCid, length); |
case Dart_TypedData_kInt64 : |
- return NewTypedData(I, kTypedDataInt64ArrayCid, length); |
+ return NewTypedData(T, kTypedDataInt64ArrayCid, length); |
case Dart_TypedData_kUint64 : |
- return NewTypedData(I, kTypedDataUint64ArrayCid, length); |
+ return NewTypedData(T, kTypedDataUint64ArrayCid, length); |
case Dart_TypedData_kFloat32 : |
- return NewTypedData(I, kTypedDataFloat32ArrayCid, length); |
+ return NewTypedData(T, kTypedDataFloat32ArrayCid, length); |
case Dart_TypedData_kFloat64 : |
- return NewTypedData(I, kTypedDataFloat64ArrayCid, length); |
+ return NewTypedData(T, kTypedDataFloat64ArrayCid, length); |
case Dart_TypedData_kFloat32x4: |
- return NewTypedData(I, kTypedDataFloat32x4ArrayCid, length); |
+ return NewTypedData(T, kTypedDataFloat32x4ArrayCid, length); |
default: |
return Api::NewError("%s expects argument 'type' to be of 'TypedData'", |
CURRENT_FUNC); |
@@ -3377,7 +3366,7 @@ DART_EXPORT Dart_Handle Dart_NewByteBuffer(Dart_Handle typed_data) { |
// Invoke the factory constructor and return the new object. |
result = DartEntry::InvokeFunction(factory, args); |
ASSERT(result.IsInstance() || result.IsNull() || result.IsError()); |
- return Api::NewHandle(I, result.raw()); |
+ return Api::NewHandle(T, result.raw()); |
} |
@@ -3419,6 +3408,7 @@ DART_EXPORT Dart_Handle Dart_TypedDataAcquireData(Dart_Handle object, |
void** data, |
intptr_t* len) { |
DARTSCOPE(Thread::Current()); |
+ Isolate* I = T->isolate(); |
intptr_t class_id = Api::ClassId(object); |
if (!RawObject::IsExternalTypedDataClassId(class_id) && |
!RawObject::IsTypedDataViewClassId(class_id) && |
@@ -3508,6 +3498,7 @@ DART_EXPORT Dart_Handle Dart_TypedDataAcquireData(Dart_Handle object, |
DART_EXPORT Dart_Handle Dart_TypedDataReleaseData(Dart_Handle object) { |
DARTSCOPE(Thread::Current()); |
+ Isolate* I = T->isolate(); |
intptr_t class_id = Api::ClassId(object); |
if (!RawObject::IsExternalTypedDataClassId(class_id) && |
!RawObject::IsTypedDataViewClassId(class_id) && |
@@ -3544,7 +3535,7 @@ DART_EXPORT Dart_Handle Dart_GetDataFromByteBuffer(Dart_Handle object) { |
} |
const Instance& instance = Api::UnwrapInstanceHandle(zone, object); |
ASSERT(!instance.IsNull()); |
- return Api::NewHandle(isolate, ByteBuffer::Data(instance)); |
+ return Api::NewHandle(thread, ByteBuffer::Data(instance)); |
} |
@@ -3655,7 +3646,7 @@ DART_EXPORT Dart_Handle Dart_New(Dart_Handle type, |
constr_name, |
number_of_arguments); |
if (result.IsError()) { |
- return Api::NewHandle(I, result.raw()); |
+ return Api::NewHandle(T, result.raw()); |
} |
ASSERT(result.IsFunction()); |
Function& constructor = Function::Handle(Z); |
@@ -3668,7 +3659,7 @@ DART_EXPORT Dart_Handle Dart_New(Dart_Handle type, |
constructor = constructor.RedirectionTarget(); |
if (constructor.IsNull()) { |
ASSERT(redirect_type.IsMalformed()); |
- return Api::NewHandle(I, redirect_type.error()); |
+ return Api::NewHandle(T, redirect_type.error()); |
} |
if (!redirect_type.IsInstantiated()) { |
@@ -3678,7 +3669,7 @@ DART_EXPORT Dart_Handle Dart_New(Dart_Handle type, |
redirect_type ^= redirect_type.InstantiateFrom(type_arguments, |
&bound_error); |
if (!bound_error.IsNull()) { |
- return Api::NewHandle(I, bound_error.raw()); |
+ return Api::NewHandle(T, bound_error.raw()); |
} |
redirect_type ^= redirect_type.Canonicalize(); |
} |
@@ -3717,7 +3708,7 @@ DART_EXPORT Dart_Handle Dart_New(Dart_Handle type, |
argument = Api::UnwrapHandle(arguments[i]); |
if (!argument.IsNull() && !argument.IsInstance()) { |
if (argument.IsError()) { |
- return Api::NewHandle(I, argument.raw()); |
+ return Api::NewHandle(T, argument.raw()); |
} else { |
return Api::NewError( |
"%s expects arguments[%d] to be an Instance handle.", |
@@ -3730,7 +3721,7 @@ DART_EXPORT Dart_Handle Dart_New(Dart_Handle type, |
// Invoke the constructor and return the new object. |
result = DartEntry::InvokeFunction(constructor, args); |
if (result.IsError()) { |
- return Api::NewHandle(I, result.raw()); |
+ return Api::NewHandle(T, result.raw()); |
} |
if (constructor.IsGenerativeConstructor()) { |
@@ -3739,7 +3730,7 @@ DART_EXPORT Dart_Handle Dart_New(Dart_Handle type, |
ASSERT(result.IsNull() || result.IsInstance()); |
new_object ^= result.raw(); |
} |
- return Api::NewHandle(I, new_object.raw()); |
+ return Api::NewHandle(T, new_object.raw()); |
} |
@@ -3788,9 +3779,9 @@ DART_EXPORT Dart_Handle Dart_Allocate(Dart_Handle type) { |
const Error& error = Error::Handle(Z, cls.EnsureIsFinalized(T)); |
if (!error.IsNull()) { |
// An error occurred, return error object. |
- return Api::NewHandle(I, error.raw()); |
+ return Api::NewHandle(T, error.raw()); |
} |
- return Api::NewHandle(I, AllocateObject(T, cls)); |
+ return Api::NewHandle(T, AllocateObject(T, cls)); |
} |
@@ -3818,7 +3809,7 @@ DART_EXPORT Dart_Handle Dart_AllocateWithNativeFields( |
const Error& error = Error::Handle(Z, cls.EnsureIsFinalized(T)); |
if (!error.IsNull()) { |
// An error occurred, return error object. |
- return Api::NewHandle(I, error.raw()); |
+ return Api::NewHandle(T, error.raw()); |
} |
if (num_native_fields != cls.num_native_fields()) { |
return Api::NewError( |
@@ -3827,7 +3818,7 @@ DART_EXPORT Dart_Handle Dart_AllocateWithNativeFields( |
} |
const Instance& instance = Instance::Handle(Z, AllocateObject(T, cls)); |
instance.SetNativeFields(num_native_fields, native_fields); |
- return Api::NewHandle(I, instance.raw()); |
+ return Api::NewHandle(T, instance.raw()); |
} |
@@ -3837,7 +3828,6 @@ static Dart_Handle SetupArguments(Thread* thread, |
int extra_args, |
Array* args) { |
Zone* zone = thread->zone(); |
- Isolate* isolate = thread->isolate(); |
// Check for malformed arguments in the arguments list. |
*args = Array::New(num_args + extra_args); |
Object& arg = Object::Handle(zone); |
@@ -3846,7 +3836,7 @@ static Dart_Handle SetupArguments(Thread* thread, |
if (!arg.IsNull() && !arg.IsInstance()) { |
*args = Array::null(); |
if (arg.IsError()) { |
- return Api::NewHandle(isolate, arg.raw()); |
+ return Api::NewHandle(thread, arg.raw()); |
} else { |
return Api::NewError( |
"%s expects arguments[%d] to be an Instance handle.", |
@@ -3924,9 +3914,9 @@ DART_EXPORT Dart_Handle Dart_InvokeConstructor(Dart_Handle object, |
const Object& retval = Object::Handle(Z, |
DartEntry::InvokeFunction(constructor, args)); |
if (retval.IsError()) { |
- result = Api::NewHandle(I, retval.raw()); |
+ result = Api::NewHandle(T, retval.raw()); |
} else { |
- result = Api::NewHandle(I, instance.raw()); |
+ result = Api::NewHandle(T, instance.raw()); |
} |
} |
return result; |
@@ -3982,7 +3972,7 @@ DART_EXPORT Dart_Handle Dart_Invoke(Dart_Handle target, |
// Setup args and check for malformed arguments in the arguments list. |
result = SetupArguments(T, number_of_arguments, arguments, 0, &args); |
if (!::Dart_IsError(result)) { |
- result = Api::NewHandle(I, DartEntry::InvokeFunction(function, args)); |
+ result = Api::NewHandle(T, DartEntry::InvokeFunction(function, args)); |
} |
return result; |
} else if (obj.IsNull() || obj.IsInstance()) { |
@@ -4006,7 +3996,7 @@ DART_EXPORT Dart_Handle Dart_Invoke(Dart_Handle target, |
args.SetAt(0, instance); |
const Array& args_descriptor = |
Array::Handle(Z, ArgumentsDescriptor::New(args.Length())); |
- result = Api::NewHandle(I, |
+ result = Api::NewHandle(T, |
DartEntry::InvokeNoSuchMethod(instance, |
function_name, |
args, |
@@ -4018,7 +4008,7 @@ DART_EXPORT Dart_Handle Dart_Invoke(Dart_Handle target, |
result = SetupArguments(T, number_of_arguments, arguments, 1, &args); |
if (!::Dart_IsError(result)) { |
args.SetAt(0, instance); |
- result = Api::NewHandle(I, DartEntry::InvokeFunction(function, args)); |
+ result = Api::NewHandle(T, DartEntry::InvokeFunction(function, args)); |
} |
return result; |
} else if (obj.IsLibrary()) { |
@@ -4053,7 +4043,7 @@ DART_EXPORT Dart_Handle Dart_Invoke(Dart_Handle target, |
// Setup args and check for malformed arguments in the arguments list. |
result = SetupArguments(T, number_of_arguments, arguments, 0, &args); |
if (!::Dart_IsError(result)) { |
- result = Api::NewHandle(I, DartEntry::InvokeFunction(function, args)); |
+ result = Api::NewHandle(T, DartEntry::InvokeFunction(function, args)); |
} |
return result; |
} else { |
@@ -4091,7 +4081,7 @@ DART_EXPORT Dart_Handle Dart_InvokeClosure(Dart_Handle closure, |
args.SetAt(i + 1, obj); |
} |
// Now try to invoke the closure. |
- return Api::NewHandle(I, DartEntry::InvokeClosure(args)); |
+ return Api::NewHandle(T, DartEntry::InvokeClosure(args)); |
} |
@@ -4129,10 +4119,10 @@ DART_EXPORT Dart_Handle Dart_GetField(Dart_Handle container, Dart_Handle name) { |
if (!getter.IsNull()) { |
// Invoke the getter and return the result. |
- return Api::NewHandle(I, |
+ return Api::NewHandle(T, |
DartEntry::InvokeFunction(getter, Object::empty_array())); |
} else if (!field.IsNull()) { |
- return Api::NewHandle(I, field.StaticValue()); |
+ return Api::NewHandle(T, field.StaticValue()); |
} else { |
return Api::NewError("%s: did not find static field '%s'.", |
CURRENT_FUNC, field_name.ToCString()); |
@@ -4160,13 +4150,13 @@ DART_EXPORT Dart_Handle Dart_GetField(Dart_Handle container, Dart_Handle name) { |
if (getter.IsNull()) { |
const Array& args_descriptor = |
Array::Handle(Z, ArgumentsDescriptor::New(args.Length())); |
- return Api::NewHandle(I, |
+ return Api::NewHandle(T, |
DartEntry::InvokeNoSuchMethod(instance, |
getter_name, |
args, |
args_descriptor)); |
} |
- return Api::NewHandle(I, DartEntry::InvokeFunction(getter, args)); |
+ return Api::NewHandle(T, DartEntry::InvokeFunction(getter, args)); |
} else if (obj.IsLibrary()) { |
// To access a top-level we may need to use the Field or the |
@@ -4195,11 +4185,11 @@ DART_EXPORT Dart_Handle Dart_GetField(Dart_Handle container, Dart_Handle name) { |
if (!getter.IsNull()) { |
// Invoke the getter and return the result. |
- return Api::NewHandle(I, |
+ return Api::NewHandle(T, |
DartEntry::InvokeFunction(getter, Object::empty_array())); |
} |
if (!field.IsNull()) { |
- return Api::NewHandle(I, field.StaticValue()); |
+ return Api::NewHandle(T, field.StaticValue()); |
} |
return Api::NewError("%s: did not find top-level variable '%s'.", |
CURRENT_FUNC, field_name.ToCString()); |
@@ -4264,7 +4254,7 @@ DART_EXPORT Dart_Handle Dart_SetField(Dart_Handle container, |
const Object& result = Object::Handle(Z, |
DartEntry::InvokeFunction(setter, args)); |
if (result.IsError()) { |
- return Api::NewHandle(I, result.raw()); |
+ return Api::NewHandle(T, result.raw()); |
} else { |
return Api::Success(); |
} |
@@ -4309,12 +4299,12 @@ DART_EXPORT Dart_Handle Dart_SetField(Dart_Handle container, |
if (setter.IsNull()) { |
const Array& args_descriptor = |
Array::Handle(Z, ArgumentsDescriptor::New(args.Length())); |
- return Api::NewHandle(I, DartEntry::InvokeNoSuchMethod(instance, |
+ return Api::NewHandle(T, DartEntry::InvokeNoSuchMethod(instance, |
setter_name, |
args, |
args_descriptor)); |
} |
- return Api::NewHandle(I, DartEntry::InvokeFunction(setter, args)); |
+ return Api::NewHandle(T, DartEntry::InvokeFunction(setter, args)); |
} else if (obj.IsLibrary()) { |
// To access a top-level we may need to use the Field or the |
@@ -4342,7 +4332,7 @@ DART_EXPORT Dart_Handle Dart_SetField(Dart_Handle container, |
const Object& result = |
Object::Handle(Z, DartEntry::InvokeFunction(setter, args)); |
if (result.IsError()) { |
- return Api::NewHandle(I, result.raw()); |
+ return Api::NewHandle(T, result.raw()); |
} |
return Api::Success(); |
} |
@@ -4388,14 +4378,12 @@ DART_EXPORT Dart_Handle Dart_ThrowException(Dart_Handle exception) { |
// Unwind all the API scopes till the exit frame before throwing an |
// exception. |
- ApiState* state = isolate->api_state(); |
- ASSERT(state != NULL); |
const Instance* saved_exception; |
{ |
NoSafepointScope no_safepoint; |
RawInstance* raw_exception = |
Api::UnwrapInstanceHandle(zone, exception).raw(); |
- state->UnwindScopes(thread->top_exit_frame_info()); |
+ thread->UnwindScopes(thread->top_exit_frame_info()); |
saved_exception = &Instance::Handle(raw_exception); |
} |
Exceptions::Throw(thread, *saved_exception); |
@@ -4428,8 +4416,6 @@ DART_EXPORT Dart_Handle Dart_ReThrowException(Dart_Handle exception, |
// Unwind all the API scopes till the exit frame before throwing an |
// exception. |
- ApiState* state = isolate->api_state(); |
- ASSERT(state != NULL); |
const Instance* saved_exception; |
const Stacktrace* saved_stacktrace; |
{ |
@@ -4438,7 +4424,7 @@ DART_EXPORT Dart_Handle Dart_ReThrowException(Dart_Handle exception, |
Api::UnwrapInstanceHandle(zone, exception).raw(); |
RawStacktrace* raw_stacktrace = |
Api::UnwrapStacktraceHandle(zone, stacktrace).raw(); |
- state->UnwindScopes(thread->top_exit_frame_info()); |
+ thread->UnwindScopes(thread->top_exit_frame_info()); |
saved_exception = &Instance::Handle(raw_exception); |
saved_stacktrace = &Stacktrace::Handle(raw_stacktrace); |
} |
@@ -4474,7 +4460,7 @@ DART_EXPORT Dart_Handle Dart_CreateNativeWrapperClass(Dart_Handle library, |
return Api::NewError( |
"Unable to create native wrapper class : already exists"); |
} |
- return Api::NewHandle(I, cls.RareType()); |
+ return Api::NewHandle(T, cls.RareType()); |
} |
@@ -4654,12 +4640,10 @@ DART_EXPORT Dart_Handle Dart_GetNativeArguments( |
} |
case Dart_NativeArgument_kInstance: { |
- Isolate* isolate = arguments->thread()->isolate(); |
- ASSERT(isolate == Isolate::Current()); |
- ASSERT(isolate->api_state() && |
- isolate->api_state()->top_scope() != NULL); |
- native_value->as_instance = |
- Api::NewHandle(isolate, arguments->NativeArgAt(arg_index)); |
+ ASSERT(arguments->thread() == Thread::Current()); |
+ ASSERT(arguments->thread()->api_top_scope() != NULL); |
+ native_value->as_instance = Api::NewHandle( |
+ arguments->thread(), arguments->NativeArgAt(arg_index)); |
break; |
} |
@@ -4681,7 +4665,7 @@ DART_EXPORT Dart_Handle Dart_GetNativeArgument(Dart_NativeArguments args, |
"%s: argument 'index' out of range. Expected 0..%d but saw %d.", |
CURRENT_FUNC, arguments->NativeArgCount() - 1, index); |
} |
- return Api::NewHandle(arguments->thread()->isolate(), |
+ return Api::NewHandle(arguments->thread(), |
arguments->NativeArgAt(index)); |
} |
@@ -4831,7 +4815,7 @@ RawString* Api::CallEnvironmentCallback(Thread* thread, const String& name) { |
Dart_EnvironmentCallback callback = isolate->environment_callback(); |
String& result = String::Handle(thread->zone()); |
if (callback != NULL) { |
- Dart_Handle response = callback(Api::NewHandle(isolate, name.raw())); |
+ Dart_Handle response = callback(Api::NewHandle(thread, name.raw())); |
if (::Dart_IsString(response)) { |
result ^= Api::UnwrapHandle(response); |
} else if (::Dart_IsError(response)) { |
@@ -4925,9 +4909,9 @@ static void CompileSource(Thread* thread, |
const Error& error = |
Error::Handle(thread->zone(), Compiler::Compile(lib, script)); |
if (error.IsNull()) { |
- *result = Api::NewHandle(thread->isolate(), lib.raw()); |
+ *result = Api::NewHandle(thread, lib.raw()); |
} else { |
- *result = Api::NewHandle(thread->isolate(), error.raw()); |
+ *result = Api::NewHandle(thread, error.raw()); |
// Compilation errors are not Dart instances, so just mark the library |
// as having failed to load without providing an error instance. |
lib.SetLoadError(Object::null_instance()); |
@@ -4940,6 +4924,7 @@ DART_EXPORT Dart_Handle Dart_LoadScript(Dart_Handle url, |
intptr_t line_offset, |
intptr_t column_offset) { |
DARTSCOPE(Thread::Current()); |
+ Isolate* I = T->isolate(); |
const String& url_str = Api::UnwrapStringHandle(Z, url); |
if (url_str.IsNull()) { |
RETURN_TYPE_ERROR(Z, url, String); |
@@ -4984,6 +4969,7 @@ DART_EXPORT Dart_Handle Dart_LoadScript(Dart_Handle url, |
DART_EXPORT Dart_Handle Dart_LoadScriptFromSnapshot(const uint8_t* buffer, |
intptr_t buffer_len) { |
DARTSCOPE(Thread::Current()); |
+ Isolate* I = T->isolate(); |
StackZone zone(T); |
if (buffer == NULL) { |
RETURN_NULL_ERROR(buffer); |
@@ -5013,19 +4999,20 @@ DART_EXPORT Dart_Handle Dart_LoadScriptFromSnapshot(const uint8_t* buffer, |
ScriptSnapshotReader reader(snapshot->content(), snapshot->length(), T); |
const Object& tmp = Object::Handle(Z, reader.ReadScriptSnapshot()); |
if (tmp.IsError()) { |
- return Api::NewHandle(I, tmp.raw()); |
+ return Api::NewHandle(T, tmp.raw()); |
} |
library ^= tmp.raw(); |
library.set_debuggable(true); |
I->object_store()->set_root_library(library); |
- return Api::NewHandle(I, library.raw()); |
+ return Api::NewHandle(T, library.raw()); |
} |
DART_EXPORT Dart_Handle Dart_RootLibrary() { |
- Isolate* isolate = Isolate::Current(); |
+ Thread* thread = Thread::Current(); |
+ Isolate* isolate = thread->isolate(); |
CHECK_ISOLATE(isolate); |
- return Api::NewHandle(isolate, isolate->object_store()->root_library()); |
+ return Api::NewHandle(thread, isolate->object_store()->root_library()); |
} |
@@ -5059,7 +5046,7 @@ DART_EXPORT Dart_Handle Dart_GetClass(Dart_Handle library, |
return Api::NewError("Class '%s' not found in library '%s'.", |
cls_name.ToCString(), lib_name.ToCString()); |
} |
- return Api::NewHandle(I, cls.RareType()); |
+ return Api::NewHandle(T, cls.RareType()); |
} |
@@ -5094,7 +5081,7 @@ DART_EXPORT Dart_Handle Dart_GetType(Dart_Handle library, |
return Api::NewError("Invalid number of type arguments specified, " |
"got %" Pd " expected 0", number_of_type_arguments); |
} |
- return Api::NewHandle(I, Type::NewNonParameterizedType(cls)); |
+ return Api::NewHandle(T, Type::NewNonParameterizedType(cls)); |
} |
intptr_t num_expected_type_arguments = cls.NumTypeParameters(); |
TypeArguments& type_args_obj = TypeArguments::Handle(); |
@@ -5132,7 +5119,7 @@ DART_EXPORT Dart_Handle Dart_GetType(Dart_Handle library, |
Type::New(cls, type_args_obj, Scanner::kNoSourcePos)); |
instantiated_type ^= ClassFinalizer::FinalizeType( |
cls, instantiated_type, ClassFinalizer::kCanonicalize); |
- return Api::NewHandle(I, instantiated_type.raw()); |
+ return Api::NewHandle(T, instantiated_type.raw()); |
} |
@@ -5144,7 +5131,7 @@ DART_EXPORT Dart_Handle Dart_LibraryUrl(Dart_Handle library) { |
} |
const String& url = String::Handle(Z, lib.url()); |
ASSERT(!url.IsNull()); |
- return Api::NewHandle(I, url.raw()); |
+ return Api::NewHandle(T, url.raw()); |
} |
@@ -5159,7 +5146,7 @@ DART_EXPORT Dart_Handle Dart_LookupLibrary(Dart_Handle url) { |
return Api::NewError("%s: library '%s' not found.", |
CURRENT_FUNC, url_str.ToCString()); |
} else { |
- return Api::NewHandle(I, library.raw()); |
+ return Api::NewHandle(T, library.raw()); |
} |
} |
@@ -5167,6 +5154,7 @@ DART_EXPORT Dart_Handle Dart_LookupLibrary(Dart_Handle url) { |
DART_EXPORT Dart_Handle Dart_LibraryHandleError(Dart_Handle library_in, |
Dart_Handle error_in) { |
DARTSCOPE(Thread::Current()); |
+ Isolate* I = T->isolate(); |
const Library& lib = Api::UnwrapLibraryHandle(Z, library_in); |
if (lib.IsNull()) { |
@@ -5196,6 +5184,7 @@ DART_EXPORT Dart_Handle Dart_LoadLibrary(Dart_Handle url, |
intptr_t line_offset, |
intptr_t column_offset) { |
DARTSCOPE(Thread::Current()); |
+ Isolate* I = T->isolate(); |
const String& url_str = Api::UnwrapStringHandle(Z, url); |
if (url_str.IsNull()) { |
RETURN_TYPE_ERROR(Z, url, String); |
@@ -5242,7 +5231,7 @@ DART_EXPORT Dart_Handle Dart_LoadLibrary(Dart_Handle url, |
// If this is the dart:_builtin library, register it with the VM. |
if (url_str.Equals("dart:_builtin")) { |
I->object_store()->set_builtin_library(library); |
- Dart_Handle state = Api::CheckAndFinalizePendingClasses(I); |
+ Dart_Handle state = Api::CheckAndFinalizePendingClasses(T); |
if (::Dart_IsError(state)) { |
return state; |
} |
@@ -5255,6 +5244,7 @@ DART_EXPORT Dart_Handle Dart_LibraryImportLibrary(Dart_Handle library, |
Dart_Handle import, |
Dart_Handle prefix) { |
DARTSCOPE(Thread::Current()); |
+ Isolate* I = T->isolate(); |
const Library& library_vm = Api::UnwrapLibraryHandle(Z, library); |
if (library_vm.IsNull()) { |
RETURN_TYPE_ERROR(Z, library, Library); |
@@ -5299,6 +5289,7 @@ DART_EXPORT Dart_Handle Dart_LoadSource(Dart_Handle library, |
intptr_t line_offset, |
intptr_t column_offset) { |
DARTSCOPE(Thread::Current()); |
+ Isolate* I = T->isolate(); |
const Library& lib = Api::UnwrapLibraryHandle(Z, library); |
if (lib.IsNull()) { |
RETURN_TYPE_ERROR(Z, library, Library); |
@@ -5337,6 +5328,7 @@ DART_EXPORT Dart_Handle Dart_LibraryLoadPatch(Dart_Handle library, |
Dart_Handle url, |
Dart_Handle patch_source) { |
DARTSCOPE(Thread::Current()); |
+ Isolate* I = T->isolate(); |
const Library& lib = Api::UnwrapLibraryHandle(Z, library); |
if (lib.IsNull()) { |
RETURN_TYPE_ERROR(Z, library, Library); |
@@ -5366,6 +5358,7 @@ DART_EXPORT Dart_Handle Dart_LibraryLoadPatch(Dart_Handle library, |
// futures of loadLibrary calls (deferred library loading). |
DART_EXPORT Dart_Handle Dart_FinalizeLoading(bool complete_futures) { |
DARTSCOPE(Thread::Current()); |
+ Isolate* I = T->isolate(); |
CHECK_CALLBACK_STATE(T); |
I->DoneLoading(); |
@@ -5374,7 +5367,7 @@ DART_EXPORT Dart_Handle Dart_FinalizeLoading(bool complete_futures) { |
// invoing of _completeDeferredLoads) into Isolate::DoneLoading(). |
// Finalize all classes if needed. |
- Dart_Handle state = Api::CheckAndFinalizePendingClasses(I); |
+ Dart_Handle state = Api::CheckAndFinalizePendingClasses(T); |
if (::Dart_IsError(state)) { |
return state; |
} |
@@ -5406,7 +5399,7 @@ DART_EXPORT Dart_Handle Dart_FinalizeLoading(bool complete_futures) { |
Object::Handle(Z, DartEntry::InvokeFunction(function, args)); |
I->object_store()->clear_pending_deferred_loads(); |
if (res.IsError() || res.IsUnhandledException()) { |
- return Api::NewHandle(I, res.raw()); |
+ return Api::NewHandle(T, res.raw()); |
} |
} |
return Api::Success(); |
@@ -5543,6 +5536,7 @@ DART_EXPORT Dart_Handle Dart_ServiceSendDataEvent(const char* stream_id, |
const uint8_t* bytes, |
intptr_t bytes_length) { |
DARTSCOPE(Thread::Current()); |
+ Isolate* I = T->isolate(); |
if (stream_id == NULL) { |
RETURN_NULL_ERROR(stream_id); |
} |
@@ -5870,7 +5864,7 @@ DART_EXPORT Dart_Handle Dart_Precompile( |
if (!FLAG_precompilation) { |
return Dart_NewApiError("Flag --precompilation was not specified."); |
} |
- Dart_Handle result = Api::CheckAndFinalizePendingClasses(I); |
+ Dart_Handle result = Api::CheckAndFinalizePendingClasses(T); |
if (::Dart_IsError(result)) { |
return result; |
} |
@@ -5878,7 +5872,7 @@ DART_EXPORT Dart_Handle Dart_Precompile( |
const Error& error = Error::Handle(Precompiler::CompileAll(entry_points, |
reset_fields)); |
if (!error.IsNull()) { |
- return Api::NewHandle(I, error.raw()); |
+ return Api::NewHandle(T, error.raw()); |
} |
return Api::Success(); |
} |
@@ -5893,6 +5887,7 @@ DART_EXPORT Dart_Handle Dart_CreatePrecompiledSnapshot( |
intptr_t* instructions_snapshot_size) { |
ASSERT(FLAG_load_deferred_eagerly); |
DARTSCOPE(Thread::Current()); |
+ Isolate* I = T->isolate(); |
if (I->compilation_allowed()) { |
return Dart_NewApiError("Isolate is not precompiled. " |
"Did you forget to call Dart_Precompile?"); |
@@ -5916,7 +5911,7 @@ DART_EXPORT Dart_Handle Dart_CreatePrecompiledSnapshot( |
RETURN_NULL_ERROR(instructions_snapshot_size); |
} |
// Finalize all classes if needed. |
- Dart_Handle state = Api::CheckAndFinalizePendingClasses(I); |
+ Dart_Handle state = Api::CheckAndFinalizePendingClasses(T); |
if (::Dart_IsError(state)) { |
return state; |
} |