Index: runtime/vm/dart_api_impl_test.cc |
=================================================================== |
--- runtime/vm/dart_api_impl_test.cc (revision 23307) |
+++ runtime/vm/dart_api_impl_test.cc (working copy) |
@@ -931,8 +931,7 @@ |
Dart_EnterScope(); |
Dart_Handle external_byte_data = Dart_NewExternalTypedData(kByteData, |
data, |
- 16, |
- NULL, NULL); |
+ 16); |
EXPECT_VALID(external_byte_data); |
EXPECT_EQ(kByteData, Dart_GetTypeOfTypedData(external_byte_data)); |
Dart_SetReturnValue(args, external_byte_data); |
@@ -1106,9 +1105,7 @@ |
intptr_t data_length = ARRAY_SIZE(data); |
Dart_Handle ext_list_access_test_obj; |
ext_list_access_test_obj = Dart_NewExternalTypedData(kUint8, |
- data, |
- data_length, |
- NULL, NULL); |
+ data, data_length); |
EXPECT_VALID(ext_list_access_test_obj); |
TestDirectAccess(lib, ext_list_access_test_obj, kUint8); |
} |
@@ -1209,10 +1206,6 @@ |
EXPECT_EQ(expected_type, type); |
EXPECT_VALID(Dart_TypedDataReleaseData(obj)); |
- void* peer = &data; // just a non-NULL value |
- EXPECT_VALID(Dart_ExternalTypedDataGetPeer(obj, &peer)); |
- EXPECT(peer == NULL); |
- |
intptr_t list_length = 0; |
EXPECT_VALID(Dart_ListLength(obj, &list_length)); |
EXPECT_EQ(data_length, list_length); |
@@ -1257,9 +1250,7 @@ |
uint8_t data[] = { 0, 11, 22, 33, 44, 55, 66, 77 }; |
intptr_t data_length = ARRAY_SIZE(data); |
- Dart_Handle obj = Dart_NewExternalTypedData(kUint8, |
- data, data_length, |
- NULL, NULL); |
+ Dart_Handle obj = Dart_NewExternalTypedData(kUint8, data, data_length); |
ExternalTypedDataAccessTests(obj, kUint8, data, data_length); |
} |
@@ -1268,9 +1259,7 @@ |
uint8_t data[] = { 0, 11, 22, 33, 44, 55, 66, 77 }; |
intptr_t data_length = ARRAY_SIZE(data); |
- Dart_Handle obj = Dart_NewExternalTypedData(kUint8Clamped, |
- data, data_length, |
- NULL, NULL); |
+ Dart_Handle obj = Dart_NewExternalTypedData(kUint8Clamped, data, data_length); |
ExternalTypedDataAccessTests(obj, kUint8Clamped, data, data_length); |
} |
@@ -1291,8 +1280,7 @@ |
uint8_t data[] = { 0, 11, 22, 33, 44, 55, 66, 77 }; |
intptr_t data_length = ARRAY_SIZE(data); |
Dart_Handle obj = Dart_NewExternalTypedData(kUint8Clamped, |
- data, data_length, |
- NULL, NULL); |
+ data, data_length); |
EXPECT_VALID(obj); |
Dart_Handle result; |
// Create a test library and Load up a test script in it. |
@@ -1311,9 +1299,9 @@ |
} |
-static void ExternalTypedDataCallbackFinalizer(Dart_Handle handle, |
+static void ExternalTypedDataFinalizer(Dart_WeakPersistentHandle handle, |
void* peer) { |
- Dart_DeletePersistentHandle(handle); |
+ Dart_DeleteWeakPersistentHandle(handle); |
*static_cast<int*>(peer) = 42; |
} |
@@ -1326,13 +1314,9 @@ |
Dart_Handle obj = Dart_NewExternalTypedData( |
kUint8, |
data, |
- ARRAY_SIZE(data), |
- &peer, |
- ExternalTypedDataCallbackFinalizer); |
+ ARRAY_SIZE(data)); |
+ Dart_NewWeakPersistentHandle(obj, &peer, ExternalTypedDataFinalizer); |
EXPECT_VALID(obj); |
- void* api_peer = NULL; |
- EXPECT_VALID(Dart_ExternalTypedDataGetPeer(obj, &api_peer)); |
- EXPECT_EQ(api_peer, &peer); |
Dart_ExitScope(); |
} |
EXPECT(peer == 0); |
@@ -1384,8 +1368,8 @@ |
// Dart_NewExternalTypedData. |
Dart_EnterScope(); |
{ |
- Dart_Handle lcl = Dart_NewExternalTypedData( |
- kFloat32x4, data, 10, &peer, ExternalTypedDataCallbackFinalizer); |
+ Dart_Handle lcl = Dart_NewExternalTypedData(kFloat32x4, data, 10); |
+ Dart_NewWeakPersistentHandle(lcl, &peer, ExternalTypedDataFinalizer); |
CheckFloat32x4Data(lcl); |
} |
Dart_ExitScope(); |
@@ -1429,7 +1413,7 @@ |
ApiState* state = isolate->api_state(); |
EXPECT(state != NULL); |
ApiLocalScope* scope = state->top_scope(); |
- Dart_Handle handles[2000]; |
+ Dart_PersistentHandle handles[2000]; |
Dart_EnterScope(); |
{ |
DARTSCOPE(isolate); |
@@ -1460,22 +1444,22 @@ |
HANDLESCOPE(isolate); |
for (int i = 0; i < 500; i++) { |
String& str = String::Handle(); |
- str ^= Api::UnwrapHandle(handles[i]); |
+ str ^= Api::UnwrapAsPersistentHandle(handles[i])->raw(); |
EXPECT(str.Equals(kTestString1)); |
} |
for (int i = 500; i < 1000; i++) { |
String& str = String::Handle(); |
- str ^= Api::UnwrapHandle(handles[i]); |
+ str ^= Api::UnwrapAsPersistentHandle(handles[i])->raw(); |
EXPECT(str.Equals(kTestString2)); |
} |
for (int i = 1000; i < 1500; i++) { |
String& str = String::Handle(); |
- str ^= Api::UnwrapHandle(handles[i]); |
+ str ^= Api::UnwrapAsPersistentHandle(handles[i])->raw(); |
EXPECT(str.Equals(kTestString1)); |
} |
for (int i = 1500; i < 2000; i++) { |
String& str = String::Handle(); |
- str ^= Api::UnwrapHandle(handles[i]); |
+ str ^= Api::UnwrapAsPersistentHandle(handles[i])->raw(); |
EXPECT(str.Equals(kTestString2)); |
} |
} |
@@ -1497,17 +1481,19 @@ |
DARTSCOPE(isolate); |
// Start with a known persistent handle. |
- Dart_Handle obj1 = Dart_True(); |
+ Dart_PersistentHandle obj1 = Dart_NewPersistentHandle(Dart_True()); |
EXPECT(state->IsValidPersistentHandle(obj1)); |
// And use it to allocate a second persistent handle. |
- Dart_Handle obj2 = Dart_NewPersistentHandle(obj1); |
- EXPECT(state->IsValidPersistentHandle(obj2)); |
+ Dart_Handle obj2 = Dart_HandleFromPersistent(obj1); |
+ Dart_PersistentHandle obj3 = Dart_NewPersistentHandle(obj2); |
+ EXPECT(state->IsValidPersistentHandle(obj3)); |
// Make sure that the value transferred. |
- EXPECT(Dart_IsBoolean(obj2)); |
+ Dart_Handle obj4 = Dart_HandleFromPersistent(obj3); |
+ EXPECT(Dart_IsBoolean(obj4)); |
bool value = false; |
- Dart_Handle result = Dart_BooleanValue(obj2, &value); |
+ Dart_Handle result = Dart_BooleanValue(obj4, &value); |
EXPECT_VALID(result); |
EXPECT(value); |
} |
@@ -1526,12 +1512,24 @@ |
}; |
+static Dart_Handle AsHandle(Dart_PersistentHandle weak) { |
+ return Dart_HandleFromPersistent(weak); |
+} |
+ |
+ |
+static Dart_Handle AsHandle(Dart_WeakPersistentHandle weak) { |
+ return Dart_HandleFromWeakPersistent(weak); |
+} |
+ |
+ |
TEST_CASE(WeakPersistentHandle) { |
- Dart_Handle weak_new_ref = Dart_Null(); |
- EXPECT(Dart_IsNull(weak_new_ref)); |
+ Dart_Handle local_new_ref = Dart_Null(); |
+ Dart_WeakPersistentHandle weak_new_ref = Dart_NewWeakPersistentHandle( |
+ local_new_ref, NULL, NULL); |
- Dart_Handle weak_old_ref = Dart_Null(); |
- EXPECT(Dart_IsNull(weak_old_ref)); |
+ Dart_Handle local_old_ref = Dart_Null(); |
+ Dart_WeakPersistentHandle weak_old_ref = Dart_NewWeakPersistentHandle( |
+ local_old_ref, NULL, NULL); |
{ |
Dart_EnterScope(); |
@@ -1551,13 +1549,13 @@ |
// Create a weak ref to the new space object. |
weak_new_ref = Dart_NewWeakPersistentHandle(new_ref, NULL, NULL); |
- EXPECT_VALID(weak_new_ref); |
- EXPECT(!Dart_IsNull(weak_new_ref)); |
+ EXPECT_VALID(AsHandle(weak_new_ref)); |
+ EXPECT(!Dart_IsNull(AsHandle(weak_new_ref))); |
// Create a weak ref to the old space object. |
weak_old_ref = Dart_NewWeakPersistentHandle(old_ref, NULL, NULL); |
- EXPECT_VALID(weak_old_ref); |
- EXPECT(!Dart_IsNull(weak_old_ref)); |
+ EXPECT_VALID(AsHandle(weak_old_ref)); |
+ EXPECT(!Dart_IsNull(AsHandle(weak_old_ref))); |
// Garbage collect new space. |
GCTestHelper::CollectNewSpace(Heap::kIgnoreApiCallbacks); |
@@ -1568,13 +1566,13 @@ |
EXPECT_VALID(old_ref); |
EXPECT(!Dart_IsNull(old_ref)); |
- EXPECT_VALID(weak_new_ref); |
- EXPECT(!Dart_IsNull(weak_new_ref)); |
- EXPECT(Dart_IdentityEquals(new_ref, weak_new_ref)); |
+ EXPECT_VALID(AsHandle(weak_new_ref)); |
+ EXPECT(!Dart_IsNull(AsHandle(weak_new_ref))); |
+ EXPECT(Dart_IdentityEquals(new_ref, AsHandle(weak_new_ref))); |
- EXPECT_VALID(weak_old_ref); |
- EXPECT(!Dart_IsNull(weak_old_ref)); |
- EXPECT(Dart_IdentityEquals(old_ref, weak_old_ref)); |
+ EXPECT_VALID(AsHandle(weak_old_ref)); |
+ EXPECT(!Dart_IsNull(AsHandle(weak_old_ref))); |
+ EXPECT(Dart_IdentityEquals(old_ref, AsHandle(weak_old_ref))); |
// Garbage collect old space. |
Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
@@ -1585,13 +1583,13 @@ |
EXPECT_VALID(old_ref); |
EXPECT(!Dart_IsNull(old_ref)); |
- EXPECT_VALID(weak_new_ref); |
- EXPECT(!Dart_IsNull(weak_new_ref)); |
- EXPECT(Dart_IdentityEquals(new_ref, weak_new_ref)); |
+ EXPECT_VALID(AsHandle(weak_new_ref)); |
+ EXPECT(!Dart_IsNull(AsHandle(weak_new_ref))); |
+ EXPECT(Dart_IdentityEquals(new_ref, AsHandle(weak_new_ref))); |
- EXPECT_VALID(weak_old_ref); |
- EXPECT(!Dart_IsNull(weak_old_ref)); |
- EXPECT(Dart_IdentityEquals(old_ref, weak_old_ref)); |
+ EXPECT_VALID(AsHandle(weak_old_ref)); |
+ EXPECT(!Dart_IsNull(AsHandle(weak_old_ref))); |
+ EXPECT(Dart_IdentityEquals(old_ref, AsHandle(weak_old_ref))); |
// Delete local (strong) references. |
Dart_ExitScope(); |
@@ -1600,23 +1598,31 @@ |
// Garbage collect new space again. |
GCTestHelper::CollectNewSpace(Heap::kIgnoreApiCallbacks); |
- // Weak ref to new space object should now be cleared. |
- EXPECT_VALID(weak_new_ref); |
- EXPECT(Dart_IsNull(weak_new_ref)); |
- EXPECT_VALID(weak_old_ref); |
- EXPECT(!Dart_IsNull(weak_old_ref)); |
+ { |
+ Dart_EnterScope(); |
+ // Weak ref to new space object should now be cleared. |
+ EXPECT_VALID(AsHandle(weak_new_ref)); |
+ EXPECT(Dart_IsNull(AsHandle(weak_new_ref))); |
+ EXPECT_VALID(AsHandle(weak_old_ref)); |
+ EXPECT(!Dart_IsNull(AsHandle(weak_old_ref))); |
+ Dart_ExitScope(); |
+ } |
// Garbage collect old space again. |
Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
- // Weak ref to old space object should now be cleared. |
- EXPECT_VALID(weak_new_ref); |
- EXPECT(Dart_IsNull(weak_new_ref)); |
- EXPECT_VALID(weak_old_ref); |
- EXPECT(Dart_IsNull(weak_old_ref)); |
+ { |
+ Dart_EnterScope(); |
+ // Weak ref to old space object should now be cleared. |
+ EXPECT_VALID(AsHandle(weak_new_ref)); |
+ EXPECT(Dart_IsNull(AsHandle(weak_new_ref))); |
+ EXPECT_VALID(AsHandle(weak_old_ref)); |
+ EXPECT(Dart_IsNull(AsHandle(weak_old_ref))); |
+ Dart_ExitScope(); |
+ } |
- Dart_DeletePersistentHandle(weak_new_ref); |
- Dart_DeletePersistentHandle(weak_old_ref); |
+ Dart_DeleteWeakPersistentHandle(weak_new_ref); |
+ Dart_DeleteWeakPersistentHandle(weak_old_ref); |
// Garbage collect one last time to revisit deleted handles. |
Isolate::Current()->heap()->CollectGarbage(Heap::kNew); |
@@ -1624,14 +1630,14 @@ |
} |
-static void WeakPersistentHandlePeerFinalizer(Dart_Handle handle, void* peer) { |
+static void WeakPersistentHandlePeerFinalizer( |
+ Dart_WeakPersistentHandle handle, void* peer) { |
*static_cast<int*>(peer) = 42; |
} |
TEST_CASE(WeakPersistentHandleCallback) { |
- Dart_Handle weak_ref = Dart_Null(); |
- EXPECT(Dart_IsNull(weak_ref)); |
+ Dart_WeakPersistentHandle weak_ref = NULL; |
int peer = 0; |
{ |
Dart_EnterScope(); |
@@ -1639,21 +1645,20 @@ |
EXPECT_VALID(obj); |
weak_ref = Dart_NewWeakPersistentHandle(obj, &peer, |
WeakPersistentHandlePeerFinalizer); |
+ EXPECT_VALID(AsHandle(weak_ref)); |
+ EXPECT(peer == 0); |
Dart_ExitScope(); |
} |
- EXPECT_VALID(weak_ref); |
- EXPECT(peer == 0); |
Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
EXPECT(peer == 0); |
GCTestHelper::CollectNewSpace(Heap::kIgnoreApiCallbacks); |
EXPECT(peer == 42); |
- Dart_DeletePersistentHandle(weak_ref); |
+ Dart_DeleteWeakPersistentHandle(weak_ref); |
} |
TEST_CASE(WeakPersistentHandleNoCallback) { |
- Dart_Handle weak_ref = Dart_Null(); |
- EXPECT(Dart_IsNull(weak_ref)); |
+ Dart_WeakPersistentHandle weak_ref = NULL; |
int peer = 0; |
{ |
Dart_EnterScope(); |
@@ -1665,8 +1670,7 @@ |
} |
// A finalizer is not invoked on a deleted handle. Therefore, the |
// peer value should not change after the referent is collected. |
- Dart_DeletePersistentHandle(weak_ref); |
- EXPECT_VALID(weak_ref); |
+ Dart_DeleteWeakPersistentHandle(weak_ref); |
EXPECT(peer == 0); |
Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
EXPECT(peer == 0); |
@@ -1689,116 +1693,125 @@ |
TEST_CASE(ObjectGroups) { |
- Dart_Handle strong = Dart_Null(); |
- EXPECT(Dart_IsNull(strong)); |
+ Dart_PersistentHandle strong = NULL; |
+ Dart_WeakPersistentHandle strong_weak = NULL; |
- Dart_Handle weak1 = Dart_Null(); |
- EXPECT(Dart_IsNull(weak1)); |
+ Dart_WeakPersistentHandle weak1 = NULL; |
+ Dart_WeakPersistentHandle weak2 = NULL; |
+ Dart_WeakPersistentHandle weak3 = NULL; |
+ Dart_WeakPersistentHandle weak4 = NULL; |
- Dart_Handle weak2 = Dart_Null(); |
- EXPECT(Dart_IsNull(weak2)); |
- |
- Dart_Handle weak3 = Dart_Null(); |
- EXPECT(Dart_IsNull(weak3)); |
- |
- Dart_Handle weak4 = Dart_Null(); |
- EXPECT(Dart_IsNull(weak4)); |
- |
Dart_EnterScope(); |
{ |
Isolate* isolate = Isolate::Current(); |
DARTSCOPE(isolate); |
- strong = Dart_NewPersistentHandle( |
- Api::NewHandle(isolate, String::New("strongly reachable", Heap::kOld))); |
- EXPECT_VALID(strong); |
- EXPECT(!Dart_IsNull(strong)); |
+ Dart_Handle local = Api::NewHandle( |
+ isolate, String::New("strongly reachable", Heap::kOld)); |
+ strong = Dart_NewPersistentHandle(local); |
+ strong_weak = Dart_NewWeakPersistentHandle(local, NULL, NULL); |
+ EXPECT_VALID(AsHandle(strong)); |
+ EXPECT(!Dart_IsNull(AsHandle(strong))); |
weak1 = Dart_NewWeakPersistentHandle( |
Api::NewHandle(isolate, String::New("weakly reachable 1", Heap::kOld)), |
NULL, NULL); |
- EXPECT_VALID(weak1); |
- EXPECT(!Dart_IsNull(weak1)); |
+ EXPECT_VALID(AsHandle(weak1)); |
+ EXPECT(!Dart_IsNull(AsHandle(weak1))); |
weak2 = Dart_NewWeakPersistentHandle( |
Api::NewHandle(isolate, String::New("weakly reachable 2", Heap::kOld)), |
NULL, NULL); |
- EXPECT_VALID(weak2); |
- EXPECT(!Dart_IsNull(weak2)); |
+ EXPECT_VALID(AsHandle(weak2)); |
+ EXPECT(!Dart_IsNull(AsHandle(weak2))); |
weak3 = Dart_NewWeakPersistentHandle( |
Api::NewHandle(isolate, String::New("weakly reachable 3", Heap::kOld)), |
NULL, NULL); |
- EXPECT_VALID(weak3); |
- EXPECT(!Dart_IsNull(weak3)); |
+ EXPECT_VALID(AsHandle(weak3)); |
+ EXPECT(!Dart_IsNull(AsHandle(weak3))); |
weak4 = Dart_NewWeakPersistentHandle( |
Api::NewHandle(isolate, String::New("weakly reachable 4", Heap::kOld)), |
NULL, NULL); |
- EXPECT_VALID(weak4); |
- EXPECT(!Dart_IsNull(weak4)); |
+ EXPECT_VALID(AsHandle(weak4)); |
+ EXPECT(!Dart_IsNull(AsHandle(weak4))); |
} |
Dart_ExitScope(); |
- EXPECT_VALID(strong); |
+ { |
+ Dart_EnterScope(); |
+ EXPECT_VALID(AsHandle(strong)); |
+ EXPECT_VALID(AsHandle(weak1)); |
+ EXPECT_VALID(AsHandle(weak2)); |
+ EXPECT_VALID(AsHandle(weak3)); |
+ EXPECT_VALID(AsHandle(weak4)); |
+ Dart_ExitScope(); |
+ } |
- EXPECT_VALID(weak1); |
- EXPECT_VALID(weak2); |
- EXPECT_VALID(weak3); |
- EXPECT_VALID(weak4); |
- |
GCTestHelper::CollectNewSpace(Heap::kIgnoreApiCallbacks); |
- // New space collection should not affect old space objects |
- EXPECT(!Dart_IsNull(weak1)); |
- EXPECT(!Dart_IsNull(weak2)); |
- EXPECT(!Dart_IsNull(weak3)); |
- EXPECT(!Dart_IsNull(weak4)); |
+ { |
+ Dart_EnterScope(); |
+ // New space collection should not affect old space objects |
+ EXPECT(!Dart_IsNull(AsHandle(weak1))); |
+ EXPECT(!Dart_IsNull(AsHandle(weak2))); |
+ EXPECT(!Dart_IsNull(AsHandle(weak3))); |
+ EXPECT(!Dart_IsNull(AsHandle(weak4))); |
+ Dart_ExitScope(); |
+ } |
{ |
- Dart_Handle array1[] = { weak1, strong }; |
+ Dart_WeakPersistentHandle array1[] = { weak1, strong_weak }; |
EXPECT_VALID(Dart_NewWeakReferenceSet(array1, ARRAY_SIZE(array1), |
array1, ARRAY_SIZE(array1))); |
- Dart_Handle array2[] = { weak2, weak1 }; |
+ Dart_WeakPersistentHandle array2[] = { weak2, weak1 }; |
EXPECT_VALID(Dart_NewWeakReferenceSet(array2, ARRAY_SIZE(array2), |
array2, ARRAY_SIZE(array2))); |
- Dart_Handle array3[] = { weak3, weak2 }; |
+ Dart_WeakPersistentHandle array3[] = { weak3, weak2 }; |
EXPECT_VALID(Dart_NewWeakReferenceSet(array3, ARRAY_SIZE(array3), |
array3, ARRAY_SIZE(array3))); |
- Dart_Handle array4[] = { weak4, weak3 }; |
+ Dart_WeakPersistentHandle array4[] = { weak4, weak3 }; |
EXPECT_VALID(Dart_NewWeakReferenceSet(array4, ARRAY_SIZE(array4), |
array4, ARRAY_SIZE(array4))); |
Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
} |
- // All weak references should be preserved. |
- EXPECT(!Dart_IsNull(weak1)); |
- EXPECT(!Dart_IsNull(weak2)); |
- EXPECT(!Dart_IsNull(weak3)); |
- EXPECT(!Dart_IsNull(weak4)); |
+ { |
+ Dart_EnterScope(); |
+ // All weak references should be preserved. |
+ EXPECT(!Dart_IsNull(AsHandle(strong_weak))); |
+ EXPECT(!Dart_IsNull(AsHandle(weak1))); |
+ EXPECT(!Dart_IsNull(AsHandle(weak2))); |
+ EXPECT(!Dart_IsNull(AsHandle(weak3))); |
+ EXPECT(!Dart_IsNull(AsHandle(weak4))); |
+ Dart_ExitScope(); |
+ } |
{ |
- Dart_Handle array1[] = { weak1, strong }; |
+ Dart_EnterScope(); |
+ Dart_WeakPersistentHandle array1[] = { weak1, strong_weak }; |
EXPECT_VALID(Dart_NewWeakReferenceSet(array1, ARRAY_SIZE(array1), |
array1, ARRAY_SIZE(array1))); |
- Dart_Handle array2[] = { weak2, weak1 }; |
+ Dart_WeakPersistentHandle array2[] = { weak2, weak1 }; |
EXPECT_VALID(Dart_NewWeakReferenceSet(array2, ARRAY_SIZE(array2), |
array2, ARRAY_SIZE(array2))); |
- Dart_Handle array3[] = { weak2 }; |
+ Dart_WeakPersistentHandle array3[] = { weak2 }; |
EXPECT_VALID(Dart_NewWeakReferenceSet(array3, ARRAY_SIZE(array3), |
array3, ARRAY_SIZE(array3))); |
// Strong reference to weak3 to retain weak3 and weak4. |
- Dart_Handle weak3_strong_ref = Dart_NewPersistentHandle(weak3); |
- EXPECT_VALID(weak3_strong_ref); |
+ Dart_PersistentHandle weak3_strong_ref = |
+ Dart_NewPersistentHandle(AsHandle(weak3)); |
+ EXPECT_VALID(AsHandle(weak3_strong_ref)); |
- Dart_Handle array4[] = { weak4, weak3 }; |
+ Dart_WeakPersistentHandle array4[] = { weak4, weak3 }; |
EXPECT_VALID(Dart_NewWeakReferenceSet(array4, ARRAY_SIZE(array4), |
array4, ARRAY_SIZE(array4))); |
@@ -1806,86 +1819,106 @@ |
// Delete strong reference to weak3. |
Dart_DeletePersistentHandle(weak3_strong_ref); |
+ Dart_ExitScope(); |
} |
- // All weak references should be preserved. |
- EXPECT(!Dart_IsNull(weak1)); |
- EXPECT(!Dart_IsNull(weak2)); |
- EXPECT(!Dart_IsNull(weak3)); |
- EXPECT(!Dart_IsNull(weak4)); |
+ { |
+ Dart_EnterScope(); |
+ // All weak references should be preserved. |
+ EXPECT(!Dart_IsNull(AsHandle(strong_weak))); |
+ EXPECT(!Dart_IsNull(AsHandle(weak1))); |
+ EXPECT(!Dart_IsNull(AsHandle(weak2))); |
+ EXPECT(!Dart_IsNull(AsHandle(weak3))); |
+ EXPECT(!Dart_IsNull(AsHandle(weak4))); |
+ Dart_ExitScope(); |
+ } |
{ |
- Dart_Handle array1[] = { weak1, strong }; |
+ Dart_WeakPersistentHandle array1[] = { weak1, strong_weak }; |
EXPECT_VALID(Dart_NewWeakReferenceSet(array1, ARRAY_SIZE(array1), |
array1, ARRAY_SIZE(array1))); |
- Dart_Handle array2[] = { weak2, weak1 }; |
+ Dart_WeakPersistentHandle array2[] = { weak2, weak1 }; |
EXPECT_VALID(Dart_NewWeakReferenceSet(array2, ARRAY_SIZE(array2), |
array2, ARRAY_SIZE(array2))); |
- Dart_Handle array3[] = { weak2 }; |
+ Dart_WeakPersistentHandle array3[] = { weak2 }; |
EXPECT_VALID(Dart_NewWeakReferenceSet(array3, ARRAY_SIZE(array3), |
array3, ARRAY_SIZE(array3))); |
- Dart_Handle array4[] = { weak4, weak3 }; |
+ Dart_WeakPersistentHandle array4[] = { weak4, weak3 }; |
EXPECT_VALID(Dart_NewWeakReferenceSet(array4, ARRAY_SIZE(array4), |
array4, ARRAY_SIZE(array4))); |
Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
} |
- // Only weak1 and weak2 should be preserved. |
- EXPECT(!Dart_IsNull(weak1)); |
- EXPECT(!Dart_IsNull(weak2)); |
- EXPECT(Dart_IsNull(weak3)); |
- EXPECT(Dart_IsNull(weak4)); |
+ { |
+ Dart_EnterScope(); |
+ // Only weak1 and weak2 should be preserved. |
+ EXPECT(!Dart_IsNull(AsHandle(strong_weak))); |
+ EXPECT(!Dart_IsNull(AsHandle(weak1))); |
+ EXPECT(!Dart_IsNull(AsHandle(weak2))); |
+ EXPECT(Dart_IsNull(AsHandle(weak3))); |
+ EXPECT(Dart_IsNull(AsHandle(weak4))); |
+ Dart_ExitScope(); |
+ } |
{ |
- Dart_Handle array1[] = { weak1, strong }; |
+ Dart_WeakPersistentHandle array1[] = { weak1, strong_weak }; |
EXPECT_VALID(Dart_NewWeakReferenceSet(array1, ARRAY_SIZE(array1), |
array1, ARRAY_SIZE(array1))); |
// weak3 is cleared so weak2 is unreferenced and should be cleared |
- Dart_Handle array2[] = { weak2, weak3 }; |
+ Dart_WeakPersistentHandle array2[] = { weak2, weak3 }; |
EXPECT_VALID(Dart_NewWeakReferenceSet(array2, ARRAY_SIZE(array2), |
array2, ARRAY_SIZE(array2))); |
Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
} |
- // Only weak1 should be preserved, weak3 should not preserve weak2. |
- EXPECT(!Dart_IsNull(weak1)); |
- EXPECT(Dart_IsNull(weak2)); |
- EXPECT(Dart_IsNull(weak3)); // was cleared, should remain cleared |
- EXPECT(Dart_IsNull(weak4)); // was cleared, should remain cleared |
+ { |
+ Dart_EnterScope(); |
+ // Only weak1 should be preserved, weak3 should not preserve weak2. |
+ EXPECT(!Dart_IsNull(AsHandle(strong_weak))); |
+ EXPECT(!Dart_IsNull(AsHandle(weak1))); |
+ EXPECT(Dart_IsNull(AsHandle(weak2))); |
+ EXPECT(Dart_IsNull(AsHandle(weak3))); // was cleared, should remain cleared |
+ EXPECT(Dart_IsNull(AsHandle(weak4))); // was cleared, should remain cleared |
+ Dart_ExitScope(); |
+ } |
{ |
// weak{2,3,4} are cleared and should have no effect on weak1 |
- Dart_Handle array1[] = { strong, weak2, weak3, weak4 }; |
+ Dart_WeakPersistentHandle array1[] = { strong_weak, weak2, weak3, weak4 }; |
EXPECT_VALID(Dart_NewWeakReferenceSet(array1, ARRAY_SIZE(array1), |
array1, ARRAY_SIZE(array1))); |
// weak1 is weakly reachable and should be cleared |
- Dart_Handle array2[] = { weak1 }; |
+ Dart_WeakPersistentHandle array2[] = { weak1 }; |
EXPECT_VALID(Dart_NewWeakReferenceSet(array2, ARRAY_SIZE(array2), |
array2, ARRAY_SIZE(array2))); |
Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
} |
- // All weak references should now be cleared. |
- EXPECT(Dart_IsNull(weak1)); |
- EXPECT(Dart_IsNull(weak2)); |
- EXPECT(Dart_IsNull(weak3)); |
- EXPECT(Dart_IsNull(weak4)); |
+ { |
+ Dart_EnterScope(); |
+ // All weak references should now be cleared. |
+ EXPECT(!Dart_IsNull(AsHandle(strong_weak))); |
+ EXPECT(Dart_IsNull(AsHandle(weak1))); |
+ EXPECT(Dart_IsNull(AsHandle(weak2))); |
+ EXPECT(Dart_IsNull(AsHandle(weak3))); |
+ EXPECT(Dart_IsNull(AsHandle(weak4))); |
+ Dart_ExitScope(); |
+ } |
} |
TEST_CASE(PrologueWeakPersistentHandles) { |
- Dart_Handle old_pwph = Dart_Null(); |
- EXPECT(Dart_IsNull(old_pwph)); |
- Dart_Handle new_pwph = Dart_Null(); |
- EXPECT(Dart_IsNull(new_pwph)); |
+ Dart_WeakPersistentHandle old_pwph = NULL; |
+ Dart_WeakPersistentHandle new_pwph = NULL; |
+ |
Dart_EnterScope(); |
{ |
Isolate* isolate = Isolate::Current(); |
@@ -1894,215 +1927,276 @@ |
Api::NewHandle(isolate, |
String::New("new space prologue weak", Heap::kNew)), |
NULL, NULL); |
- EXPECT_VALID(new_pwph); |
- EXPECT(!Dart_IsNull(new_pwph)); |
+ EXPECT_VALID(AsHandle(new_pwph)); |
+ EXPECT(!Dart_IsNull(AsHandle(new_pwph))); |
old_pwph = Dart_NewPrologueWeakPersistentHandle( |
Api::NewHandle(isolate, |
String::New("old space prologue weak", Heap::kOld)), |
NULL, NULL); |
- EXPECT_VALID(old_pwph); |
- EXPECT(!Dart_IsNull(old_pwph)); |
+ EXPECT_VALID(AsHandle(old_pwph)); |
+ EXPECT(!Dart_IsNull(AsHandle(old_pwph))); |
} |
Dart_ExitScope(); |
- EXPECT_VALID(new_pwph); |
- EXPECT(!Dart_IsNull(new_pwph)); |
- EXPECT(Dart_IsPrologueWeakPersistentHandle(new_pwph)); |
- EXPECT_VALID(old_pwph); |
- EXPECT(!Dart_IsNull(old_pwph)); |
- EXPECT(Dart_IsPrologueWeakPersistentHandle(old_pwph)); |
+ |
+ { |
+ Dart_EnterScope(); |
+ EXPECT_VALID(AsHandle(new_pwph)); |
+ EXPECT(!Dart_IsNull(AsHandle(new_pwph))); |
+ EXPECT(Dart_IsPrologueWeakPersistentHandle(new_pwph)); |
+ EXPECT_VALID(AsHandle(old_pwph)); |
+ EXPECT(!Dart_IsNull(AsHandle(old_pwph))); |
+ EXPECT(Dart_IsPrologueWeakPersistentHandle(old_pwph)); |
+ Dart_ExitScope(); |
+ } |
+ |
// Garbage collect new space without invoking API callbacks. |
GCTestHelper::CollectNewSpace(Heap::kIgnoreApiCallbacks); |
- // Both prologue weak handles should be preserved. |
- EXPECT(!Dart_IsNull(new_pwph)); |
- EXPECT(!Dart_IsNull(old_pwph)); |
+ { |
+ Dart_EnterScope(); |
+ // Both prologue weak handles should be preserved. |
+ EXPECT(!Dart_IsNull(AsHandle(new_pwph))); |
+ EXPECT(!Dart_IsNull(AsHandle(old_pwph))); |
+ Dart_ExitScope(); |
+ } |
+ |
// Garbage collect old space without invoking API callbacks. |
Isolate::Current()->heap()->CollectGarbage(Heap::kOld, |
Heap::kIgnoreApiCallbacks); |
- // Both prologue weak handles should be preserved. |
- EXPECT(!Dart_IsNull(new_pwph)); |
- EXPECT(!Dart_IsNull(old_pwph)); |
+ |
+ { |
+ Dart_EnterScope(); |
+ // Both prologue weak handles should be preserved. |
+ EXPECT(!Dart_IsNull(AsHandle(new_pwph))); |
+ EXPECT(!Dart_IsNull(AsHandle(old_pwph))); |
+ Dart_ExitScope(); |
+ } |
+ |
// Garbage collect new space invoking API callbacks. |
GCTestHelper::CollectNewSpace(Heap::kInvokeApiCallbacks); |
- // The prologue weak handle with a new space referent should now be |
- // cleared. The old space referent should be preserved. |
- EXPECT(Dart_IsNull(new_pwph)); |
- EXPECT(!Dart_IsNull(old_pwph)); |
+ { |
+ Dart_EnterScope(); |
+ // The prologue weak handle with a new space referent should now be |
+ // cleared. The old space referent should be preserved. |
+ EXPECT(Dart_IsNull(AsHandle(new_pwph))); |
+ EXPECT(!Dart_IsNull(AsHandle(old_pwph))); |
+ Dart_ExitScope(); |
+ } |
+ |
Isolate::Current()->heap()->CollectGarbage(Heap::kOld, |
Heap::kInvokeApiCallbacks); |
- // The prologue weak handle with an old space referent should now be |
- // cleared. The new space referent should remain cleared. |
- EXPECT(Dart_IsNull(new_pwph)); |
- EXPECT(Dart_IsNull(old_pwph)); |
+ |
+ { |
+ Dart_EnterScope(); |
+ // The prologue weak handle with an old space referent should now be |
+ // cleared. The new space referent should remain cleared. |
+ EXPECT(Dart_IsNull(AsHandle(new_pwph))); |
+ EXPECT(Dart_IsNull(AsHandle(old_pwph))); |
+ Dart_ExitScope(); |
+ } |
} |
TEST_CASE(ImplicitReferencesOldSpace) { |
- Dart_Handle strong = Dart_Null(); |
- EXPECT(Dart_IsNull(strong)); |
+ Dart_PersistentHandle strong = NULL; |
+ Dart_WeakPersistentHandle strong_weak = NULL; |
- Dart_Handle weak1 = Dart_Null(); |
- EXPECT(Dart_IsNull(weak1)); |
+ Dart_WeakPersistentHandle weak1 = NULL; |
+ Dart_WeakPersistentHandle weak2 = NULL; |
+ Dart_WeakPersistentHandle weak3 = NULL; |
- Dart_Handle weak2 = Dart_Null(); |
- EXPECT(Dart_IsNull(weak2)); |
- |
- Dart_Handle weak3 = Dart_Null(); |
- EXPECT(Dart_IsNull(weak3)); |
- |
Dart_EnterScope(); |
{ |
Isolate* isolate = Isolate::Current(); |
DARTSCOPE(isolate); |
- strong = Dart_NewPersistentHandle( |
- Api::NewHandle(isolate, String::New("strongly reachable", Heap::kOld))); |
- EXPECT(!Dart_IsNull(strong)); |
- EXPECT_VALID(strong); |
+ Dart_Handle local = Api::NewHandle( |
+ isolate, String::New("strongly reachable", Heap::kOld)); |
+ strong = Dart_NewPersistentHandle(local); |
+ strong_weak = Dart_NewWeakPersistentHandle(local, NULL, NULL); |
+ EXPECT(!Dart_IsNull(AsHandle(strong))); |
+ EXPECT_VALID(AsHandle(strong)); |
+ EXPECT(!Dart_IsNull(AsHandle(strong_weak))); |
+ EXPECT_VALID(AsHandle(strong_weak)); |
+ EXPECT(Dart_IdentityEquals(AsHandle(strong), AsHandle(strong_weak))) |
+ |
weak1 = Dart_NewWeakPersistentHandle( |
Api::NewHandle(isolate, String::New("weakly reachable 1", Heap::kOld)), |
NULL, NULL); |
- EXPECT(!Dart_IsNull(weak1)); |
- EXPECT_VALID(weak1); |
+ EXPECT(!Dart_IsNull(AsHandle(weak1))); |
+ EXPECT_VALID(AsHandle(weak1)); |
weak2 = Dart_NewWeakPersistentHandle( |
Api::NewHandle(isolate, String::New("weakly reachable 2", Heap::kOld)), |
NULL, NULL); |
- EXPECT(!Dart_IsNull(weak2)); |
- EXPECT_VALID(weak2); |
+ EXPECT(!Dart_IsNull(AsHandle(weak2))); |
+ EXPECT_VALID(AsHandle(weak2)); |
weak3 = Dart_NewWeakPersistentHandle( |
Api::NewHandle(isolate, String::New("weakly reachable 3", Heap::kOld)), |
NULL, NULL); |
- EXPECT(!Dart_IsNull(weak3)); |
- EXPECT_VALID(weak3); |
+ EXPECT(!Dart_IsNull(AsHandle(weak3))); |
+ EXPECT_VALID(AsHandle(weak3)); |
} |
Dart_ExitScope(); |
- EXPECT_VALID(strong); |
+ { |
+ Dart_EnterScope(); |
+ EXPECT_VALID(AsHandle(strong_weak)); |
+ EXPECT_VALID(AsHandle(weak1)); |
+ EXPECT_VALID(AsHandle(weak2)); |
+ EXPECT_VALID(AsHandle(weak3)); |
+ Dart_ExitScope(); |
+ } |
- EXPECT_VALID(weak1); |
- EXPECT_VALID(weak2); |
- EXPECT_VALID(weak3); |
- |
GCTestHelper::CollectNewSpace(Heap::kIgnoreApiCallbacks); |
- // New space collection should not affect old space objects |
- EXPECT(!Dart_IsNull(weak1)); |
- EXPECT(!Dart_IsNull(weak2)); |
- EXPECT(!Dart_IsNull(weak3)); |
+ { |
+ Dart_EnterScope(); |
+ // New space collection should not affect old space objects |
+ EXPECT_VALID(AsHandle(strong_weak)); |
+ EXPECT(!Dart_IsNull(AsHandle(weak1))); |
+ EXPECT(!Dart_IsNull(AsHandle(weak2))); |
+ EXPECT(!Dart_IsNull(AsHandle(weak3))); |
+ Dart_ExitScope(); |
+ } |
// A strongly referenced key should preserve all the values. |
{ |
- Dart_Handle keys[] = { strong }; |
- Dart_Handle values[] = { weak1, weak2, weak3 }; |
+ Dart_WeakPersistentHandle keys[] = { strong_weak }; |
+ Dart_WeakPersistentHandle values[] = { weak1, weak2, weak3 }; |
EXPECT_VALID(Dart_NewWeakReferenceSet(keys, ARRAY_SIZE(keys), |
values, ARRAY_SIZE(values))); |
Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
} |
- // All weak references should be preserved. |
- EXPECT(!Dart_IsNull(weak1)); |
- EXPECT(!Dart_IsNull(weak2)); |
- EXPECT(!Dart_IsNull(weak3)); |
+ { |
+ Dart_EnterScope(); |
+ // All weak references should be preserved. |
+ EXPECT_VALID(AsHandle(strong_weak)); |
+ EXPECT(!Dart_IsNull(AsHandle(weak1))); |
+ EXPECT(!Dart_IsNull(AsHandle(weak2))); |
+ EXPECT(!Dart_IsNull(AsHandle(weak3))); |
+ Dart_ExitScope(); |
+ } |
// Key membership does not imply a strong reference. |
{ |
- Dart_Handle keys[] = { strong, weak3 }; |
- Dart_Handle values[] = { weak1, weak2 }; |
+ Dart_WeakPersistentHandle keys[] = { strong_weak, weak3 }; |
+ Dart_WeakPersistentHandle values[] = { weak1, weak2 }; |
EXPECT_VALID(Dart_NewWeakReferenceSet(keys, ARRAY_SIZE(keys), |
values, ARRAY_SIZE(values))); |
Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
} |
- // All weak references except weak3 should be preserved. |
- EXPECT(!Dart_IsNull(weak1)); |
- EXPECT(!Dart_IsNull(weak2)); |
- EXPECT(Dart_IsNull(weak3)); |
+ { |
+ Dart_EnterScope(); |
+ // All weak references except weak3 should be preserved. |
+ EXPECT(!Dart_IsNull(AsHandle(weak1))); |
+ EXPECT(!Dart_IsNull(AsHandle(weak2))); |
+ EXPECT(Dart_IsNull(AsHandle(weak3))); |
+ Dart_ExitScope(); |
+ } |
} |
TEST_CASE(ImplicitReferencesNewSpace) { |
- Dart_Handle strong = Dart_Null(); |
- EXPECT(Dart_IsNull(strong)); |
+ Dart_PersistentHandle strong = NULL; |
+ Dart_WeakPersistentHandle strong_weak = NULL; |
- Dart_Handle weak1 = Dart_Null(); |
- EXPECT(Dart_IsNull(weak1)); |
+ Dart_WeakPersistentHandle weak1 = NULL; |
+ Dart_WeakPersistentHandle weak2 = NULL; |
+ Dart_WeakPersistentHandle weak3 = NULL; |
- Dart_Handle weak2 = Dart_Null(); |
- EXPECT(Dart_IsNull(weak2)); |
- |
- Dart_Handle weak3 = Dart_Null(); |
- EXPECT(Dart_IsNull(weak3)); |
- |
Dart_EnterScope(); |
{ |
Isolate* isolate = Isolate::Current(); |
DARTSCOPE(isolate); |
- strong = Dart_NewPersistentHandle( |
- Api::NewHandle(isolate, String::New("strongly reachable", Heap::kNew))); |
- EXPECT(!Dart_IsNull(strong)); |
- EXPECT_VALID(strong); |
+ Dart_Handle local = Api::NewHandle( |
+ isolate, String::New("strongly reachable", Heap::kOld)); |
+ strong = Dart_NewPersistentHandle(local); |
+ strong_weak = Dart_NewWeakPersistentHandle(local, NULL, NULL); |
+ EXPECT(!Dart_IsNull(AsHandle(strong))); |
+ EXPECT_VALID(AsHandle(strong)); |
+ EXPECT(!Dart_IsNull(AsHandle(strong_weak))); |
+ EXPECT_VALID(AsHandle(strong_weak)); |
+ EXPECT(Dart_IdentityEquals(AsHandle(strong), AsHandle(strong_weak))) |
+ |
weak1 = Dart_NewWeakPersistentHandle( |
Api::NewHandle(isolate, String::New("weakly reachable 1", Heap::kNew)), |
NULL, NULL); |
- EXPECT(!Dart_IsNull(weak1)); |
- EXPECT_VALID(weak1); |
+ EXPECT(!Dart_IsNull(AsHandle(weak1))); |
+ EXPECT_VALID(AsHandle(weak1)); |
weak2 = Dart_NewWeakPersistentHandle( |
Api::NewHandle(isolate, String::New("weakly reachable 2", Heap::kNew)), |
NULL, NULL); |
- EXPECT(!Dart_IsNull(weak2)); |
- EXPECT_VALID(weak2); |
+ EXPECT(!Dart_IsNull(AsHandle(weak2))); |
+ EXPECT_VALID(AsHandle(weak2)); |
weak3 = Dart_NewWeakPersistentHandle( |
Api::NewHandle(isolate, String::New("weakly reachable 3", Heap::kNew)), |
NULL, NULL); |
- EXPECT(!Dart_IsNull(weak3)); |
- EXPECT_VALID(weak3); |
+ EXPECT(!Dart_IsNull(AsHandle(weak3))); |
+ EXPECT_VALID(AsHandle(weak3)); |
} |
Dart_ExitScope(); |
- EXPECT_VALID(strong); |
+ { |
+ Dart_EnterScope(); |
+ EXPECT_VALID(AsHandle(strong_weak)); |
+ EXPECT_VALID(AsHandle(weak1)); |
+ EXPECT_VALID(AsHandle(weak2)); |
+ EXPECT_VALID(AsHandle(weak3)); |
+ Dart_ExitScope(); |
+ } |
- EXPECT_VALID(weak1); |
- EXPECT_VALID(weak2); |
- EXPECT_VALID(weak3); |
- |
Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
- // Old space collection should not affect old space objects. |
- EXPECT(!Dart_IsNull(weak1)); |
- EXPECT(!Dart_IsNull(weak2)); |
- EXPECT(!Dart_IsNull(weak3)); |
+ { |
+ Dart_EnterScope(); |
+ // Old space collection should not affect old space objects. |
+ EXPECT(!Dart_IsNull(AsHandle(weak1))); |
+ EXPECT(!Dart_IsNull(AsHandle(weak2))); |
+ EXPECT(!Dart_IsNull(AsHandle(weak3))); |
+ Dart_ExitScope(); |
+ } |
// A strongly referenced key should preserve all the values. |
{ |
- Dart_Handle keys[] = { strong }; |
- Dart_Handle values[] = { weak1, weak2, weak3 }; |
+ Dart_WeakPersistentHandle keys[] = { strong_weak }; |
+ Dart_WeakPersistentHandle values[] = { weak1, weak2, weak3 }; |
EXPECT_VALID(Dart_NewWeakReferenceSet(keys, ARRAY_SIZE(keys), |
values, ARRAY_SIZE(values))); |
GCTestHelper::CollectNewSpace(Heap::kInvokeApiCallbacks); |
} |
- // All weak references should be preserved. |
- EXPECT(!Dart_IsNull(weak1)); |
- EXPECT(!Dart_IsNull(weak2)); |
- EXPECT(!Dart_IsNull(weak3)); |
+ { |
+ Dart_EnterScope(); |
+ // All weak references should be preserved. |
+ EXPECT(!Dart_IsNull(AsHandle(weak1))); |
+ EXPECT(!Dart_IsNull(AsHandle(weak2))); |
+ EXPECT(!Dart_IsNull(AsHandle(weak3))); |
+ Dart_ExitScope(); |
+ } |
GCTestHelper::CollectNewSpace(Heap::kIgnoreApiCallbacks); |
- // No weak references should be preserved. |
- EXPECT(Dart_IsNull(weak1)); |
- EXPECT(Dart_IsNull(weak2)); |
- EXPECT(Dart_IsNull(weak3)); |
+ { |
+ Dart_EnterScope(); |
+ // No weak references should be preserved. |
+ EXPECT(Dart_IsNull(AsHandle(weak1))); |
+ EXPECT(Dart_IsNull(AsHandle(weak2))); |
+ EXPECT(Dart_IsNull(AsHandle(weak3))); |
+ Dart_ExitScope(); |
+ } |
} |
@@ -5177,7 +5271,7 @@ |
if (tag == kCanonicalizeUrl) { |
return url; |
} |
- return Api::Success(Isolate::Current()); |
+ return Api::Success(); |
} |
@@ -5301,7 +5395,7 @@ |
return Api::NewError("invalid callback"); |
} |
index += 1; |
- return Api::Success(Isolate::Current()); |
+ return Api::Success(); |
} |