OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 // TODO(zra): Remove when tests are ready to enable. | 5 // TODO(zra): Remove when tests are ready to enable. |
6 #include "platform/globals.h" | 6 #include "platform/globals.h" |
7 #if !defined(TARGET_ARCH_ARM64) | 7 #if !defined(TARGET_ARCH_ARM64) |
8 | 8 |
9 #include "bin/builtin.h" | 9 #include "bin/builtin.h" |
10 #include "include/dart_api.h" | 10 #include "include/dart_api.h" |
(...skipping 2451 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2462 Dart_EnterScope(); | 2462 Dart_EnterScope(); |
2463 // New space collection should not affect old space objects | 2463 // New space collection should not affect old space objects |
2464 EXPECT(!Dart_IsNull(AsHandle(weak1))); | 2464 EXPECT(!Dart_IsNull(AsHandle(weak1))); |
2465 EXPECT(!Dart_IsNull(AsHandle(weak2))); | 2465 EXPECT(!Dart_IsNull(AsHandle(weak2))); |
2466 EXPECT(!Dart_IsNull(AsHandle(weak3))); | 2466 EXPECT(!Dart_IsNull(AsHandle(weak3))); |
2467 EXPECT(!Dart_IsNull(AsHandle(weak4))); | 2467 EXPECT(!Dart_IsNull(AsHandle(weak4))); |
2468 Dart_ExitScope(); | 2468 Dart_ExitScope(); |
2469 } | 2469 } |
2470 | 2470 |
2471 { | 2471 { |
2472 Dart_WeakPersistentHandle array1[] = { weak1, strong_weak }; | 2472 Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
2473 EXPECT_VALID(Dart_NewWeakReferenceSet(array1, ARRAY_SIZE(array1), | 2473 EXPECT_NOTNULL(builder); |
2474 array1, ARRAY_SIZE(array1))); | |
2475 | 2474 |
2476 Dart_WeakPersistentHandle array2[] = { weak2, weak1 }; | 2475 Dart_WeakReferenceSet set = Dart_NewWeakReferenceSet(builder, weak1, weak1); |
2477 EXPECT_VALID(Dart_NewWeakReferenceSet(array2, ARRAY_SIZE(array2), | 2476 EXPECT_NOTNULL(set); |
2478 array2, ARRAY_SIZE(array2))); | 2477 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, strong_weak, strong_weak)); |
| 2478 EXPECT_VALID(Dart_RegisterWeakReferenceSet(builder, set)); |
2479 | 2479 |
2480 Dart_WeakPersistentHandle array3[] = { weak3, weak2 }; | 2480 set = Dart_NewWeakReferenceSet(builder, weak2, weak2); |
2481 EXPECT_VALID(Dart_NewWeakReferenceSet(array3, ARRAY_SIZE(array3), | 2481 EXPECT_NOTNULL(set); |
2482 array3, ARRAY_SIZE(array3))); | 2482 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak1, weak1)); |
| 2483 EXPECT_VALID(Dart_RegisterWeakReferenceSet(builder, set)); |
2483 | 2484 |
2484 Dart_WeakPersistentHandle array4[] = { weak4, weak3 }; | 2485 set = Dart_NewWeakReferenceSet(builder, weak3, weak3); |
2485 EXPECT_VALID(Dart_NewWeakReferenceSet(array4, ARRAY_SIZE(array4), | 2486 EXPECT_NOTNULL(set); |
2486 array4, ARRAY_SIZE(array4))); | 2487 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak2, weak2)); |
| 2488 EXPECT_VALID(Dart_RegisterWeakReferenceSet(builder, set)); |
| 2489 |
| 2490 set = Dart_NewWeakReferenceSet(builder, weak4, weak4); |
| 2491 EXPECT_NOTNULL(set); |
| 2492 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak3, weak3)); |
| 2493 EXPECT_VALID(Dart_RegisterWeakReferenceSet(builder, set)); |
2487 | 2494 |
2488 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); | 2495 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
2489 } | 2496 } |
2490 | 2497 |
2491 { | 2498 { |
2492 Dart_EnterScope(); | 2499 Dart_EnterScope(); |
2493 // All weak references should be preserved. | 2500 // All weak references should be preserved. |
2494 EXPECT(!Dart_IsNull(AsHandle(strong_weak))); | 2501 EXPECT(!Dart_IsNull(AsHandle(strong_weak))); |
2495 EXPECT(!Dart_IsNull(AsHandle(weak1))); | 2502 EXPECT(!Dart_IsNull(AsHandle(weak1))); |
2496 EXPECT(!Dart_IsNull(AsHandle(weak2))); | 2503 EXPECT(!Dart_IsNull(AsHandle(weak2))); |
2497 EXPECT(!Dart_IsNull(AsHandle(weak3))); | 2504 EXPECT(!Dart_IsNull(AsHandle(weak3))); |
2498 EXPECT(!Dart_IsNull(AsHandle(weak4))); | 2505 EXPECT(!Dart_IsNull(AsHandle(weak4))); |
2499 Dart_ExitScope(); | 2506 Dart_ExitScope(); |
2500 } | 2507 } |
2501 | 2508 |
2502 { | 2509 { |
2503 Dart_EnterScope(); | 2510 Dart_EnterScope(); |
2504 Dart_WeakPersistentHandle array1[] = { weak1, strong_weak }; | 2511 Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
2505 EXPECT_VALID(Dart_NewWeakReferenceSet(array1, ARRAY_SIZE(array1), | 2512 EXPECT_NOTNULL(builder); |
2506 array1, ARRAY_SIZE(array1))); | |
2507 | 2513 |
2508 Dart_WeakPersistentHandle array2[] = { weak2, weak1 }; | 2514 Dart_WeakReferenceSet set = Dart_NewWeakReferenceSet(builder, weak1, weak1); |
2509 EXPECT_VALID(Dart_NewWeakReferenceSet(array2, ARRAY_SIZE(array2), | 2515 EXPECT_NOTNULL(set); |
2510 array2, ARRAY_SIZE(array2))); | 2516 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, strong_weak, strong_weak)); |
| 2517 EXPECT_VALID(Dart_RegisterWeakReferenceSet(builder, set)); |
2511 | 2518 |
2512 Dart_WeakPersistentHandle array3[] = { weak2 }; | 2519 set = Dart_NewWeakReferenceSet(builder, weak2, weak2); |
2513 EXPECT_VALID(Dart_NewWeakReferenceSet(array3, ARRAY_SIZE(array3), | 2520 EXPECT_NOTNULL(set); |
2514 array3, ARRAY_SIZE(array3))); | 2521 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak1, weak1)); |
| 2522 EXPECT_VALID(Dart_RegisterWeakReferenceSet(builder, set)); |
| 2523 |
| 2524 set = Dart_NewWeakReferenceSet(builder, weak2, weak2); |
| 2525 EXPECT_NOTNULL(set); |
| 2526 EXPECT_VALID(Dart_RegisterWeakReferenceSet(builder, set)); |
2515 | 2527 |
2516 // Strong reference to weak3 to retain weak3 and weak4. | 2528 // Strong reference to weak3 to retain weak3 and weak4. |
2517 Dart_PersistentHandle weak3_strong_ref = | 2529 Dart_PersistentHandle weak3_strong_ref = |
2518 Dart_NewPersistentHandle(AsHandle(weak3)); | 2530 Dart_NewPersistentHandle(AsHandle(weak3)); |
2519 EXPECT_VALID(AsHandle(weak3_strong_ref)); | 2531 EXPECT_VALID(AsHandle(weak3_strong_ref)); |
2520 | 2532 |
2521 Dart_WeakPersistentHandle array4[] = { weak4, weak3 }; | 2533 set = Dart_NewWeakReferenceSet(builder, weak4, weak4); |
2522 EXPECT_VALID(Dart_NewWeakReferenceSet(array4, ARRAY_SIZE(array4), | 2534 EXPECT_NOTNULL(set); |
2523 array4, ARRAY_SIZE(array4))); | 2535 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak3, weak3)); |
| 2536 EXPECT_VALID(Dart_RegisterWeakReferenceSet(builder, set)); |
2524 | 2537 |
2525 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); | 2538 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
2526 | 2539 |
2527 // Delete strong reference to weak3. | 2540 // Delete strong reference to weak3. |
2528 Dart_DeletePersistentHandle(weak3_strong_ref); | 2541 Dart_DeletePersistentHandle(weak3_strong_ref); |
2529 Dart_ExitScope(); | 2542 Dart_ExitScope(); |
2530 } | 2543 } |
2531 | 2544 |
2532 { | 2545 { |
2533 Dart_EnterScope(); | 2546 Dart_EnterScope(); |
2534 // All weak references should be preserved. | 2547 // All weak references should be preserved. |
2535 EXPECT(!Dart_IsNull(AsHandle(strong_weak))); | 2548 EXPECT(!Dart_IsNull(AsHandle(strong_weak))); |
2536 EXPECT(!Dart_IsNull(AsHandle(weak1))); | 2549 EXPECT(!Dart_IsNull(AsHandle(weak1))); |
2537 EXPECT(!Dart_IsNull(AsHandle(weak2))); | 2550 EXPECT(!Dart_IsNull(AsHandle(weak2))); |
2538 EXPECT(!Dart_IsNull(AsHandle(weak3))); | 2551 EXPECT(!Dart_IsNull(AsHandle(weak3))); |
2539 EXPECT(!Dart_IsNull(AsHandle(weak4))); | 2552 EXPECT(!Dart_IsNull(AsHandle(weak4))); |
2540 Dart_ExitScope(); | 2553 Dart_ExitScope(); |
2541 } | 2554 } |
2542 | 2555 |
2543 { | 2556 { |
2544 Dart_WeakPersistentHandle array1[] = { weak1, strong_weak }; | 2557 Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
2545 EXPECT_VALID(Dart_NewWeakReferenceSet(array1, ARRAY_SIZE(array1), | 2558 EXPECT_NOTNULL(builder); |
2546 array1, ARRAY_SIZE(array1))); | |
2547 | 2559 |
2548 Dart_WeakPersistentHandle array2[] = { weak2, weak1 }; | 2560 Dart_WeakReferenceSet set = Dart_NewWeakReferenceSet(builder, weak1, weak1); |
2549 EXPECT_VALID(Dart_NewWeakReferenceSet(array2, ARRAY_SIZE(array2), | 2561 EXPECT_NOTNULL(set); |
2550 array2, ARRAY_SIZE(array2))); | 2562 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, strong_weak, strong_weak)); |
| 2563 EXPECT_VALID(Dart_RegisterWeakReferenceSet(builder, set)); |
2551 | 2564 |
2552 Dart_WeakPersistentHandle array3[] = { weak2 }; | 2565 set = Dart_NewWeakReferenceSet(builder, weak2, weak2); |
2553 EXPECT_VALID(Dart_NewWeakReferenceSet(array3, ARRAY_SIZE(array3), | 2566 EXPECT_NOTNULL(set); |
2554 array3, ARRAY_SIZE(array3))); | 2567 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak1, weak1)); |
| 2568 EXPECT_VALID(Dart_RegisterWeakReferenceSet(builder, set)); |
2555 | 2569 |
2556 Dart_WeakPersistentHandle array4[] = { weak4, weak3 }; | 2570 set = Dart_NewWeakReferenceSet(builder, weak2, weak2); |
2557 EXPECT_VALID(Dart_NewWeakReferenceSet(array4, ARRAY_SIZE(array4), | 2571 EXPECT_NOTNULL(set); |
2558 array4, ARRAY_SIZE(array4))); | 2572 EXPECT_VALID(Dart_RegisterWeakReferenceSet(builder, set)); |
| 2573 |
| 2574 set = Dart_NewWeakReferenceSet(builder, weak4, weak4); |
| 2575 EXPECT_NOTNULL(set); |
| 2576 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak3, weak3)); |
| 2577 EXPECT_VALID(Dart_RegisterWeakReferenceSet(builder, set)); |
2559 | 2578 |
2560 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); | 2579 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
2561 } | 2580 } |
2562 | 2581 |
2563 { | 2582 { |
2564 Dart_EnterScope(); | 2583 Dart_EnterScope(); |
2565 // Only weak1 and weak2 should be preserved. | 2584 // Only weak1 and weak2 should be preserved. |
2566 EXPECT(!Dart_IsNull(AsHandle(strong_weak))); | 2585 EXPECT(!Dart_IsNull(AsHandle(strong_weak))); |
2567 EXPECT(!Dart_IsNull(AsHandle(weak1))); | 2586 EXPECT(!Dart_IsNull(AsHandle(weak1))); |
2568 EXPECT(!Dart_IsNull(AsHandle(weak2))); | 2587 EXPECT(!Dart_IsNull(AsHandle(weak2))); |
2569 EXPECT(weak3 == NULL); | 2588 EXPECT(weak3 == NULL); |
2570 EXPECT(weak4 == NULL); | 2589 EXPECT(weak4 == NULL); |
2571 Dart_ExitScope(); | 2590 Dart_ExitScope(); |
2572 } | 2591 } |
2573 | 2592 |
2574 { | 2593 { |
| 2594 Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
| 2595 EXPECT_NOTNULL(builder); |
| 2596 |
2575 Dart_WeakPersistentHandle lweak3 = Dart_NewWeakPersistentHandle( | 2597 Dart_WeakPersistentHandle lweak3 = Dart_NewWeakPersistentHandle( |
2576 Dart_Null(), NULL, 0, NopCallback); | 2598 Dart_Null(), NULL, 0, NopCallback); |
2577 Dart_WeakPersistentHandle array1[] = { weak1, strong_weak }; | 2599 |
2578 EXPECT_VALID(Dart_NewWeakReferenceSet(array1, ARRAY_SIZE(array1), | 2600 Dart_WeakReferenceSet set = Dart_NewWeakReferenceSet(builder, weak1, weak1); |
2579 array1, ARRAY_SIZE(array1))); | 2601 EXPECT_NOTNULL(set); |
| 2602 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, strong_weak, strong_weak)); |
| 2603 EXPECT_VALID(Dart_RegisterWeakReferenceSet(builder, set)); |
2580 | 2604 |
2581 // lweak3 is unreferenced so weak2 is unreferenced and should be cleared | 2605 // lweak3 is unreferenced so weak2 is unreferenced and should be cleared |
2582 Dart_WeakPersistentHandle array2[] = { weak2, lweak3 }; | 2606 set = Dart_NewWeakReferenceSet(builder, weak2, weak2); |
2583 EXPECT_VALID(Dart_NewWeakReferenceSet(array2, ARRAY_SIZE(array2), | 2607 EXPECT_NOTNULL(set); |
2584 array2, ARRAY_SIZE(array2))); | 2608 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, lweak3, lweak3)); |
| 2609 EXPECT_VALID(Dart_RegisterWeakReferenceSet(builder, set)); |
2585 | 2610 |
2586 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); | 2611 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
2587 } | 2612 } |
2588 | 2613 |
2589 { | 2614 { |
2590 Dart_EnterScope(); | 2615 Dart_EnterScope(); |
2591 // Only weak1 should be preserved, weak3 should not preserve weak2. | 2616 // Only weak1 should be preserved, weak3 should not preserve weak2. |
2592 EXPECT(!Dart_IsNull(AsHandle(strong_weak))); | 2617 EXPECT(!Dart_IsNull(AsHandle(strong_weak))); |
2593 EXPECT(!Dart_IsNull(AsHandle(weak1))); | 2618 EXPECT(!Dart_IsNull(AsHandle(weak1))); |
2594 EXPECT(weak2 == NULL); | 2619 EXPECT(weak2 == NULL); |
2595 EXPECT(weak3 == NULL); // was cleared, should remain cleared | 2620 EXPECT(weak3 == NULL); // was cleared, should remain cleared |
2596 EXPECT(weak4 == NULL); // was cleared, should remain cleared | 2621 EXPECT(weak4 == NULL); // was cleared, should remain cleared |
2597 Dart_ExitScope(); | 2622 Dart_ExitScope(); |
2598 } | 2623 } |
2599 | 2624 |
2600 { | 2625 { |
| 2626 Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
| 2627 EXPECT_NOTNULL(builder); |
| 2628 |
2601 Dart_WeakPersistentHandle lweak2 = Dart_NewWeakPersistentHandle( | 2629 Dart_WeakPersistentHandle lweak2 = Dart_NewWeakPersistentHandle( |
2602 Dart_Null(), NULL, 0, NopCallback); | 2630 Dart_Null(), NULL, 0, NopCallback); |
2603 Dart_WeakPersistentHandle lweak3 = Dart_NewWeakPersistentHandle( | 2631 Dart_WeakPersistentHandle lweak3 = Dart_NewWeakPersistentHandle( |
2604 Dart_Null(), NULL, 0, NopCallback); | 2632 Dart_Null(), NULL, 0, NopCallback); |
2605 Dart_WeakPersistentHandle lweak4 = Dart_NewWeakPersistentHandle( | 2633 Dart_WeakPersistentHandle lweak4 = Dart_NewWeakPersistentHandle( |
2606 Dart_Null(), NULL, 0, NopCallback); | 2634 Dart_Null(), NULL, 0, NopCallback); |
2607 // lweak{2,3,4} are cleared and should have no effect on weak1 | 2635 // lweak{2,3,4} are cleared and should have no effect on weak1 |
2608 Dart_WeakPersistentHandle array1[] = { strong_weak, | 2636 Dart_WeakReferenceSet set = |
2609 lweak2, | 2637 Dart_NewWeakReferenceSet(builder, strong_weak, strong_weak); |
2610 lweak3, | 2638 EXPECT_NOTNULL(set); |
2611 lweak4 }; | 2639 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, lweak2, lweak2)); |
2612 EXPECT_VALID(Dart_NewWeakReferenceSet(array1, ARRAY_SIZE(array1), | 2640 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, lweak3, lweak3)); |
2613 array1, ARRAY_SIZE(array1))); | 2641 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, lweak4, lweak4)); |
| 2642 EXPECT_VALID(Dart_RegisterWeakReferenceSet(builder, set)); |
2614 | 2643 |
2615 // weak1 is weakly reachable and should be cleared | 2644 // weak1 is weakly reachable and should be cleared |
2616 Dart_WeakPersistentHandle array2[] = { weak1 }; | 2645 set = Dart_NewWeakReferenceSet(builder, weak1, weak1); |
2617 EXPECT_VALID(Dart_NewWeakReferenceSet(array2, ARRAY_SIZE(array2), | 2646 EXPECT_NOTNULL(set); |
2618 array2, ARRAY_SIZE(array2))); | 2647 EXPECT_VALID(Dart_RegisterWeakReferenceSet(builder, set)); |
2619 | 2648 |
2620 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); | 2649 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
2621 } | 2650 } |
2622 | 2651 |
2623 { | 2652 { |
2624 Dart_EnterScope(); | 2653 Dart_EnterScope(); |
2625 // All weak references should now be cleared. | 2654 // All weak references should now be cleared. |
2626 EXPECT(!Dart_IsNull(AsHandle(strong_weak))); | 2655 EXPECT(!Dart_IsNull(AsHandle(strong_weak))); |
2627 EXPECT(weak1 == NULL); | 2656 EXPECT(weak1 == NULL); |
2628 EXPECT(weak2 == NULL); | 2657 EXPECT(weak2 == NULL); |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2797 // New space collection should not affect old space objects | 2826 // New space collection should not affect old space objects |
2798 EXPECT_VALID(AsHandle(strong_weak)); | 2827 EXPECT_VALID(AsHandle(strong_weak)); |
2799 EXPECT(!Dart_IsNull(AsHandle(weak1))); | 2828 EXPECT(!Dart_IsNull(AsHandle(weak1))); |
2800 EXPECT(!Dart_IsNull(AsHandle(weak2))); | 2829 EXPECT(!Dart_IsNull(AsHandle(weak2))); |
2801 EXPECT(!Dart_IsNull(AsHandle(weak3))); | 2830 EXPECT(!Dart_IsNull(AsHandle(weak3))); |
2802 Dart_ExitScope(); | 2831 Dart_ExitScope(); |
2803 } | 2832 } |
2804 | 2833 |
2805 // A strongly referenced key should preserve all the values. | 2834 // A strongly referenced key should preserve all the values. |
2806 { | 2835 { |
2807 Dart_WeakPersistentHandle keys[] = { strong_weak }; | 2836 Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
2808 Dart_WeakPersistentHandle values[] = { weak1, weak2, weak3 }; | 2837 EXPECT_NOTNULL(builder); |
2809 EXPECT_VALID(Dart_NewWeakReferenceSet(keys, ARRAY_SIZE(keys), | 2838 |
2810 values, ARRAY_SIZE(values))); | 2839 Dart_WeakReferenceSet set = |
| 2840 Dart_NewWeakReferenceSet(builder, strong_weak, 0); |
| 2841 EXPECT_NOTNULL(set); |
| 2842 EXPECT_VALID(Dart_AppendValueToWeakReferenceSet(set, weak1)); |
| 2843 EXPECT_VALID(Dart_AppendValueToWeakReferenceSet(set, weak2)); |
| 2844 EXPECT_VALID(Dart_AppendValueToWeakReferenceSet(set, weak3)); |
| 2845 EXPECT_VALID(Dart_RegisterWeakReferenceSet(builder, set)); |
2811 | 2846 |
2812 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); | 2847 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
2813 } | 2848 } |
2814 | 2849 |
2815 { | 2850 { |
2816 Dart_EnterScope(); | 2851 Dart_EnterScope(); |
2817 // All weak references should be preserved. | 2852 // All weak references should be preserved. |
2818 EXPECT_VALID(AsHandle(strong_weak)); | 2853 EXPECT_VALID(AsHandle(strong_weak)); |
2819 EXPECT(!Dart_IsNull(AsHandle(weak1))); | 2854 EXPECT(!Dart_IsNull(AsHandle(weak1))); |
2820 EXPECT(!Dart_IsNull(AsHandle(weak2))); | 2855 EXPECT(!Dart_IsNull(AsHandle(weak2))); |
2821 EXPECT(!Dart_IsNull(AsHandle(weak3))); | 2856 EXPECT(!Dart_IsNull(AsHandle(weak3))); |
2822 Dart_ExitScope(); | 2857 Dart_ExitScope(); |
2823 } | 2858 } |
2824 | 2859 |
2825 // Key membership does not imply a strong reference. | 2860 // Key membership does not imply a strong reference. |
2826 { | 2861 { |
2827 Dart_WeakPersistentHandle keys[] = { strong_weak, weak3 }; | 2862 Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
2828 Dart_WeakPersistentHandle values[] = { weak1, weak2 }; | 2863 EXPECT_NOTNULL(builder); |
2829 EXPECT_VALID(Dart_NewWeakReferenceSet(keys, ARRAY_SIZE(keys), | 2864 |
2830 values, ARRAY_SIZE(values))); | 2865 Dart_WeakReferenceSet set = |
| 2866 Dart_NewWeakReferenceSet(builder, strong_weak, weak1); |
| 2867 EXPECT_NOTNULL(set); |
| 2868 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak3, weak2)); |
| 2869 EXPECT_VALID(Dart_RegisterWeakReferenceSet(builder, set)); |
2831 | 2870 |
2832 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); | 2871 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
2833 } | 2872 } |
2834 | 2873 |
2835 { | 2874 { |
2836 Dart_EnterScope(); | 2875 Dart_EnterScope(); |
2837 // All weak references except weak3 should be preserved. | 2876 // All weak references except weak3 should be preserved. |
2838 EXPECT(!Dart_IsNull(AsHandle(weak1))); | 2877 EXPECT(!Dart_IsNull(AsHandle(weak1))); |
2839 EXPECT(!Dart_IsNull(AsHandle(weak2))); | 2878 EXPECT(!Dart_IsNull(AsHandle(weak2))); |
2840 EXPECT(weak3 == NULL); | 2879 EXPECT(weak3 == NULL); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2899 Dart_EnterScope(); | 2938 Dart_EnterScope(); |
2900 // Old space collection should not affect old space objects. | 2939 // Old space collection should not affect old space objects. |
2901 EXPECT(!Dart_IsNull(AsHandle(weak1))); | 2940 EXPECT(!Dart_IsNull(AsHandle(weak1))); |
2902 EXPECT(!Dart_IsNull(AsHandle(weak2))); | 2941 EXPECT(!Dart_IsNull(AsHandle(weak2))); |
2903 EXPECT(!Dart_IsNull(AsHandle(weak3))); | 2942 EXPECT(!Dart_IsNull(AsHandle(weak3))); |
2904 Dart_ExitScope(); | 2943 Dart_ExitScope(); |
2905 } | 2944 } |
2906 | 2945 |
2907 // A strongly referenced key should preserve all the values. | 2946 // A strongly referenced key should preserve all the values. |
2908 { | 2947 { |
2909 Dart_WeakPersistentHandle keys[] = { strong_weak }; | 2948 Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
2910 Dart_WeakPersistentHandle values[] = { weak1, weak2, weak3 }; | 2949 EXPECT_NOTNULL(builder); |
2911 EXPECT_VALID(Dart_NewWeakReferenceSet(keys, ARRAY_SIZE(keys), | 2950 |
2912 values, ARRAY_SIZE(values))); | 2951 Dart_WeakReferenceSet set = |
| 2952 Dart_NewWeakReferenceSet(builder, strong_weak, 0); |
| 2953 EXPECT_NOTNULL(set); |
| 2954 EXPECT_VALID(Dart_AppendValueToWeakReferenceSet(set, weak1)); |
| 2955 EXPECT_VALID(Dart_AppendValueToWeakReferenceSet(set, weak2)); |
| 2956 EXPECT_VALID(Dart_AppendValueToWeakReferenceSet(set, weak3)); |
| 2957 EXPECT_VALID(Dart_RegisterWeakReferenceSet(builder, set)); |
2913 | 2958 |
2914 GCTestHelper::CollectNewSpace(Heap::kInvokeApiCallbacks); | 2959 GCTestHelper::CollectNewSpace(Heap::kInvokeApiCallbacks); |
2915 } | 2960 } |
2916 | 2961 |
2917 { | 2962 { |
2918 Dart_EnterScope(); | 2963 Dart_EnterScope(); |
2919 // All weak references should be preserved. | 2964 // All weak references should be preserved. |
2920 EXPECT(!Dart_IsNull(AsHandle(weak1))); | 2965 EXPECT(!Dart_IsNull(AsHandle(weak1))); |
2921 EXPECT(!Dart_IsNull(AsHandle(weak2))); | 2966 EXPECT(!Dart_IsNull(AsHandle(weak2))); |
2922 EXPECT(!Dart_IsNull(AsHandle(weak3))); | 2967 EXPECT(!Dart_IsNull(AsHandle(weak3))); |
(...skipping 5173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8096 dart_args); | 8141 dart_args); |
8097 int64_t value = 0; | 8142 int64_t value = 0; |
8098 result = Dart_IntegerToInt64(result, &value); | 8143 result = Dart_IntegerToInt64(result, &value); |
8099 EXPECT_VALID(result); | 8144 EXPECT_VALID(result); |
8100 EXPECT_EQ(6, value); | 8145 EXPECT_EQ(6, value); |
8101 } | 8146 } |
8102 | 8147 |
8103 } // namespace dart | 8148 } // namespace dart |
8104 | 8149 |
8105 #endif // !defined(TARGET_ARCH_ARM64) | 8150 #endif // !defined(TARGET_ARCH_ARM64) |
OLD | NEW |