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

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

Issue 11364134: Merge libv1. (Closed) Base URL: https://dart.googlecode.com/svn/experimental/lib_v2/dart
Patch Set: Reupload due to error Created 8 years, 1 month 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/object.cc ('k') | runtime/vm/parser.cc » ('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 #include "platform/assert.h" 5 #include "platform/assert.h"
6 #include "vm/assembler.h" 6 #include "vm/assembler.h"
7 #include "vm/bigint_operations.h" 7 #include "vm/bigint_operations.h"
8 #include "vm/isolate.h" 8 #include "vm/isolate.h"
9 #include "vm/object.h" 9 #include "vm/object.h"
10 #include "vm/object_store.h" 10 #include "vm/object_store.h"
(...skipping 2470 matching lines...) Expand 10 before | Expand all | Expand 10 after
2481 EXPECT_STREQ(f.ToCString(), 2481 EXPECT_STREQ(f.ToCString(),
2482 String::Handle(Field::NameFromSetter(setter_f)).ToCString()); 2482 String::Handle(Field::NameFromSetter(setter_f)).ToCString());
2483 } 2483 }
2484 2484
2485 2485
2486 // Expose helper function from object.cc for testing. 2486 // Expose helper function from object.cc for testing.
2487 bool EqualsIgnoringPrivate(const String& name, const String& private_name); 2487 bool EqualsIgnoringPrivate(const String& name, const String& private_name);
2488 2488
2489 2489
2490 TEST_CASE(EqualsIgnoringPrivate) { 2490 TEST_CASE(EqualsIgnoringPrivate) {
2491 OneByteString& mangled_name = OneByteString::Handle(); 2491 String& mangled_name = String::Handle();
2492 OneByteString& bare_name = OneByteString::Handle(); 2492 String& bare_name = String::Handle();
2493 2493
2494 // Simple matches. 2494 // Simple matches.
2495 mangled_name = OneByteString::New("foo"); 2495 mangled_name = OneByteString::New("foo");
2496 bare_name = OneByteString::New("foo"); 2496 bare_name = OneByteString::New("foo");
2497 EXPECT(mangled_name.EqualsIgnoringPrivateKey(bare_name)); 2497 EXPECT(OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
2498 2498
2499 mangled_name = OneByteString::New("foo."); 2499 mangled_name = OneByteString::New("foo.");
2500 bare_name = OneByteString::New("foo."); 2500 bare_name = OneByteString::New("foo.");
2501 EXPECT(mangled_name.EqualsIgnoringPrivateKey(bare_name)); 2501 EXPECT(OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
2502 2502
2503 mangled_name = OneByteString::New("foo.named"); 2503 mangled_name = OneByteString::New("foo.named");
2504 bare_name = OneByteString::New("foo.named"); 2504 bare_name = OneByteString::New("foo.named");
2505 EXPECT(mangled_name.EqualsIgnoringPrivateKey(bare_name)); 2505 EXPECT(OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
2506 2506
2507 // Simple mismatches. 2507 // Simple mismatches.
2508 mangled_name = OneByteString::New("bar"); 2508 mangled_name = OneByteString::New("bar");
2509 bare_name = OneByteString::New("foo"); 2509 bare_name = OneByteString::New("foo");
2510 EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name)); 2510 EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
2511 2511
2512 mangled_name = OneByteString::New("foo."); 2512 mangled_name = OneByteString::New("foo.");
2513 bare_name = OneByteString::New("foo"); 2513 bare_name = OneByteString::New("foo");
2514 EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name)); 2514 EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
2515 2515
2516 mangled_name = OneByteString::New("foo"); 2516 mangled_name = OneByteString::New("foo");
2517 bare_name = OneByteString::New("foo."); 2517 bare_name = OneByteString::New("foo.");
2518 EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name)); 2518 EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
2519 2519
2520 mangled_name = OneByteString::New("foo.name"); 2520 mangled_name = OneByteString::New("foo.name");
2521 bare_name = OneByteString::New("foo.named"); 2521 bare_name = OneByteString::New("foo.named");
2522 EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name)); 2522 EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
2523 2523
2524 mangled_name = OneByteString::New("foo.named"); 2524 mangled_name = OneByteString::New("foo.named");
2525 bare_name = OneByteString::New("foo.name"); 2525 bare_name = OneByteString::New("foo.name");
2526 EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name)); 2526 EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
2527 2527
2528 // Private match. 2528 // Private match.
2529 mangled_name = OneByteString::New("foo@12345"); 2529 mangled_name = OneByteString::New("foo@12345");
2530 bare_name = OneByteString::New("foo"); 2530 bare_name = OneByteString::New("foo");
2531 EXPECT(mangled_name.EqualsIgnoringPrivateKey(bare_name)); 2531 EXPECT(OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
2532 2532
2533 // Private mismatch. 2533 // Private mismatch.
2534 mangled_name = OneByteString::New("food@12345"); 2534 mangled_name = OneByteString::New("food@12345");
2535 bare_name = OneByteString::New("foo"); 2535 bare_name = OneByteString::New("foo");
2536 EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name)); 2536 EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
2537 2537
2538 // Private mismatch 2. 2538 // Private mismatch 2.
2539 mangled_name = OneByteString::New("foo@12345"); 2539 mangled_name = OneByteString::New("foo@12345");
2540 bare_name = OneByteString::New("food"); 2540 bare_name = OneByteString::New("food");
2541 EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name)); 2541 EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
2542 2542
2543 // Private constructor match. 2543 // Private constructor match.
2544 mangled_name = OneByteString::New("foo@12345."); 2544 mangled_name = OneByteString::New("foo@12345.");
2545 bare_name = OneByteString::New("foo."); 2545 bare_name = OneByteString::New("foo.");
2546 EXPECT(mangled_name.EqualsIgnoringPrivateKey(bare_name)); 2546 EXPECT(OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
2547 2547
2548 // Private constructor mismatch. 2548 // Private constructor mismatch.
2549 mangled_name = OneByteString::New("foo@12345."); 2549 mangled_name = OneByteString::New("foo@12345.");
2550 bare_name = OneByteString::New("foo"); 2550 bare_name = OneByteString::New("foo");
2551 EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name)); 2551 EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
2552 2552
2553 // Private constructor mismatch 2. 2553 // Private constructor mismatch 2.
2554 mangled_name = OneByteString::New("foo@12345"); 2554 mangled_name = OneByteString::New("foo@12345");
2555 bare_name = OneByteString::New("foo."); 2555 bare_name = OneByteString::New("foo.");
2556 EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name)); 2556 EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
2557 2557
2558 // Named private constructor match. 2558 // Named private constructor match.
2559 mangled_name = OneByteString::New("foo@12345.named"); 2559 mangled_name = OneByteString::New("foo@12345.named");
2560 bare_name = OneByteString::New("foo.named"); 2560 bare_name = OneByteString::New("foo.named");
2561 EXPECT(mangled_name.EqualsIgnoringPrivateKey(bare_name)); 2561 EXPECT(OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
2562 2562
2563 // Named private constructor mismatch. 2563 // Named private constructor mismatch.
2564 mangled_name = OneByteString::New("foo@12345.name"); 2564 mangled_name = OneByteString::New("foo@12345.name");
2565 bare_name = OneByteString::New("foo.named"); 2565 bare_name = OneByteString::New("foo.named");
2566 EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name)); 2566 EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
2567 2567
2568 // Named private constructor mismatch 2. 2568 // Named private constructor mismatch 2.
2569 mangled_name = OneByteString::New("foo@12345.named"); 2569 mangled_name = OneByteString::New("foo@12345.named");
2570 bare_name = OneByteString::New("foo.name"); 2570 bare_name = OneByteString::New("foo.name");
2571 EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name)); 2571 EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
2572 2572
2573 // Named double-private constructor match. Yes, this happens. 2573 // Named double-private constructor match. Yes, this happens.
2574 mangled_name = OneByteString::New("foo@12345.named@12345"); 2574 mangled_name = OneByteString::New("foo@12345.named@12345");
2575 bare_name = OneByteString::New("foo.named"); 2575 bare_name = OneByteString::New("foo.named");
2576 EXPECT(mangled_name.EqualsIgnoringPrivateKey(bare_name)); 2576 EXPECT(OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
2577 2577
2578 // Named double-private constructor mismatch. 2578 // Named double-private constructor mismatch.
2579 mangled_name = OneByteString::New("foo@12345.name@12345"); 2579 mangled_name = OneByteString::New("foo@12345.name@12345");
2580 bare_name = OneByteString::New("foo.named"); 2580 bare_name = OneByteString::New("foo.named");
2581 EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name)); 2581 EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
2582 2582
2583 // Named double-private constructor mismatch. 2583 // Named double-private constructor mismatch.
2584 mangled_name = OneByteString::New("foo@12345.named@12345"); 2584 mangled_name = OneByteString::New("foo@12345.named@12345");
2585 bare_name = OneByteString::New("foo.name"); 2585 bare_name = OneByteString::New("foo.name");
2586 EXPECT(!mangled_name.EqualsIgnoringPrivateKey(bare_name)); 2586 EXPECT(!OneByteString::EqualsIgnoringPrivateKey(mangled_name, bare_name));
2587 } 2587 }
2588 2588
2589 2589
2590 TEST_CASE(ArrayNew_Overflow_Crash) { 2590 TEST_CASE(ArrayNew_Overflow_Crash) {
2591 Array::Handle(Array::New(Array::kMaxElements + 1)); 2591 Array::Handle(Array::New(Array::kMaxElements + 1));
2592 } 2592 }
2593 2593
2594 2594
2595 TEST_CASE(StackTraceFormat) { 2595 TEST_CASE(StackTraceFormat) {
2596 const char* kScriptChars = 2596 const char* kScriptChars =
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
2652 "#10 main (dart:test-lib:37:24)"); 2652 "#10 main (dart:test-lib:37:24)");
2653 } 2653 }
2654 2654
2655 2655
2656 TEST_CASE(WeakProperty_PreserveCrossGen) { 2656 TEST_CASE(WeakProperty_PreserveCrossGen) {
2657 Isolate* isolate = Isolate::Current(); 2657 Isolate* isolate = Isolate::Current();
2658 WeakProperty& weak = WeakProperty::Handle(); 2658 WeakProperty& weak = WeakProperty::Handle();
2659 { 2659 {
2660 // Weak property and value in new. Key in old. 2660 // Weak property and value in new. Key in old.
2661 HANDLESCOPE(isolate); 2661 HANDLESCOPE(isolate);
2662 OneByteString& key = OneByteString::Handle(); 2662 String& key = String::Handle();
2663 key ^= OneByteString::New("key", Heap::kOld); 2663 key ^= OneByteString::New("key", Heap::kOld);
2664 OneByteString& value = OneByteString::Handle(); 2664 String& value = String::Handle();
2665 value ^= OneByteString::New("value", Heap::kNew); 2665 value ^= OneByteString::New("value", Heap::kNew);
2666 weak ^= WeakProperty::New(Heap::kNew); 2666 weak ^= WeakProperty::New(Heap::kNew);
2667 weak.set_key(key); 2667 weak.set_key(key);
2668 weak.set_value(value); 2668 weak.set_value(value);
2669 key ^= OneByteString::null(); 2669 key ^= OneByteString::null();
2670 value ^= OneByteString::null(); 2670 value ^= OneByteString::null();
2671 } 2671 }
2672 isolate->heap()->CollectAllGarbage(); 2672 isolate->heap()->CollectAllGarbage();
2673 // Weak property key and value should survive due to cross-generation 2673 // Weak property key and value should survive due to cross-generation
2674 // pointers. 2674 // pointers.
2675 EXPECT(weak.key() != Object::null()); 2675 EXPECT(weak.key() != Object::null());
2676 EXPECT(weak.value() != Object::null()); 2676 EXPECT(weak.value() != Object::null());
2677 { 2677 {
2678 // Weak property and value in old. Key in new. 2678 // Weak property and value in old. Key in new.
2679 HANDLESCOPE(isolate); 2679 HANDLESCOPE(isolate);
2680 OneByteString& key = OneByteString::Handle(); 2680 String& key = String::Handle();
2681 key ^= OneByteString::New("key", Heap::kNew); 2681 key ^= OneByteString::New("key", Heap::kNew);
2682 OneByteString& value = OneByteString::Handle(); 2682 String& value = String::Handle();
2683 value ^= OneByteString::New("value", Heap::kOld); 2683 value ^= OneByteString::New("value", Heap::kOld);
2684 weak ^= WeakProperty::New(Heap::kOld); 2684 weak ^= WeakProperty::New(Heap::kOld);
2685 weak.set_key(key); 2685 weak.set_key(key);
2686 weak.set_value(value); 2686 weak.set_value(value);
2687 key ^= OneByteString::null(); 2687 key ^= OneByteString::null();
2688 value ^= OneByteString::null(); 2688 value ^= OneByteString::null();
2689 } 2689 }
2690 isolate->heap()->CollectAllGarbage(); 2690 isolate->heap()->CollectAllGarbage();
2691 // Weak property key and value should survive due to cross-generation 2691 // Weak property key and value should survive due to cross-generation
2692 // pointers. 2692 // pointers.
2693 EXPECT(weak.key() != Object::null()); 2693 EXPECT(weak.key() != Object::null());
2694 EXPECT(weak.value() != Object::null()); 2694 EXPECT(weak.value() != Object::null());
2695 { 2695 {
2696 // Weak property and value in new. Key is a Smi. 2696 // Weak property and value in new. Key is a Smi.
2697 HANDLESCOPE(isolate); 2697 HANDLESCOPE(isolate);
2698 Integer& key = Integer::Handle(); 2698 Integer& key = Integer::Handle();
2699 key ^= Integer::New(31); 2699 key ^= Integer::New(31);
2700 OneByteString& value = OneByteString::Handle(); 2700 String& value = String::Handle();
2701 value ^= OneByteString::New("value", Heap::kNew); 2701 value ^= OneByteString::New("value", Heap::kNew);
2702 weak ^= WeakProperty::New(Heap::kNew); 2702 weak ^= WeakProperty::New(Heap::kNew);
2703 weak.set_key(key); 2703 weak.set_key(key);
2704 weak.set_value(value); 2704 weak.set_value(value);
2705 key ^= Integer::null(); 2705 key ^= Integer::null();
2706 value ^= OneByteString::null(); 2706 value ^= OneByteString::null();
2707 } 2707 }
2708 isolate->heap()->CollectAllGarbage(); 2708 isolate->heap()->CollectAllGarbage();
2709 // Weak property key and value should survive due implicit liveness of 2709 // Weak property key and value should survive due implicit liveness of
2710 // non-heap objects. 2710 // non-heap objects.
2711 EXPECT(weak.key() != Object::null()); 2711 EXPECT(weak.key() != Object::null());
2712 EXPECT(weak.value() != Object::null()); 2712 EXPECT(weak.value() != Object::null());
2713 { 2713 {
2714 // Weak property and value in old. Key is a Smi. 2714 // Weak property and value in old. Key is a Smi.
2715 HANDLESCOPE(isolate); 2715 HANDLESCOPE(isolate);
2716 Integer& key = Integer::Handle(); 2716 Integer& key = Integer::Handle();
2717 key ^= Integer::New(32); 2717 key ^= Integer::New(32);
2718 OneByteString& value = OneByteString::Handle(); 2718 String& value = String::Handle();
2719 value ^= OneByteString::New("value", Heap::kOld); 2719 value ^= OneByteString::New("value", Heap::kOld);
2720 weak ^= WeakProperty::New(Heap::kOld); 2720 weak ^= WeakProperty::New(Heap::kOld);
2721 weak.set_key(key); 2721 weak.set_key(key);
2722 weak.set_value(value); 2722 weak.set_value(value);
2723 key ^= OneByteString::null(); 2723 key ^= OneByteString::null();
2724 value ^= OneByteString::null(); 2724 value ^= OneByteString::null();
2725 } 2725 }
2726 isolate->heap()->CollectAllGarbage(); 2726 isolate->heap()->CollectAllGarbage();
2727 // Weak property key and value should survive due implicit liveness of 2727 // Weak property key and value should survive due implicit liveness of
2728 // non-heap objects. 2728 // non-heap objects.
2729 EXPECT(weak.key() != Object::null()); 2729 EXPECT(weak.key() != Object::null());
2730 EXPECT(weak.value() != Object::null()); 2730 EXPECT(weak.value() != Object::null());
2731 { 2731 {
2732 // Weak property and value in new. Key in VM isolate. 2732 // Weak property and value in new. Key in VM isolate.
2733 HANDLESCOPE(isolate); 2733 HANDLESCOPE(isolate);
2734 OneByteString& key = OneByteString::Handle(); 2734 String& key = String::Handle();
2735 key ^= Symbols::Dot(); 2735 key ^= Symbols::Dot();
2736 OneByteString& value = OneByteString::Handle(); 2736 String& value = String::Handle();
2737 value ^= OneByteString::New("value", Heap::kNew); 2737 value ^= OneByteString::New("value", Heap::kNew);
2738 weak ^= WeakProperty::New(Heap::kNew); 2738 weak ^= WeakProperty::New(Heap::kNew);
2739 weak.set_key(key); 2739 weak.set_key(key);
2740 weak.set_value(value); 2740 weak.set_value(value);
2741 key ^= OneByteString::null(); 2741 key ^= OneByteString::null();
2742 value ^= OneByteString::null(); 2742 value ^= OneByteString::null();
2743 } 2743 }
2744 isolate->heap()->CollectAllGarbage(); 2744 isolate->heap()->CollectAllGarbage();
2745 // Weak property key and value should survive due to cross-generation 2745 // Weak property key and value should survive due to cross-generation
2746 // pointers. 2746 // pointers.
2747 EXPECT(weak.key() != Object::null()); 2747 EXPECT(weak.key() != Object::null());
2748 EXPECT(weak.value() != Object::null()); 2748 EXPECT(weak.value() != Object::null());
2749 { 2749 {
2750 // Weak property and value in old. Key in VM isolate. 2750 // Weak property and value in old. Key in VM isolate.
2751 HANDLESCOPE(isolate); 2751 HANDLESCOPE(isolate);
2752 OneByteString& key = OneByteString::Handle(); 2752 String& key = String::Handle();
2753 key ^= Symbols::Dot(); 2753 key ^= Symbols::Dot();
2754 OneByteString& value = OneByteString::Handle(); 2754 String& value = String::Handle();
2755 value ^= OneByteString::New("value", Heap::kOld); 2755 value ^= OneByteString::New("value", Heap::kOld);
2756 weak ^= WeakProperty::New(Heap::kOld); 2756 weak ^= WeakProperty::New(Heap::kOld);
2757 weak.set_key(key); 2757 weak.set_key(key);
2758 weak.set_value(value); 2758 weak.set_value(value);
2759 key ^= OneByteString::null(); 2759 key ^= OneByteString::null();
2760 value ^= OneByteString::null(); 2760 value ^= OneByteString::null();
2761 } 2761 }
2762 isolate->heap()->CollectAllGarbage(); 2762 isolate->heap()->CollectAllGarbage();
2763 // Weak property key and value should survive due to cross-generation 2763 // Weak property key and value should survive due to cross-generation
2764 // pointers. 2764 // pointers.
2765 EXPECT(weak.key() != Object::null()); 2765 EXPECT(weak.key() != Object::null());
2766 EXPECT(weak.value() != Object::null()); 2766 EXPECT(weak.value() != Object::null());
2767 } 2767 }
2768 2768
2769 2769
2770 TEST_CASE(WeakProperty_PreserveRecurse) { 2770 TEST_CASE(WeakProperty_PreserveRecurse) {
2771 // This used to end in an infinite recursion. Caused by scavenging the weak 2771 // This used to end in an infinite recursion. Caused by scavenging the weak
2772 // property before scavenging the key. 2772 // property before scavenging the key.
2773 Isolate* isolate = Isolate::Current(); 2773 Isolate* isolate = Isolate::Current();
2774 WeakProperty& weak = WeakProperty::Handle(); 2774 WeakProperty& weak = WeakProperty::Handle();
2775 Array& arr = Array::Handle(Array::New(1)); 2775 Array& arr = Array::Handle(Array::New(1));
2776 { 2776 {
2777 HANDLESCOPE(isolate); 2777 HANDLESCOPE(isolate);
2778 OneByteString& key = OneByteString::Handle(); 2778 String& key = String::Handle();
2779 key ^= OneByteString::New("key"); 2779 key ^= OneByteString::New("key");
2780 arr.SetAt(0, key); 2780 arr.SetAt(0, key);
2781 OneByteString& value = OneByteString::Handle(); 2781 String& value = String::Handle();
2782 value ^= OneByteString::New("value"); 2782 value ^= OneByteString::New("value");
2783 weak ^= WeakProperty::New(); 2783 weak ^= WeakProperty::New();
2784 weak.set_key(key); 2784 weak.set_key(key);
2785 weak.set_value(value); 2785 weak.set_value(value);
2786 } 2786 }
2787 isolate->heap()->CollectAllGarbage(); 2787 isolate->heap()->CollectAllGarbage();
2788 EXPECT(weak.key() != Object::null()); 2788 EXPECT(weak.key() != Object::null());
2789 EXPECT(weak.value() != Object::null()); 2789 EXPECT(weak.value() != Object::null());
2790 } 2790 }
2791 2791
2792 2792
2793 TEST_CASE(WeakProperty_PreserveOne_NewSpace) { 2793 TEST_CASE(WeakProperty_PreserveOne_NewSpace) {
2794 Isolate* isolate = Isolate::Current(); 2794 Isolate* isolate = Isolate::Current();
2795 WeakProperty& weak = WeakProperty::Handle(); 2795 WeakProperty& weak = WeakProperty::Handle();
2796 OneByteString& key = OneByteString::Handle(); 2796 String& key = String::Handle();
2797 key ^= OneByteString::New("key"); 2797 key ^= OneByteString::New("key");
2798 { 2798 {
2799 HANDLESCOPE(isolate); 2799 HANDLESCOPE(isolate);
2800 OneByteString& value = OneByteString::Handle(); 2800 String& value = String::Handle();
2801 value ^= OneByteString::New("value"); 2801 value ^= OneByteString::New("value");
2802 weak ^= WeakProperty::New(); 2802 weak ^= WeakProperty::New();
2803 weak.set_key(key); 2803 weak.set_key(key);
2804 weak.set_value(value); 2804 weak.set_value(value);
2805 } 2805 }
2806 isolate->heap()->CollectAllGarbage(); 2806 isolate->heap()->CollectAllGarbage();
2807 EXPECT(weak.key() != Object::null()); 2807 EXPECT(weak.key() != Object::null());
2808 EXPECT(weak.value() != Object::null()); 2808 EXPECT(weak.value() != Object::null());
2809 } 2809 }
2810 2810
2811 2811
2812 TEST_CASE(WeakProperty_PreserveTwo_NewSpace) { 2812 TEST_CASE(WeakProperty_PreserveTwo_NewSpace) {
2813 Isolate* isolate = Isolate::Current(); 2813 Isolate* isolate = Isolate::Current();
2814 WeakProperty& weak1 = WeakProperty::Handle(); 2814 WeakProperty& weak1 = WeakProperty::Handle();
2815 OneByteString& key1 = OneByteString::Handle(); 2815 String& key1 = String::Handle();
2816 key1 ^= OneByteString::New("key1"); 2816 key1 ^= OneByteString::New("key1");
2817 WeakProperty& weak2 = WeakProperty::Handle(); 2817 WeakProperty& weak2 = WeakProperty::Handle();
2818 OneByteString& key2 = OneByteString::Handle(); 2818 String& key2 = String::Handle();
2819 key2 ^= OneByteString::New("key2"); 2819 key2 ^= OneByteString::New("key2");
2820 { 2820 {
2821 HANDLESCOPE(isolate); 2821 HANDLESCOPE(isolate);
2822 OneByteString& value1 = OneByteString::Handle(); 2822 String& value1 = String::Handle();
2823 value1 ^= OneByteString::New("value1"); 2823 value1 ^= OneByteString::New("value1");
2824 weak1 ^= WeakProperty::New(); 2824 weak1 ^= WeakProperty::New();
2825 weak1.set_key(key1); 2825 weak1.set_key(key1);
2826 weak1.set_value(value1); 2826 weak1.set_value(value1);
2827 OneByteString& value2 = OneByteString::Handle(); 2827 String& value2 = String::Handle();
2828 value2 ^= OneByteString::New("value2"); 2828 value2 ^= OneByteString::New("value2");
2829 weak2 ^= WeakProperty::New(); 2829 weak2 ^= WeakProperty::New();
2830 weak2.set_key(key2); 2830 weak2.set_key(key2);
2831 weak2.set_value(value2); 2831 weak2.set_value(value2);
2832 } 2832 }
2833 isolate->heap()->CollectAllGarbage(); 2833 isolate->heap()->CollectAllGarbage();
2834 EXPECT(weak1.key() != Object::null()); 2834 EXPECT(weak1.key() != Object::null());
2835 EXPECT(weak1.value() != Object::null()); 2835 EXPECT(weak1.value() != Object::null());
2836 EXPECT(weak2.key() != Object::null()); 2836 EXPECT(weak2.key() != Object::null());
2837 EXPECT(weak2.value() != Object::null()); 2837 EXPECT(weak2.value() != Object::null());
2838 } 2838 }
2839 2839
2840 2840
2841 TEST_CASE(WeakProperty_PreserveTwoShared_NewSpace) { 2841 TEST_CASE(WeakProperty_PreserveTwoShared_NewSpace) {
2842 Isolate* isolate = Isolate::Current(); 2842 Isolate* isolate = Isolate::Current();
2843 WeakProperty& weak1 = WeakProperty::Handle(); 2843 WeakProperty& weak1 = WeakProperty::Handle();
2844 WeakProperty& weak2 = WeakProperty::Handle(); 2844 WeakProperty& weak2 = WeakProperty::Handle();
2845 OneByteString& key = OneByteString::Handle(); 2845 String& key = String::Handle();
2846 key ^= OneByteString::New("key"); 2846 key ^= OneByteString::New("key");
2847 { 2847 {
2848 HANDLESCOPE(isolate); 2848 HANDLESCOPE(isolate);
2849 OneByteString& value1 = OneByteString::Handle(); 2849 String& value1 = String::Handle();
2850 value1 ^= OneByteString::New("value1"); 2850 value1 ^= OneByteString::New("value1");
2851 weak1 ^= WeakProperty::New(); 2851 weak1 ^= WeakProperty::New();
2852 weak1.set_key(key); 2852 weak1.set_key(key);
2853 weak1.set_value(value1); 2853 weak1.set_value(value1);
2854 OneByteString& value2 = OneByteString::Handle(); 2854 String& value2 = String::Handle();
2855 value2 ^= OneByteString::New("value2"); 2855 value2 ^= OneByteString::New("value2");
2856 weak2 ^= WeakProperty::New(); 2856 weak2 ^= WeakProperty::New();
2857 weak2.set_key(key); 2857 weak2.set_key(key);
2858 weak2.set_value(value2); 2858 weak2.set_value(value2);
2859 } 2859 }
2860 isolate->heap()->CollectAllGarbage(); 2860 isolate->heap()->CollectAllGarbage();
2861 EXPECT(weak1.key() != Object::null()); 2861 EXPECT(weak1.key() != Object::null());
2862 EXPECT(weak1.value() != Object::null()); 2862 EXPECT(weak1.value() != Object::null());
2863 EXPECT(weak2.key() != Object::null()); 2863 EXPECT(weak2.key() != Object::null());
2864 EXPECT(weak2.value() != Object::null()); 2864 EXPECT(weak2.value() != Object::null());
2865 } 2865 }
2866 2866
2867 2867
2868 TEST_CASE(WeakProperty_PreserveOne_OldSpace) { 2868 TEST_CASE(WeakProperty_PreserveOne_OldSpace) {
2869 Isolate* isolate = Isolate::Current(); 2869 Isolate* isolate = Isolate::Current();
2870 WeakProperty& weak = WeakProperty::Handle(); 2870 WeakProperty& weak = WeakProperty::Handle();
2871 OneByteString& key = OneByteString::Handle(); 2871 String& key = String::Handle();
2872 key ^= OneByteString::New("key", Heap::kOld); 2872 key ^= OneByteString::New("key", Heap::kOld);
2873 { 2873 {
2874 HANDLESCOPE(isolate); 2874 HANDLESCOPE(isolate);
2875 OneByteString& value = OneByteString::Handle(); 2875 String& value = String::Handle();
2876 value ^= OneByteString::New("value", Heap::kOld); 2876 value ^= OneByteString::New("value", Heap::kOld);
2877 weak ^= WeakProperty::New(Heap::kOld); 2877 weak ^= WeakProperty::New(Heap::kOld);
2878 weak.set_key(key); 2878 weak.set_key(key);
2879 weak.set_value(value); 2879 weak.set_value(value);
2880 } 2880 }
2881 isolate->heap()->CollectAllGarbage(); 2881 isolate->heap()->CollectAllGarbage();
2882 EXPECT(weak.key() != Object::null()); 2882 EXPECT(weak.key() != Object::null());
2883 EXPECT(weak.value() != Object::null()); 2883 EXPECT(weak.value() != Object::null());
2884 } 2884 }
2885 2885
2886 2886
2887 TEST_CASE(WeakProperty_PreserveTwo_OldSpace) { 2887 TEST_CASE(WeakProperty_PreserveTwo_OldSpace) {
2888 Isolate* isolate = Isolate::Current(); 2888 Isolate* isolate = Isolate::Current();
2889 WeakProperty& weak1 = WeakProperty::Handle(); 2889 WeakProperty& weak1 = WeakProperty::Handle();
2890 OneByteString& key1 = OneByteString::Handle(); 2890 String& key1 = String::Handle();
2891 key1 ^= OneByteString::New("key1", Heap::kOld); 2891 key1 ^= OneByteString::New("key1", Heap::kOld);
2892 WeakProperty& weak2 = WeakProperty::Handle(); 2892 WeakProperty& weak2 = WeakProperty::Handle();
2893 OneByteString& key2 = OneByteString::Handle(); 2893 String& key2 = String::Handle();
2894 key2 ^= OneByteString::New("key2", Heap::kOld); 2894 key2 ^= OneByteString::New("key2", Heap::kOld);
2895 { 2895 {
2896 HANDLESCOPE(isolate); 2896 HANDLESCOPE(isolate);
2897 OneByteString& value1 = OneByteString::Handle(); 2897 String& value1 = String::Handle();
2898 value1 ^= OneByteString::New("value1", Heap::kOld); 2898 value1 ^= OneByteString::New("value1", Heap::kOld);
2899 weak1 ^= WeakProperty::New(Heap::kOld); 2899 weak1 ^= WeakProperty::New(Heap::kOld);
2900 weak1.set_key(key1); 2900 weak1.set_key(key1);
2901 weak1.set_value(value1); 2901 weak1.set_value(value1);
2902 OneByteString& value2 = OneByteString::Handle(); 2902 String& value2 = String::Handle();
2903 value2 ^= OneByteString::New("value2", Heap::kOld); 2903 value2 ^= OneByteString::New("value2", Heap::kOld);
2904 weak2 ^= WeakProperty::New(Heap::kOld); 2904 weak2 ^= WeakProperty::New(Heap::kOld);
2905 weak2.set_key(key2); 2905 weak2.set_key(key2);
2906 weak2.set_value(value2); 2906 weak2.set_value(value2);
2907 } 2907 }
2908 isolate->heap()->CollectAllGarbage(); 2908 isolate->heap()->CollectAllGarbage();
2909 EXPECT(weak1.key() != Object::null()); 2909 EXPECT(weak1.key() != Object::null());
2910 EXPECT(weak1.value() != Object::null()); 2910 EXPECT(weak1.value() != Object::null());
2911 EXPECT(weak2.key() != Object::null()); 2911 EXPECT(weak2.key() != Object::null());
2912 EXPECT(weak2.value() != Object::null()); 2912 EXPECT(weak2.value() != Object::null());
2913 } 2913 }
2914 2914
2915 2915
2916 TEST_CASE(WeakProperty_PreserveTwoShared_OldSpace) { 2916 TEST_CASE(WeakProperty_PreserveTwoShared_OldSpace) {
2917 Isolate* isolate = Isolate::Current(); 2917 Isolate* isolate = Isolate::Current();
2918 WeakProperty& weak1 = WeakProperty::Handle(); 2918 WeakProperty& weak1 = WeakProperty::Handle();
2919 WeakProperty& weak2 = WeakProperty::Handle(); 2919 WeakProperty& weak2 = WeakProperty::Handle();
2920 OneByteString& key = OneByteString::Handle(); 2920 String& key = String::Handle();
2921 key ^= OneByteString::New("key", Heap::kOld); 2921 key ^= OneByteString::New("key", Heap::kOld);
2922 { 2922 {
2923 HANDLESCOPE(isolate); 2923 HANDLESCOPE(isolate);
2924 OneByteString& value1 = OneByteString::Handle(); 2924 String& value1 = String::Handle();
2925 value1 ^= OneByteString::New("value1", Heap::kOld); 2925 value1 ^= OneByteString::New("value1", Heap::kOld);
2926 weak1 ^= WeakProperty::New(Heap::kOld); 2926 weak1 ^= WeakProperty::New(Heap::kOld);
2927 weak1.set_key(key); 2927 weak1.set_key(key);
2928 weak1.set_value(value1); 2928 weak1.set_value(value1);
2929 OneByteString& value2 = OneByteString::Handle(); 2929 String& value2 = String::Handle();
2930 value2 ^= OneByteString::New("value2", Heap::kOld); 2930 value2 ^= OneByteString::New("value2", Heap::kOld);
2931 weak2 ^= WeakProperty::New(Heap::kOld); 2931 weak2 ^= WeakProperty::New(Heap::kOld);
2932 weak2.set_key(key); 2932 weak2.set_key(key);
2933 weak2.set_value(value2); 2933 weak2.set_value(value2);
2934 } 2934 }
2935 isolate->heap()->CollectAllGarbage(); 2935 isolate->heap()->CollectAllGarbage();
2936 EXPECT(weak1.key() != Object::null()); 2936 EXPECT(weak1.key() != Object::null());
2937 EXPECT(weak1.value() != Object::null()); 2937 EXPECT(weak1.value() != Object::null());
2938 EXPECT(weak2.key() != Object::null()); 2938 EXPECT(weak2.key() != Object::null());
2939 EXPECT(weak2.value() != Object::null()); 2939 EXPECT(weak2.value() != Object::null());
2940 } 2940 }
2941 2941
2942 2942
2943 TEST_CASE(WeakProperty_ClearOne_NewSpace) { 2943 TEST_CASE(WeakProperty_ClearOne_NewSpace) {
2944 Isolate* isolate = Isolate::Current(); 2944 Isolate* isolate = Isolate::Current();
2945 WeakProperty& weak = WeakProperty::Handle(); 2945 WeakProperty& weak = WeakProperty::Handle();
2946 { 2946 {
2947 HANDLESCOPE(isolate); 2947 HANDLESCOPE(isolate);
2948 OneByteString& key = OneByteString::Handle(); 2948 String& key = String::Handle();
2949 key ^= OneByteString::New("key"); 2949 key ^= OneByteString::New("key");
2950 OneByteString& value = OneByteString::Handle(); 2950 String& value = String::Handle();
2951 value ^= OneByteString::New("value"); 2951 value ^= OneByteString::New("value");
2952 weak ^= WeakProperty::New(); 2952 weak ^= WeakProperty::New();
2953 weak.set_key(key); 2953 weak.set_key(key);
2954 weak.set_value(value); 2954 weak.set_value(value);
2955 key ^= OneByteString::null(); 2955 key ^= OneByteString::null();
2956 value ^= OneByteString::null(); 2956 value ^= OneByteString::null();
2957 } 2957 }
2958 isolate->heap()->CollectAllGarbage(); 2958 isolate->heap()->CollectAllGarbage();
2959 EXPECT(weak.key() == Object::null()); 2959 EXPECT(weak.key() == Object::null());
2960 EXPECT(weak.value() == Object::null()); 2960 EXPECT(weak.value() == Object::null());
2961 } 2961 }
2962 2962
2963 2963
2964 TEST_CASE(WeakProperty_ClearTwoShared_NewSpace) { 2964 TEST_CASE(WeakProperty_ClearTwoShared_NewSpace) {
2965 Isolate* isolate = Isolate::Current(); 2965 Isolate* isolate = Isolate::Current();
2966 WeakProperty& weak1 = WeakProperty::Handle(); 2966 WeakProperty& weak1 = WeakProperty::Handle();
2967 WeakProperty& weak2 = WeakProperty::Handle(); 2967 WeakProperty& weak2 = WeakProperty::Handle();
2968 { 2968 {
2969 HANDLESCOPE(isolate); 2969 HANDLESCOPE(isolate);
2970 OneByteString& key = OneByteString::Handle(); 2970 String& key = String::Handle();
2971 key ^= OneByteString::New("key"); 2971 key ^= OneByteString::New("key");
2972 OneByteString& value1 = OneByteString::Handle(); 2972 String& value1 = String::Handle();
2973 value1 ^= OneByteString::New("value1"); 2973 value1 ^= OneByteString::New("value1");
2974 weak1 ^= WeakProperty::New(); 2974 weak1 ^= WeakProperty::New();
2975 weak1.set_key(key); 2975 weak1.set_key(key);
2976 weak1.set_value(value1); 2976 weak1.set_value(value1);
2977 OneByteString& value2 = OneByteString::Handle(); 2977 String& value2 = String::Handle();
2978 value2 ^= OneByteString::New("value2"); 2978 value2 ^= OneByteString::New("value2");
2979 weak2 ^= WeakProperty::New(); 2979 weak2 ^= WeakProperty::New();
2980 weak2.set_key(key); 2980 weak2.set_key(key);
2981 weak2.set_value(value2); 2981 weak2.set_value(value2);
2982 } 2982 }
2983 isolate->heap()->CollectAllGarbage(); 2983 isolate->heap()->CollectAllGarbage();
2984 EXPECT(weak1.key() == Object::null()); 2984 EXPECT(weak1.key() == Object::null());
2985 EXPECT(weak1.value() == Object::null()); 2985 EXPECT(weak1.value() == Object::null());
2986 EXPECT(weak2.key() == Object::null()); 2986 EXPECT(weak2.key() == Object::null());
2987 EXPECT(weak2.value() == Object::null()); 2987 EXPECT(weak2.value() == Object::null());
2988 } 2988 }
2989 2989
2990 2990
2991 TEST_CASE(WeakProperty_ClearOne_OldSpace) { 2991 TEST_CASE(WeakProperty_ClearOne_OldSpace) {
2992 Isolate* isolate = Isolate::Current(); 2992 Isolate* isolate = Isolate::Current();
2993 WeakProperty& weak = WeakProperty::Handle(); 2993 WeakProperty& weak = WeakProperty::Handle();
2994 { 2994 {
2995 HANDLESCOPE(isolate); 2995 HANDLESCOPE(isolate);
2996 OneByteString& key = OneByteString::Handle(); 2996 String& key = String::Handle();
2997 key ^= OneByteString::New("key", Heap::kOld); 2997 key ^= OneByteString::New("key", Heap::kOld);
2998 OneByteString& value = OneByteString::Handle(); 2998 String& value = String::Handle();
2999 value ^= OneByteString::New("value", Heap::kOld); 2999 value ^= OneByteString::New("value", Heap::kOld);
3000 weak ^= WeakProperty::New(Heap::kOld); 3000 weak ^= WeakProperty::New(Heap::kOld);
3001 weak.set_key(key); 3001 weak.set_key(key);
3002 weak.set_value(value); 3002 weak.set_value(value);
3003 key ^= OneByteString::null(); 3003 key ^= OneByteString::null();
3004 value ^= OneByteString::null(); 3004 value ^= OneByteString::null();
3005 } 3005 }
3006 isolate->heap()->CollectAllGarbage(); 3006 isolate->heap()->CollectAllGarbage();
3007 EXPECT(weak.key() == Object::null()); 3007 EXPECT(weak.key() == Object::null());
3008 EXPECT(weak.value() == Object::null()); 3008 EXPECT(weak.value() == Object::null());
3009 } 3009 }
3010 3010
3011 3011
3012 TEST_CASE(WeakProperty_ClearTwoShared_OldSpace) { 3012 TEST_CASE(WeakProperty_ClearTwoShared_OldSpace) {
3013 Isolate* isolate = Isolate::Current(); 3013 Isolate* isolate = Isolate::Current();
3014 WeakProperty& weak1 = WeakProperty::Handle(); 3014 WeakProperty& weak1 = WeakProperty::Handle();
3015 WeakProperty& weak2 = WeakProperty::Handle(); 3015 WeakProperty& weak2 = WeakProperty::Handle();
3016 { 3016 {
3017 HANDLESCOPE(isolate); 3017 HANDLESCOPE(isolate);
3018 OneByteString& key = OneByteString::Handle(); 3018 String& key = String::Handle();
3019 key ^= OneByteString::New("key", Heap::kOld); 3019 key ^= OneByteString::New("key", Heap::kOld);
3020 OneByteString& value1 = OneByteString::Handle(); 3020 String& value1 = String::Handle();
3021 value1 ^= OneByteString::New("value1"); 3021 value1 ^= OneByteString::New("value1");
3022 weak1 ^= WeakProperty::New(Heap::kOld); 3022 weak1 ^= WeakProperty::New(Heap::kOld);
3023 weak1.set_key(key); 3023 weak1.set_key(key);
3024 weak1.set_value(value1); 3024 weak1.set_value(value1);
3025 OneByteString& value2 = OneByteString::Handle(); 3025 String& value2 = String::Handle();
3026 value2 ^= OneByteString::New("value2", Heap::kOld); 3026 value2 ^= OneByteString::New("value2", Heap::kOld);
3027 weak2 ^= WeakProperty::New(Heap::kOld); 3027 weak2 ^= WeakProperty::New(Heap::kOld);
3028 weak2.set_key(key); 3028 weak2.set_key(key);
3029 weak2.set_value(value2); 3029 weak2.set_value(value2);
3030 } 3030 }
3031 isolate->heap()->CollectAllGarbage(); 3031 isolate->heap()->CollectAllGarbage();
3032 EXPECT(weak1.key() == Object::null()); 3032 EXPECT(weak1.key() == Object::null());
3033 EXPECT(weak1.value() == Object::null()); 3033 EXPECT(weak1.value() == Object::null());
3034 EXPECT(weak2.key() == Object::null()); 3034 EXPECT(weak2.key() == Object::null());
3035 EXPECT(weak2.value() == Object::null()); 3035 EXPECT(weak2.value() == Object::null());
3036 } 3036 }
3037 3037
3038 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). 3038 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64).
3039 3039
3040 } // namespace dart 3040 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698