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 2488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2499 Dart_EnterScope(); | 2499 Dart_EnterScope(); |
2500 // New space collection should not affect old space objects | 2500 // New space collection should not affect old space objects |
2501 EXPECT(!Dart_IsNull(AsHandle(weak1))); | 2501 EXPECT(!Dart_IsNull(AsHandle(weak1))); |
2502 EXPECT(!Dart_IsNull(AsHandle(weak2))); | 2502 EXPECT(!Dart_IsNull(AsHandle(weak2))); |
2503 EXPECT(!Dart_IsNull(AsHandle(weak3))); | 2503 EXPECT(!Dart_IsNull(AsHandle(weak3))); |
2504 EXPECT(!Dart_IsNull(AsHandle(weak4))); | 2504 EXPECT(!Dart_IsNull(AsHandle(weak4))); |
2505 Dart_ExitScope(); | 2505 Dart_ExitScope(); |
2506 } | 2506 } |
2507 | 2507 |
2508 { | 2508 { |
2509 Dart_WeakPersistentHandle array1[] = { weak1, strong_weak }; | 2509 Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
2510 EXPECT_VALID(Dart_NewWeakReferenceSet(array1, ARRAY_SIZE(array1), | 2510 EXPECT_NOTNULL(builder); |
2511 array1, ARRAY_SIZE(array1))); | |
2512 | 2511 |
2513 Dart_WeakPersistentHandle array2[] = { weak2, weak1 }; | 2512 Dart_WeakReferenceSet set = Dart_NewWeakReferenceSet(builder, weak1, weak1); |
2514 EXPECT_VALID(Dart_NewWeakReferenceSet(array2, ARRAY_SIZE(array2), | 2513 EXPECT_NOTNULL(set); |
2515 array2, ARRAY_SIZE(array2))); | 2514 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, strong_weak, strong_weak)); |
2516 | 2515 |
2517 Dart_WeakPersistentHandle array3[] = { weak3, weak2 }; | 2516 set = Dart_NewWeakReferenceSet(builder, weak2, weak2); |
2518 EXPECT_VALID(Dart_NewWeakReferenceSet(array3, ARRAY_SIZE(array3), | 2517 EXPECT_NOTNULL(set); |
2519 array3, ARRAY_SIZE(array3))); | 2518 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak1, weak1)); |
2520 | 2519 |
2521 Dart_WeakPersistentHandle array4[] = { weak4, weak3 }; | 2520 set = Dart_NewWeakReferenceSet(builder, weak3, weak3); |
2522 EXPECT_VALID(Dart_NewWeakReferenceSet(array4, ARRAY_SIZE(array4), | 2521 EXPECT_NOTNULL(set); |
2523 array4, ARRAY_SIZE(array4))); | 2522 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak2, weak2)); |
| 2523 |
| 2524 set = Dart_NewWeakReferenceSet(builder, weak4, weak4); |
| 2525 EXPECT_NOTNULL(set); |
| 2526 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak3, weak3)); |
2524 | 2527 |
2525 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); | 2528 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
2526 } | 2529 } |
2527 | 2530 |
2528 { | 2531 { |
2529 Dart_EnterScope(); | 2532 Dart_EnterScope(); |
2530 // All weak references should be preserved. | 2533 // All weak references should be preserved. |
2531 EXPECT(!Dart_IsNull(AsHandle(strong_weak))); | 2534 EXPECT(!Dart_IsNull(AsHandle(strong_weak))); |
2532 EXPECT(!Dart_IsNull(AsHandle(weak1))); | 2535 EXPECT(!Dart_IsNull(AsHandle(weak1))); |
2533 EXPECT(!Dart_IsNull(AsHandle(weak2))); | 2536 EXPECT(!Dart_IsNull(AsHandle(weak2))); |
2534 EXPECT(!Dart_IsNull(AsHandle(weak3))); | 2537 EXPECT(!Dart_IsNull(AsHandle(weak3))); |
2535 EXPECT(!Dart_IsNull(AsHandle(weak4))); | 2538 EXPECT(!Dart_IsNull(AsHandle(weak4))); |
2536 Dart_ExitScope(); | 2539 Dart_ExitScope(); |
2537 } | 2540 } |
2538 | 2541 |
2539 { | 2542 { |
2540 Dart_EnterScope(); | 2543 Dart_EnterScope(); |
2541 Dart_WeakPersistentHandle array1[] = { weak1, strong_weak }; | 2544 Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
2542 EXPECT_VALID(Dart_NewWeakReferenceSet(array1, ARRAY_SIZE(array1), | 2545 EXPECT_NOTNULL(builder); |
2543 array1, ARRAY_SIZE(array1))); | |
2544 | 2546 |
2545 Dart_WeakPersistentHandle array2[] = { weak2, weak1 }; | 2547 Dart_WeakReferenceSet set = Dart_NewWeakReferenceSet(builder, weak1, weak1); |
2546 EXPECT_VALID(Dart_NewWeakReferenceSet(array2, ARRAY_SIZE(array2), | 2548 EXPECT_NOTNULL(set); |
2547 array2, ARRAY_SIZE(array2))); | 2549 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, strong_weak, strong_weak)); |
2548 | 2550 |
2549 Dart_WeakPersistentHandle array3[] = { weak2 }; | 2551 set = Dart_NewWeakReferenceSet(builder, weak2, weak2); |
2550 EXPECT_VALID(Dart_NewWeakReferenceSet(array3, ARRAY_SIZE(array3), | 2552 EXPECT_NOTNULL(set); |
2551 array3, ARRAY_SIZE(array3))); | 2553 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak1, weak1)); |
| 2554 |
| 2555 set = Dart_NewWeakReferenceSet(builder, weak2, weak2); |
| 2556 EXPECT_NOTNULL(set); |
2552 | 2557 |
2553 // Strong reference to weak3 to retain weak3 and weak4. | 2558 // Strong reference to weak3 to retain weak3 and weak4. |
2554 Dart_PersistentHandle weak3_strong_ref = | 2559 Dart_PersistentHandle weak3_strong_ref = |
2555 Dart_NewPersistentHandle(AsHandle(weak3)); | 2560 Dart_NewPersistentHandle(AsHandle(weak3)); |
2556 EXPECT_VALID(AsHandle(weak3_strong_ref)); | 2561 EXPECT_VALID(AsHandle(weak3_strong_ref)); |
2557 | 2562 |
2558 Dart_WeakPersistentHandle array4[] = { weak4, weak3 }; | 2563 set = Dart_NewWeakReferenceSet(builder, weak4, weak4); |
2559 EXPECT_VALID(Dart_NewWeakReferenceSet(array4, ARRAY_SIZE(array4), | 2564 EXPECT_NOTNULL(set); |
2560 array4, ARRAY_SIZE(array4))); | 2565 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak3, weak3)); |
2561 | 2566 |
2562 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); | 2567 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
2563 | 2568 |
2564 // Delete strong reference to weak3. | 2569 // Delete strong reference to weak3. |
2565 Dart_DeletePersistentHandle(weak3_strong_ref); | 2570 Dart_DeletePersistentHandle(weak3_strong_ref); |
2566 Dart_ExitScope(); | 2571 Dart_ExitScope(); |
2567 } | 2572 } |
2568 | 2573 |
2569 { | 2574 { |
2570 Dart_EnterScope(); | 2575 Dart_EnterScope(); |
2571 // All weak references should be preserved. | 2576 // All weak references should be preserved. |
2572 EXPECT(!Dart_IsNull(AsHandle(strong_weak))); | 2577 EXPECT(!Dart_IsNull(AsHandle(strong_weak))); |
2573 EXPECT(!Dart_IsNull(AsHandle(weak1))); | 2578 EXPECT(!Dart_IsNull(AsHandle(weak1))); |
2574 EXPECT(!Dart_IsNull(AsHandle(weak2))); | 2579 EXPECT(!Dart_IsNull(AsHandle(weak2))); |
2575 EXPECT(!Dart_IsNull(AsHandle(weak3))); | 2580 EXPECT(!Dart_IsNull(AsHandle(weak3))); |
2576 EXPECT(!Dart_IsNull(AsHandle(weak4))); | 2581 EXPECT(!Dart_IsNull(AsHandle(weak4))); |
2577 Dart_ExitScope(); | 2582 Dart_ExitScope(); |
2578 } | 2583 } |
2579 | 2584 |
2580 { | 2585 { |
2581 Dart_WeakPersistentHandle array1[] = { weak1, strong_weak }; | 2586 Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
2582 EXPECT_VALID(Dart_NewWeakReferenceSet(array1, ARRAY_SIZE(array1), | 2587 EXPECT_NOTNULL(builder); |
2583 array1, ARRAY_SIZE(array1))); | |
2584 | 2588 |
2585 Dart_WeakPersistentHandle array2[] = { weak2, weak1 }; | 2589 Dart_WeakReferenceSet set = Dart_NewWeakReferenceSet(builder, weak1, weak1); |
2586 EXPECT_VALID(Dart_NewWeakReferenceSet(array2, ARRAY_SIZE(array2), | 2590 EXPECT_NOTNULL(set); |
2587 array2, ARRAY_SIZE(array2))); | 2591 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, strong_weak, strong_weak)); |
2588 | 2592 |
2589 Dart_WeakPersistentHandle array3[] = { weak2 }; | 2593 set = Dart_NewWeakReferenceSet(builder, weak2, weak2); |
2590 EXPECT_VALID(Dart_NewWeakReferenceSet(array3, ARRAY_SIZE(array3), | 2594 EXPECT_NOTNULL(set); |
2591 array3, ARRAY_SIZE(array3))); | 2595 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak1, weak1)); |
2592 | 2596 |
2593 Dart_WeakPersistentHandle array4[] = { weak4, weak3 }; | 2597 set = Dart_NewWeakReferenceSet(builder, weak2, weak2); |
2594 EXPECT_VALID(Dart_NewWeakReferenceSet(array4, ARRAY_SIZE(array4), | 2598 EXPECT_NOTNULL(set); |
2595 array4, ARRAY_SIZE(array4))); | 2599 |
| 2600 set = Dart_NewWeakReferenceSet(builder, weak4, weak4); |
| 2601 EXPECT_NOTNULL(set); |
| 2602 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak3, weak3)); |
2596 | 2603 |
2597 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); | 2604 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
2598 } | 2605 } |
2599 | 2606 |
2600 { | 2607 { |
2601 Dart_EnterScope(); | 2608 Dart_EnterScope(); |
2602 // Only weak1 and weak2 should be preserved. | 2609 // Only weak1 and weak2 should be preserved. |
2603 EXPECT(!Dart_IsNull(AsHandle(strong_weak))); | 2610 EXPECT(!Dart_IsNull(AsHandle(strong_weak))); |
2604 EXPECT(!Dart_IsNull(AsHandle(weak1))); | 2611 EXPECT(!Dart_IsNull(AsHandle(weak1))); |
2605 EXPECT(!Dart_IsNull(AsHandle(weak2))); | 2612 EXPECT(!Dart_IsNull(AsHandle(weak2))); |
2606 EXPECT(weak3 == NULL); | 2613 EXPECT(weak3 == NULL); |
2607 EXPECT(weak4 == NULL); | 2614 EXPECT(weak4 == NULL); |
2608 Dart_ExitScope(); | 2615 Dart_ExitScope(); |
2609 } | 2616 } |
2610 | 2617 |
2611 { | 2618 { |
| 2619 Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
| 2620 EXPECT_NOTNULL(builder); |
| 2621 |
2612 Dart_WeakPersistentHandle lweak3 = Dart_NewWeakPersistentHandle( | 2622 Dart_WeakPersistentHandle lweak3 = Dart_NewWeakPersistentHandle( |
2613 Dart_Null(), NULL, 0, NopCallback); | 2623 Dart_Null(), NULL, 0, NopCallback); |
2614 Dart_WeakPersistentHandle array1[] = { weak1, strong_weak }; | 2624 |
2615 EXPECT_VALID(Dart_NewWeakReferenceSet(array1, ARRAY_SIZE(array1), | 2625 Dart_WeakReferenceSet set = Dart_NewWeakReferenceSet(builder, weak1, weak1); |
2616 array1, ARRAY_SIZE(array1))); | 2626 EXPECT_NOTNULL(set); |
| 2627 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, strong_weak, strong_weak)); |
2617 | 2628 |
2618 // lweak3 is unreferenced so weak2 is unreferenced and should be cleared | 2629 // lweak3 is unreferenced so weak2 is unreferenced and should be cleared |
2619 Dart_WeakPersistentHandle array2[] = { weak2, lweak3 }; | 2630 set = Dart_NewWeakReferenceSet(builder, weak2, weak2); |
2620 EXPECT_VALID(Dart_NewWeakReferenceSet(array2, ARRAY_SIZE(array2), | 2631 EXPECT_NOTNULL(set); |
2621 array2, ARRAY_SIZE(array2))); | 2632 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, lweak3, lweak3)); |
2622 | 2633 |
2623 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); | 2634 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
2624 } | 2635 } |
2625 | 2636 |
2626 { | 2637 { |
2627 Dart_EnterScope(); | 2638 Dart_EnterScope(); |
2628 // Only weak1 should be preserved, weak3 should not preserve weak2. | 2639 // Only weak1 should be preserved, weak3 should not preserve weak2. |
2629 EXPECT(!Dart_IsNull(AsHandle(strong_weak))); | 2640 EXPECT(!Dart_IsNull(AsHandle(strong_weak))); |
2630 EXPECT(!Dart_IsNull(AsHandle(weak1))); | 2641 EXPECT(!Dart_IsNull(AsHandle(weak1))); |
2631 EXPECT(weak2 == NULL); | 2642 EXPECT(weak2 == NULL); |
2632 EXPECT(weak3 == NULL); // was cleared, should remain cleared | 2643 EXPECT(weak3 == NULL); // was cleared, should remain cleared |
2633 EXPECT(weak4 == NULL); // was cleared, should remain cleared | 2644 EXPECT(weak4 == NULL); // was cleared, should remain cleared |
2634 Dart_ExitScope(); | 2645 Dart_ExitScope(); |
2635 } | 2646 } |
2636 | 2647 |
2637 { | 2648 { |
| 2649 Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
| 2650 EXPECT_NOTNULL(builder); |
| 2651 |
2638 Dart_WeakPersistentHandle lweak2 = Dart_NewWeakPersistentHandle( | 2652 Dart_WeakPersistentHandle lweak2 = Dart_NewWeakPersistentHandle( |
2639 Dart_Null(), NULL, 0, NopCallback); | 2653 Dart_Null(), NULL, 0, NopCallback); |
2640 Dart_WeakPersistentHandle lweak3 = Dart_NewWeakPersistentHandle( | 2654 Dart_WeakPersistentHandle lweak3 = Dart_NewWeakPersistentHandle( |
2641 Dart_Null(), NULL, 0, NopCallback); | 2655 Dart_Null(), NULL, 0, NopCallback); |
2642 Dart_WeakPersistentHandle lweak4 = Dart_NewWeakPersistentHandle( | 2656 Dart_WeakPersistentHandle lweak4 = Dart_NewWeakPersistentHandle( |
2643 Dart_Null(), NULL, 0, NopCallback); | 2657 Dart_Null(), NULL, 0, NopCallback); |
2644 // lweak{2,3,4} are cleared and should have no effect on weak1 | 2658 // lweak{2,3,4} are cleared and should have no effect on weak1 |
2645 Dart_WeakPersistentHandle array1[] = { strong_weak, | 2659 Dart_WeakReferenceSet set = |
2646 lweak2, | 2660 Dart_NewWeakReferenceSet(builder, strong_weak, strong_weak); |
2647 lweak3, | 2661 EXPECT_NOTNULL(set); |
2648 lweak4 }; | 2662 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, lweak2, lweak2)); |
2649 EXPECT_VALID(Dart_NewWeakReferenceSet(array1, ARRAY_SIZE(array1), | 2663 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, lweak3, lweak3)); |
2650 array1, ARRAY_SIZE(array1))); | 2664 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, lweak4, lweak4)); |
2651 | 2665 |
2652 // weak1 is weakly reachable and should be cleared | 2666 // weak1 is weakly reachable and should be cleared |
2653 Dart_WeakPersistentHandle array2[] = { weak1 }; | 2667 set = Dart_NewWeakReferenceSet(builder, weak1, weak1); |
2654 EXPECT_VALID(Dart_NewWeakReferenceSet(array2, ARRAY_SIZE(array2), | 2668 EXPECT_NOTNULL(set); |
2655 array2, ARRAY_SIZE(array2))); | |
2656 | 2669 |
2657 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); | 2670 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
2658 } | 2671 } |
2659 | 2672 |
2660 { | 2673 { |
2661 Dart_EnterScope(); | 2674 Dart_EnterScope(); |
2662 // All weak references should now be cleared. | 2675 // All weak references should now be cleared. |
2663 EXPECT(!Dart_IsNull(AsHandle(strong_weak))); | 2676 EXPECT(!Dart_IsNull(AsHandle(strong_weak))); |
2664 EXPECT(weak1 == NULL); | 2677 EXPECT(weak1 == NULL); |
2665 EXPECT(weak2 == NULL); | 2678 EXPECT(weak2 == NULL); |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2836 // New space collection should not affect old space objects | 2849 // New space collection should not affect old space objects |
2837 EXPECT_VALID(AsHandle(strong_weak)); | 2850 EXPECT_VALID(AsHandle(strong_weak)); |
2838 EXPECT(!Dart_IsNull(AsHandle(weak1))); | 2851 EXPECT(!Dart_IsNull(AsHandle(weak1))); |
2839 EXPECT(!Dart_IsNull(AsHandle(weak2))); | 2852 EXPECT(!Dart_IsNull(AsHandle(weak2))); |
2840 EXPECT(!Dart_IsNull(AsHandle(weak3))); | 2853 EXPECT(!Dart_IsNull(AsHandle(weak3))); |
2841 Dart_ExitScope(); | 2854 Dart_ExitScope(); |
2842 } | 2855 } |
2843 | 2856 |
2844 // A strongly referenced key should preserve all the values. | 2857 // A strongly referenced key should preserve all the values. |
2845 { | 2858 { |
2846 Dart_WeakPersistentHandle keys[] = { strong_weak }; | 2859 Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
2847 Dart_WeakPersistentHandle values[] = { weak1, weak2, weak3 }; | 2860 EXPECT_NOTNULL(builder); |
2848 EXPECT_VALID(Dart_NewWeakReferenceSet(keys, ARRAY_SIZE(keys), | 2861 |
2849 values, ARRAY_SIZE(values))); | 2862 Dart_WeakReferenceSet set = |
| 2863 Dart_NewWeakReferenceSet(builder, strong_weak, 0); |
| 2864 EXPECT_NOTNULL(set); |
| 2865 EXPECT_VALID(Dart_AppendValueToWeakReferenceSet(set, weak1)); |
| 2866 EXPECT_VALID(Dart_AppendValueToWeakReferenceSet(set, weak2)); |
| 2867 EXPECT_VALID(Dart_AppendValueToWeakReferenceSet(set, weak3)); |
2850 | 2868 |
2851 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); | 2869 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
2852 } | 2870 } |
2853 | 2871 |
2854 { | 2872 { |
2855 Dart_EnterScope(); | 2873 Dart_EnterScope(); |
2856 // All weak references should be preserved. | 2874 // All weak references should be preserved. |
2857 EXPECT_VALID(AsHandle(strong_weak)); | 2875 EXPECT_VALID(AsHandle(strong_weak)); |
2858 EXPECT(!Dart_IsNull(AsHandle(weak1))); | 2876 EXPECT(!Dart_IsNull(AsHandle(weak1))); |
2859 EXPECT(!Dart_IsNull(AsHandle(weak2))); | 2877 EXPECT(!Dart_IsNull(AsHandle(weak2))); |
2860 EXPECT(!Dart_IsNull(AsHandle(weak3))); | 2878 EXPECT(!Dart_IsNull(AsHandle(weak3))); |
2861 Dart_ExitScope(); | 2879 Dart_ExitScope(); |
2862 } | 2880 } |
2863 | 2881 |
2864 // Key membership does not imply a strong reference. | 2882 // Key membership does not imply a strong reference. |
2865 { | 2883 { |
2866 Dart_WeakPersistentHandle keys[] = { strong_weak, weak3 }; | 2884 Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
2867 Dart_WeakPersistentHandle values[] = { weak1, weak2 }; | 2885 EXPECT_NOTNULL(builder); |
2868 EXPECT_VALID(Dart_NewWeakReferenceSet(keys, ARRAY_SIZE(keys), | 2886 |
2869 values, ARRAY_SIZE(values))); | 2887 Dart_WeakReferenceSet set = |
| 2888 Dart_NewWeakReferenceSet(builder, strong_weak, weak1); |
| 2889 EXPECT_NOTNULL(set); |
| 2890 EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak3, weak2)); |
2870 | 2891 |
2871 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); | 2892 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); |
2872 } | 2893 } |
2873 | 2894 |
2874 { | 2895 { |
2875 Dart_EnterScope(); | 2896 Dart_EnterScope(); |
2876 // All weak references except weak3 should be preserved. | 2897 // All weak references except weak3 should be preserved. |
2877 EXPECT(!Dart_IsNull(AsHandle(weak1))); | 2898 EXPECT(!Dart_IsNull(AsHandle(weak1))); |
2878 EXPECT(!Dart_IsNull(AsHandle(weak2))); | 2899 EXPECT(!Dart_IsNull(AsHandle(weak2))); |
2879 EXPECT(weak3 == NULL); | 2900 EXPECT(weak3 == NULL); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2938 Dart_EnterScope(); | 2959 Dart_EnterScope(); |
2939 // Old space collection should not affect old space objects. | 2960 // Old space collection should not affect old space objects. |
2940 EXPECT(!Dart_IsNull(AsHandle(weak1))); | 2961 EXPECT(!Dart_IsNull(AsHandle(weak1))); |
2941 EXPECT(!Dart_IsNull(AsHandle(weak2))); | 2962 EXPECT(!Dart_IsNull(AsHandle(weak2))); |
2942 EXPECT(!Dart_IsNull(AsHandle(weak3))); | 2963 EXPECT(!Dart_IsNull(AsHandle(weak3))); |
2943 Dart_ExitScope(); | 2964 Dart_ExitScope(); |
2944 } | 2965 } |
2945 | 2966 |
2946 // A strongly referenced key should preserve all the values. | 2967 // A strongly referenced key should preserve all the values. |
2947 { | 2968 { |
2948 Dart_WeakPersistentHandle keys[] = { strong_weak }; | 2969 Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder(); |
2949 Dart_WeakPersistentHandle values[] = { weak1, weak2, weak3 }; | 2970 EXPECT_NOTNULL(builder); |
2950 EXPECT_VALID(Dart_NewWeakReferenceSet(keys, ARRAY_SIZE(keys), | 2971 |
2951 values, ARRAY_SIZE(values))); | 2972 Dart_WeakReferenceSet set = |
| 2973 Dart_NewWeakReferenceSet(builder, strong_weak, 0); |
| 2974 EXPECT_NOTNULL(set); |
| 2975 EXPECT_VALID(Dart_AppendValueToWeakReferenceSet(set, weak1)); |
| 2976 EXPECT_VALID(Dart_AppendValueToWeakReferenceSet(set, weak2)); |
| 2977 EXPECT_VALID(Dart_AppendValueToWeakReferenceSet(set, weak3)); |
2952 | 2978 |
2953 GCTestHelper::CollectNewSpace(Heap::kInvokeApiCallbacks); | 2979 GCTestHelper::CollectNewSpace(Heap::kInvokeApiCallbacks); |
2954 } | 2980 } |
2955 | 2981 |
2956 { | 2982 { |
2957 Dart_EnterScope(); | 2983 Dart_EnterScope(); |
2958 // All weak references should be preserved. | 2984 // All weak references should be preserved. |
2959 EXPECT(!Dart_IsNull(AsHandle(weak1))); | 2985 EXPECT(!Dart_IsNull(AsHandle(weak1))); |
2960 EXPECT(!Dart_IsNull(AsHandle(weak2))); | 2986 EXPECT(!Dart_IsNull(AsHandle(weak2))); |
2961 EXPECT(!Dart_IsNull(AsHandle(weak3))); | 2987 EXPECT(!Dart_IsNull(AsHandle(weak3))); |
(...skipping 5175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8137 dart_args); | 8163 dart_args); |
8138 int64_t value = 0; | 8164 int64_t value = 0; |
8139 result = Dart_IntegerToInt64(result, &value); | 8165 result = Dart_IntegerToInt64(result, &value); |
8140 EXPECT_VALID(result); | 8166 EXPECT_VALID(result); |
8141 EXPECT_EQ(6, value); | 8167 EXPECT_EQ(6, value); |
8142 } | 8168 } |
8143 | 8169 |
8144 } // namespace dart | 8170 } // namespace dart |
8145 | 8171 |
8146 #endif // !defined(TARGET_ARCH_ARM64) | 8172 #endif // !defined(TARGET_ARCH_ARM64) |
OLD | NEW |