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

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
« no previous file with comments | « runtime/vm/dart_api_impl.cc ('k') | runtime/vm/dart_api_state.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 2488 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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)
OLDNEW
« no previous file with comments | « runtime/vm/dart_api_impl.cc ('k') | runtime/vm/dart_api_state.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698