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); |