Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #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 2850 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2861 "#3 _bar (dart:test-lib:16:3)\n" | 2861 "#3 _bar (dart:test-lib:16:3)\n" |
| 2862 "#4 MyClass.field (dart:test-lib:25:9)\n" | 2862 "#4 MyClass.field (dart:test-lib:25:9)\n" |
| 2863 "#5 MyClass.foo.fooHelper (dart:test-lib:30:7)\n" | 2863 "#5 MyClass.foo.fooHelper (dart:test-lib:30:7)\n" |
| 2864 "#6 MyClass.foo (dart:test-lib:32:14)\n" | 2864 "#6 MyClass.foo (dart:test-lib:32:14)\n" |
| 2865 "#7 MyClass.MyClass.<anonymous closure> (dart:test-lib:21:15)\n" | 2865 "#7 MyClass.MyClass.<anonymous closure> (dart:test-lib:21:15)\n" |
| 2866 "#8 MyClass.MyClass (dart:test-lib:21:18)\n" | 2866 "#8 MyClass.MyClass (dart:test-lib:21:18)\n" |
| 2867 "#9 main.<anonymous closure> (dart:test-lib:37:10)\n" | 2867 "#9 main.<anonymous closure> (dart:test-lib:37:10)\n" |
| 2868 "#10 main (dart:test-lib:37:24)"); | 2868 "#10 main (dart:test-lib:37:24)"); |
| 2869 } | 2869 } |
| 2870 | 2870 |
| 2871 | |
| 2872 TEST_CASE(WeakProperty_PreserveOne_NewSpace) { | |
|
turnidge
2012/08/09 18:34:34
Tests look good to me.
cshapiro
2012/08/14 04:58:18
Thanks!
| |
| 2873 Isolate* isolate = Isolate::Current(); | |
| 2874 WeakProperty& weak = WeakProperty::Handle(); | |
| 2875 OneByteString& key = OneByteString::Handle(); | |
| 2876 key ^= OneByteString::New("key"); | |
| 2877 { | |
| 2878 HANDLESCOPE(isolate); | |
| 2879 OneByteString& value = OneByteString::Handle(); | |
| 2880 value ^= OneByteString::New("value"); | |
| 2881 weak ^= WeakProperty::New(); | |
| 2882 weak.set_key(key); | |
| 2883 weak.set_value(value); | |
| 2884 } | |
| 2885 isolate->heap()->CollectAllGarbage(); | |
| 2886 EXPECT(weak.key() != Object::null()); | |
| 2887 EXPECT(weak.value() != Object::null()); | |
| 2888 } | |
| 2889 | |
| 2890 | |
| 2891 TEST_CASE(WeakProperty_PreserveTwo_NewSpace) { | |
| 2892 Isolate* isolate = Isolate::Current(); | |
| 2893 WeakProperty& weak1 = WeakProperty::Handle(); | |
| 2894 OneByteString& key1 = OneByteString::Handle(); | |
| 2895 key1 ^= OneByteString::New("key1"); | |
| 2896 WeakProperty& weak2 = WeakProperty::Handle(); | |
| 2897 OneByteString& key2 = OneByteString::Handle(); | |
| 2898 key2 ^= OneByteString::New("key2"); | |
| 2899 { | |
| 2900 HANDLESCOPE(isolate); | |
| 2901 OneByteString& value1 = OneByteString::Handle(); | |
| 2902 value1 ^= OneByteString::New("value1"); | |
| 2903 weak1 ^= WeakProperty::New(); | |
| 2904 weak1.set_key(key1); | |
| 2905 weak1.set_value(value1); | |
| 2906 OneByteString& value2 = OneByteString::Handle(); | |
| 2907 value2 ^= OneByteString::New("value2"); | |
| 2908 weak2 ^= WeakProperty::New(); | |
| 2909 weak2.set_key(key2); | |
| 2910 weak2.set_value(value2); | |
| 2911 } | |
| 2912 isolate->heap()->CollectAllGarbage(); | |
| 2913 EXPECT(weak1.key() != Object::null()); | |
| 2914 EXPECT(weak1.value() != Object::null()); | |
| 2915 EXPECT(weak2.key() != Object::null()); | |
| 2916 EXPECT(weak2.value() != Object::null()); | |
| 2917 } | |
| 2918 | |
| 2919 | |
| 2920 TEST_CASE(WeakProperty_PreserveTwoShared_NewSpace) { | |
| 2921 Isolate* isolate = Isolate::Current(); | |
| 2922 WeakProperty& weak1 = WeakProperty::Handle(); | |
| 2923 WeakProperty& weak2 = WeakProperty::Handle(); | |
| 2924 OneByteString& key = OneByteString::Handle(); | |
| 2925 key ^= OneByteString::New("key"); | |
| 2926 { | |
| 2927 HANDLESCOPE(isolate); | |
| 2928 OneByteString& value1 = OneByteString::Handle(); | |
| 2929 value1 ^= OneByteString::New("value1"); | |
| 2930 weak1 ^= WeakProperty::New(); | |
| 2931 weak1.set_key(key); | |
| 2932 weak1.set_value(value1); | |
| 2933 OneByteString& value2 = OneByteString::Handle(); | |
| 2934 value2 ^= OneByteString::New("value2"); | |
| 2935 weak2 ^= WeakProperty::New(); | |
| 2936 weak2.set_key(key); | |
| 2937 weak2.set_value(value2); | |
| 2938 } | |
| 2939 isolate->heap()->CollectAllGarbage(); | |
| 2940 EXPECT(weak1.key() != Object::null()); | |
| 2941 EXPECT(weak1.value() != Object::null()); | |
| 2942 EXPECT(weak2.key() != Object::null()); | |
| 2943 EXPECT(weak2.value() != Object::null()); | |
| 2944 } | |
| 2945 | |
| 2946 | |
| 2947 TEST_CASE(WeakProperty_PreserveOne_OldSpace) { | |
| 2948 Isolate* isolate = Isolate::Current(); | |
| 2949 WeakProperty& weak = WeakProperty::Handle(); | |
| 2950 OneByteString& key = OneByteString::Handle(); | |
| 2951 key ^= OneByteString::New("key", Heap::kOld); | |
| 2952 { | |
| 2953 HANDLESCOPE(isolate); | |
| 2954 OneByteString& value = OneByteString::Handle(); | |
| 2955 value ^= OneByteString::New("value", Heap::kOld); | |
| 2956 weak ^= WeakProperty::New(Heap::kOld); | |
| 2957 weak.set_key(key); | |
| 2958 weak.set_value(value); | |
| 2959 } | |
| 2960 isolate->heap()->CollectAllGarbage(); | |
| 2961 EXPECT(weak.key() != Object::null()); | |
| 2962 EXPECT(weak.value() != Object::null()); | |
| 2963 } | |
| 2964 | |
| 2965 | |
| 2966 TEST_CASE(WeakProperty_PreserveTwo_OldSpace) { | |
| 2967 Isolate* isolate = Isolate::Current(); | |
| 2968 WeakProperty& weak1 = WeakProperty::Handle(); | |
| 2969 OneByteString& key1 = OneByteString::Handle(); | |
| 2970 key1 ^= OneByteString::New("key1", Heap::kOld); | |
| 2971 WeakProperty& weak2 = WeakProperty::Handle(); | |
| 2972 OneByteString& key2 = OneByteString::Handle(); | |
| 2973 key2 ^= OneByteString::New("key2", Heap::kOld); | |
| 2974 { | |
| 2975 HANDLESCOPE(isolate); | |
| 2976 OneByteString& value1 = OneByteString::Handle(); | |
| 2977 value1 ^= OneByteString::New("value1", Heap::kOld); | |
| 2978 weak1 ^= WeakProperty::New(Heap::kOld); | |
| 2979 weak1.set_key(key1); | |
| 2980 weak1.set_value(value1); | |
| 2981 OneByteString& value2 = OneByteString::Handle(); | |
| 2982 value2 ^= OneByteString::New("value2", Heap::kOld); | |
| 2983 weak2 ^= WeakProperty::New(Heap::kOld); | |
| 2984 weak2.set_key(key2); | |
| 2985 weak2.set_value(value2); | |
| 2986 } | |
| 2987 isolate->heap()->CollectAllGarbage(); | |
| 2988 EXPECT(weak1.key() != Object::null()); | |
| 2989 EXPECT(weak1.value() != Object::null()); | |
| 2990 EXPECT(weak2.key() != Object::null()); | |
| 2991 EXPECT(weak2.value() != Object::null()); | |
| 2992 } | |
| 2993 | |
| 2994 | |
| 2995 TEST_CASE(WeakProperty_PreserveTwoShared_OldSpace) { | |
| 2996 Isolate* isolate = Isolate::Current(); | |
| 2997 WeakProperty& weak1 = WeakProperty::Handle(); | |
| 2998 WeakProperty& weak2 = WeakProperty::Handle(); | |
| 2999 OneByteString& key = OneByteString::Handle(); | |
| 3000 key ^= OneByteString::New("key", Heap::kOld); | |
| 3001 { | |
| 3002 HANDLESCOPE(isolate); | |
| 3003 OneByteString& value1 = OneByteString::Handle(); | |
| 3004 value1 ^= OneByteString::New("value1", Heap::kOld); | |
| 3005 weak1 ^= WeakProperty::New(Heap::kOld); | |
| 3006 weak1.set_key(key); | |
| 3007 weak1.set_value(value1); | |
| 3008 OneByteString& value2 = OneByteString::Handle(); | |
| 3009 value2 ^= OneByteString::New("value2", Heap::kOld); | |
| 3010 weak2 ^= WeakProperty::New(Heap::kOld); | |
| 3011 weak2.set_key(key); | |
| 3012 weak2.set_value(value2); | |
| 3013 } | |
| 3014 isolate->heap()->CollectAllGarbage(); | |
| 3015 EXPECT(weak1.key() != Object::null()); | |
| 3016 EXPECT(weak1.value() != Object::null()); | |
| 3017 EXPECT(weak2.key() != Object::null()); | |
| 3018 EXPECT(weak2.value() != Object::null()); | |
| 3019 } | |
| 3020 | |
| 3021 | |
| 3022 TEST_CASE(WeakProperty_ClearOne_NewSpace) { | |
| 3023 Isolate* isolate = Isolate::Current(); | |
| 3024 WeakProperty& weak = WeakProperty::Handle(); | |
| 3025 { | |
| 3026 HANDLESCOPE(isolate); | |
| 3027 OneByteString& key = OneByteString::Handle(); | |
| 3028 key ^= OneByteString::New("key"); | |
| 3029 OneByteString& value = OneByteString::Handle(); | |
| 3030 value ^= OneByteString::New("value"); | |
| 3031 weak ^= WeakProperty::New(); | |
| 3032 weak.set_key(key); | |
| 3033 weak.set_value(value); | |
| 3034 key ^= OneByteString::null(); | |
| 3035 value ^= OneByteString::null(); | |
| 3036 } | |
| 3037 isolate->heap()->CollectAllGarbage(); | |
| 3038 EXPECT(weak.key() == Object::null()); | |
| 3039 EXPECT(weak.value() == Object::null()); | |
| 3040 } | |
| 3041 | |
| 3042 | |
| 3043 TEST_CASE(WeakProperty_ClearTwoShared_NewSpace) { | |
| 3044 Isolate* isolate = Isolate::Current(); | |
| 3045 WeakProperty& weak1 = WeakProperty::Handle(); | |
| 3046 WeakProperty& weak2 = WeakProperty::Handle(); | |
| 3047 { | |
| 3048 HANDLESCOPE(isolate); | |
| 3049 OneByteString& key = OneByteString::Handle(); | |
| 3050 key ^= OneByteString::New("key"); | |
| 3051 OneByteString& value1 = OneByteString::Handle(); | |
| 3052 value1 ^= OneByteString::New("value1"); | |
| 3053 weak1 ^= WeakProperty::New(); | |
| 3054 weak1.set_key(key); | |
| 3055 weak1.set_value(value1); | |
| 3056 OneByteString& value2 = OneByteString::Handle(); | |
| 3057 value2 ^= OneByteString::New("value2"); | |
| 3058 weak2 ^= WeakProperty::New(); | |
| 3059 weak2.set_key(key); | |
| 3060 weak2.set_value(value2); | |
| 3061 } | |
| 3062 isolate->heap()->CollectAllGarbage(); | |
| 3063 EXPECT(weak1.key() == Object::null()); | |
| 3064 EXPECT(weak1.value() == Object::null()); | |
| 3065 EXPECT(weak2.key() == Object::null()); | |
| 3066 EXPECT(weak2.value() == Object::null()); | |
| 3067 } | |
| 3068 | |
| 3069 | |
| 3070 TEST_CASE(WeakProperty_ClearOne_OldSpace) { | |
| 3071 Isolate* isolate = Isolate::Current(); | |
| 3072 WeakProperty& weak = WeakProperty::Handle(); | |
| 3073 { | |
| 3074 HANDLESCOPE(isolate); | |
| 3075 OneByteString& key = OneByteString::Handle(); | |
| 3076 key ^= OneByteString::New("key", Heap::kOld); | |
| 3077 OneByteString& value = OneByteString::Handle(); | |
| 3078 value ^= OneByteString::New("value", Heap::kOld); | |
| 3079 weak ^= WeakProperty::New(Heap::kOld); | |
| 3080 weak.set_key(key); | |
| 3081 weak.set_value(value); | |
| 3082 key ^= OneByteString::null(); | |
| 3083 value ^= OneByteString::null(); | |
| 3084 } | |
| 3085 isolate->heap()->CollectAllGarbage(); | |
| 3086 EXPECT(weak.key() == Object::null()); | |
| 3087 EXPECT(weak.value() == Object::null()); | |
| 3088 } | |
| 3089 | |
| 3090 | |
| 3091 TEST_CASE(WeakProperty_ClearTwoShared_OldSpace) { | |
| 3092 Isolate* isolate = Isolate::Current(); | |
| 3093 WeakProperty& weak1 = WeakProperty::Handle(); | |
| 3094 WeakProperty& weak2 = WeakProperty::Handle(); | |
| 3095 { | |
| 3096 HANDLESCOPE(isolate); | |
| 3097 OneByteString& key = OneByteString::Handle(); | |
| 3098 key ^= OneByteString::New("key", Heap::kOld); | |
| 3099 OneByteString& value1 = OneByteString::Handle(); | |
| 3100 value1 ^= OneByteString::New("value1"); | |
| 3101 weak1 ^= WeakProperty::New(Heap::kOld); | |
| 3102 weak1.set_key(key); | |
| 3103 weak1.set_value(value1); | |
| 3104 OneByteString& value2 = OneByteString::Handle(); | |
| 3105 value2 ^= OneByteString::New("value2", Heap::kOld); | |
| 3106 weak2 ^= WeakProperty::New(Heap::kOld); | |
| 3107 weak2.set_key(key); | |
| 3108 weak2.set_value(value2); | |
| 3109 } | |
| 3110 isolate->heap()->CollectAllGarbage(); | |
| 3111 EXPECT(weak1.key() == Object::null()); | |
| 3112 EXPECT(weak1.value() == Object::null()); | |
| 3113 EXPECT(weak2.key() == Object::null()); | |
| 3114 EXPECT(weak2.value() == Object::null()); | |
| 3115 } | |
| 3116 | |
| 2871 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). | 3117 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). |
| 2872 | 3118 |
| 2873 } // namespace dart | 3119 } // namespace dart |
| OLD | NEW |