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 |