| Index: runtime/vm/dart_api_impl_test.cc
|
| ===================================================================
|
| --- runtime/vm/dart_api_impl_test.cc (revision 35211)
|
| +++ runtime/vm/dart_api_impl_test.cc (working copy)
|
| @@ -2506,22 +2506,25 @@
|
| }
|
|
|
| {
|
| - Dart_WeakPersistentHandle array1[] = { weak1, strong_weak };
|
| - EXPECT_VALID(Dart_NewWeakReferenceSet(array1, ARRAY_SIZE(array1),
|
| - array1, ARRAY_SIZE(array1)));
|
| + Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder();
|
| + EXPECT_NOTNULL(builder);
|
|
|
| - Dart_WeakPersistentHandle array2[] = { weak2, weak1 };
|
| - EXPECT_VALID(Dart_NewWeakReferenceSet(array2, ARRAY_SIZE(array2),
|
| - array2, ARRAY_SIZE(array2)));
|
| + Dart_WeakReferenceSet set = Dart_NewWeakReferenceSet(builder, weak1, weak1);
|
| + EXPECT_NOTNULL(set);
|
| + EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, strong_weak, strong_weak));
|
|
|
| - Dart_WeakPersistentHandle array3[] = { weak3, weak2 };
|
| - EXPECT_VALID(Dart_NewWeakReferenceSet(array3, ARRAY_SIZE(array3),
|
| - array3, ARRAY_SIZE(array3)));
|
| + set = Dart_NewWeakReferenceSet(builder, weak2, weak2);
|
| + EXPECT_NOTNULL(set);
|
| + EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak1, weak1));
|
|
|
| - Dart_WeakPersistentHandle array4[] = { weak4, weak3 };
|
| - EXPECT_VALID(Dart_NewWeakReferenceSet(array4, ARRAY_SIZE(array4),
|
| - array4, ARRAY_SIZE(array4)));
|
| + 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);
|
| }
|
|
|
| @@ -2538,26 +2541,28 @@
|
|
|
| {
|
| Dart_EnterScope();
|
| - Dart_WeakPersistentHandle array1[] = { weak1, strong_weak };
|
| - EXPECT_VALID(Dart_NewWeakReferenceSet(array1, ARRAY_SIZE(array1),
|
| - array1, ARRAY_SIZE(array1)));
|
| + Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder();
|
| + EXPECT_NOTNULL(builder);
|
|
|
| - Dart_WeakPersistentHandle array2[] = { weak2, weak1 };
|
| - EXPECT_VALID(Dart_NewWeakReferenceSet(array2, ARRAY_SIZE(array2),
|
| - array2, ARRAY_SIZE(array2)));
|
| + Dart_WeakReferenceSet set = Dart_NewWeakReferenceSet(builder, weak1, weak1);
|
| + EXPECT_NOTNULL(set);
|
| + EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, strong_weak, strong_weak));
|
|
|
| - Dart_WeakPersistentHandle array3[] = { weak2 };
|
| - EXPECT_VALID(Dart_NewWeakReferenceSet(array3, ARRAY_SIZE(array3),
|
| - array3, ARRAY_SIZE(array3)));
|
| + 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));
|
|
|
| - Dart_WeakPersistentHandle array4[] = { weak4, weak3 };
|
| - EXPECT_VALID(Dart_NewWeakReferenceSet(array4, ARRAY_SIZE(array4),
|
| - array4, ARRAY_SIZE(array4)));
|
| + set = Dart_NewWeakReferenceSet(builder, weak4, weak4);
|
| + EXPECT_NOTNULL(set);
|
| + EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak3, weak3));
|
|
|
| Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
|
|
|
| @@ -2578,22 +2583,24 @@
|
| }
|
|
|
| {
|
| - Dart_WeakPersistentHandle array1[] = { weak1, strong_weak };
|
| - EXPECT_VALID(Dart_NewWeakReferenceSet(array1, ARRAY_SIZE(array1),
|
| - array1, ARRAY_SIZE(array1)));
|
| + Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder();
|
| + EXPECT_NOTNULL(builder);
|
|
|
| - Dart_WeakPersistentHandle array2[] = { weak2, weak1 };
|
| - EXPECT_VALID(Dart_NewWeakReferenceSet(array2, ARRAY_SIZE(array2),
|
| - array2, ARRAY_SIZE(array2)));
|
| + Dart_WeakReferenceSet set = Dart_NewWeakReferenceSet(builder, weak1, weak1);
|
| + EXPECT_NOTNULL(set);
|
| + EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, strong_weak, strong_weak));
|
|
|
| - Dart_WeakPersistentHandle array3[] = { weak2 };
|
| - EXPECT_VALID(Dart_NewWeakReferenceSet(array3, ARRAY_SIZE(array3),
|
| - array3, ARRAY_SIZE(array3)));
|
| + set = Dart_NewWeakReferenceSet(builder, weak2, weak2);
|
| + EXPECT_NOTNULL(set);
|
| + EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak1, weak1));
|
|
|
| - Dart_WeakPersistentHandle array4[] = { weak4, weak3 };
|
| - EXPECT_VALID(Dart_NewWeakReferenceSet(array4, ARRAY_SIZE(array4),
|
| - array4, ARRAY_SIZE(array4)));
|
| + 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);
|
| }
|
|
|
| @@ -2609,16 +2616,20 @@
|
| }
|
|
|
| {
|
| + Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder();
|
| + EXPECT_NOTNULL(builder);
|
| +
|
| Dart_WeakPersistentHandle lweak3 = Dart_NewWeakPersistentHandle(
|
| Dart_Null(), NULL, 0, NopCallback);
|
| - Dart_WeakPersistentHandle array1[] = { weak1, strong_weak };
|
| - EXPECT_VALID(Dart_NewWeakReferenceSet(array1, ARRAY_SIZE(array1),
|
| - array1, ARRAY_SIZE(array1)));
|
|
|
| + 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
|
| - Dart_WeakPersistentHandle array2[] = { weak2, lweak3 };
|
| - EXPECT_VALID(Dart_NewWeakReferenceSet(array2, ARRAY_SIZE(array2),
|
| - array2, ARRAY_SIZE(array2)));
|
| + set = Dart_NewWeakReferenceSet(builder, weak2, weak2);
|
| + EXPECT_NOTNULL(set);
|
| + EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, lweak3, lweak3));
|
|
|
| Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
|
| }
|
| @@ -2635,6 +2646,9 @@
|
| }
|
|
|
| {
|
| + Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder();
|
| + EXPECT_NOTNULL(builder);
|
| +
|
| Dart_WeakPersistentHandle lweak2 = Dart_NewWeakPersistentHandle(
|
| Dart_Null(), NULL, 0, NopCallback);
|
| Dart_WeakPersistentHandle lweak3 = Dart_NewWeakPersistentHandle(
|
| @@ -2642,17 +2656,16 @@
|
| Dart_WeakPersistentHandle lweak4 = Dart_NewWeakPersistentHandle(
|
| Dart_Null(), NULL, 0, NopCallback);
|
| // lweak{2,3,4} are cleared and should have no effect on weak1
|
| - Dart_WeakPersistentHandle array1[] = { strong_weak,
|
| - lweak2,
|
| - lweak3,
|
| - lweak4 };
|
| - EXPECT_VALID(Dart_NewWeakReferenceSet(array1, ARRAY_SIZE(array1),
|
| - array1, ARRAY_SIZE(array1)));
|
| + 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
|
| - Dart_WeakPersistentHandle array2[] = { weak1 };
|
| - EXPECT_VALID(Dart_NewWeakReferenceSet(array2, ARRAY_SIZE(array2),
|
| - array2, ARRAY_SIZE(array2)));
|
| + set = Dart_NewWeakReferenceSet(builder, weak1, weak1);
|
| + EXPECT_NOTNULL(set);
|
|
|
| Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
|
| }
|
| @@ -2843,11 +2856,16 @@
|
|
|
| // A strongly referenced key should preserve all the values.
|
| {
|
| - Dart_WeakPersistentHandle keys[] = { strong_weak };
|
| - Dart_WeakPersistentHandle values[] = { weak1, weak2, weak3 };
|
| - EXPECT_VALID(Dart_NewWeakReferenceSet(keys, ARRAY_SIZE(keys),
|
| - values, ARRAY_SIZE(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);
|
| }
|
|
|
| @@ -2863,11 +2881,14 @@
|
|
|
| // Key membership does not imply a strong reference.
|
| {
|
| - Dart_WeakPersistentHandle keys[] = { strong_weak, weak3 };
|
| - Dart_WeakPersistentHandle values[] = { weak1, weak2 };
|
| - EXPECT_VALID(Dart_NewWeakReferenceSet(keys, ARRAY_SIZE(keys),
|
| - values, ARRAY_SIZE(values)));
|
| + 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);
|
| }
|
|
|
| @@ -2945,11 +2966,16 @@
|
|
|
| // A strongly referenced key should preserve all the values.
|
| {
|
| - Dart_WeakPersistentHandle keys[] = { strong_weak };
|
| - Dart_WeakPersistentHandle values[] = { weak1, weak2, weak3 };
|
| - EXPECT_VALID(Dart_NewWeakReferenceSet(keys, ARRAY_SIZE(keys),
|
| - values, ARRAY_SIZE(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);
|
| }
|
|
|
|
|