Index: runtime/vm/dart_api_impl.cc |
=================================================================== |
--- runtime/vm/dart_api_impl.cc (revision 23307) |
+++ runtime/vm/dart_api_impl.cc (working copy) |
@@ -36,6 +36,9 @@ |
DECLARE_FLAG(bool, print_class_table); |
ThreadLocalKey Api::api_native_key_ = Thread::kUnsetThreadLocalKey; |
+Dart_Handle Api::true_handle_ = NULL; |
+Dart_Handle Api::false_handle_ = NULL; |
+Dart_Handle Api::null_handle_ = NULL; |
const char* CanonicalFunction(const char* func) { |
@@ -95,9 +98,7 @@ |
ApiState* state = isolate->api_state(); |
ASSERT(state != NULL); |
ASSERT(state->IsValidLocalHandle(object) || |
- state->IsValidPersistentHandle(object) || |
- state->IsValidWeakPersistentHandle(object) || |
- state->IsValidPrologueWeakPersistentHandle(object)); |
+ Dart::vm_isolate()->api_state()->IsValidLocalHandle(object)); |
ASSERT(FinalizablePersistentHandle::raw_offset() == 0 && |
PersistentHandle::raw_offset() == 0 && |
LocalHandle::raw_offset() == 0); |
@@ -118,32 +119,23 @@ |
#undef DEFINE_UNWRAP |
-LocalHandle* Api::UnwrapAsLocalHandle(const ApiState& state, |
- Dart_Handle object) { |
- ASSERT(state.IsValidLocalHandle(object)); |
- return reinterpret_cast<LocalHandle*>(object); |
-} |
- |
- |
-PersistentHandle* Api::UnwrapAsPersistentHandle(const ApiState& state, |
- Dart_Handle object) { |
- ASSERT(state.IsValidPersistentHandle(object)); |
+PersistentHandle* Api::UnwrapAsPersistentHandle(Dart_PersistentHandle object) { |
+ ASSERT(Isolate::Current()->api_state()->IsValidPersistentHandle(object)); |
return reinterpret_cast<PersistentHandle*>(object); |
} |
FinalizablePersistentHandle* Api::UnwrapAsWeakPersistentHandle( |
- const ApiState& state, |
- Dart_Handle object) { |
- ASSERT(state.IsValidWeakPersistentHandle(object)); |
+ Dart_WeakPersistentHandle object) { |
+ ASSERT(Isolate::Current()->api_state()->IsValidWeakPersistentHandle(object)); |
return reinterpret_cast<FinalizablePersistentHandle*>(object); |
} |
FinalizablePersistentHandle* Api::UnwrapAsPrologueWeakPersistentHandle( |
- const ApiState& state, |
- Dart_Handle object) { |
- ASSERT(state.IsValidPrologueWeakPersistentHandle(object)); |
+ Dart_WeakPersistentHandle object) { |
+ ASSERT(Isolate::Current()->api_state()->IsValidPrologueWeakPersistentHandle( |
+ object)); |
return reinterpret_cast<FinalizablePersistentHandle*>(object); |
} |
@@ -151,7 +143,7 @@ |
Dart_Handle Api::CheckIsolateState(Isolate* isolate) { |
if (ClassFinalizer::FinalizePendingClasses() && |
isolate->object_store()->PreallocateObjects()) { |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
ASSERT(isolate->object_store()->sticky_error() != Object::null()); |
return Api::NewHandle(isolate, isolate->object_store()->sticky_error()); |
@@ -163,15 +155,6 @@ |
} |
-Dart_Handle Api::Success(Isolate* isolate) { |
- ASSERT(isolate != NULL); |
- ApiState* state = isolate->api_state(); |
- ASSERT(state != NULL); |
- PersistentHandle* true_handle = state->True(); |
- return reinterpret_cast<Dart_Handle>(true_handle); |
-} |
- |
- |
Dart_Handle Api::NewError(const char* format, ...) { |
Isolate* isolate = Isolate::Current(); |
DARTSCOPE(isolate); |
@@ -210,30 +193,18 @@ |
} |
-Dart_Handle Api::Null(Isolate* isolate) { |
- ASSERT(isolate != NULL); |
- ApiState* state = isolate->api_state(); |
- ASSERT(state != NULL); |
- PersistentHandle* null_handle = state->Null(); |
- return reinterpret_cast<Dart_Handle>(null_handle); |
+Dart_Handle Api::Null() { |
+ return null_handle_; |
} |
-Dart_Handle Api::True(Isolate* isolate) { |
- ASSERT(isolate != NULL); |
- ApiState* state = isolate->api_state(); |
- ASSERT(state != NULL); |
- PersistentHandle* true_handle = state->True(); |
- return reinterpret_cast<Dart_Handle>(true_handle); |
+Dart_Handle Api::True() { |
+ return true_handle_; |
} |
-Dart_Handle Api::False(Isolate* isolate) { |
- ASSERT(isolate != NULL); |
- ApiState* state = isolate->api_state(); |
- ASSERT(state != NULL); |
- PersistentHandle* false_handle = state->False(); |
- return reinterpret_cast<Dart_Handle>(false_handle); |
+Dart_Handle Api::False() { |
+ return false_handle_; |
} |
@@ -254,6 +225,23 @@ |
} |
+void Api::InitHandles() { |
+ Isolate* isolate = Isolate::Current(); |
+ ASSERT(isolate != NULL); |
+ ASSERT(isolate == Dart::vm_isolate()); |
+ ApiState* state = isolate->api_state(); |
+ ASSERT(state != NULL); |
+ ASSERT(true_handle_ == NULL); |
+ true_handle_ = Api::NewHandle(isolate, Bool::True().raw()); |
+ |
+ ASSERT(false_handle_ == NULL); |
+ false_handle_ = Api::NewHandle(isolate, Bool::False().raw()); |
+ |
+ ASSERT(null_handle_ == NULL); |
+ null_handle_ = Api::NewHandle(isolate, Object::null()); |
+} |
+ |
+ |
bool Api::ExternalStringGetPeerHelper(Dart_Handle object, void** peer) { |
NoGCScope no_gc_scope; |
RawObject* raw_obj = Api::UnwrapHandle(object); |
@@ -524,18 +512,43 @@ |
} |
-DART_EXPORT Dart_Handle Dart_NewPersistentHandle(Dart_Handle object) { |
+DART_EXPORT Dart_Handle Dart_HandleFromPersistent( |
+ Dart_PersistentHandle object) { |
Isolate* isolate = Isolate::Current(); |
DARTSCOPE(isolate); |
ApiState* state = isolate->api_state(); |
ASSERT(state != NULL); |
+ ASSERT(state->IsValidPersistentHandle(object)); |
+ return Api::NewHandle(isolate, |
+ reinterpret_cast<PersistentHandle*>(object)->raw()); |
+} |
+ |
+ |
+DART_EXPORT Dart_Handle Dart_HandleFromWeakPersistent( |
+ Dart_WeakPersistentHandle object) { |
+ Isolate* isolate = Isolate::Current(); |
+ DARTSCOPE(isolate); |
+ ApiState* state = isolate->api_state(); |
+ ASSERT(state != NULL); |
+ ASSERT(state->IsValidWeakPersistentHandle(object) || |
+ state->IsValidPrologueWeakPersistentHandle(object)); |
+ return Api::NewHandle( |
+ isolate, reinterpret_cast<FinalizablePersistentHandle*>(object)->raw()); |
+} |
+ |
+ |
+DART_EXPORT Dart_PersistentHandle Dart_NewPersistentHandle(Dart_Handle object) { |
+ Isolate* isolate = Isolate::Current(); |
+ DARTSCOPE(isolate); |
+ ApiState* state = isolate->api_state(); |
+ ASSERT(state != NULL); |
const Object& old_ref = Object::Handle(isolate, Api::UnwrapHandle(object)); |
PersistentHandle* new_ref = state->persistent_handles().AllocateHandle(); |
new_ref->set_raw(old_ref); |
- return reinterpret_cast<Dart_Handle>(new_ref); |
+ return reinterpret_cast<Dart_PersistentHandle>(new_ref); |
} |
-static Dart_Handle AllocateFinalizableHandle( |
+static Dart_WeakPersistentHandle AllocateFinalizableHandle( |
Isolate* isolate, |
FinalizablePersistentHandles* handles, |
Dart_Handle object, |
@@ -546,11 +559,11 @@ |
finalizable_ref->set_raw(ref); |
finalizable_ref->set_peer(peer); |
finalizable_ref->set_callback(callback); |
- return reinterpret_cast<Dart_Handle>(finalizable_ref); |
+ return reinterpret_cast<Dart_WeakPersistentHandle>(finalizable_ref); |
} |
-DART_EXPORT Dart_Handle Dart_NewWeakPersistentHandle( |
+DART_EXPORT Dart_WeakPersistentHandle Dart_NewWeakPersistentHandle( |
Dart_Handle object, |
void* peer, |
Dart_WeakPersistentHandleFinalizer callback) { |
@@ -566,7 +579,7 @@ |
} |
-DART_EXPORT Dart_Handle Dart_NewPrologueWeakPersistentHandle( |
+DART_EXPORT Dart_WeakPersistentHandle Dart_NewPrologueWeakPersistentHandle( |
Dart_Handle object, |
void* peer, |
Dart_WeakPersistentHandleFinalizer callback) { |
@@ -582,24 +595,12 @@ |
} |
-DART_EXPORT void Dart_DeletePersistentHandle(Dart_Handle object) { |
+DART_EXPORT void Dart_DeletePersistentHandle(Dart_PersistentHandle object) { |
Isolate* isolate = Isolate::Current(); |
CHECK_ISOLATE(isolate); |
ApiState* state = isolate->api_state(); |
ASSERT(state != NULL); |
- if (state->IsValidPrologueWeakPersistentHandle(object)) { |
- FinalizablePersistentHandle* prologue_weak_ref = |
- Api::UnwrapAsPrologueWeakPersistentHandle(*state, object); |
- state->prologue_weak_persistent_handles().FreeHandle(prologue_weak_ref); |
- return; |
- } |
- if (state->IsValidWeakPersistentHandle(object)) { |
- FinalizablePersistentHandle* weak_ref = |
- Api::UnwrapAsWeakPersistentHandle(*state, object); |
- state->weak_persistent_handles().FreeHandle(weak_ref); |
- return; |
- } |
- PersistentHandle* ref = Api::UnwrapAsPersistentHandle(*state, object); |
+ PersistentHandle* ref = Api::UnwrapAsPersistentHandle(object); |
ASSERT(!state->IsProtectedHandle(ref)); |
if (!state->IsProtectedHandle(ref)) { |
state->persistent_handles().FreeHandle(ref); |
@@ -607,16 +608,27 @@ |
} |
-DART_EXPORT bool Dart_IsWeakPersistentHandle(Dart_Handle object) { |
+DART_EXPORT void Dart_DeleteWeakPersistentHandle( |
+ Dart_WeakPersistentHandle object) { |
Isolate* isolate = Isolate::Current(); |
CHECK_ISOLATE(isolate); |
ApiState* state = isolate->api_state(); |
ASSERT(state != NULL); |
- return state->IsValidWeakPersistentHandle(object); |
+ if (state->IsValidPrologueWeakPersistentHandle(object)) { |
+ FinalizablePersistentHandle* prologue_weak_ref = |
+ Api::UnwrapAsPrologueWeakPersistentHandle(object); |
+ state->prologue_weak_persistent_handles().FreeHandle(prologue_weak_ref); |
+ return; |
+ } |
+ FinalizablePersistentHandle* weak_ref = |
+ Api::UnwrapAsWeakPersistentHandle(object); |
+ state->weak_persistent_handles().FreeHandle(weak_ref); |
+ return; |
} |
-DART_EXPORT bool Dart_IsPrologueWeakPersistentHandle(Dart_Handle object) { |
+DART_EXPORT bool Dart_IsPrologueWeakPersistentHandle( |
+ Dart_WeakPersistentHandle object) { |
Isolate* isolate = Isolate::Current(); |
CHECK_ISOLATE(isolate); |
ApiState* state = isolate->api_state(); |
@@ -653,7 +665,7 @@ |
WeakReferenceSet* reference_set = new WeakReferenceSet(keys, num_keys, |
values, num_values); |
state->DelayWeakReferenceSet(reference_set); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -672,7 +684,7 @@ |
CURRENT_FUNC); |
} |
callbacks.Add(callback); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -687,7 +699,7 @@ |
CURRENT_FUNC); |
} |
callbacks.Remove(callback); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -703,7 +715,7 @@ |
CURRENT_FUNC); |
} |
callbacks.Add(callback); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -718,7 +730,7 @@ |
CURRENT_FUNC); |
} |
callbacks.Remove(callback); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -730,7 +742,7 @@ |
RETURN_NULL_ERROR(callback); |
} |
isolate->heap()->Profile(callback, stream); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
// --- Initialization and Globals --- |
@@ -898,7 +910,7 @@ |
FullSnapshotWriter writer(buffer, ApiReallocate); |
writer.WriteFullSnapshot(); |
*size = writer.BytesWritten(); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -927,7 +939,7 @@ |
ScriptSnapshotWriter writer(buffer, ApiReallocate); |
writer.WriteScriptSnapshot(library); |
*size = writer.BytesWritten(); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -1003,7 +1015,7 @@ |
if (FLAG_print_class_table) { |
isolate->class_table()->Print(); |
} |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -1017,7 +1029,7 @@ |
isolate->object_store()->clear_sticky_error(); |
return error; |
} |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -1198,7 +1210,7 @@ |
DART_EXPORT Dart_Handle Dart_Null() { |
Isolate* isolate = Isolate::Current(); |
CHECK_ISOLATE_SCOPE(isolate); |
- return Api::Null(isolate); |
+ return Api::Null(); |
} |
@@ -1220,7 +1232,7 @@ |
Object::Handle(isolate, DartLibraryCalls::Equals(expected, actual)); |
if (result.IsBool()) { |
*value = Bool::Cast(result).value(); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} else if (result.IsError()) { |
return Api::NewHandle(isolate, result.raw()); |
} else { |
@@ -1267,7 +1279,7 @@ |
} else { |
*value = false; |
} |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -1318,7 +1330,7 @@ |
intptr_t class_id = Api::ClassId(integer); |
if (class_id == kSmiCid || class_id == kMintCid) { |
*fits = true; |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
// Slow path for Mints and Bigints. |
DARTSCOPE(isolate); |
@@ -1328,7 +1340,7 @@ |
} |
ASSERT(!BigintOperations::FitsIntoInt64(Bigint::Cast(int_obj))); |
*fits = false; |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -1339,7 +1351,7 @@ |
CHECK_ISOLATE(isolate); |
if (Api::IsSmi(integer)) { |
*fits = (Api::SmiValue(integer) >= 0); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
// Slow path for Mints and Bigints. |
DARTSCOPE(isolate); |
@@ -1353,7 +1365,7 @@ |
} else { |
*fits = BigintOperations::FitsIntoUint64(Bigint::Cast(int_obj)); |
} |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -1388,7 +1400,7 @@ |
CHECK_ISOLATE(isolate); |
if (Api::IsSmi(integer)) { |
*value = Api::SmiValue(integer); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
// Slow path for Mints and Bigints. |
DARTSCOPE(isolate); |
@@ -1399,12 +1411,12 @@ |
ASSERT(!int_obj.IsSmi()); |
if (int_obj.IsMint()) { |
*value = int_obj.AsInt64Value(); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} else { |
const Bigint& bigint = Bigint::Cast(int_obj); |
if (BigintOperations::FitsIntoInt64(bigint)) { |
*value = BigintOperations::ToInt64(bigint); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
} |
return Api::NewError("%s: Integer %s cannot be represented as an int64_t.", |
@@ -1421,7 +1433,7 @@ |
intptr_t smi_value = Api::SmiValue(integer); |
if (smi_value >= 0) { |
*value = smi_value; |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
} |
// Slow path for Mints and Bigints. |
@@ -1433,12 +1445,12 @@ |
ASSERT(!int_obj.IsSmi()); |
if (int_obj.IsMint() && !int_obj.IsNegative()) { |
*value = int_obj.AsInt64Value(); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} else { |
const Bigint& bigint = Bigint::Cast(int_obj); |
if (BigintOperations::FitsIntoUint64(bigint)) { |
*value = BigintOperations::ToUint64(bigint); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
} |
return Api::NewError("%s: Integer %s cannot be represented as a uint64_t.", |
@@ -1467,7 +1479,7 @@ |
*value = BigintOperations::ToHexCString(Bigint::Cast(int_obj), |
BigintAllocate); |
} |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -1477,14 +1489,14 @@ |
DART_EXPORT Dart_Handle Dart_True() { |
Isolate* isolate = Isolate::Current(); |
CHECK_ISOLATE_SCOPE(isolate); |
- return Api::True(isolate); |
+ return Api::True(); |
} |
DART_EXPORT Dart_Handle Dart_False() { |
Isolate* isolate = Isolate::Current(); |
CHECK_ISOLATE_SCOPE(isolate); |
- return Api::False(isolate); |
+ return Api::False(); |
} |
@@ -1496,7 +1508,7 @@ |
DART_EXPORT Dart_Handle Dart_NewBoolean(bool value) { |
Isolate* isolate = Isolate::Current(); |
CHECK_ISOLATE_SCOPE(isolate); |
- return value ? Api::True(isolate) : Api::False(isolate); |
+ return value ? Api::True() : Api::False(); |
} |
@@ -1509,7 +1521,7 @@ |
RETURN_TYPE_ERROR(isolate, boolean_obj, Bool); |
} |
*value = obj.value(); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -1538,7 +1550,7 @@ |
RETURN_TYPE_ERROR(isolate, double_obj, Double); |
} |
*value = obj.value(); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -1563,7 +1575,7 @@ |
RETURN_TYPE_ERROR(isolate, str, String); |
} |
*len = str_obj.Length(); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -1633,7 +1645,7 @@ |
} |
if (Api::ExternalStringGetPeerHelper(object, peer)) { |
- return Api::Success(Isolate::Current()); |
+ return Api::Success(); |
} |
// It's not an external string, return appropriate error. |
@@ -1701,7 +1713,7 @@ |
memmove(res, string_value, string_length + 1); |
ASSERT(res[string_length] == '\0'); |
*cstr = res; |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -1727,7 +1739,7 @@ |
} |
str_obj.ToUTF8(*utf8_array, str_len); |
*length = str_len; |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -1755,7 +1767,7 @@ |
latin1_array[i] = str_obj.CharAt(i); |
} |
*length = copy_len; |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -1774,7 +1786,7 @@ |
utf16_array[i] = static_cast<uint16_t>(str_obj.CharAt(i)); |
} |
*length = copy_len; |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -1790,7 +1802,7 @@ |
RETURN_NULL_ERROR(size); |
} |
*size = (str_obj.Length() * str_obj.CharSize()); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -1839,7 +1851,7 @@ |
utf16_array[i] = static_cast<uint16_t>(str_obj.CharAt(i)); |
} |
} |
- return Api::Null(isolate); |
+ return Api::Null(); |
} |
return Api::NewHandle(isolate, |
str_obj.MakeExternal(array, length, peer, cback)); |
@@ -1893,7 +1905,7 @@ |
type& array = type::Handle(isolate); \ |
array ^= obj.raw(); \ |
*len = array.Length(); \ |
- return Api::Success(isolate); \ |
+ return Api::Success(); \ |
DART_EXPORT Dart_Handle Dart_ListLength(Dart_Handle list, intptr_t* len) { |
@@ -1938,7 +1950,7 @@ |
Object::Handle(isolate, DartEntry::InvokeFunction(function, args)); |
if (retval.IsSmi()) { |
*len = Smi::Cast(retval).Value(); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} else if (retval.IsMint() || retval.IsBigint()) { |
if (retval.IsMint()) { |
int64_t mint_value = Mint::Cast(retval).value(); |
@@ -2017,7 +2029,7 @@ |
} \ |
if ((index >= 0) && (index < array.Length())) { \ |
array.SetAt(index, value_obj); \ |
- return Api::Success(isolate); \ |
+ return Api::Success(); \ |
} \ |
return Api::NewError("Invalid index passed in to set list element"); \ |
@@ -2166,7 +2178,7 @@ |
native_array[i] = static_cast<uint8_t>(integer.AsInt64Value() & 0xff); \ |
ASSERT(integer.AsInt64Value() <= 0xff); \ |
} \ |
- return Api::Success(isolate); \ |
+ return Api::Success(); \ |
} \ |
return Api::NewError("Invalid length passed in to access array elements"); \ |
@@ -2186,7 +2198,7 @@ |
memmove(native_array, |
reinterpret_cast<uint8_t*>(array.DataAddr(offset)), |
length); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
return Api::NewError("Invalid length passed in to access list elements"); |
} |
@@ -2243,7 +2255,7 @@ |
native_array[i] = |
static_cast<uint8_t>(integer_result.AsInt64Value() & 0xff); |
} |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
} |
return Api::NewError("Object does not implement the 'List' interface"); |
@@ -2259,7 +2271,7 @@ |
integer = Integer::New(native_array[i]); \ |
array.SetAt(offset + i, integer); \ |
} \ |
- return Api::Success(isolate); \ |
+ return Api::Success(); \ |
} \ |
return Api::NewError("Invalid length passed in to set array elements"); \ |
@@ -2279,7 +2291,7 @@ |
memmove(reinterpret_cast<uint8_t*>(array.DataAddr(offset)), |
native_array, |
length); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
return Api::NewError("Invalid length passed in to access list elements"); |
} |
@@ -2334,7 +2346,7 @@ |
return Api::NewHandle(isolate, result.raw()); |
} |
} |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
} |
return Api::NewError("Object does not implement the 'List' interface"); |
@@ -2488,32 +2500,19 @@ |
static Dart_Handle NewExternalTypedData( |
- Isolate* isolate, |
- intptr_t cid, |
- void* data, |
- intptr_t length, |
- void* peer, |
- Dart_WeakPersistentHandleFinalizer callback) { |
+ Isolate* isolate, intptr_t cid, void* data, intptr_t length) { |
CHECK_LENGTH(length, ExternalTypedData::MaxElements(cid)); |
const ExternalTypedData& result = ExternalTypedData::Handle( |
isolate, |
ExternalTypedData::New(cid, reinterpret_cast<uint8_t*>(data), length)); |
- result.AddFinalizer(peer, callback); |
return Api::NewHandle(isolate, result.raw()); |
} |
-static Dart_Handle NewExternalByteData(Isolate* isolate, |
- void* data, |
- intptr_t length, |
- void* peer, |
- Dart_WeakPersistentHandleFinalizer cb) { |
- Dart_Handle ext_data = NewExternalTypedData(isolate, |
- kExternalTypedDataUint8ArrayCid, |
- data, |
- length, |
- peer, |
- cb); |
+static Dart_Handle NewExternalByteData( |
+ Isolate* isolate, void* data, intptr_t length) { |
+ Dart_Handle ext_data = NewExternalTypedData( |
+ isolate, kExternalTypedDataUint8ArrayCid, data, length); |
if (::Dart_IsError(ext_data)) { |
return ext_data; |
} |
@@ -2582,16 +2581,14 @@ |
CURRENT_FUNC); |
} |
UNREACHABLE(); |
- return Api::Null(isolate); |
+ return Api::Null(); |
} |
DART_EXPORT Dart_Handle Dart_NewExternalTypedData( |
Dart_TypedData_Type type, |
void* data, |
- intptr_t length, |
- void* peer, |
- Dart_WeakPersistentHandleFinalizer callback) { |
+ intptr_t length) { |
Isolate* isolate = Isolate::Current(); |
DARTSCOPE(isolate); |
if (data == NULL && length != 0) { |
@@ -2600,117 +2597,76 @@ |
CHECK_CALLBACK_STATE(isolate); |
switch (type) { |
case kByteData: |
- return NewExternalByteData(isolate, data, length, peer, callback); |
+ return NewExternalByteData(isolate, data, length); |
case kInt8: |
return NewExternalTypedData(isolate, |
kExternalTypedDataInt8ArrayCid, |
data, |
- length, |
- peer, |
- callback); |
+ length); |
case kUint8: |
return NewExternalTypedData(isolate, |
kExternalTypedDataUint8ArrayCid, |
data, |
- length, |
- peer, |
- callback); |
+ length); |
case kUint8Clamped: |
return NewExternalTypedData(isolate, |
kExternalTypedDataUint8ClampedArrayCid, |
data, |
- length, |
- peer, |
- callback); |
+ length); |
case kInt16: |
return NewExternalTypedData(isolate, |
kExternalTypedDataInt16ArrayCid, |
data, |
- length, |
- peer, |
- callback); |
+ length); |
case kUint16: |
return NewExternalTypedData(isolate, |
kExternalTypedDataUint16ArrayCid, |
data, |
- length, |
- peer, |
- callback); |
+ length); |
case kInt32: |
return NewExternalTypedData(isolate, |
kExternalTypedDataInt32ArrayCid, |
data, |
- length, |
- peer, |
- callback); |
+ length); |
case kUint32: |
return NewExternalTypedData(isolate, |
kExternalTypedDataUint32ArrayCid, |
data, |
- length, |
- peer, |
- callback); |
+ length); |
case kInt64: |
return NewExternalTypedData(isolate, |
kExternalTypedDataInt64ArrayCid, |
data, |
- length, |
- peer, |
- callback); |
+ length); |
case kUint64: |
return NewExternalTypedData(isolate, |
kExternalTypedDataUint64ArrayCid, |
data, |
- length, |
- peer, |
- callback); |
+ length); |
case kFloat32: |
return NewExternalTypedData(isolate, |
kExternalTypedDataFloat32ArrayCid, |
data, |
- length, |
- peer, |
- callback); |
+ length); |
case kFloat64: |
return NewExternalTypedData(isolate, |
kExternalTypedDataFloat64ArrayCid, |
data, |
- length, |
- peer, |
- callback); |
+ length); |
case kFloat32x4: |
return NewExternalTypedData(isolate, |
kExternalTypedDataFloat32x4ArrayCid, |
data, |
- length, |
- peer, |
- callback); |
+ length); |
default: |
return Api::NewError("%s expects argument 'type' to be of" |
" 'external TypedData'", CURRENT_FUNC); |
} |
UNREACHABLE(); |
- return Api::Null(isolate); |
+ return Api::Null(); |
} |
-DART_EXPORT Dart_Handle Dart_ExternalTypedDataGetPeer(Dart_Handle object, |
- void** peer) { |
- Isolate* isolate = Isolate::Current(); |
- DARTSCOPE(isolate); |
- const ExternalTypedData& array = |
- Api::UnwrapExternalTypedDataHandle(isolate, object); |
- if (array.IsNull()) { |
- RETURN_TYPE_ERROR(isolate, object, ExternalTypedData); |
- } |
- if (peer == NULL) { |
- RETURN_NULL_ERROR(peer); |
- } |
- *peer = array.GetPeer(); |
- return Api::Success(isolate); |
-} |
- |
- |
DART_EXPORT Dart_Handle Dart_TypedDataAcquireData(Dart_Handle object, |
Dart_TypedData_Type* type, |
void** data, |
@@ -2770,7 +2726,7 @@ |
*data = data_obj.DataAddr(offset_in_bytes); |
} |
} |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -2787,7 +2743,7 @@ |
isolate->DecrementNoGCScopeDepth(); |
END_NO_CALLBACK_SCOPE(isolate); |
} |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -2923,7 +2879,7 @@ |
} else { |
*count = interface_types.Length(); |
} |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -3234,7 +3190,7 @@ |
RETURN_TYPE_ERROR(isolate, function, Function); |
} |
*is_abstract = func.is_abstract(); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -3250,7 +3206,7 @@ |
RETURN_TYPE_ERROR(isolate, function, Function); |
} |
*is_static = func.is_static(); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -3266,7 +3222,7 @@ |
RETURN_TYPE_ERROR(isolate, function, Function); |
} |
*is_constructor = func.kind() == RawFunction::kConstructor; |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -3282,7 +3238,7 @@ |
RETURN_TYPE_ERROR(isolate, function, Function); |
} |
*is_getter = func.IsGetterFunction(); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -3298,7 +3254,7 @@ |
RETURN_TYPE_ERROR(isolate, function, Function); |
} |
*is_setter = (func.kind() == RawFunction::kSetterFunction); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -3352,7 +3308,7 @@ |
ASSERT(*fixed_param_count >= 0); |
ASSERT(*opt_param_count >= 0); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -3488,7 +3444,7 @@ |
RETURN_TYPE_ERROR(isolate, variable, Field); |
} |
*is_static = var.is_static(); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -3504,7 +3460,7 @@ |
RETURN_TYPE_ERROR(isolate, variable, Field); |
} |
*is_final = var.is_final(); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -4135,7 +4091,7 @@ |
if (result.IsError()) { |
return Api::NewHandle(isolate, result.raw()); |
} else { |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
} else if (!field.IsNull()) { |
if (field.is_final()) { |
@@ -4143,7 +4099,7 @@ |
CURRENT_FUNC, field_name.ToCString()); |
} else { |
field.set_value(value_instance); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
} else { |
return Api::NewError("%s: did not find static field '%s'.", |
@@ -4172,7 +4128,7 @@ |
if (result.IsError()) { |
return Api::NewHandle(isolate, result.raw()); |
} else { |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
} else if (!field.IsNull()) { |
if (field.is_final()) { |
@@ -4180,7 +4136,7 @@ |
CURRENT_FUNC, field_name.ToCString()); |
} else { |
field.set_value(value_instance); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
} else { |
return Api::NewError("%s: did not find top-level variable '%s'.", |
@@ -4237,7 +4193,7 @@ |
} |
const Class& cls = Class::Handle(isolate, instance.clazz()); |
*count = cls.num_native_fields(); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -4256,7 +4212,7 @@ |
CURRENT_FUNC, index); |
} |
*value = instance.GetNativeField(isolate, index); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -4275,7 +4231,7 @@ |
CURRENT_FUNC, index); |
} |
instance.SetNativeField(index, value); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -4399,7 +4355,7 @@ |
Isolate* isolate = Isolate::Current(); |
CHECK_ISOLATE(isolate); |
isolate->set_library_tag_handler(handler); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -4535,7 +4491,7 @@ |
ASSERT(isolate != NULL); |
const Error& error = Error::Handle(isolate, Library::CompileAll()); |
if (error.IsNull()) { |
- *result = Api::Success(isolate); |
+ *result = Api::Success(); |
} else { |
*result = Api::NewHandle(isolate, error.raw()); |
} |
@@ -4758,7 +4714,7 @@ |
library_vm.AddObject(library_prefix, prefix_symbol); |
} |
} |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -4828,7 +4784,7 @@ |
RETURN_TYPE_ERROR(isolate, library, Library); |
} |
lib.set_native_entry_resolver(resolver); |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -4865,7 +4821,7 @@ |
RawObject* raw_obj = obj.raw(); |
*peer = isolate->heap()->GetPeer(raw_obj); |
} |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
@@ -4883,7 +4839,7 @@ |
RawObject* raw_obj = obj.raw(); |
isolate->heap()->SetPeer(raw_obj, peer); |
} |
- return Api::Success(isolate); |
+ return Api::Success(); |
} |
} // namespace dart |