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

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

Issue 10832199: Add a weak property type to the virtual machine. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: address final review comments Created 8 years, 4 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/object_store.cc ('k') | runtime/vm/raw_object.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 #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 2844 matching lines...) Expand 10 before | Expand all | Expand 10 after
2855 "#3 _bar (dart:test-lib:16:3)\n" 2855 "#3 _bar (dart:test-lib:16:3)\n"
2856 "#4 MyClass.field (dart:test-lib:25:9)\n" 2856 "#4 MyClass.field (dart:test-lib:25:9)\n"
2857 "#5 MyClass.foo.fooHelper (dart:test-lib:30:7)\n" 2857 "#5 MyClass.foo.fooHelper (dart:test-lib:30:7)\n"
2858 "#6 MyClass.foo (dart:test-lib:32:14)\n" 2858 "#6 MyClass.foo (dart:test-lib:32:14)\n"
2859 "#7 MyClass.MyClass.<anonymous closure> (dart:test-lib:21:15)\n" 2859 "#7 MyClass.MyClass.<anonymous closure> (dart:test-lib:21:15)\n"
2860 "#8 MyClass.MyClass (dart:test-lib:21:18)\n" 2860 "#8 MyClass.MyClass (dart:test-lib:21:18)\n"
2861 "#9 main.<anonymous closure> (dart:test-lib:37:10)\n" 2861 "#9 main.<anonymous closure> (dart:test-lib:37:10)\n"
2862 "#10 main (dart:test-lib:37:24)"); 2862 "#10 main (dart:test-lib:37:24)");
2863 } 2863 }
2864 2864
2865
2866 TEST_CASE(WeakProperty_PreserveOne_NewSpace) {
2867 Isolate* isolate = Isolate::Current();
2868 WeakProperty& weak = WeakProperty::Handle();
2869 OneByteString& key = OneByteString::Handle();
2870 key ^= OneByteString::New("key");
2871 {
2872 HANDLESCOPE(isolate);
2873 OneByteString& value = OneByteString::Handle();
2874 value ^= OneByteString::New("value");
2875 weak ^= WeakProperty::New();
2876 weak.set_key(key);
2877 weak.set_value(value);
2878 }
2879 isolate->heap()->CollectAllGarbage();
2880 EXPECT(weak.key() != Object::null());
2881 EXPECT(weak.value() != Object::null());
2882 }
2883
2884
2885 TEST_CASE(WeakProperty_PreserveTwo_NewSpace) {
2886 Isolate* isolate = Isolate::Current();
2887 WeakProperty& weak1 = WeakProperty::Handle();
2888 OneByteString& key1 = OneByteString::Handle();
2889 key1 ^= OneByteString::New("key1");
2890 WeakProperty& weak2 = WeakProperty::Handle();
2891 OneByteString& key2 = OneByteString::Handle();
2892 key2 ^= OneByteString::New("key2");
2893 {
2894 HANDLESCOPE(isolate);
2895 OneByteString& value1 = OneByteString::Handle();
2896 value1 ^= OneByteString::New("value1");
2897 weak1 ^= WeakProperty::New();
2898 weak1.set_key(key1);
2899 weak1.set_value(value1);
2900 OneByteString& value2 = OneByteString::Handle();
2901 value2 ^= OneByteString::New("value2");
2902 weak2 ^= WeakProperty::New();
2903 weak2.set_key(key2);
2904 weak2.set_value(value2);
2905 }
2906 isolate->heap()->CollectAllGarbage();
2907 EXPECT(weak1.key() != Object::null());
2908 EXPECT(weak1.value() != Object::null());
2909 EXPECT(weak2.key() != Object::null());
2910 EXPECT(weak2.value() != Object::null());
2911 }
2912
2913
2914 TEST_CASE(WeakProperty_PreserveTwoShared_NewSpace) {
2915 Isolate* isolate = Isolate::Current();
2916 WeakProperty& weak1 = WeakProperty::Handle();
2917 WeakProperty& weak2 = WeakProperty::Handle();
2918 OneByteString& key = OneByteString::Handle();
2919 key ^= OneByteString::New("key");
2920 {
2921 HANDLESCOPE(isolate);
2922 OneByteString& value1 = OneByteString::Handle();
2923 value1 ^= OneByteString::New("value1");
2924 weak1 ^= WeakProperty::New();
2925 weak1.set_key(key);
2926 weak1.set_value(value1);
2927 OneByteString& value2 = OneByteString::Handle();
2928 value2 ^= OneByteString::New("value2");
2929 weak2 ^= WeakProperty::New();
2930 weak2.set_key(key);
2931 weak2.set_value(value2);
2932 }
2933 isolate->heap()->CollectAllGarbage();
2934 EXPECT(weak1.key() != Object::null());
2935 EXPECT(weak1.value() != Object::null());
2936 EXPECT(weak2.key() != Object::null());
2937 EXPECT(weak2.value() != Object::null());
2938 }
2939
2940
2941 TEST_CASE(WeakProperty_PreserveOne_OldSpace) {
2942 Isolate* isolate = Isolate::Current();
2943 WeakProperty& weak = WeakProperty::Handle();
2944 OneByteString& key = OneByteString::Handle();
2945 key ^= OneByteString::New("key", Heap::kOld);
2946 {
2947 HANDLESCOPE(isolate);
2948 OneByteString& value = OneByteString::Handle();
2949 value ^= OneByteString::New("value", Heap::kOld);
2950 weak ^= WeakProperty::New(Heap::kOld);
2951 weak.set_key(key);
2952 weak.set_value(value);
2953 }
2954 isolate->heap()->CollectAllGarbage();
2955 EXPECT(weak.key() != Object::null());
2956 EXPECT(weak.value() != Object::null());
2957 }
2958
2959
2960 TEST_CASE(WeakProperty_PreserveTwo_OldSpace) {
2961 Isolate* isolate = Isolate::Current();
2962 WeakProperty& weak1 = WeakProperty::Handle();
2963 OneByteString& key1 = OneByteString::Handle();
2964 key1 ^= OneByteString::New("key1", Heap::kOld);
2965 WeakProperty& weak2 = WeakProperty::Handle();
2966 OneByteString& key2 = OneByteString::Handle();
2967 key2 ^= OneByteString::New("key2", Heap::kOld);
2968 {
2969 HANDLESCOPE(isolate);
2970 OneByteString& value1 = OneByteString::Handle();
2971 value1 ^= OneByteString::New("value1", Heap::kOld);
2972 weak1 ^= WeakProperty::New(Heap::kOld);
2973 weak1.set_key(key1);
2974 weak1.set_value(value1);
2975 OneByteString& value2 = OneByteString::Handle();
2976 value2 ^= OneByteString::New("value2", Heap::kOld);
2977 weak2 ^= WeakProperty::New(Heap::kOld);
2978 weak2.set_key(key2);
2979 weak2.set_value(value2);
2980 }
2981 isolate->heap()->CollectAllGarbage();
2982 EXPECT(weak1.key() != Object::null());
2983 EXPECT(weak1.value() != Object::null());
2984 EXPECT(weak2.key() != Object::null());
2985 EXPECT(weak2.value() != Object::null());
2986 }
2987
2988
2989 TEST_CASE(WeakProperty_PreserveTwoShared_OldSpace) {
2990 Isolate* isolate = Isolate::Current();
2991 WeakProperty& weak1 = WeakProperty::Handle();
2992 WeakProperty& weak2 = WeakProperty::Handle();
2993 OneByteString& key = OneByteString::Handle();
2994 key ^= OneByteString::New("key", Heap::kOld);
2995 {
2996 HANDLESCOPE(isolate);
2997 OneByteString& value1 = OneByteString::Handle();
2998 value1 ^= OneByteString::New("value1", Heap::kOld);
2999 weak1 ^= WeakProperty::New(Heap::kOld);
3000 weak1.set_key(key);
3001 weak1.set_value(value1);
3002 OneByteString& value2 = OneByteString::Handle();
3003 value2 ^= OneByteString::New("value2", Heap::kOld);
3004 weak2 ^= WeakProperty::New(Heap::kOld);
3005 weak2.set_key(key);
3006 weak2.set_value(value2);
3007 }
3008 isolate->heap()->CollectAllGarbage();
3009 EXPECT(weak1.key() != Object::null());
3010 EXPECT(weak1.value() != Object::null());
3011 EXPECT(weak2.key() != Object::null());
3012 EXPECT(weak2.value() != Object::null());
3013 }
3014
3015
3016 TEST_CASE(WeakProperty_ClearOne_NewSpace) {
3017 Isolate* isolate = Isolate::Current();
3018 WeakProperty& weak = WeakProperty::Handle();
3019 {
3020 HANDLESCOPE(isolate);
3021 OneByteString& key = OneByteString::Handle();
3022 key ^= OneByteString::New("key");
3023 OneByteString& value = OneByteString::Handle();
3024 value ^= OneByteString::New("value");
3025 weak ^= WeakProperty::New();
3026 weak.set_key(key);
3027 weak.set_value(value);
3028 key ^= OneByteString::null();
3029 value ^= OneByteString::null();
3030 }
3031 isolate->heap()->CollectAllGarbage();
3032 EXPECT(weak.key() == Object::null());
3033 EXPECT(weak.value() == Object::null());
3034 }
3035
3036
3037 TEST_CASE(WeakProperty_ClearTwoShared_NewSpace) {
3038 Isolate* isolate = Isolate::Current();
3039 WeakProperty& weak1 = WeakProperty::Handle();
3040 WeakProperty& weak2 = WeakProperty::Handle();
3041 {
3042 HANDLESCOPE(isolate);
3043 OneByteString& key = OneByteString::Handle();
3044 key ^= OneByteString::New("key");
3045 OneByteString& value1 = OneByteString::Handle();
3046 value1 ^= OneByteString::New("value1");
3047 weak1 ^= WeakProperty::New();
3048 weak1.set_key(key);
3049 weak1.set_value(value1);
3050 OneByteString& value2 = OneByteString::Handle();
3051 value2 ^= OneByteString::New("value2");
3052 weak2 ^= WeakProperty::New();
3053 weak2.set_key(key);
3054 weak2.set_value(value2);
3055 }
3056 isolate->heap()->CollectAllGarbage();
3057 EXPECT(weak1.key() == Object::null());
3058 EXPECT(weak1.value() == Object::null());
3059 EXPECT(weak2.key() == Object::null());
3060 EXPECT(weak2.value() == Object::null());
3061 }
3062
3063
3064 TEST_CASE(WeakProperty_ClearOne_OldSpace) {
3065 Isolate* isolate = Isolate::Current();
3066 WeakProperty& weak = WeakProperty::Handle();
3067 {
3068 HANDLESCOPE(isolate);
3069 OneByteString& key = OneByteString::Handle();
3070 key ^= OneByteString::New("key", Heap::kOld);
3071 OneByteString& value = OneByteString::Handle();
3072 value ^= OneByteString::New("value", Heap::kOld);
3073 weak ^= WeakProperty::New(Heap::kOld);
3074 weak.set_key(key);
3075 weak.set_value(value);
3076 key ^= OneByteString::null();
3077 value ^= OneByteString::null();
3078 }
3079 isolate->heap()->CollectAllGarbage();
3080 EXPECT(weak.key() == Object::null());
3081 EXPECT(weak.value() == Object::null());
3082 }
3083
3084
3085 TEST_CASE(WeakProperty_ClearTwoShared_OldSpace) {
3086 Isolate* isolate = Isolate::Current();
3087 WeakProperty& weak1 = WeakProperty::Handle();
3088 WeakProperty& weak2 = WeakProperty::Handle();
3089 {
3090 HANDLESCOPE(isolate);
3091 OneByteString& key = OneByteString::Handle();
3092 key ^= OneByteString::New("key", Heap::kOld);
3093 OneByteString& value1 = OneByteString::Handle();
3094 value1 ^= OneByteString::New("value1");
3095 weak1 ^= WeakProperty::New(Heap::kOld);
3096 weak1.set_key(key);
3097 weak1.set_value(value1);
3098 OneByteString& value2 = OneByteString::Handle();
3099 value2 ^= OneByteString::New("value2", Heap::kOld);
3100 weak2 ^= WeakProperty::New(Heap::kOld);
3101 weak2.set_key(key);
3102 weak2.set_value(value2);
3103 }
3104 isolate->heap()->CollectAllGarbage();
3105 EXPECT(weak1.key() == Object::null());
3106 EXPECT(weak1.value() == Object::null());
3107 EXPECT(weak2.key() == Object::null());
3108 EXPECT(weak2.value() == Object::null());
3109 }
3110
2865 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). 3111 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64).
2866 3112
2867 } // namespace dart 3113 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/object_store.cc ('k') | runtime/vm/raw_object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698