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