Index: runtime/vm/dart_api_impl_test.cc |
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc |
index 6e22c617e8d77f4cc238b477977424de30af2159..6f4d1587f623cfc9c2f040498801015cdd1e3bc5 100644 |
--- a/runtime/vm/dart_api_impl_test.cc |
+++ b/runtime/vm/dart_api_impl_test.cc |
@@ -2753,7 +2753,6 @@ TEST_CASE(WeakPersistentHandleExternalAllocationSize) { |
kWeak1ExternalSize, |
NopCallback); |
EXPECT_VALID(AsHandle(weak1)); |
- EXPECT(!Dart_IsPrologueWeakPersistentHandle(weak1)); |
Dart_ExitScope(); |
} |
Dart_PersistentHandle strong_ref = NULL; |
@@ -2788,33 +2787,6 @@ TEST_CASE(WeakPersistentHandleExternalAllocationSize) { |
} |
-TEST_CASE(PrologueWeakPersistentHandleExternalAllocationSize) { |
- Heap* heap = Isolate::Current()->heap(); |
- EXPECT(heap->ExternalInWords(Heap::kNew) == 0); |
- EXPECT(heap->ExternalInWords(Heap::kOld) == 0); |
- Dart_WeakPersistentHandle pwph = NULL; |
- static const intptr_t kWeakExternalSize = 1 * KB; |
- { |
- Dart_EnterScope(); |
- Dart_Handle obj = NewString("a string"); |
- EXPECT_VALID(obj); |
- pwph = Dart_NewPrologueWeakPersistentHandle( |
- obj, NULL, kWeakExternalSize, NopCallback); |
- EXPECT_VALID(AsHandle(pwph)); |
- Dart_ExitScope(); |
- } |
- EXPECT(heap->ExternalInWords(Heap::kNew) == kWeakExternalSize / kWordSize); |
- EXPECT(heap->ExternalInWords(Heap::kOld) == 0); |
- // Promoting the string should transfer the external size to old. |
- GCTestHelper::CollectNewSpace(Heap::kIgnoreApiCallbacks); |
- GCTestHelper::CollectNewSpace(Heap::kIgnoreApiCallbacks); |
- EXPECT(heap->ExternalInWords(Heap::kNew) == 0); |
- EXPECT(heap->ExternalInWords(Heap::kOld) == kWeakExternalSize / kWordSize); |
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
- EXPECT(heap->ExternalInWords(Heap::kOld) == 0); |
-} |
- |
- |
TEST_CASE(WeakPersistentHandleExternalAllocationSizeNewspaceGC) { |
Dart_Isolate isolate = reinterpret_cast<Dart_Isolate>(Isolate::Current()); |
Heap* heap = Isolate::Current()->heap(); |
@@ -2927,402 +2899,6 @@ TEST_CASE(WeakPersistentHandleExternalAllocationSizeOddReferents) { |
static Dart_WeakPersistentHandle weak1 = NULL; |
static Dart_WeakPersistentHandle weak2 = NULL; |
static Dart_WeakPersistentHandle weak3 = NULL; |
-static Dart_WeakPersistentHandle weak4 = NULL; |
- |
- |
-static void ObjectGroupsCallback(void* isolate_callback_data, |
- Dart_WeakPersistentHandle handle, |
- void* peer) { |
- if (handle == weak1) { |
- weak1 = NULL; |
- } else if (handle == weak2) { |
- weak2 = NULL; |
- } else if (handle == weak3) { |
- weak3 = NULL; |
- } else if (handle == weak4) { |
- weak4 = NULL; |
- } |
-} |
- |
- |
-TEST_CASE(ObjectGroups) { |
- Dart_PersistentHandle strong = NULL; |
- Dart_WeakPersistentHandle strong_weak = NULL; |
- |
- Dart_EnterScope(); |
- { |
- Isolate* isolate = Isolate::Current(); |
- DARTSCOPE(Thread::Current()); |
- |
- Dart_Handle local = Api::NewHandle( |
- isolate, String::New("strongly reachable", Heap::kOld)); |
- strong = Dart_NewPersistentHandle(local); |
- strong_weak = Dart_NewWeakPersistentHandle(local, NULL, 0, NopCallback); |
- EXPECT_VALID(AsHandle(strong)); |
- EXPECT(!Dart_IsNull(AsHandle(strong))); |
- |
- weak1 = Dart_NewWeakPersistentHandle( |
- Api::NewHandle(isolate, String::New("weakly reachable 1", Heap::kOld)), |
- NULL, 0, ObjectGroupsCallback); |
- EXPECT_VALID(AsHandle(weak1)); |
- EXPECT(!Dart_IsNull(AsHandle(weak1))); |
- |
- weak2 = Dart_NewWeakPersistentHandle( |
- Api::NewHandle(isolate, String::New("weakly reachable 2", Heap::kOld)), |
- NULL, 0, ObjectGroupsCallback); |
- EXPECT_VALID(AsHandle(weak2)); |
- EXPECT(!Dart_IsNull(AsHandle(weak2))); |
- |
- weak3 = Dart_NewWeakPersistentHandle( |
- Api::NewHandle(isolate, String::New("weakly reachable 3", Heap::kOld)), |
- NULL, 0, ObjectGroupsCallback); |
- EXPECT_VALID(AsHandle(weak3)); |
- EXPECT(!Dart_IsNull(AsHandle(weak3))); |
- |
- weak4 = Dart_NewWeakPersistentHandle( |
- Api::NewHandle(isolate, String::New("weakly reachable 4", Heap::kOld)), |
- NULL, 0, ObjectGroupsCallback); |
- EXPECT_VALID(AsHandle(weak4)); |
- EXPECT(!Dart_IsNull(AsHandle(weak4))); |
- } |
- Dart_ExitScope(); |
- |
- { |
- Dart_EnterScope(); |
- EXPECT_VALID(AsHandle(strong)); |
- EXPECT_VALID(AsHandle(weak1)); |
- EXPECT_VALID(AsHandle(weak2)); |
- EXPECT_VALID(AsHandle(weak3)); |
- EXPECT_VALID(AsHandle(weak4)); |
- Dart_ExitScope(); |
- } |
- |
- GCTestHelper::CollectNewSpace(Heap::kIgnoreApiCallbacks); |
- |
- { |
- 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_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
- EXPECT_NOTNULL(builder); |
- |
- Dart_WeakReferenceSet set = Dart_NewWeakReferenceSet(builder, weak1, weak1); |
- EXPECT_NOTNULL(set); |
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, strong_weak, strong_weak)); |
- |
- set = Dart_NewWeakReferenceSet(builder, weak2, weak2); |
- EXPECT_NOTNULL(set); |
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak1, weak1)); |
- |
- set = Dart_NewWeakReferenceSet(builder, weak3, weak3); |
- EXPECT_NOTNULL(set); |
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak2, weak2)); |
- |
- set = Dart_NewWeakReferenceSet(builder, weak4, weak4); |
- EXPECT_NOTNULL(set); |
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak3, weak3)); |
- |
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
- } |
- |
- { |
- 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_EnterScope(); |
- Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
- EXPECT_NOTNULL(builder); |
- |
- Dart_WeakReferenceSet set = Dart_NewWeakReferenceSet(builder, weak1, weak1); |
- EXPECT_NOTNULL(set); |
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, strong_weak, strong_weak)); |
- |
- set = Dart_NewWeakReferenceSet(builder, weak2, weak2); |
- EXPECT_NOTNULL(set); |
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak1, weak1)); |
- |
- set = Dart_NewWeakReferenceSet(builder, weak2, weak2); |
- EXPECT_NOTNULL(set); |
- |
- // Strong reference to weak3 to retain weak3 and weak4. |
- Dart_PersistentHandle weak3_strong_ref = |
- Dart_NewPersistentHandle(AsHandle(weak3)); |
- EXPECT_VALID(AsHandle(weak3_strong_ref)); |
- |
- set = Dart_NewWeakReferenceSet(builder, weak4, weak4); |
- EXPECT_NOTNULL(set); |
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak3, weak3)); |
- |
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
- |
- // Delete strong reference to weak3. |
- Dart_DeletePersistentHandle(weak3_strong_ref); |
- Dart_ExitScope(); |
- } |
- |
- { |
- 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_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
- EXPECT_NOTNULL(builder); |
- |
- Dart_WeakReferenceSet set = Dart_NewWeakReferenceSet(builder, weak1, weak1); |
- EXPECT_NOTNULL(set); |
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, strong_weak, strong_weak)); |
- |
- set = Dart_NewWeakReferenceSet(builder, weak2, weak2); |
- EXPECT_NOTNULL(set); |
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak1, weak1)); |
- |
- set = Dart_NewWeakReferenceSet(builder, weak2, weak2); |
- EXPECT_NOTNULL(set); |
- |
- set = Dart_NewWeakReferenceSet(builder, weak4, weak4); |
- EXPECT_NOTNULL(set); |
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak3, weak3)); |
- |
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
- } |
- |
- { |
- 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(weak3 == NULL); |
- EXPECT(weak4 == NULL); |
- Dart_ExitScope(); |
- } |
- |
- { |
- Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
- EXPECT_NOTNULL(builder); |
- |
- Dart_WeakPersistentHandle lweak3 = Dart_NewWeakPersistentHandle( |
- Dart_Null(), NULL, 0, NopCallback); |
- |
- Dart_WeakReferenceSet set = Dart_NewWeakReferenceSet(builder, weak1, weak1); |
- EXPECT_NOTNULL(set); |
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, strong_weak, strong_weak)); |
- |
- // lweak3 is unreferenced so weak2 is unreferenced and should be cleared |
- set = Dart_NewWeakReferenceSet(builder, weak2, weak2); |
- EXPECT_NOTNULL(set); |
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, lweak3, lweak3)); |
- |
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
- } |
- |
- { |
- Dart_EnterScope(); |
- // Only weak1 should be preserved, weak3 should not preserve weak2. |
- EXPECT(!Dart_IsNull(AsHandle(strong_weak))); |
- EXPECT(!Dart_IsNull(AsHandle(weak1))); |
- EXPECT(weak2 == NULL); |
- EXPECT(weak3 == NULL); // was cleared, should remain cleared |
- EXPECT(weak4 == NULL); // was cleared, should remain cleared |
- Dart_ExitScope(); |
- } |
- |
- { |
- Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
- EXPECT_NOTNULL(builder); |
- |
- Dart_WeakPersistentHandle lweak2 = Dart_NewWeakPersistentHandle( |
- Dart_Null(), NULL, 0, NopCallback); |
- Dart_WeakPersistentHandle lweak3 = Dart_NewWeakPersistentHandle( |
- Dart_Null(), NULL, 0, NopCallback); |
- Dart_WeakPersistentHandle lweak4 = Dart_NewWeakPersistentHandle( |
- Dart_Null(), NULL, 0, NopCallback); |
- // lweak{2,3,4} are cleared and should have no effect on weak1 |
- Dart_WeakReferenceSet set = |
- Dart_NewWeakReferenceSet(builder, strong_weak, strong_weak); |
- EXPECT_NOTNULL(set); |
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, lweak2, lweak2)); |
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, lweak3, lweak3)); |
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, lweak4, lweak4)); |
- |
- // weak1 is weakly reachable and should be cleared |
- set = Dart_NewWeakReferenceSet(builder, weak1, weak1); |
- EXPECT_NOTNULL(set); |
- |
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
- } |
- |
- { |
- Dart_EnterScope(); |
- // All weak references should now be cleared. |
- EXPECT(!Dart_IsNull(AsHandle(strong_weak))); |
- EXPECT(weak1 == NULL); |
- EXPECT(weak2 == NULL); |
- EXPECT(weak3 == NULL); |
- EXPECT(weak4 == NULL); |
- Dart_ExitScope(); |
- } |
-} |
- |
- |
-TEST_CASE(DuplicateWeakReferenceSetEntries) { |
- Isolate* isolate = Isolate::Current(); |
- Dart_PersistentHandle strong = NULL; |
- Dart_WeakPersistentHandle weak = NULL; // A weak handle to strong. |
- |
- Dart_EnterScope(); |
- { |
- DARTSCOPE(Thread::Current()); |
- |
- // Strong handle to keep the reference set alive. |
- Dart_Handle local = Api::NewHandle(isolate, String::New("string")); |
- strong = Dart_NewPersistentHandle(local); |
- EXPECT_VALID(AsHandle(strong)); |
- EXPECT(!Dart_IsNull(AsHandle(strong))); |
- // Corresponding weak handle to use as key and duplicated value. |
- weak = Dart_NewWeakPersistentHandle(local, NULL, 0, NopCallback); |
- EXPECT_VALID(AsHandle(weak)); |
- EXPECT(!Dart_IsNull(AsHandle(weak))); |
- } |
- Dart_ExitScope(); |
- |
- { |
- Dart_EnterScope(); |
- // Create the weak reference set. |
- Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
- EXPECT_NOTNULL(builder); |
- // Register the key and the first copy of the value. |
- Dart_WeakReferenceSet set = Dart_NewWeakReferenceSet(builder, weak, weak); |
- EXPECT_NOTNULL(set); |
- // Add the second copy of the value. |
- Dart_Handle result = Dart_AppendValueToWeakReferenceSet(set, weak); |
- EXPECT_VALID(result); |
- |
- // Trigger GC to ensure that we can visit duplicate entries in weak |
- // reference sets. |
- isolate->heap()->CollectGarbage(Heap::kNew); |
- Dart_ExitScope(); |
- } |
-} |
- |
- |
-static Dart_WeakPersistentHandle old_pwph = NULL; |
-static Dart_WeakPersistentHandle new_pwph = NULL; |
- |
- |
-static void PrologueWeakHandleCallback(void* isolate_callback_data, |
- Dart_WeakPersistentHandle handle, |
- void* peer) { |
- if (handle == old_pwph) { |
- old_pwph = NULL; |
- } else if (handle == new_pwph) { |
- new_pwph = NULL; |
- } |
-} |
- |
- |
-TEST_CASE(PrologueWeakPersistentHandles) { |
- Dart_EnterScope(); |
- { |
- Isolate* isolate = Isolate::Current(); |
- DARTSCOPE(Thread::Current()); |
- new_pwph = Dart_NewPrologueWeakPersistentHandle( |
- Api::NewHandle(isolate, |
- String::New("new space prologue weak", Heap::kNew)), |
- NULL, 0, PrologueWeakHandleCallback); |
- 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, 0, PrologueWeakHandleCallback); |
- EXPECT_VALID(AsHandle(old_pwph)); |
- EXPECT(!Dart_IsNull(AsHandle(old_pwph))); |
- } |
- Dart_ExitScope(); |
- |
- { |
- 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); |
- |
- { |
- 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, |
- Heap::kGCTestCase); |
- |
- { |
- 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); |
- |
- { |
- Dart_EnterScope(); |
- // The prologue weak handle with a new space referent should now be |
- // cleared. The old space referent should be preserved. |
- EXPECT(new_pwph == NULL); |
- EXPECT(!Dart_IsNull(AsHandle(old_pwph))); |
- Dart_ExitScope(); |
- } |
- |
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld, |
- Heap::kInvokeApiCallbacks, |
- Heap::kGCTestCase); |
- |
- { |
- Dart_EnterScope(); |
- // The prologue weak handle with an old space referent should now be |
- // cleared. The new space referent should remain cleared. |
- EXPECT(new_pwph == NULL); |
- EXPECT(old_pwph == NULL); |
- Dart_ExitScope(); |
- } |
-} |
static void ImplicitReferencesCallback(void* isolate_callback_data, |
@@ -3398,53 +2974,6 @@ TEST_CASE(ImplicitReferencesOldSpace) { |
EXPECT(!Dart_IsNull(AsHandle(weak3))); |
Dart_ExitScope(); |
} |
- |
- // A strongly referenced key should preserve all the values. |
- { |
- Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
- EXPECT_NOTNULL(builder); |
- |
- Dart_WeakReferenceSet set = |
- Dart_NewWeakReferenceSet(builder, strong_weak, 0); |
- EXPECT_NOTNULL(set); |
- EXPECT_VALID(Dart_AppendValueToWeakReferenceSet(set, weak1)); |
- EXPECT_VALID(Dart_AppendValueToWeakReferenceSet(set, weak2)); |
- EXPECT_VALID(Dart_AppendValueToWeakReferenceSet(set, weak3)); |
- |
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
- } |
- |
- { |
- 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_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
- EXPECT_NOTNULL(builder); |
- |
- Dart_WeakReferenceSet set = |
- Dart_NewWeakReferenceSet(builder, strong_weak, weak1); |
- EXPECT_NOTNULL(set); |
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak3, weak2)); |
- |
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
- } |
- |
- { |
- Dart_EnterScope(); |
- // All weak references except weak3 should be preserved. |
- EXPECT(!Dart_IsNull(AsHandle(weak1))); |
- EXPECT(!Dart_IsNull(AsHandle(weak2))); |
- EXPECT(weak3 == NULL); |
- Dart_ExitScope(); |
- } |
} |
@@ -3508,41 +3037,6 @@ TEST_CASE(ImplicitReferencesNewSpace) { |
EXPECT(!Dart_IsNull(AsHandle(weak3))); |
Dart_ExitScope(); |
} |
- |
- // A strongly referenced key should preserve all the values. |
- { |
- Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
- EXPECT_NOTNULL(builder); |
- |
- Dart_WeakReferenceSet set = |
- Dart_NewWeakReferenceSet(builder, strong_weak, 0); |
- EXPECT_NOTNULL(set); |
- EXPECT_VALID(Dart_AppendValueToWeakReferenceSet(set, weak1)); |
- EXPECT_VALID(Dart_AppendValueToWeakReferenceSet(set, weak2)); |
- EXPECT_VALID(Dart_AppendValueToWeakReferenceSet(set, weak3)); |
- |
- GCTestHelper::CollectNewSpace(Heap::kInvokeApiCallbacks); |
- } |
- |
- { |
- 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); |
- |
- { |
- Dart_EnterScope(); |
- // No weak references should be preserved. |
- EXPECT(weak1 == NULL); |
- EXPECT(weak2 == NULL); |
- EXPECT(weak3 == NULL); |
- Dart_ExitScope(); |
- } |
} |