Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(642)

Side by Side Diff: runtime/vm/dart_api_impl_test.cc

Issue 238063011: Modify the Weak Reference Set creation API to make it easier to create (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698