| Index: runtime/vm/dart_api_impl.cc
|
| diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
|
| index e434f08cd16d702fc2e99eb2e77386f9c465121e..78f107a467c08e164bbda7fd7c1f9cac93e5a4f2 100644
|
| --- a/runtime/vm/dart_api_impl.cc
|
| +++ b/runtime/vm/dart_api_impl.cc
|
| @@ -85,11 +85,11 @@ const char* CanonicalFunction(const char* func) {
|
| // or not. An assertion is raised if a type is not canonicalized.
|
| class FunctionVisitor : public ObjectVisitor {
|
| public:
|
| - explicit FunctionVisitor(Isolate* isolate) :
|
| - ObjectVisitor(isolate),
|
| - classHandle_(Class::Handle(isolate)),
|
| - funcHandle_(Function::Handle(isolate)),
|
| - typeHandle_(AbstractType::Handle(isolate)) {}
|
| + explicit FunctionVisitor(Thread* thread) :
|
| + ObjectVisitor(thread->isolate()),
|
| + classHandle_(Class::Handle(thread->zone())),
|
| + funcHandle_(Function::Handle(thread->zone())),
|
| + typeHandle_(AbstractType::Handle(thread->zone())) {}
|
|
|
| void VisitObject(RawObject* obj) {
|
| if (obj->IsFunction()) {
|
| @@ -397,13 +397,13 @@ RawObject* Api::UnwrapHandle(Dart_Handle object) {
|
|
|
|
|
| #define DEFINE_UNWRAP(type) \
|
| - const type& Api::Unwrap##type##Handle(Isolate* iso, \
|
| + const type& Api::Unwrap##type##Handle(Zone* zone, \
|
| Dart_Handle dart_handle) { \
|
| - const Object& obj = Object::Handle(iso, Api::UnwrapHandle(dart_handle)); \
|
| + const Object& obj = Object::Handle(zone, Api::UnwrapHandle(dart_handle)); \
|
| if (obj.Is##type()) { \
|
| return type::Cast(obj); \
|
| } \
|
| - return type::Handle(iso); \
|
| + return type::Handle(zone ); \
|
| }
|
| CLASS_LIST_FOR_HANDLES(DEFINE_UNWRAP)
|
| #undef DEFINE_UNWRAP
|
| @@ -830,9 +830,9 @@ DART_EXPORT Dart_Handle Dart_NewUnhandledExceptionError(Dart_Handle exception) {
|
| if ((class_id == kApiErrorCid) || (class_id == kLanguageErrorCid)) {
|
| obj = String::New(::Dart_GetError(exception));
|
| } else {
|
| - obj = Api::UnwrapInstanceHandle(I, exception).raw();
|
| + obj = Api::UnwrapInstanceHandle(Z, exception).raw();
|
| if (obj.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, exception, Instance);
|
| + RETURN_TYPE_ERROR(Z, exception, Instance);
|
| }
|
| }
|
| const Stacktrace& stacktrace = Stacktrace::Handle(Z);
|
| @@ -841,9 +841,11 @@ DART_EXPORT Dart_Handle Dart_NewUnhandledExceptionError(Dart_Handle exception) {
|
|
|
|
|
| DART_EXPORT Dart_Handle Dart_PropagateError(Dart_Handle handle) {
|
| - Isolate* isolate = Isolate::Current();
|
| + Thread* thread = Thread::Current();
|
| + Isolate* isolate = thread->isolate();
|
| {
|
| - const Object& obj = Object::Handle(isolate, Api::UnwrapHandle(handle));
|
| + const Object& obj = Object::Handle(thread->zone(),
|
| + Api::UnwrapHandle(handle));
|
| if (!obj.IsError()) {
|
| return Api::NewError(
|
| "%s expects argument 'handle' to be an error handle. "
|
| @@ -867,9 +869,11 @@ DART_EXPORT Dart_Handle Dart_PropagateError(Dart_Handle handle) {
|
| // that GC won't touch the raw error object before creating a valid
|
| // handle for it in the surviving zone.
|
| NoSafepointScope no_safepoint;
|
| - RawError* raw_error = Api::UnwrapErrorHandle(isolate, handle).raw();
|
| + RawError* raw_error = Api::UnwrapErrorHandle(thread->zone(), handle).raw();
|
| state->UnwindScopes(isolate->top_exit_frame_info());
|
| - error = &Error::Handle(isolate, raw_error);
|
| + // Note that thread's zone is different here than at the beginning of this
|
| + // function.
|
| + error = &Error::Handle(thread->zone(), raw_error);
|
| }
|
| Exceptions::PropagateError(*error);
|
| UNREACHABLE();
|
| @@ -1530,7 +1534,7 @@ DART_EXPORT Dart_Handle Dart_CreateSnapshot(
|
| }
|
| I->heap()->CollectAllGarbage();
|
| #if defined(DEBUG)
|
| - FunctionVisitor check_canonical(I);
|
| + FunctionVisitor check_canonical(T);
|
| I->heap()->IterateObjects(&check_canonical);
|
| #endif // #if defined(DEBUG).
|
|
|
| @@ -1572,7 +1576,7 @@ static Dart_Handle createLibrarySnapshot(Dart_Handle library,
|
| }
|
| I->heap()->CollectAllGarbage();
|
| #if defined(DEBUG)
|
| - FunctionVisitor check_canonical(I);
|
| + FunctionVisitor check_canonical(T);
|
| I->heap()->IterateObjects(&check_canonical);
|
| #endif // #if defined(DEBUG).
|
| ScriptSnapshotWriter writer(buffer, ApiReallocate);
|
| @@ -1757,9 +1761,9 @@ DART_EXPORT Dart_Handle Dart_SendPortGetId(Dart_Handle port,
|
| Dart_Port* port_id) {
|
| DARTSCOPE(Thread::Current());
|
| CHECK_CALLBACK_STATE(I);
|
| - const SendPort& send_port = Api::UnwrapSendPortHandle(I, port);
|
| + const SendPort& send_port = Api::UnwrapSendPortHandle(Z, port);
|
| if (send_port.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, port, SendPort);
|
| + RETURN_TYPE_ERROR(Z, port, SendPort);
|
| }
|
| if (port_id == NULL) {
|
| RETURN_NULL_ERROR(port_id);
|
| @@ -1882,10 +1886,10 @@ DART_EXPORT Dart_Handle Dart_ObjectIsType(Dart_Handle object,
|
| bool* value) {
|
| DARTSCOPE(Thread::Current());
|
|
|
| - const Type& type_obj = Api::UnwrapTypeHandle(I, type);
|
| + const Type& type_obj = Api::UnwrapTypeHandle(Z, type);
|
| if (type_obj.IsNull()) {
|
| *value = false;
|
| - RETURN_TYPE_ERROR(I, type, Type);
|
| + RETURN_TYPE_ERROR(Z, type, Type);
|
| }
|
| if (!type_obj.IsFinalized()) {
|
| return Api::NewError(
|
| @@ -1896,10 +1900,10 @@ DART_EXPORT Dart_Handle Dart_ObjectIsType(Dart_Handle object,
|
| *value = false;
|
| return Api::Success();
|
| }
|
| - const Instance& instance = Api::UnwrapInstanceHandle(I, object);
|
| + const Instance& instance = Api::UnwrapInstanceHandle(Z, object);
|
| if (instance.IsNull()) {
|
| *value = false;
|
| - RETURN_TYPE_ERROR(I, object, Instance);
|
| + RETURN_TYPE_ERROR(Z, object, Instance);
|
| }
|
| CHECK_CALLBACK_STATE(I);
|
| Error& malformed_type_error = Error::Handle(Z);
|
| @@ -2069,7 +2073,7 @@ DART_EXPORT Dart_Handle Dart_InstanceGetType(Dart_Handle instance) {
|
| return Api::NewHandle(I, I->object_store()->null_type());
|
| }
|
| if (!obj.IsInstance()) {
|
| - RETURN_TYPE_ERROR(I, instance, Instance);
|
| + RETURN_TYPE_ERROR(Z, instance, Instance);
|
| }
|
| const Type& type = Type::Handle(Instance::Cast(obj).GetType());
|
| return Api::NewHandle(I, type.Canonicalize());
|
| @@ -2091,9 +2095,9 @@ DART_EXPORT Dart_Handle Dart_IntegerFitsIntoInt64(Dart_Handle integer,
|
| }
|
| // Slow path for Mints and Bigints.
|
| DARTSCOPE(thread);
|
| - const Integer& int_obj = Api::UnwrapIntegerHandle(isolate, integer);
|
| + const Integer& int_obj = Api::UnwrapIntegerHandle(Z, integer);
|
| if (int_obj.IsNull()) {
|
| - RETURN_TYPE_ERROR(isolate, integer, Integer);
|
| + RETURN_TYPE_ERROR(Z, integer, Integer);
|
| }
|
| ASSERT(!Bigint::Cast(int_obj).FitsIntoInt64());
|
| *fits = false;
|
| @@ -2113,9 +2117,9 @@ DART_EXPORT Dart_Handle Dart_IntegerFitsIntoUint64(Dart_Handle integer,
|
| }
|
| // Slow path for Mints and Bigints.
|
| DARTSCOPE(thread);
|
| - const Integer& int_obj = Api::UnwrapIntegerHandle(isolate, integer);
|
| + const Integer& int_obj = Api::UnwrapIntegerHandle(Z, integer);
|
| if (int_obj.IsNull()) {
|
| - RETURN_TYPE_ERROR(isolate, integer, Integer);
|
| + RETURN_TYPE_ERROR(Z, integer, Integer);
|
| }
|
| ASSERT(!int_obj.IsSmi());
|
| if (int_obj.IsMint()) {
|
| @@ -2170,9 +2174,9 @@ DART_EXPORT Dart_Handle Dart_IntegerToInt64(Dart_Handle integer,
|
| }
|
| // Slow path for Mints and Bigints.
|
| DARTSCOPE(thread);
|
| - const Integer& int_obj = Api::UnwrapIntegerHandle(isolate, integer);
|
| + const Integer& int_obj = Api::UnwrapIntegerHandle(Z, integer);
|
| if (int_obj.IsNull()) {
|
| - RETURN_TYPE_ERROR(isolate, integer, Integer);
|
| + RETURN_TYPE_ERROR(Z, integer, Integer);
|
| }
|
| ASSERT(!int_obj.IsSmi());
|
| if (int_obj.IsMint()) {
|
| @@ -2205,9 +2209,9 @@ DART_EXPORT Dart_Handle Dart_IntegerToUint64(Dart_Handle integer,
|
| }
|
| // Slow path for Mints and Bigints.
|
| DARTSCOPE(thread);
|
| - const Integer& int_obj = Api::UnwrapIntegerHandle(isolate, integer);
|
| + const Integer& int_obj = Api::UnwrapIntegerHandle(Z, integer);
|
| if (int_obj.IsNull()) {
|
| - RETURN_TYPE_ERROR(isolate, integer, Integer);
|
| + RETURN_TYPE_ERROR(Z, integer, Integer);
|
| }
|
| if (int_obj.IsSmi()) {
|
| ASSERT(int_obj.IsNegative());
|
| @@ -2234,9 +2238,9 @@ static uword BigintAllocate(intptr_t size) {
|
| DART_EXPORT Dart_Handle Dart_IntegerToHexCString(Dart_Handle integer,
|
| const char** value) {
|
| DARTSCOPE(Thread::Current());
|
| - const Integer& int_obj = Api::UnwrapIntegerHandle(I, integer);
|
| + const Integer& int_obj = Api::UnwrapIntegerHandle(Z, integer);
|
| if (int_obj.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, integer, Integer);
|
| + RETURN_TYPE_ERROR(Z, integer, Integer);
|
| }
|
| if (int_obj.IsSmi() || int_obj.IsMint()) {
|
| const Bigint& bigint = Bigint::Handle(Z,
|
| @@ -2259,9 +2263,9 @@ DART_EXPORT Dart_Handle Dart_NewDouble(double value) {
|
| DART_EXPORT Dart_Handle Dart_DoubleValue(Dart_Handle double_obj,
|
| double* value) {
|
| DARTSCOPE(Thread::Current());
|
| - const Double& obj = Api::UnwrapDoubleHandle(I, double_obj);
|
| + const Double& obj = Api::UnwrapDoubleHandle(Z, double_obj);
|
| if (obj.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, double_obj, Double);
|
| + RETURN_TYPE_ERROR(Z, double_obj, Double);
|
| }
|
| *value = obj.value();
|
| return Api::Success();
|
| @@ -2292,9 +2296,9 @@ DART_EXPORT Dart_Handle Dart_NewBoolean(bool value) {
|
| DART_EXPORT Dart_Handle Dart_BooleanValue(Dart_Handle boolean_obj,
|
| bool* value) {
|
| DARTSCOPE(Thread::Current());
|
| - const Bool& obj = Api::UnwrapBoolHandle(I, boolean_obj);
|
| + const Bool& obj = Api::UnwrapBoolHandle(Z, boolean_obj);
|
| if (obj.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, boolean_obj, Bool);
|
| + RETURN_TYPE_ERROR(Z, boolean_obj, Bool);
|
| }
|
| *value = obj.value();
|
| return Api::Success();
|
| @@ -2310,7 +2314,7 @@ DART_EXPORT Dart_Handle Dart_StringLength(Dart_Handle str, intptr_t* len) {
|
| ReusableObjectHandleScope reused_obj_handle(thread);
|
| const String& str_obj = Api::UnwrapStringHandle(reused_obj_handle, str);
|
| if (str_obj.IsNull()) {
|
| - RETURN_TYPE_ERROR(thread->isolate(), str, String);
|
| + RETURN_TYPE_ERROR(thread->zone(), str, String);
|
| }
|
| *len = str_obj.Length();
|
| return Api::Success();
|
| @@ -2413,9 +2417,9 @@ DART_EXPORT Dart_Handle Dart_StringToCString(Dart_Handle object,
|
| if (cstr == NULL) {
|
| RETURN_NULL_ERROR(cstr);
|
| }
|
| - const String& str_obj = Api::UnwrapStringHandle(I, object);
|
| + const String& str_obj = Api::UnwrapStringHandle(Z, object);
|
| if (str_obj.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, object, String);
|
| + 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);
|
| @@ -2440,9 +2444,9 @@ DART_EXPORT Dart_Handle Dart_StringToUTF8(Dart_Handle str,
|
| if (length == NULL) {
|
| RETURN_NULL_ERROR(length);
|
| }
|
| - const String& str_obj = Api::UnwrapStringHandle(I, str);
|
| + const String& str_obj = Api::UnwrapStringHandle(Z, str);
|
| if (str_obj.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, str, String);
|
| + 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);
|
| @@ -2465,9 +2469,9 @@ DART_EXPORT Dart_Handle Dart_StringToLatin1(Dart_Handle str,
|
| if (length == NULL) {
|
| RETURN_NULL_ERROR(length);
|
| }
|
| - const String& str_obj = Api::UnwrapStringHandle(I, str);
|
| + const String& str_obj = Api::UnwrapStringHandle(Z, str);
|
| if (str_obj.IsNull() || !str_obj.IsOneByteString()) {
|
| - RETURN_TYPE_ERROR(I, str, String);
|
| + RETURN_TYPE_ERROR(Z, str, String);
|
| }
|
| intptr_t str_len = str_obj.Length();
|
| intptr_t copy_len = (str_len > *length) ? *length : str_len;
|
| @@ -2486,9 +2490,9 @@ DART_EXPORT Dart_Handle Dart_StringToUTF16(Dart_Handle str,
|
| uint16_t* utf16_array,
|
| intptr_t* length) {
|
| DARTSCOPE(Thread::Current());
|
| - const String& str_obj = Api::UnwrapStringHandle(I, str);
|
| + const String& str_obj = Api::UnwrapStringHandle(Z, str);
|
| if (str_obj.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, str, String);
|
| + RETURN_TYPE_ERROR(Z, str, String);
|
| }
|
| intptr_t str_len = str_obj.Length();
|
| intptr_t copy_len = (str_len > *length) ? *length : str_len;
|
| @@ -2507,7 +2511,7 @@ DART_EXPORT Dart_Handle Dart_StringStorageSize(Dart_Handle str,
|
| ReusableObjectHandleScope reused_obj_handle(thread);
|
| const String& str_obj = Api::UnwrapStringHandle(reused_obj_handle, str);
|
| if (str_obj.IsNull()) {
|
| - RETURN_TYPE_ERROR(thread->isolate(), str, String);
|
| + RETURN_TYPE_ERROR(thread->zone(), str, String);
|
| }
|
| if (size == NULL) {
|
| RETURN_NULL_ERROR(size);
|
| @@ -2523,12 +2527,12 @@ DART_EXPORT Dart_Handle Dart_MakeExternalString(Dart_Handle str,
|
| void* peer,
|
| Dart_PeerFinalizer cback) {
|
| DARTSCOPE(Thread::Current());
|
| - const String& str_obj = Api::UnwrapStringHandle(I, str);
|
| + const String& str_obj = Api::UnwrapStringHandle(Z, str);
|
| if (str_obj.IsExternal()) {
|
| return str; // String is already an external string.
|
| }
|
| if (str_obj.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, str, String);
|
| + RETURN_TYPE_ERROR(Z, str, String);
|
| }
|
| if (array == NULL) {
|
| RETURN_NULL_ERROR(array);
|
| @@ -2578,7 +2582,7 @@ DART_EXPORT Dart_Handle Dart_StringGetProperties(Dart_Handle object,
|
| ReusableObjectHandleScope reused_obj_handle(thread);
|
| const String& str = Api::UnwrapStringHandle(reused_obj_handle, object);
|
| if (str.IsNull()) {
|
| - RETURN_TYPE_ERROR(thread->isolate(), object, String);
|
| + RETURN_TYPE_ERROR(thread->zone(), object, String);
|
| }
|
| if (str.IsExternal()) {
|
| *peer = str.GetPeer();
|
| @@ -2775,7 +2779,7 @@ DART_EXPORT Dart_Handle Dart_ListGetRange(Dart_Handle list,
|
| const type& array = type::Cast(obj); \
|
| const Object& value_obj = Object::Handle(Z, Api::UnwrapHandle(value)); \
|
| if (!value_obj.IsNull() && !value_obj.IsInstance()) { \
|
| - RETURN_TYPE_ERROR(I, value, Instance); \
|
| + RETURN_TYPE_ERROR(Z, value, Instance); \
|
| } \
|
| if ((index >= 0) && (index < array.Length())) { \
|
| array.SetAt(index, value_obj); \
|
| @@ -2814,7 +2818,7 @@ DART_EXPORT Dart_Handle Dart_ListSetAt(Dart_Handle list,
|
| const Integer& index_obj = Integer::Handle(Z, Integer::New(index));
|
| const Object& value_obj = Object::Handle(Z, Api::UnwrapHandle(value));
|
| if (!value_obj.IsNull() && !value_obj.IsInstance()) {
|
| - RETURN_TYPE_ERROR(I, value, Instance);
|
| + RETURN_TYPE_ERROR(Z, value, Instance);
|
| }
|
| const Array& args = Array::Handle(Z, Array::New(kNumArgs));
|
| args.SetAt(0, instance);
|
| @@ -2839,11 +2843,12 @@ 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"));
|
| const String& class_name = String::Handle(String::New("ArgumentError"));
|
| const Library& lib =
|
| - Library::Handle(isolate, Library::LookupLibrary(lib_url));
|
| + Library::Handle(zone, Library::LookupLibrary(lib_url));
|
| if (lib.IsNull()) {
|
| const String& message = String::Handle(
|
| String::NewFormatted("%s: library '%s' not found.",
|
| @@ -2851,15 +2856,15 @@ static RawObject* ThrowArgumentError(const char* exception_message) {
|
| return ApiError::New(message);
|
| }
|
| const Class& cls = Class::Handle(
|
| - isolate, lib.LookupClassAllowPrivate(class_name));
|
| + zone, lib.LookupClassAllowPrivate(class_name));
|
| ASSERT(!cls.IsNull());
|
| - Object& result = Object::Handle(isolate);
|
| + Object& result = Object::Handle(zone);
|
| String& dot_name = String::Handle(String::New("."));
|
| String& constr_name = String::Handle(String::Concat(class_name, dot_name));
|
| result = ResolveConstructor(CURRENT_FUNC, cls, class_name, constr_name, 1);
|
| if (result.IsError()) return result.raw();
|
| ASSERT(result.IsFunction());
|
| - Function& constructor = Function::Handle(isolate);
|
| + Function& constructor = Function::Handle(zone);
|
| constructor ^= result.raw();
|
| if (!constructor.IsGenerativeConstructor()) {
|
| const String& message = String::Handle(
|
| @@ -2867,12 +2872,11 @@ static RawObject* ThrowArgumentError(const char* exception_message) {
|
| CURRENT_FUNC, class_name.ToCString()));
|
| return ApiError::New(message);
|
| }
|
| - Instance& exception = Instance::Handle(isolate);
|
| + Instance& exception = Instance::Handle(zone);
|
| exception = Instance::New(cls);
|
| - const Array& args = Array::Handle(isolate, Array::New(3));
|
| + const Array& args = Array::Handle(zone, Array::New(3));
|
| args.SetAt(0, exception);
|
| - args.SetAt(1,
|
| - Smi::Handle(isolate, Smi::New(Function::kCtorPhaseAll)));
|
| + args.SetAt(1, Smi::Handle(zone, Smi::New(Function::kCtorPhaseAll)));
|
| args.SetAt(2, String::Handle(String::New(exception_message)));
|
| result = DartEntry::InvokeFunction(constructor, args);
|
| if (result.IsError()) return result.raw();
|
| @@ -3268,11 +3272,11 @@ DART_EXPORT Dart_TypedData_Type Dart_GetTypeOfExternalTypedData(
|
| }
|
| if (RawObject::IsTypedDataViewClassId(class_id)) {
|
| // Check if data object of the view is external.
|
| - Isolate* isolate = Isolate::Current();
|
| - const Instance& view_obj = Api::UnwrapInstanceHandle(isolate, object);
|
| + Zone* zone = Thread::Current()->zone();
|
| + const Instance& view_obj = Api::UnwrapInstanceHandle(zone, object);
|
| ASSERT(!view_obj.IsNull());
|
| const Instance& data_obj =
|
| - Instance::Handle(isolate, TypedDataView::Data(view_obj));
|
| + Instance::Handle(zone, TypedDataView::Data(view_obj));
|
| if (ExternalTypedData::IsExternalTypedData(data_obj)) {
|
| return GetType(class_id);
|
| }
|
| @@ -3281,14 +3285,14 @@ DART_EXPORT Dart_TypedData_Type Dart_GetTypeOfExternalTypedData(
|
| }
|
|
|
|
|
| -static RawObject* GetByteDataConstructor(Isolate* isolate,
|
| +static RawObject* GetByteDataConstructor(Thread* thread,
|
| const String& constructor_name,
|
| intptr_t num_args) {
|
| const Library& lib =
|
| - Library::Handle(isolate->object_store()->typed_data_library());
|
| + Library::Handle(thread->isolate()->object_store()->typed_data_library());
|
| ASSERT(!lib.IsNull());
|
| const Class& cls = Class::Handle(
|
| - isolate, lib.LookupClassAllowPrivate(Symbols::ByteData()));
|
| + thread->zone(), lib.LookupClassAllowPrivate(Symbols::ByteData()));
|
| ASSERT(!cls.IsNull());
|
| return ResolveConstructor(CURRENT_FUNC,
|
| cls,
|
| @@ -3298,20 +3302,22 @@ static RawObject* GetByteDataConstructor(Isolate* isolate,
|
| }
|
|
|
|
|
| -static Dart_Handle NewByteData(Isolate* isolate, intptr_t length) {
|
| +static Dart_Handle NewByteData(Thread* thread, intptr_t length) {
|
| CHECK_LENGTH(length, TypedData::MaxElements(kTypedDataInt8ArrayCid));
|
| - Object& result = Object::Handle(isolate);
|
| - result = GetByteDataConstructor(isolate, Symbols::ByteDataDot(), 1);
|
| + Isolate* isolate = thread->isolate();
|
| + Zone* zone = thread->zone();
|
| + Object& result = Object::Handle(zone);
|
| + result = GetByteDataConstructor(thread, Symbols::ByteDataDot(), 1);
|
| ASSERT(!result.IsNull());
|
| ASSERT(result.IsFunction());
|
| const Function& factory = Function::Cast(result);
|
| ASSERT(!factory.IsGenerativeConstructor());
|
|
|
| // Create the argument list.
|
| - const Array& args = Array::Handle(isolate, Array::New(2));
|
| + const Array& args = Array::Handle(zone, Array::New(2));
|
| // Factories get type arguments.
|
| args.SetAt(0, Object::null_type_arguments());
|
| - args.SetAt(1, Smi::Handle(isolate, Smi::New(length)));
|
| + args.SetAt(1, Smi::Handle(zone, Smi::New(length)));
|
|
|
| // Invoke the constructor and return the new object.
|
| result = DartEntry::InvokeFunction(factory, args);
|
| @@ -3329,11 +3335,13 @@ static Dart_Handle NewTypedData(Isolate* isolate,
|
|
|
|
|
| static Dart_Handle NewExternalTypedData(
|
| - Isolate* isolate, intptr_t cid, void* data, intptr_t length) {
|
| + 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(
|
| - isolate,
|
| + zone,
|
| ExternalTypedData::New(cid,
|
| reinterpret_cast<uint8_t*>(data),
|
| length,
|
| @@ -3343,14 +3351,16 @@ static Dart_Handle NewExternalTypedData(
|
|
|
|
|
| static Dart_Handle NewExternalByteData(
|
| - Isolate* isolate, void* data, intptr_t length) {
|
| + Thread* thread, void* data, intptr_t length) {
|
| + Zone* zone = thread->zone();
|
| + Isolate* isolate = thread->isolate();
|
| Dart_Handle ext_data = NewExternalTypedData(
|
| - isolate, kExternalTypedDataUint8ArrayCid, data, length);
|
| + thread, kExternalTypedDataUint8ArrayCid, data, length);
|
| if (::Dart_IsError(ext_data)) {
|
| return ext_data;
|
| }
|
| - Object& result = Object::Handle(isolate);
|
| - result = GetByteDataConstructor(isolate, Symbols::ByteDataDot_view(), 3);
|
| + Object& result = Object::Handle(zone);
|
| + result = GetByteDataConstructor(thread, Symbols::ByteDataDot_view(), 3);
|
| ASSERT(!result.IsNull());
|
| ASSERT(result.IsFunction());
|
| const Function& factory = Function::Cast(result);
|
| @@ -3358,13 +3368,13 @@ static Dart_Handle NewExternalByteData(
|
|
|
| // Create the argument list.
|
| const intptr_t num_args = 3;
|
| - const Array& args = Array::Handle(isolate, Array::New(num_args + 1));
|
| + const Array& args = Array::Handle(zone, Array::New(num_args + 1));
|
| // Factories get type arguments.
|
| args.SetAt(0, Object::null_type_arguments());
|
| const ExternalTypedData& array =
|
| - Api::UnwrapExternalTypedDataHandle(isolate, ext_data);
|
| + Api::UnwrapExternalTypedDataHandle(zone, ext_data);
|
| args.SetAt(1, array);
|
| - Smi& smi = Smi::Handle(isolate);
|
| + Smi& smi = Smi::Handle(zone);
|
| smi = Smi::New(0);
|
| args.SetAt(2, smi);
|
| smi = Smi::New(length);
|
| @@ -3383,7 +3393,7 @@ DART_EXPORT Dart_Handle Dart_NewTypedData(Dart_TypedData_Type type,
|
| CHECK_CALLBACK_STATE(I);
|
| switch (type) {
|
| case Dart_TypedData_kByteData :
|
| - return NewByteData(I, length);
|
| + return NewByteData(T, length);
|
| case Dart_TypedData_kInt8 :
|
| return NewTypedData(I, kTypedDataInt8ArrayCid, length);
|
| case Dart_TypedData_kUint8 :
|
| @@ -3428,42 +3438,42 @@ DART_EXPORT Dart_Handle Dart_NewExternalTypedData(
|
| CHECK_CALLBACK_STATE(I);
|
| switch (type) {
|
| case Dart_TypedData_kByteData:
|
| - return NewExternalByteData(I, data, length);
|
| + return NewExternalByteData(T, data, length);
|
| case Dart_TypedData_kInt8:
|
| - return NewExternalTypedData(I,
|
| + return NewExternalTypedData(T,
|
| kExternalTypedDataInt8ArrayCid, data, length);
|
| case Dart_TypedData_kUint8:
|
| - return NewExternalTypedData(I,
|
| + return NewExternalTypedData(T,
|
| kExternalTypedDataUint8ArrayCid, data, length);
|
| case Dart_TypedData_kUint8Clamped:
|
| - return NewExternalTypedData(I,
|
| + return NewExternalTypedData(T,
|
| kExternalTypedDataUint8ClampedArrayCid, data, length);
|
| case Dart_TypedData_kInt16:
|
| - return NewExternalTypedData(I,
|
| + return NewExternalTypedData(T,
|
| kExternalTypedDataInt16ArrayCid, data, length);
|
| case Dart_TypedData_kUint16:
|
| - return NewExternalTypedData(I,
|
| + return NewExternalTypedData(T,
|
| kExternalTypedDataUint16ArrayCid, data, length);
|
| case Dart_TypedData_kInt32:
|
| - return NewExternalTypedData(I,
|
| + return NewExternalTypedData(T,
|
| kExternalTypedDataInt32ArrayCid, data, length);
|
| case Dart_TypedData_kUint32:
|
| - return NewExternalTypedData(I,
|
| + return NewExternalTypedData(T,
|
| kExternalTypedDataUint32ArrayCid, data, length);
|
| case Dart_TypedData_kInt64:
|
| - return NewExternalTypedData(I,
|
| + return NewExternalTypedData(T,
|
| kExternalTypedDataInt64ArrayCid, data, length);
|
| case Dart_TypedData_kUint64:
|
| - return NewExternalTypedData(I,
|
| + return NewExternalTypedData(T,
|
| kExternalTypedDataUint64ArrayCid, data, length);
|
| case Dart_TypedData_kFloat32:
|
| - return NewExternalTypedData(I,
|
| + return NewExternalTypedData(T,
|
| kExternalTypedDataFloat32ArrayCid, data, length);
|
| case Dart_TypedData_kFloat64:
|
| - return NewExternalTypedData(I,
|
| + return NewExternalTypedData(T,
|
| kExternalTypedDataFloat64ArrayCid, data, length);
|
| case Dart_TypedData_kFloat32x4:
|
| - return NewExternalTypedData(I,
|
| + return NewExternalTypedData(T,
|
| kExternalTypedDataFloat32x4ArrayCid, data, length);
|
| default:
|
| return Api::NewError("%s expects argument 'type' to be of"
|
| @@ -3474,15 +3484,15 @@ DART_EXPORT Dart_Handle Dart_NewExternalTypedData(
|
| }
|
|
|
|
|
| -static RawObject* GetByteBufferConstructor(Isolate* isolate,
|
| +static RawObject* GetByteBufferConstructor(Thread* thread,
|
| const String& class_name,
|
| const String& constructor_name,
|
| intptr_t num_args) {
|
| const Library& lib =
|
| - Library::Handle(isolate->object_store()->typed_data_library());
|
| + Library::Handle(thread->isolate()->object_store()->typed_data_library());
|
| ASSERT(!lib.IsNull());
|
| const Class& cls = Class::Handle(
|
| - isolate, lib.LookupClassAllowPrivate(class_name));
|
| + thread->zone(), lib.LookupClassAllowPrivate(class_name));
|
| ASSERT(!cls.IsNull());
|
| return ResolveConstructor(CURRENT_FUNC,
|
| cls,
|
| @@ -3498,10 +3508,10 @@ DART_EXPORT Dart_Handle Dart_NewByteBuffer(Dart_Handle typed_data) {
|
| if (!RawObject::IsExternalTypedDataClassId(class_id) &&
|
| !RawObject::IsTypedDataViewClassId(class_id) &&
|
| !RawObject::IsTypedDataClassId(class_id)) {
|
| - RETURN_TYPE_ERROR(I, typed_data, 'TypedData');
|
| + RETURN_TYPE_ERROR(Z, typed_data, 'TypedData');
|
| }
|
| Object& result = Object::Handle(Z);
|
| - result = GetByteBufferConstructor(I,
|
| + result = GetByteBufferConstructor(T,
|
| Symbols::_ByteBuffer(),
|
| Symbols::_ByteBufferDot_New(),
|
| 1);
|
| @@ -3566,7 +3576,7 @@ DART_EXPORT Dart_Handle Dart_TypedDataAcquireData(Dart_Handle object,
|
| if (!RawObject::IsExternalTypedDataClassId(class_id) &&
|
| !RawObject::IsTypedDataViewClassId(class_id) &&
|
| !RawObject::IsTypedDataClassId(class_id)) {
|
| - RETURN_TYPE_ERROR(I, object, 'TypedData');
|
| + RETURN_TYPE_ERROR(Z, object, 'TypedData');
|
| }
|
| if (type == NULL) {
|
| RETURN_NULL_ERROR(type);
|
| @@ -3586,7 +3596,7 @@ DART_EXPORT Dart_Handle Dart_TypedDataAcquireData(Dart_Handle object,
|
| // If it is an external typed data object just return the data field.
|
| if (RawObject::IsExternalTypedDataClassId(class_id)) {
|
| const ExternalTypedData& obj =
|
| - Api::UnwrapExternalTypedDataHandle(I, object);
|
| + Api::UnwrapExternalTypedDataHandle(Z, object);
|
| ASSERT(!obj.IsNull());
|
| length = obj.Length();
|
| size_in_bytes = length * ExternalTypedData::ElementSizeInBytes(class_id);
|
| @@ -3594,7 +3604,7 @@ DART_EXPORT Dart_Handle Dart_TypedDataAcquireData(Dart_Handle object,
|
| external = true;
|
| } else if (RawObject::IsTypedDataClassId(class_id)) {
|
| // Regular typed data object, set up some GC and API callback guards.
|
| - const TypedData& obj = Api::UnwrapTypedDataHandle(I, object);
|
| + const TypedData& obj = Api::UnwrapTypedDataHandle(Z, object);
|
| ASSERT(!obj.IsNull());
|
| length = obj.Length();
|
| size_in_bytes = length * TypedData::ElementSizeInBytes(class_id);
|
| @@ -3603,7 +3613,7 @@ DART_EXPORT Dart_Handle Dart_TypedDataAcquireData(Dart_Handle object,
|
| data_tmp = obj.DataAddr(0);
|
| } else {
|
| ASSERT(RawObject::IsTypedDataViewClassId(class_id));
|
| - const Instance& view_obj = Api::UnwrapInstanceHandle(I, object);
|
| + const Instance& view_obj = Api::UnwrapInstanceHandle(Z, object);
|
| ASSERT(!view_obj.IsNull());
|
| Smi& val = Smi::Handle();
|
| val ^= TypedDataView::Length(view_obj);
|
| @@ -3655,7 +3665,7 @@ DART_EXPORT Dart_Handle Dart_TypedDataReleaseData(Dart_Handle object) {
|
| if (!RawObject::IsExternalTypedDataClassId(class_id) &&
|
| !RawObject::IsTypedDataViewClassId(class_id) &&
|
| !RawObject::IsTypedDataClassId(class_id)) {
|
| - RETURN_TYPE_ERROR(I, object, 'TypedData');
|
| + RETURN_TYPE_ERROR(Z, object, 'TypedData');
|
| }
|
| if (!RawObject::IsExternalTypedDataClassId(class_id)) {
|
| T->DecrementNoSafepointScopeDepth();
|
| @@ -3677,13 +3687,15 @@ DART_EXPORT Dart_Handle Dart_TypedDataReleaseData(Dart_Handle object) {
|
|
|
|
|
| DART_EXPORT Dart_Handle Dart_GetDataFromByteBuffer(Dart_Handle object) {
|
| - Isolate* isolate = Isolate::Current();
|
| + Thread* thread = Thread::Current();
|
| + Zone* zone = thread->zone();
|
| + Isolate* isolate = thread->isolate();
|
| CHECK_ISOLATE(isolate);
|
| intptr_t class_id = Api::ClassId(object);
|
| if (class_id != kByteBufferCid) {
|
| - RETURN_TYPE_ERROR(isolate, object, 'ByteBuffer');
|
| + RETURN_TYPE_ERROR(zone, object, 'ByteBuffer');
|
| }
|
| - const Instance& instance = Api::UnwrapInstanceHandle(isolate, object);
|
| + const Instance& instance = Api::UnwrapInstanceHandle(zone, object);
|
| ASSERT(!instance.IsNull());
|
| return Api::NewHandle(isolate, ByteBuffer::Data(instance));
|
| }
|
| @@ -3756,7 +3768,7 @@ DART_EXPORT Dart_Handle Dart_New(Dart_Handle type,
|
| // Get the class to instantiate.
|
| Object& unchecked_type = Object::Handle(Api::UnwrapHandle(type));
|
| if (unchecked_type.IsNull() || !unchecked_type.IsType()) {
|
| - RETURN_TYPE_ERROR(I, type, Type);
|
| + RETURN_TYPE_ERROR(Z, type, Type);
|
| }
|
| Type& type_obj = Type::Handle();
|
| type_obj ^= unchecked_type.raw();
|
| @@ -3779,7 +3791,7 @@ DART_EXPORT Dart_Handle Dart_New(Dart_Handle type,
|
| } else if (result.IsString()) {
|
| dot_name = String::Concat(Symbols::Dot(), String::Cast(result));
|
| } else {
|
| - RETURN_TYPE_ERROR(I, constructor_name, String);
|
| + RETURN_TYPE_ERROR(Z, constructor_name, String);
|
| }
|
|
|
| // Resolve the constructor.
|
| @@ -3879,12 +3891,13 @@ DART_EXPORT Dart_Handle Dart_New(Dart_Handle type,
|
| }
|
|
|
|
|
| -static RawInstance* AllocateObject(Isolate* isolate, const Class& cls) {
|
| +static RawInstance* AllocateObject(Thread* thread, const Class& cls) {
|
| if (!cls.is_fields_marked_nullable()) {
|
| // Mark all fields as nullable.
|
| - Class& iterate_cls = Class::Handle(isolate, cls.raw());
|
| - Field& field = Field::Handle(isolate);
|
| - Array& fields = Array::Handle(isolate);
|
| + Zone* zone = thread->zone();
|
| + Class& iterate_cls = Class::Handle(zone, cls.raw());
|
| + Field& field = Field::Handle(zone);
|
| + Array& fields = Array::Handle(zone);
|
| while (!iterate_cls.IsNull()) {
|
| ASSERT(iterate_cls.is_finalized());
|
| iterate_cls.set_is_fields_marked_nullable();
|
| @@ -3909,10 +3922,10 @@ DART_EXPORT Dart_Handle Dart_Allocate(Dart_Handle type) {
|
| DARTSCOPE(Thread::Current());
|
| CHECK_CALLBACK_STATE(I);
|
|
|
| - const Type& type_obj = Api::UnwrapTypeHandle(I, type);
|
| + const Type& type_obj = Api::UnwrapTypeHandle(Z, type);
|
| // Get the class to instantiate.
|
| if (type_obj.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, type, Type);
|
| + RETURN_TYPE_ERROR(Z, type, Type);
|
| }
|
| const Class& cls = Class::Handle(Z, type_obj.type_class());
|
| const Error& error = Error::Handle(Z, cls.EnsureIsFinalized(T));
|
| @@ -3920,7 +3933,7 @@ DART_EXPORT Dart_Handle Dart_Allocate(Dart_Handle type) {
|
| // An error occurred, return error object.
|
| return Api::NewHandle(I, error.raw());
|
| }
|
| - return Api::NewHandle(I, AllocateObject(I, cls));
|
| + return Api::NewHandle(I, AllocateObject(T, cls));
|
| }
|
|
|
|
|
| @@ -3931,10 +3944,10 @@ DART_EXPORT Dart_Handle Dart_AllocateWithNativeFields(
|
| DARTSCOPE(Thread::Current());
|
| CHECK_CALLBACK_STATE(I);
|
|
|
| - const Type& type_obj = Api::UnwrapTypeHandle(I, type);
|
| + const Type& type_obj = Api::UnwrapTypeHandle(Z, type);
|
| // Get the class to instantiate.
|
| if (type_obj.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, type, Type);
|
| + RETURN_TYPE_ERROR(Z, type, Type);
|
| }
|
| if (native_fields == NULL) {
|
| RETURN_NULL_ERROR(native_fields);
|
| @@ -3950,20 +3963,22 @@ DART_EXPORT Dart_Handle Dart_AllocateWithNativeFields(
|
| "%s: invalid number of native fields %" Pd " passed in, expected %d",
|
| CURRENT_FUNC, num_native_fields, cls.num_native_fields());
|
| }
|
| - const Instance& instance = Instance::Handle(Z, AllocateObject(I, cls));
|
| + const Instance& instance = Instance::Handle(Z, AllocateObject(T, cls));
|
| instance.SetNativeFields(num_native_fields, native_fields);
|
| return Api::NewHandle(I, instance.raw());
|
| }
|
|
|
|
|
| -static Dart_Handle SetupArguments(Isolate* isolate,
|
| +static Dart_Handle SetupArguments(Thread* thread,
|
| int num_args,
|
| Dart_Handle* arguments,
|
| 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(isolate);
|
| + Object& arg = Object::Handle(zone);
|
| for (int i = 0; i < num_args; i++) {
|
| arg = Api::UnwrapHandle(arguments[i]);
|
| if (!arg.IsNull() && !arg.IsInstance()) {
|
| @@ -3994,13 +4009,13 @@ DART_EXPORT Dart_Handle Dart_InvokeConstructor(Dart_Handle object,
|
| "%s expects argument 'number_of_arguments' to be non-negative.",
|
| CURRENT_FUNC);
|
| }
|
| - const String& constructor_name = Api::UnwrapStringHandle(I, name);
|
| + const String& constructor_name = Api::UnwrapStringHandle(Z, name);
|
| if (constructor_name.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, name, String);
|
| + RETURN_TYPE_ERROR(Z, name, String);
|
| }
|
| - const Instance& instance = Api::UnwrapInstanceHandle(I, object);
|
| + const Instance& instance = Api::UnwrapInstanceHandle(Z, object);
|
| if (instance.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, object, Instance);
|
| + RETURN_TYPE_ERROR(Z, object, Instance);
|
| }
|
|
|
| // Since we have allocated an object it would mean that the type
|
| @@ -4038,7 +4053,7 @@ DART_EXPORT Dart_Handle Dart_InvokeConstructor(Dart_Handle object,
|
| }
|
| Dart_Handle result;
|
| Array& args = Array::Handle(Z);
|
| - result = SetupArguments(I,
|
| + result = SetupArguments(T,
|
| number_of_arguments, arguments, extra_args, &args);
|
| if (!::Dart_IsError(result)) {
|
| args.SetAt(0, instance);
|
| @@ -4066,9 +4081,9 @@ DART_EXPORT Dart_Handle Dart_Invoke(Dart_Handle target,
|
| DARTSCOPE(Thread::Current());
|
| CHECK_CALLBACK_STATE(I);
|
|
|
| - const String& function_name = Api::UnwrapStringHandle(I, name);
|
| + const String& function_name = Api::UnwrapStringHandle(Z, name);
|
| if (function_name.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, name, String);
|
| + RETURN_TYPE_ERROR(Z, name, String);
|
| }
|
| if (number_of_arguments < 0) {
|
| return Api::NewError(
|
| @@ -4102,7 +4117,7 @@ DART_EXPORT Dart_Handle Dart_Invoke(Dart_Handle target,
|
| function_name.ToCString());
|
| }
|
| // Setup args and check for malformed arguments in the arguments list.
|
| - result = SetupArguments(I, number_of_arguments, arguments, 0, &args);
|
| + result = SetupArguments(T, number_of_arguments, arguments, 0, &args);
|
| if (!::Dart_IsError(result)) {
|
| result = Api::NewHandle(I, DartEntry::InvokeFunction(function, args));
|
| }
|
| @@ -4119,7 +4134,7 @@ DART_EXPORT Dart_Handle Dart_Invoke(Dart_Handle target,
|
| Resolver::ResolveDynamic(instance, function_name, args_desc));
|
| if (function.IsNull()) {
|
| // Setup args and check for malformed arguments in the arguments list.
|
| - result = SetupArguments(I,
|
| + result = SetupArguments(T,
|
| number_of_arguments,
|
| arguments,
|
| 1,
|
| @@ -4137,7 +4152,7 @@ DART_EXPORT Dart_Handle Dart_Invoke(Dart_Handle target,
|
| return result;
|
| }
|
| // Setup args and check for malformed arguments in the arguments list.
|
| - result = SetupArguments(I, number_of_arguments, arguments, 1, &args);
|
| + 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));
|
| @@ -4173,7 +4188,7 @@ DART_EXPORT Dart_Handle Dart_Invoke(Dart_Handle target,
|
| error_message.ToCString());
|
| }
|
| // Setup args and check for malformed arguments in the arguments list.
|
| - result = SetupArguments(I, number_of_arguments, arguments, 0, &args);
|
| + result = SetupArguments(T, number_of_arguments, arguments, 0, &args);
|
| if (!::Dart_IsError(result)) {
|
| result = Api::NewHandle(I, DartEntry::InvokeFunction(function, args));
|
| }
|
| @@ -4191,9 +4206,9 @@ DART_EXPORT Dart_Handle Dart_InvokeClosure(Dart_Handle closure,
|
| Dart_Handle* arguments) {
|
| DARTSCOPE(Thread::Current());
|
| CHECK_CALLBACK_STATE(I);
|
| - const Instance& closure_obj = Api::UnwrapInstanceHandle(I, closure);
|
| + const Instance& closure_obj = Api::UnwrapInstanceHandle(Z, closure);
|
| if (closure_obj.IsNull() || !closure_obj.IsCallable(NULL)) {
|
| - RETURN_TYPE_ERROR(I, closure, Instance);
|
| + RETURN_TYPE_ERROR(Z, closure, Instance);
|
| }
|
| if (number_of_arguments < 0) {
|
| return Api::NewError(
|
| @@ -4208,7 +4223,7 @@ DART_EXPORT Dart_Handle Dart_InvokeClosure(Dart_Handle closure,
|
| for (int i = 0; i < number_of_arguments; i++) {
|
| obj = Api::UnwrapHandle(arguments[i]);
|
| if (!obj.IsNull() && !obj.IsInstance()) {
|
| - RETURN_TYPE_ERROR(I, arguments[i], Instance);
|
| + RETURN_TYPE_ERROR(Z, arguments[i], Instance);
|
| }
|
| args.SetAt(i + 1, obj);
|
| }
|
| @@ -4221,9 +4236,9 @@ DART_EXPORT Dart_Handle Dart_GetField(Dart_Handle container, Dart_Handle name) {
|
| DARTSCOPE(Thread::Current());
|
| CHECK_CALLBACK_STATE(I);
|
|
|
| - const String& field_name = Api::UnwrapStringHandle(I, name);
|
| + const String& field_name = Api::UnwrapStringHandle(Z, name);
|
| if (field_name.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, name, String);
|
| + RETURN_TYPE_ERROR(Z, name, String);
|
| }
|
|
|
| Field& field = Field::Handle(Z);
|
| @@ -4342,15 +4357,15 @@ DART_EXPORT Dart_Handle Dart_SetField(Dart_Handle container,
|
| DARTSCOPE(Thread::Current());
|
| CHECK_CALLBACK_STATE(I);
|
|
|
| - const String& field_name = Api::UnwrapStringHandle(I, name);
|
| + const String& field_name = Api::UnwrapStringHandle(Z, name);
|
| if (field_name.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, name, String);
|
| + RETURN_TYPE_ERROR(Z, name, String);
|
| }
|
|
|
| // Since null is allowed for value, we don't use UnwrapInstanceHandle.
|
| const Object& value_obj = Object::Handle(Z, Api::UnwrapHandle(value));
|
| if (!value_obj.IsNull() && !value_obj.IsInstance()) {
|
| - RETURN_TYPE_ERROR(I, value, Instance);
|
| + RETURN_TYPE_ERROR(Z, value, Instance);
|
| }
|
| Instance& value_instance = Instance::Handle(Z);
|
| value_instance ^= value_obj.raw();
|
| @@ -4492,13 +4507,14 @@ DART_EXPORT Dart_Handle Dart_SetField(Dart_Handle container,
|
|
|
| DART_EXPORT Dart_Handle Dart_ThrowException(Dart_Handle exception) {
|
| Thread* thread = Thread::Current();
|
| + Zone* zone = thread->zone();
|
| Isolate* isolate = thread->isolate();
|
| CHECK_ISOLATE(isolate);
|
| CHECK_CALLBACK_STATE(isolate);
|
| {
|
| - const Instance& excp = Api::UnwrapInstanceHandle(isolate, exception);
|
| + const Instance& excp = Api::UnwrapInstanceHandle(zone, exception);
|
| if (excp.IsNull()) {
|
| - RETURN_TYPE_ERROR(isolate, exception, Instance);
|
| + RETURN_TYPE_ERROR(zone, exception, Instance);
|
| }
|
| }
|
| if (isolate->top_exit_frame_info() == 0) {
|
| @@ -4515,7 +4531,7 @@ DART_EXPORT Dart_Handle Dart_ThrowException(Dart_Handle exception) {
|
| {
|
| NoSafepointScope no_safepoint;
|
| RawInstance* raw_exception =
|
| - Api::UnwrapInstanceHandle(isolate, exception).raw();
|
| + Api::UnwrapInstanceHandle(zone, exception).raw();
|
| state->UnwindScopes(isolate->top_exit_frame_info());
|
| saved_exception = &Instance::Handle(raw_exception);
|
| }
|
| @@ -4527,17 +4543,18 @@ DART_EXPORT Dart_Handle Dart_ThrowException(Dart_Handle exception) {
|
| DART_EXPORT Dart_Handle Dart_ReThrowException(Dart_Handle exception,
|
| Dart_Handle stacktrace) {
|
| Thread* thread = Thread::Current();
|
| + Zone* zone = thread->zone();
|
| Isolate* isolate = thread->isolate();
|
| CHECK_ISOLATE(isolate);
|
| CHECK_CALLBACK_STATE(isolate);
|
| {
|
| - const Instance& excp = Api::UnwrapInstanceHandle(isolate, exception);
|
| + const Instance& excp = Api::UnwrapInstanceHandle(zone, exception);
|
| if (excp.IsNull()) {
|
| - RETURN_TYPE_ERROR(isolate, exception, Instance);
|
| + RETURN_TYPE_ERROR(zone, exception, Instance);
|
| }
|
| - const Instance& stk = Api::UnwrapInstanceHandle(isolate, stacktrace);
|
| + const Instance& stk = Api::UnwrapInstanceHandle(zone, stacktrace);
|
| if (stk.IsNull()) {
|
| - RETURN_TYPE_ERROR(isolate, stacktrace, Instance);
|
| + RETURN_TYPE_ERROR(zone, stacktrace, Instance);
|
| }
|
| }
|
| if (isolate->top_exit_frame_info() == 0) {
|
| @@ -4555,9 +4572,9 @@ DART_EXPORT Dart_Handle Dart_ReThrowException(Dart_Handle exception,
|
| {
|
| NoSafepointScope no_safepoint;
|
| RawInstance* raw_exception =
|
| - Api::UnwrapInstanceHandle(isolate, exception).raw();
|
| + Api::UnwrapInstanceHandle(zone, exception).raw();
|
| RawStacktrace* raw_stacktrace =
|
| - Api::UnwrapStacktraceHandle(isolate, stacktrace).raw();
|
| + Api::UnwrapStacktraceHandle(zone, stacktrace).raw();
|
| state->UnwindScopes(isolate->top_exit_frame_info());
|
| saved_exception = &Instance::Handle(raw_exception);
|
| saved_stacktrace = &Stacktrace::Handle(raw_stacktrace);
|
| @@ -4573,13 +4590,13 @@ DART_EXPORT Dart_Handle Dart_CreateNativeWrapperClass(Dart_Handle library,
|
| Dart_Handle name,
|
| int field_count) {
|
| DARTSCOPE(Thread::Current());
|
| - const String& cls_name = Api::UnwrapStringHandle(I, name);
|
| + const String& cls_name = Api::UnwrapStringHandle(Z, name);
|
| if (cls_name.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, name, String);
|
| + RETURN_TYPE_ERROR(Z, name, String);
|
| }
|
| - const Library& lib = Api::UnwrapLibraryHandle(I, library);
|
| + const Library& lib = Api::UnwrapLibraryHandle(Z, library);
|
| if (lib.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, library, Library);
|
| + RETURN_TYPE_ERROR(Z, library, Library);
|
| }
|
| if (!Utils::IsUint(16, field_count)) {
|
| return Api::NewError(
|
| @@ -4605,7 +4622,7 @@ DART_EXPORT Dart_Handle Dart_GetNativeInstanceFieldCount(Dart_Handle obj,
|
| ReusableObjectHandleScope reused_obj_handle(thread);
|
| const Instance& instance = Api::UnwrapInstanceHandle(reused_obj_handle, obj);
|
| if (instance.IsNull()) {
|
| - RETURN_TYPE_ERROR(thread->isolate(), obj, Instance);
|
| + RETURN_TYPE_ERROR(thread->zone(), obj, Instance);
|
| }
|
| *count = instance.NumNativeFields();
|
| return Api::Success();
|
| @@ -4620,7 +4637,7 @@ DART_EXPORT Dart_Handle Dart_GetNativeInstanceField(Dart_Handle obj,
|
| ReusableObjectHandleScope reused_obj_handle(thread);
|
| const Instance& instance = Api::UnwrapInstanceHandle(reused_obj_handle, obj);
|
| if (instance.IsNull()) {
|
| - RETURN_TYPE_ERROR(thread->isolate(), obj, Instance);
|
| + RETURN_TYPE_ERROR(thread->zone(), obj, Instance);
|
| }
|
| if (!instance.IsValidNativeIndex(index)) {
|
| return Api::NewError(
|
| @@ -4636,9 +4653,9 @@ DART_EXPORT Dart_Handle Dart_SetNativeInstanceField(Dart_Handle obj,
|
| int index,
|
| intptr_t value) {
|
| DARTSCOPE(Thread::Current());
|
| - const Instance& instance = Api::UnwrapInstanceHandle(I, obj);
|
| + const Instance& instance = Api::UnwrapInstanceHandle(Z, obj);
|
| if (instance.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, obj, Instance);
|
| + RETURN_TYPE_ERROR(Z, obj, Instance);
|
| }
|
| if (!instance.IsValidNativeIndex(index)) {
|
| return Api::NewError(
|
| @@ -4949,14 +4966,14 @@ DART_EXPORT void Dart_SetWeakHandleReturnValue(Dart_NativeArguments args,
|
| RawString* Api::CallEnvironmentCallback(Isolate* isolate, const String& name) {
|
| Scope api_scope(isolate);
|
| Dart_EnvironmentCallback callback = isolate->environment_callback();
|
| - String& result = String::Handle(isolate);
|
| + String& result = String::Handle(isolate->current_zone());
|
| if (callback != NULL) {
|
| Dart_Handle response = callback(Api::NewHandle(isolate, name.raw()));
|
| if (::Dart_IsString(response)) {
|
| result ^= Api::UnwrapHandle(response);
|
| } else if (::Dart_IsError(response)) {
|
| const Object& error =
|
| - Object::Handle(isolate, Api::UnwrapHandle(response));
|
| + Object::Handle(isolate->current_zone(), Api::UnwrapHandle(response));
|
| Exceptions::ThrowArgumentError(
|
| String::Handle(String::New(Error::Cast(error).ToErrorCString())));
|
| } else if (!::Dart_IsNull(response)) {
|
| @@ -5046,7 +5063,8 @@ static void CompileSource(Isolate* isolate,
|
| lib.SetLoadInProgress();
|
| }
|
| ASSERT(isolate != NULL);
|
| - const Error& error = Error::Handle(isolate, Compiler::Compile(lib, script));
|
| + const Error& error =
|
| + Error::Handle(isolate->current_zone(), Compiler::Compile(lib, script));
|
| if (error.IsNull()) {
|
| *result = Api::NewHandle(isolate, lib.raw());
|
| } else {
|
| @@ -5063,13 +5081,13 @@ DART_EXPORT Dart_Handle Dart_LoadScript(Dart_Handle url,
|
| intptr_t line_offset,
|
| intptr_t column_offset) {
|
| DARTSCOPE(Thread::Current());
|
| - const String& url_str = Api::UnwrapStringHandle(I, url);
|
| + const String& url_str = Api::UnwrapStringHandle(Z, url);
|
| if (url_str.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, url, String);
|
| + RETURN_TYPE_ERROR(Z, url, String);
|
| }
|
| - const String& source_str = Api::UnwrapStringHandle(I, source);
|
| + const String& source_str = Api::UnwrapStringHandle(Z, source);
|
| if (source_str.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, source, String);
|
| + RETURN_TYPE_ERROR(Z, source, String);
|
| }
|
| Library& library = Library::Handle(Z, I->object_store()->root_library());
|
| if (!library.IsNull()) {
|
| @@ -5155,13 +5173,13 @@ DART_EXPORT Dart_Handle Dart_RootLibrary() {
|
| DART_EXPORT Dart_Handle Dart_GetClass(Dart_Handle library,
|
| Dart_Handle class_name) {
|
| DARTSCOPE(Thread::Current());
|
| - const Library& lib = Api::UnwrapLibraryHandle(I, library);
|
| + const Library& lib = Api::UnwrapLibraryHandle(Z, library);
|
| if (lib.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, library, Library);
|
| + RETURN_TYPE_ERROR(Z, library, Library);
|
| }
|
| - const String& cls_name = Api::UnwrapStringHandle(I, class_name);
|
| + const String& cls_name = Api::UnwrapStringHandle(Z, class_name);
|
| if (cls_name.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, class_name, String);
|
| + RETURN_TYPE_ERROR(Z, class_name, String);
|
| }
|
| const Class& cls = Class::Handle(Z, lib.LookupClassAllowPrivate(cls_name));
|
| if (cls.IsNull()) {
|
| @@ -5181,18 +5199,18 @@ DART_EXPORT Dart_Handle Dart_GetType(Dart_Handle library,
|
| DARTSCOPE(Thread::Current());
|
|
|
| // Validate the input arguments.
|
| - const Library& lib = Api::UnwrapLibraryHandle(I, library);
|
| + const Library& lib = Api::UnwrapLibraryHandle(Z, library);
|
| if (lib.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, library, Library);
|
| + RETURN_TYPE_ERROR(Z, library, Library);
|
| }
|
| if (!lib.Loaded()) {
|
| return Api::NewError(
|
| "%s expects library argument 'library' to be loaded.",
|
| CURRENT_FUNC);
|
| }
|
| - const String& name_str = Api::UnwrapStringHandle(I, class_name);
|
| + const String& name_str = Api::UnwrapStringHandle(Z, class_name);
|
| if (name_str.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, class_name, String);
|
| + RETURN_TYPE_ERROR(Z, class_name, String);
|
| }
|
| const Class& cls = Class::Handle(Z, lib.LookupClassAllowPrivate(name_str));
|
| if (cls.IsNull()) {
|
| @@ -5219,9 +5237,9 @@ DART_EXPORT Dart_Handle Dart_GetType(Dart_Handle library,
|
| number_of_type_arguments,
|
| num_expected_type_arguments);
|
| }
|
| - const Array& array = Api::UnwrapArrayHandle(I, *type_arguments);
|
| + const Array& array = Api::UnwrapArrayHandle(Z, *type_arguments);
|
| if (array.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, *type_arguments, Array);
|
| + RETURN_TYPE_ERROR(Z, *type_arguments, Array);
|
| }
|
| if (array.Length() != num_expected_type_arguments) {
|
| return Api::NewError("Invalid type arguments specified, expected an "
|
| @@ -5249,9 +5267,9 @@ DART_EXPORT Dart_Handle Dart_GetType(Dart_Handle library,
|
|
|
| DART_EXPORT Dart_Handle Dart_LibraryUrl(Dart_Handle library) {
|
| DARTSCOPE(Thread::Current());
|
| - const Library& lib = Api::UnwrapLibraryHandle(I, library);
|
| + const Library& lib = Api::UnwrapLibraryHandle(Z, library);
|
| if (lib.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, library, Library);
|
| + RETURN_TYPE_ERROR(Z, library, Library);
|
| }
|
| const String& url = String::Handle(Z, lib.url());
|
| ASSERT(!url.IsNull());
|
| @@ -5261,9 +5279,9 @@ DART_EXPORT Dart_Handle Dart_LibraryUrl(Dart_Handle library) {
|
|
|
| DART_EXPORT Dart_Handle Dart_LookupLibrary(Dart_Handle url) {
|
| DARTSCOPE(Thread::Current());
|
| - const String& url_str = Api::UnwrapStringHandle(I, url);
|
| + const String& url_str = Api::UnwrapStringHandle(Z, url);
|
| if (url_str.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, url, String);
|
| + RETURN_TYPE_ERROR(Z, url, String);
|
| }
|
| const Library& library = Library::Handle(Z, Library::LookupLibrary(url_str));
|
| if (library.IsNull()) {
|
| @@ -5279,13 +5297,13 @@ DART_EXPORT Dart_Handle Dart_LibraryHandleError(Dart_Handle library_in,
|
| Dart_Handle error_in) {
|
| DARTSCOPE(Thread::Current());
|
|
|
| - const Library& lib = Api::UnwrapLibraryHandle(I, library_in);
|
| + const Library& lib = Api::UnwrapLibraryHandle(Z, library_in);
|
| if (lib.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, library_in, Library);
|
| + RETURN_TYPE_ERROR(Z, library_in, Library);
|
| }
|
| - const Instance& err = Api::UnwrapInstanceHandle(I, error_in);
|
| + const Instance& err = Api::UnwrapInstanceHandle(Z, error_in);
|
| if (err.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, error_in, Instance);
|
| + RETURN_TYPE_ERROR(Z, error_in, Instance);
|
| }
|
| CHECK_CALLBACK_STATE(I);
|
|
|
| @@ -5307,13 +5325,13 @@ DART_EXPORT Dart_Handle Dart_LoadLibrary(Dart_Handle url,
|
| intptr_t line_offset,
|
| intptr_t column_offset) {
|
| DARTSCOPE(Thread::Current());
|
| - const String& url_str = Api::UnwrapStringHandle(I, url);
|
| + const String& url_str = Api::UnwrapStringHandle(Z, url);
|
| if (url_str.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, url, String);
|
| + RETURN_TYPE_ERROR(Z, url, String);
|
| }
|
| - const String& source_str = Api::UnwrapStringHandle(I, source);
|
| + const String& source_str = Api::UnwrapStringHandle(Z, source);
|
| if (source_str.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, source, String);
|
| + RETURN_TYPE_ERROR(Z, source, String);
|
| }
|
| if (line_offset < 0) {
|
| return Api::NewError("%s: argument 'line_offset' must be positive number",
|
| @@ -5366,20 +5384,20 @@ DART_EXPORT Dart_Handle Dart_LibraryImportLibrary(Dart_Handle library,
|
| Dart_Handle import,
|
| Dart_Handle prefix) {
|
| DARTSCOPE(Thread::Current());
|
| - const Library& library_vm = Api::UnwrapLibraryHandle(I, library);
|
| + const Library& library_vm = Api::UnwrapLibraryHandle(Z, library);
|
| if (library_vm.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, library, Library);
|
| + RETURN_TYPE_ERROR(Z, library, Library);
|
| }
|
| - const Library& import_vm = Api::UnwrapLibraryHandle(I, import);
|
| + const Library& import_vm = Api::UnwrapLibraryHandle(Z, import);
|
| if (import_vm.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, import, Library);
|
| + RETURN_TYPE_ERROR(Z, import, Library);
|
| }
|
| const Object& prefix_object = Object::Handle(Z, Api::UnwrapHandle(prefix));
|
| const String& prefix_vm = prefix_object.IsNull()
|
| ? Symbols::Empty()
|
| : String::Cast(prefix_object);
|
| if (prefix_vm.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, prefix, String);
|
| + RETURN_TYPE_ERROR(Z, prefix, String);
|
| }
|
| CHECK_CALLBACK_STATE(I);
|
| CHECK_COMPILATION_ALLOWED(I);
|
| @@ -5410,17 +5428,17 @@ DART_EXPORT Dart_Handle Dart_LoadSource(Dart_Handle library,
|
| intptr_t line_offset,
|
| intptr_t column_offset) {
|
| DARTSCOPE(Thread::Current());
|
| - const Library& lib = Api::UnwrapLibraryHandle(I, library);
|
| + const Library& lib = Api::UnwrapLibraryHandle(Z, library);
|
| if (lib.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, library, Library);
|
| + RETURN_TYPE_ERROR(Z, library, Library);
|
| }
|
| - const String& url_str = Api::UnwrapStringHandle(I, url);
|
| + const String& url_str = Api::UnwrapStringHandle(Z, url);
|
| if (url_str.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, url, String);
|
| + RETURN_TYPE_ERROR(Z, url, String);
|
| }
|
| - const String& source_str = Api::UnwrapStringHandle(I, source);
|
| + const String& source_str = Api::UnwrapStringHandle(Z, source);
|
| if (source_str.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, source, String);
|
| + RETURN_TYPE_ERROR(Z, source, String);
|
| }
|
| if (line_offset < 0) {
|
| return Api::NewError("%s: argument 'line_offset' must be positive number",
|
| @@ -5448,17 +5466,17 @@ DART_EXPORT Dart_Handle Dart_LibraryLoadPatch(Dart_Handle library,
|
| Dart_Handle url,
|
| Dart_Handle patch_source) {
|
| DARTSCOPE(Thread::Current());
|
| - const Library& lib = Api::UnwrapLibraryHandle(I, library);
|
| + const Library& lib = Api::UnwrapLibraryHandle(Z, library);
|
| if (lib.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, library, Library);
|
| + RETURN_TYPE_ERROR(Z, library, Library);
|
| }
|
| - const String& url_str = Api::UnwrapStringHandle(I, url);
|
| + const String& url_str = Api::UnwrapStringHandle(Z, url);
|
| if (url_str.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, url, String);
|
| + RETURN_TYPE_ERROR(Z, url, String);
|
| }
|
| - const String& source_str = Api::UnwrapStringHandle(I, patch_source);
|
| + const String& source_str = Api::UnwrapStringHandle(Z, patch_source);
|
| if (source_str.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, patch_source, String);
|
| + RETURN_TYPE_ERROR(Z, patch_source, String);
|
| }
|
| CHECK_CALLBACK_STATE(I);
|
| CHECK_COMPILATION_ALLOWED(I);
|
| @@ -5529,9 +5547,9 @@ DART_EXPORT Dart_Handle Dart_SetNativeResolver(
|
| Dart_NativeEntryResolver resolver,
|
| Dart_NativeEntrySymbol symbol) {
|
| DARTSCOPE(Thread::Current());
|
| - const Library& lib = Api::UnwrapLibraryHandle(I, library);
|
| + const Library& lib = Api::UnwrapLibraryHandle(Z, library);
|
| if (lib.IsNull()) {
|
| - RETURN_TYPE_ERROR(I, library, Library);
|
| + RETURN_TYPE_ERROR(Z, library, Library);
|
| }
|
| lib.set_native_entry_resolver(resolver);
|
| lib.set_native_entry_symbol_resolver(symbol);
|
|
|