| Index: runtime/vm/dart_api_impl.cc
|
| diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
|
| index 473a665af1e32caf9716692090edceab83bf694c..e434f08cd16d702fc2e99eb2e77386f9c465121e 100644
|
| --- a/runtime/vm/dart_api_impl.cc
|
| +++ b/runtime/vm/dart_api_impl.cc
|
| @@ -172,11 +172,12 @@ static bool GetNativeStringArgument(NativeArguments* arguments,
|
| *str = NULL;
|
| return true;
|
| }
|
| - Isolate* isolate = arguments->thread()->isolate();
|
| + Thread* thread = arguments->thread();
|
| + Isolate* isolate = thread->isolate();
|
| ASSERT(isolate == Isolate::Current());
|
| *peer = NULL;
|
| - REUSABLE_OBJECT_HANDLESCOPE(isolate);
|
| - Object& obj = isolate->ObjectHandle();
|
| + REUSABLE_OBJECT_HANDLESCOPE(thread);
|
| + Object& obj = thread->ObjectHandle();
|
| obj = arguments->NativeArgAt(arg_index);
|
| if (RawObject::IsStringClassId(obj.GetClassId())) {
|
| ASSERT(isolate->api_state() &&
|
| @@ -199,10 +200,10 @@ static bool GetNativeIntegerArgument(NativeArguments* arguments,
|
| if (Api::GetNativeIntegerArgument(arguments, arg_index, value)) {
|
| return true;
|
| }
|
| - Isolate* isolate = arguments->thread()->isolate();
|
| - ASSERT(isolate == Isolate::Current());
|
| - REUSABLE_OBJECT_HANDLESCOPE(isolate);
|
| - Object& obj = isolate->ObjectHandle();
|
| + Thread* thread = arguments->thread();
|
| + ASSERT(thread == Thread::Current());
|
| + REUSABLE_OBJECT_HANDLESCOPE(thread);
|
| + Object& obj = thread->ObjectHandle();
|
| obj = arguments->NativeArgAt(arg_index);
|
| intptr_t cid = obj.GetClassId();
|
| if (cid == kBigintCid) {
|
| @@ -225,10 +226,10 @@ static bool GetNativeUnsignedIntegerArgument(NativeArguments* arguments,
|
| *value = static_cast<uint64_t>(arg_value);
|
| return true;
|
| }
|
| - Isolate* isolate = arguments->thread()->isolate();
|
| - ASSERT(isolate == Isolate::Current());
|
| - REUSABLE_OBJECT_HANDLESCOPE(isolate);
|
| - Object& obj = isolate->ObjectHandle();
|
| + Thread* thread = arguments->thread();
|
| + ASSERT(thread == Thread::Current());
|
| + REUSABLE_OBJECT_HANDLESCOPE(thread);
|
| + Object& obj = thread->ObjectHandle();
|
| obj = arguments->NativeArgAt(arg_index);
|
| intptr_t cid = obj.GetClassId();
|
| if (cid == kBigintCid) {
|
| @@ -249,10 +250,10 @@ static bool GetNativeDoubleArgument(NativeArguments* arguments,
|
| if (Api::GetNativeDoubleArgument(arguments, arg_index, value)) {
|
| return true;
|
| }
|
| - Isolate* isolate = arguments->thread()->isolate();
|
| - ASSERT(isolate == Isolate::Current());
|
| - REUSABLE_OBJECT_HANDLESCOPE(isolate);
|
| - Object& obj = isolate->ObjectHandle();
|
| + Thread* thread = arguments->thread();
|
| + ASSERT(thread == Thread::Current());
|
| + REUSABLE_OBJECT_HANDLESCOPE(thread);
|
| + Object& obj = thread->ObjectHandle();
|
| obj = arguments->NativeArgAt(arg_index);
|
| intptr_t cid = obj.GetClassId();
|
| if (cid == kBigintCid) {
|
| @@ -275,10 +276,10 @@ static Dart_Handle GetNativeFieldsOfArgument(NativeArguments* arguments,
|
| field_values)) {
|
| return Api::Success();
|
| }
|
| - Isolate* isolate = arguments->thread()->isolate();
|
| - ASSERT(isolate == Isolate::Current());
|
| - REUSABLE_OBJECT_HANDLESCOPE(isolate);
|
| - Object& obj = isolate->ObjectHandle();
|
| + Thread* thread = arguments->thread();
|
| + ASSERT(thread == Thread::Current());
|
| + REUSABLE_OBJECT_HANDLESCOPE(thread);
|
| + Object& obj = thread->ObjectHandle();
|
| obj = arguments->NativeArgAt(arg_index);
|
| if (obj.IsNull()) {
|
| memset(field_values, 0, (num_fields * sizeof(field_values[0])));
|
| @@ -1009,17 +1010,17 @@ DART_EXPORT void Dart_SetPersistentHandle(Dart_PersistentHandle obj1,
|
|
|
|
|
| static Dart_WeakPersistentHandle AllocateFinalizableHandle(
|
| - Isolate* isolate,
|
| + Thread* thread,
|
| Dart_Handle object,
|
| bool is_prologue,
|
| void* peer,
|
| intptr_t external_allocation_size,
|
| Dart_WeakPersistentHandleFinalizer callback) {
|
| - REUSABLE_OBJECT_HANDLESCOPE(isolate);
|
| - Object& ref = isolate->ObjectHandle();
|
| + REUSABLE_OBJECT_HANDLESCOPE(thread);
|
| + Object& ref = thread->ObjectHandle();
|
| ref = Api::UnwrapHandle(object);
|
| FinalizablePersistentHandle* finalizable_ref =
|
| - FinalizablePersistentHandle::New(isolate,
|
| + FinalizablePersistentHandle::New(thread->isolate(),
|
| is_prologue,
|
| ref,
|
| peer,
|
| @@ -1034,12 +1035,12 @@ DART_EXPORT Dart_WeakPersistentHandle Dart_NewWeakPersistentHandle(
|
| void* peer,
|
| intptr_t external_allocation_size,
|
| Dart_WeakPersistentHandleFinalizer callback) {
|
| - Isolate* isolate = Isolate::Current();
|
| - CHECK_ISOLATE(isolate);
|
| + Thread* thread = Thread::Current();
|
| + CHECK_ISOLATE(thread->isolate());
|
| if (callback == NULL) {
|
| return NULL;
|
| }
|
| - return AllocateFinalizableHandle(isolate,
|
| + return AllocateFinalizableHandle(thread,
|
| object,
|
| false,
|
| peer,
|
| @@ -1053,12 +1054,12 @@ DART_EXPORT Dart_WeakPersistentHandle Dart_NewPrologueWeakPersistentHandle(
|
| void* peer,
|
| intptr_t external_allocation_size,
|
| Dart_WeakPersistentHandleFinalizer callback) {
|
| - Isolate* isolate = Isolate::Current();
|
| - CHECK_ISOLATE(isolate);
|
| + Thread* thread = Thread::Current();
|
| + CHECK_ISOLATE(thread->isolate());
|
| if (callback == NULL) {
|
| return NULL;
|
| }
|
| - return AllocateFinalizableHandle(isolate,
|
| + return AllocateFinalizableHandle(thread,
|
| object,
|
| true,
|
| peer,
|
| @@ -1212,12 +1213,13 @@ DART_EXPORT Dart_Handle Dart_SetGcCallbacks(
|
|
|
| class PrologueWeakVisitor : public HandleVisitor {
|
| public:
|
| - PrologueWeakVisitor(Isolate* isolate,
|
| + PrologueWeakVisitor(Thread* thread,
|
| Dart_GcPrologueWeakHandleCallback callback)
|
| - : HandleVisitor(isolate),
|
| + : HandleVisitor(thread),
|
| callback_(callback) {
|
| }
|
|
|
| +
|
| void VisitHandle(uword addr) {
|
| NoSafepointScope no_safepoint;
|
| FinalizablePersistentHandle* handle =
|
| @@ -1225,13 +1227,13 @@ class PrologueWeakVisitor : public HandleVisitor {
|
| RawObject* raw_obj = handle->raw();
|
| if (raw_obj->IsHeapObject()) {
|
| ASSERT(handle->IsPrologueWeakPersistent());
|
| - ReusableInstanceHandleScope reused_instance_handle(isolate());
|
| + ReusableInstanceHandleScope reused_instance_handle(thread());
|
| Instance& instance = reused_instance_handle.Handle();
|
| instance ^= reinterpret_cast<RawInstance*>(handle->raw());
|
| intptr_t num_native_fields = instance.NumNativeFields();
|
| intptr_t* native_fields = instance.NativeFieldsDataAddr();
|
| if (native_fields != NULL) {
|
| - callback_(isolate()->init_callback_data(),
|
| + callback_(thread()->isolate()->init_callback_data(),
|
| reinterpret_cast<Dart_WeakPersistentHandle>(addr),
|
| num_native_fields,
|
| native_fields);
|
| @@ -1248,10 +1250,10 @@ class PrologueWeakVisitor : public HandleVisitor {
|
|
|
| DART_EXPORT Dart_Handle Dart_VisitPrologueWeakHandles(
|
| Dart_GcPrologueWeakHandleCallback callback) {
|
| - Isolate* isolate = Isolate::Current();
|
| - CHECK_ISOLATE(isolate);
|
| - PrologueWeakVisitor visitor(isolate, callback);
|
| - isolate->VisitPrologueWeakPersistentHandles(&visitor);
|
| + Thread* thread = Thread::Current();
|
| + CHECK_ISOLATE(thread->isolate());
|
| + PrologueWeakVisitor visitor(thread, callback);
|
| + thread->isolate()->VisitPrologueWeakPersistentHandles(&visitor);
|
| return Api::Success();
|
| }
|
|
|
| @@ -1910,10 +1912,10 @@ DART_EXPORT Dart_Handle Dart_ObjectIsType(Dart_Handle object,
|
|
|
|
|
| DART_EXPORT bool Dart_IsInstance(Dart_Handle object) {
|
| - Isolate* isolate = Isolate::Current();
|
| - CHECK_ISOLATE(isolate);
|
| - REUSABLE_OBJECT_HANDLESCOPE(isolate);
|
| - Object& ref = isolate->ObjectHandle();
|
| + Thread* thread = Thread::Current();
|
| + CHECK_ISOLATE(thread->isolate());
|
| + REUSABLE_OBJECT_HANDLESCOPE(thread);
|
| + Object& ref = thread->ObjectHandle();
|
| ref = Api::UnwrapHandle(object);
|
| return ref.IsInstance();
|
| }
|
| @@ -2013,9 +2015,9 @@ DART_EXPORT bool Dart_IsTypeVariable(Dart_Handle handle) {
|
| DART_EXPORT bool Dart_IsClosure(Dart_Handle object) {
|
| // We can't use a fast class index check here because there are many
|
| // different signature classes for closures.
|
| - Isolate* isolate = Isolate::Current();
|
| - CHECK_ISOLATE(isolate);
|
| - ReusableObjectHandleScope reused_obj_handle(isolate);
|
| + Thread* thread = Thread::Current();
|
| + CHECK_ISOLATE(thread->isolate());
|
| + ReusableObjectHandleScope reused_obj_handle(thread);
|
| const Instance& closure_obj =
|
| Api::UnwrapInstanceHandle(reused_obj_handle, object);
|
| return (!closure_obj.IsNull() && closure_obj.IsClosure());
|
| @@ -2303,12 +2305,12 @@ DART_EXPORT Dart_Handle Dart_BooleanValue(Dart_Handle boolean_obj,
|
|
|
|
|
| DART_EXPORT Dart_Handle Dart_StringLength(Dart_Handle str, intptr_t* len) {
|
| - Isolate* isolate = Isolate::Current();
|
| - CHECK_ISOLATE(isolate);
|
| - ReusableObjectHandleScope reused_obj_handle(isolate);
|
| + Thread* thread = Thread::Current();
|
| + CHECK_ISOLATE(thread->isolate());
|
| + ReusableObjectHandleScope reused_obj_handle(thread);
|
| const String& str_obj = Api::UnwrapStringHandle(reused_obj_handle, str);
|
| if (str_obj.IsNull()) {
|
| - RETURN_TYPE_ERROR(isolate, str, String);
|
| + RETURN_TYPE_ERROR(thread->isolate(), str, String);
|
| }
|
| *len = str_obj.Length();
|
| return Api::Success();
|
| @@ -2500,12 +2502,12 @@ DART_EXPORT Dart_Handle Dart_StringToUTF16(Dart_Handle str,
|
|
|
| DART_EXPORT Dart_Handle Dart_StringStorageSize(Dart_Handle str,
|
| intptr_t* size) {
|
| - Isolate* isolate = Isolate::Current();
|
| - CHECK_ISOLATE(isolate);
|
| - ReusableObjectHandleScope reused_obj_handle(isolate);
|
| + Thread* thread = Thread::Current();
|
| + CHECK_ISOLATE(thread->isolate());
|
| + ReusableObjectHandleScope reused_obj_handle(thread);
|
| const String& str_obj = Api::UnwrapStringHandle(reused_obj_handle, str);
|
| if (str_obj.IsNull()) {
|
| - RETURN_TYPE_ERROR(isolate, str, String);
|
| + RETURN_TYPE_ERROR(thread->isolate(), str, String);
|
| }
|
| if (size == NULL) {
|
| RETURN_NULL_ERROR(size);
|
| @@ -2571,19 +2573,19 @@ DART_EXPORT Dart_Handle Dart_StringGetProperties(Dart_Handle object,
|
| intptr_t* char_size,
|
| intptr_t* str_len,
|
| void** peer) {
|
| - Isolate* isolate = Isolate::Current();
|
| - CHECK_ISOLATE(isolate);
|
| - ReusableObjectHandleScope reused_obj_handle(isolate);
|
| + Thread* thread = Thread::Current();
|
| + CHECK_ISOLATE(thread->isolate());
|
| + ReusableObjectHandleScope reused_obj_handle(thread);
|
| const String& str = Api::UnwrapStringHandle(reused_obj_handle, object);
|
| if (str.IsNull()) {
|
| - RETURN_TYPE_ERROR(isolate, object, String);
|
| + RETURN_TYPE_ERROR(thread->isolate(), object, String);
|
| }
|
| if (str.IsExternal()) {
|
| *peer = str.GetPeer();
|
| ASSERT(*peer != NULL);
|
| } else {
|
| NoSafepointScope no_safepoint_scope;
|
| - *peer = isolate->heap()->GetPeer(str.raw());
|
| + *peer = thread->isolate()->heap()->GetPeer(str.raw());
|
| }
|
| *char_size = str.CharSize();
|
| *str_len = str.Length();
|
| @@ -4598,12 +4600,12 @@ DART_EXPORT Dart_Handle Dart_CreateNativeWrapperClass(Dart_Handle library,
|
|
|
| DART_EXPORT Dart_Handle Dart_GetNativeInstanceFieldCount(Dart_Handle obj,
|
| int* count) {
|
| - Isolate* isolate = Isolate::Current();
|
| - CHECK_ISOLATE(isolate);
|
| - ReusableObjectHandleScope reused_obj_handle(isolate);
|
| + Thread* thread = Thread::Current();
|
| + CHECK_ISOLATE(thread->isolate());
|
| + ReusableObjectHandleScope reused_obj_handle(thread);
|
| const Instance& instance = Api::UnwrapInstanceHandle(reused_obj_handle, obj);
|
| if (instance.IsNull()) {
|
| - RETURN_TYPE_ERROR(isolate, obj, Instance);
|
| + RETURN_TYPE_ERROR(thread->isolate(), obj, Instance);
|
| }
|
| *count = instance.NumNativeFields();
|
| return Api::Success();
|
| @@ -4613,12 +4615,12 @@ DART_EXPORT Dart_Handle Dart_GetNativeInstanceFieldCount(Dart_Handle obj,
|
| DART_EXPORT Dart_Handle Dart_GetNativeInstanceField(Dart_Handle obj,
|
| int index,
|
| intptr_t* value) {
|
| - Isolate* isolate = Isolate::Current();
|
| - CHECK_ISOLATE(isolate);
|
| - ReusableObjectHandleScope reused_obj_handle(isolate);
|
| + Thread* thread = Thread::Current();
|
| + CHECK_ISOLATE(thread->isolate());
|
| + ReusableObjectHandleScope reused_obj_handle(thread);
|
| const Instance& instance = Api::UnwrapInstanceHandle(reused_obj_handle, obj);
|
| if (instance.IsNull()) {
|
| - RETURN_TYPE_ERROR(isolate, obj, Instance);
|
| + RETURN_TYPE_ERROR(thread->isolate(), obj, Instance);
|
| }
|
| if (!instance.IsValidNativeIndex(index)) {
|
| return Api::NewError(
|
| @@ -5543,10 +5545,10 @@ DART_EXPORT Dart_Handle Dart_GetPeer(Dart_Handle object, void** peer) {
|
| if (peer == NULL) {
|
| RETURN_NULL_ERROR(peer);
|
| }
|
| - Isolate* isolate = Isolate::Current();
|
| - CHECK_ISOLATE(isolate);
|
| - REUSABLE_OBJECT_HANDLESCOPE(isolate);
|
| - Object& obj = isolate->ObjectHandle();
|
| + Thread* thread = Thread::Current();
|
| + CHECK_ISOLATE(thread->isolate());
|
| + REUSABLE_OBJECT_HANDLESCOPE(thread);
|
| + Object& obj = thread->ObjectHandle();
|
| obj = Api::UnwrapHandle(object);
|
| if (obj.IsNull() || obj.IsNumber() || obj.IsBool()) {
|
| const char* msg =
|
| @@ -5556,17 +5558,17 @@ DART_EXPORT Dart_Handle Dart_GetPeer(Dart_Handle object, void** peer) {
|
| {
|
| NoSafepointScope no_safepoint;
|
| RawObject* raw_obj = obj.raw();
|
| - *peer = isolate->heap()->GetPeer(raw_obj);
|
| + *peer = thread->isolate()->heap()->GetPeer(raw_obj);
|
| }
|
| return Api::Success();
|
| }
|
|
|
|
|
| DART_EXPORT Dart_Handle Dart_SetPeer(Dart_Handle object, void* peer) {
|
| - Isolate* isolate = Isolate::Current();
|
| - CHECK_ISOLATE(isolate);
|
| - REUSABLE_OBJECT_HANDLESCOPE(isolate);
|
| - Object& obj = isolate->ObjectHandle();
|
| + Thread* thread = Thread::Current();
|
| + CHECK_ISOLATE(thread->isolate());
|
| + REUSABLE_OBJECT_HANDLESCOPE(thread);
|
| + Object& obj = thread->ObjectHandle();
|
| obj = Api::UnwrapHandle(object);
|
| if (obj.IsNull() || obj.IsNumber() || obj.IsBool()) {
|
| const char* msg =
|
| @@ -5576,7 +5578,7 @@ DART_EXPORT Dart_Handle Dart_SetPeer(Dart_Handle object, void* peer) {
|
| {
|
| NoSafepointScope no_safepoint;
|
| RawObject* raw_obj = obj.raw();
|
| - isolate->heap()->SetPeer(raw_obj, peer);
|
| + thread->isolate()->heap()->SetPeer(raw_obj, peer);
|
| }
|
| return Api::Success();
|
| }
|
|
|