| 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 |