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

Side by Side Diff: src/heap.cc

Issue 239273002: Revert "Handlifying clients of StringTable, step 1." (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
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 | « src/heap.h ('k') | src/objects.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 2741 matching lines...) Expand 10 before | Expand all | Expand 10 after
2752 if (!maybe_result->To(&site)) return maybe_result; 2752 if (!maybe_result->To(&site)) return maybe_result;
2753 site->Initialize(); 2753 site->Initialize();
2754 2754
2755 // Link the site 2755 // Link the site
2756 site->set_weak_next(allocation_sites_list()); 2756 site->set_weak_next(allocation_sites_list());
2757 set_allocation_sites_list(site); 2757 set_allocation_sites_list(site);
2758 return site; 2758 return site;
2759 } 2759 }
2760 2760
2761 2761
2762 MaybeObject* Heap::CreateOddball(Map* map,
2763 const char* to_string,
2764 Object* to_number,
2765 byte kind) {
2766 Object* result;
2767 { MaybeObject* maybe_result = Allocate(map, OLD_POINTER_SPACE);
2768 if (!maybe_result->ToObject(&result)) return maybe_result;
2769 }
2770 return Oddball::cast(result)->Initialize(this, to_string, to_number, kind);
2771 }
2772
2773
2762 bool Heap::CreateApiObjects() { 2774 bool Heap::CreateApiObjects() {
2763 Object* obj; 2775 Object* obj;
2764 2776
2765 { MaybeObject* maybe_obj = AllocateMap(JS_OBJECT_TYPE, JSObject::kHeaderSize); 2777 { MaybeObject* maybe_obj = AllocateMap(JS_OBJECT_TYPE, JSObject::kHeaderSize);
2766 if (!maybe_obj->ToObject(&obj)) return false; 2778 if (!maybe_obj->ToObject(&obj)) return false;
2767 } 2779 }
2768 // Don't use Smi-only elements optimizations for objects with the neander 2780 // Don't use Smi-only elements optimizations for objects with the neander
2769 // map. There are too many cases where element values are set directly with a 2781 // map. There are too many cases where element values are set directly with a
2770 // bottleneck to trap the Smi-only -> fast elements transition, and there 2782 // bottleneck to trap the Smi-only -> fast elements transition, and there
2771 // appears to be no benefit for optimize this case. 2783 // appears to be no benefit for optimize this case.
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
2824 // { JSConstructEntryStub stub; 2836 // { JSConstructEntryStub stub;
2825 // js_construct_entry_code_ = *stub.GetCode(); 2837 // js_construct_entry_code_ = *stub.GetCode();
2826 // } 2838 // }
2827 // To workaround the problem, make separate functions without inlining. 2839 // To workaround the problem, make separate functions without inlining.
2828 Heap::CreateJSEntryStub(); 2840 Heap::CreateJSEntryStub();
2829 Heap::CreateJSConstructEntryStub(); 2841 Heap::CreateJSConstructEntryStub();
2830 } 2842 }
2831 2843
2832 2844
2833 bool Heap::CreateInitialObjects() { 2845 bool Heap::CreateInitialObjects() {
2834 HandleScope scope(isolate()); 2846 Object* obj;
2835 Factory* factory = isolate()->factory();
2836 2847
2837 // The -0 value must be set before NumberFromDouble works. 2848 // The -0 value must be set before NumberFromDouble works.
2838 set_minus_zero_value(*factory->NewHeapNumber(-0.0, TENURED)); 2849 { MaybeObject* maybe_obj = AllocateHeapNumber(-0.0, TENURED);
2850 if (!maybe_obj->ToObject(&obj)) return false;
2851 }
2852 set_minus_zero_value(HeapNumber::cast(obj));
2839 ASSERT(std::signbit(minus_zero_value()->Number()) != 0); 2853 ASSERT(std::signbit(minus_zero_value()->Number()) != 0);
2840 2854
2841 set_nan_value(*factory->NewHeapNumber(OS::nan_value(), TENURED)); 2855 { MaybeObject* maybe_obj = AllocateHeapNumber(OS::nan_value(), TENURED);
2842 set_infinity_value(*factory->NewHeapNumber(V8_INFINITY, TENURED)); 2856 if (!maybe_obj->ToObject(&obj)) return false;
2857 }
2858 set_nan_value(HeapNumber::cast(obj));
2859
2860 { MaybeObject* maybe_obj = AllocateHeapNumber(V8_INFINITY, TENURED);
2861 if (!maybe_obj->ToObject(&obj)) return false;
2862 }
2863 set_infinity_value(HeapNumber::cast(obj));
2843 2864
2844 // The hole has not been created yet, but we want to put something 2865 // The hole has not been created yet, but we want to put something
2845 // predictable in the gaps in the string table, so lets make that Smi zero. 2866 // predictable in the gaps in the string table, so lets make that Smi zero.
2846 set_the_hole_value(reinterpret_cast<Oddball*>(Smi::FromInt(0))); 2867 set_the_hole_value(reinterpret_cast<Oddball*>(Smi::FromInt(0)));
2847 2868
2848 // Allocate initial string table. 2869 // Allocate initial string table.
2849 set_string_table(*StringTable::New(isolate(), kInitialStringTableSize)); 2870 { MaybeObject* maybe_obj =
2871 StringTable::Allocate(this, kInitialStringTableSize);
2872 if (!maybe_obj->ToObject(&obj)) return false;
2873 }
2874 // Don't use set_string_table() due to asserts.
2875 roots_[kStringTableRootIndex] = obj;
2850 2876
2851 // Finish initializing oddballs after creating the string table. 2877 // Finish initializing oddballs after creating the string table.
2852 Oddball::Initialize(isolate(), 2878 { MaybeObject* maybe_obj =
2853 factory->undefined_value(), 2879 undefined_value()->Initialize(this,
2854 "undefined", 2880 "undefined",
2855 factory->nan_value(), 2881 nan_value(),
2856 Oddball::kUndefined); 2882 Oddball::kUndefined);
2883 if (!maybe_obj->ToObject(&obj)) return false;
2884 }
2857 2885
2858 // Initialize the null_value. 2886 // Initialize the null_value.
2859 Oddball::Initialize(isolate(), 2887 { MaybeObject* maybe_obj = null_value()->Initialize(
2860 factory->null_value(), 2888 this, "null", Smi::FromInt(0), Oddball::kNull);
2861 "null", 2889 if (!maybe_obj->ToObject(&obj)) return false;
2862 handle(Smi::FromInt(0), isolate()), 2890 }
2863 Oddball::kNull);
2864 2891
2865 set_true_value(*factory->NewOddball(factory->boolean_map(), 2892 { MaybeObject* maybe_obj = CreateOddball(boolean_map(),
2866 "true", 2893 "true",
2867 handle(Smi::FromInt(1), isolate()), 2894 Smi::FromInt(1),
2868 Oddball::kTrue)); 2895 Oddball::kTrue);
2896 if (!maybe_obj->ToObject(&obj)) return false;
2897 }
2898 set_true_value(Oddball::cast(obj));
2869 2899
2870 set_false_value(*factory->NewOddball(factory->boolean_map(), 2900 { MaybeObject* maybe_obj = CreateOddball(boolean_map(),
2871 "false", 2901 "false",
2872 handle(Smi::FromInt(0), isolate()), 2902 Smi::FromInt(0),
2873 Oddball::kFalse)); 2903 Oddball::kFalse);
2904 if (!maybe_obj->ToObject(&obj)) return false;
2905 }
2906 set_false_value(Oddball::cast(obj));
2874 2907
2875 set_the_hole_value(*factory->NewOddball(factory->the_hole_map(), 2908 { MaybeObject* maybe_obj = CreateOddball(the_hole_map(),
2876 "hole", 2909 "hole",
2877 handle(Smi::FromInt(-1), isolate()), 2910 Smi::FromInt(-1),
2878 Oddball::kTheHole)); 2911 Oddball::kTheHole);
2912 if (!maybe_obj->ToObject(&obj)) return false;
2913 }
2914 set_the_hole_value(Oddball::cast(obj));
2879 2915
2880 set_uninitialized_value( 2916 { MaybeObject* maybe_obj = CreateOddball(uninitialized_map(),
2881 *factory->NewOddball(factory->uninitialized_map(), 2917 "uninitialized",
2882 "uninitialized", 2918 Smi::FromInt(-1),
2883 handle(Smi::FromInt(-1), isolate()), 2919 Oddball::kUninitialized);
2884 Oddball::kUninitialized)); 2920 if (!maybe_obj->ToObject(&obj)) return false;
2921 }
2922 set_uninitialized_value(Oddball::cast(obj));
2885 2923
2886 set_arguments_marker(*factory->NewOddball(factory->arguments_marker_map(), 2924 { MaybeObject* maybe_obj = CreateOddball(arguments_marker_map(),
2887 "arguments_marker", 2925 "arguments_marker",
2888 handle(Smi::FromInt(-4), isolate()), 2926 Smi::FromInt(-4),
2889 Oddball::kArgumentMarker)); 2927 Oddball::kArgumentMarker);
2928 if (!maybe_obj->ToObject(&obj)) return false;
2929 }
2930 set_arguments_marker(Oddball::cast(obj));
2890 2931
2891 set_no_interceptor_result_sentinel( 2932 { MaybeObject* maybe_obj = CreateOddball(no_interceptor_result_sentinel_map(),
2892 *factory->NewOddball(factory->no_interceptor_result_sentinel_map(), 2933 "no_interceptor_result_sentinel",
2893 "no_interceptor_result_sentinel", 2934 Smi::FromInt(-2),
2894 handle(Smi::FromInt(-2), isolate()), 2935 Oddball::kOther);
2895 Oddball::kOther)); 2936 if (!maybe_obj->ToObject(&obj)) return false;
2937 }
2938 set_no_interceptor_result_sentinel(Oddball::cast(obj));
2896 2939
2897 set_termination_exception( 2940 { MaybeObject* maybe_obj = CreateOddball(termination_exception_map(),
2898 *factory->NewOddball(factory->termination_exception_map(), 2941 "termination_exception",
2899 "termination_exception", 2942 Smi::FromInt(-3),
2900 handle(Smi::FromInt(-3), isolate()), 2943 Oddball::kOther);
2901 Oddball::kOther)); 2944 if (!maybe_obj->ToObject(&obj)) return false;
2945 }
2946 set_termination_exception(Oddball::cast(obj));
2902 2947
2903 for (unsigned i = 0; i < ARRAY_SIZE(constant_string_table); i++) { 2948 for (unsigned i = 0; i < ARRAY_SIZE(constant_string_table); i++) {
2904 Handle<String> str = 2949 { MaybeObject* maybe_obj =
2905 factory->InternalizeUtf8String(constant_string_table[i].contents); 2950 InternalizeUtf8String(constant_string_table[i].contents);
2906 roots_[constant_string_table[i].index] = *str; 2951 if (!maybe_obj->ToObject(&obj)) return false;
2952 }
2953 roots_[constant_string_table[i].index] = String::cast(obj);
2907 } 2954 }
2908 2955
2909 Object* obj;
2910
2911 // Allocate the hidden string which is used to identify the hidden properties 2956 // Allocate the hidden string which is used to identify the hidden properties
2912 // in JSObjects. The hash code has a special value so that it will not match 2957 // in JSObjects. The hash code has a special value so that it will not match
2913 // the empty string when searching for the property. It cannot be part of the 2958 // the empty string when searching for the property. It cannot be part of the
2914 // loop above because it needs to be allocated manually with the special 2959 // loop above because it needs to be allocated manually with the special
2915 // hash code in place. The hash code for the hidden_string is zero to ensure 2960 // hash code in place. The hash code for the hidden_string is zero to ensure
2916 // that it will always be at the first entry in property descriptors. 2961 // that it will always be at the first entry in property descriptors.
2917 { MaybeObject* maybe_obj = AllocateOneByteInternalizedString( 2962 { MaybeObject* maybe_obj = AllocateOneByteInternalizedString(
2918 OneByteVector("", 0), String::kEmptyStringHash); 2963 OneByteVector("", 0), String::kEmptyStringHash);
2919 if (!maybe_obj->ToObject(&obj)) return false; 2964 if (!maybe_obj->ToObject(&obj)) return false;
2920 } 2965 }
(...skipping 19 matching lines...) Expand all
2940 } 2985 }
2941 set_polymorphic_code_cache(PolymorphicCodeCache::cast(obj)); 2986 set_polymorphic_code_cache(PolymorphicCodeCache::cast(obj));
2942 2987
2943 set_instanceof_cache_function(Smi::FromInt(0)); 2988 set_instanceof_cache_function(Smi::FromInt(0));
2944 set_instanceof_cache_map(Smi::FromInt(0)); 2989 set_instanceof_cache_map(Smi::FromInt(0));
2945 set_instanceof_cache_answer(Smi::FromInt(0)); 2990 set_instanceof_cache_answer(Smi::FromInt(0));
2946 2991
2947 CreateFixedStubs(); 2992 CreateFixedStubs();
2948 2993
2949 // Allocate the dictionary of intrinsic function names. 2994 // Allocate the dictionary of intrinsic function names.
2950 { 2995 { MaybeObject* maybe_obj =
2951 Handle<NameDictionary> function_names = 2996 NameDictionary::Allocate(this, Runtime::kNumFunctions);
2952 NameDictionary::New(isolate(), Runtime::kNumFunctions); 2997 if (!maybe_obj->ToObject(&obj)) return false;
2953 Runtime::InitializeIntrinsicFunctionNames(isolate(), function_names);
2954 set_intrinsic_function_names(*function_names);
2955 } 2998 }
2999 set_intrinsic_function_names(NameDictionary::cast(obj));
2956 3000
2957 { MaybeObject* maybe_obj = AllocateInitialNumberStringCache(); 3001 { MaybeObject* maybe_obj = AllocateInitialNumberStringCache();
2958 if (!maybe_obj->ToObject(&obj)) return false; 3002 if (!maybe_obj->ToObject(&obj)) return false;
2959 } 3003 }
2960 set_number_string_cache(FixedArray::cast(obj)); 3004 set_number_string_cache(FixedArray::cast(obj));
2961 3005
2962 // Allocate cache for single character one byte strings. 3006 // Allocate cache for single character one byte strings.
2963 { MaybeObject* maybe_obj = 3007 { MaybeObject* maybe_obj =
2964 AllocateFixedArray(String::kMaxOneByteCharCode + 1, TENURED); 3008 AllocateFixedArray(String::kMaxOneByteCharCode + 1, TENURED);
2965 if (!maybe_obj->ToObject(&obj)) return false; 3009 if (!maybe_obj->ToObject(&obj)) return false;
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
3144 index = 3188 index =
3145 ((index + kArrayEntriesPerCacheEntry) & (kRegExpResultsCacheSize - 1)); 3189 ((index + kArrayEntriesPerCacheEntry) & (kRegExpResultsCacheSize - 1));
3146 if (cache->get(index + kStringOffset) == key_string && 3190 if (cache->get(index + kStringOffset) == key_string &&
3147 cache->get(index + kPatternOffset) == key_pattern) { 3191 cache->get(index + kPatternOffset) == key_pattern) {
3148 return cache->get(index + kArrayOffset); 3192 return cache->get(index + kArrayOffset);
3149 } 3193 }
3150 return Smi::FromInt(0); 3194 return Smi::FromInt(0);
3151 } 3195 }
3152 3196
3153 3197
3154 void RegExpResultsCache::Enter(Isolate* isolate, 3198 void RegExpResultsCache::Enter(Heap* heap,
3155 Handle<String> key_string, 3199 String* key_string,
3156 Handle<Object> key_pattern, 3200 Object* key_pattern,
3157 Handle<FixedArray> value_array, 3201 FixedArray* value_array,
3158 ResultsCacheType type) { 3202 ResultsCacheType type) {
3159 Factory* factory = isolate->factory(); 3203 FixedArray* cache;
3160 Handle<FixedArray> cache;
3161 if (!key_string->IsInternalizedString()) return; 3204 if (!key_string->IsInternalizedString()) return;
3162 if (type == STRING_SPLIT_SUBSTRINGS) { 3205 if (type == STRING_SPLIT_SUBSTRINGS) {
3163 ASSERT(key_pattern->IsString()); 3206 ASSERT(key_pattern->IsString());
3164 if (!key_pattern->IsInternalizedString()) return; 3207 if (!key_pattern->IsInternalizedString()) return;
3165 cache = factory->string_split_cache(); 3208 cache = heap->string_split_cache();
3166 } else { 3209 } else {
3167 ASSERT(type == REGEXP_MULTIPLE_INDICES); 3210 ASSERT(type == REGEXP_MULTIPLE_INDICES);
3168 ASSERT(key_pattern->IsFixedArray()); 3211 ASSERT(key_pattern->IsFixedArray());
3169 cache = factory->regexp_multiple_cache(); 3212 cache = heap->regexp_multiple_cache();
3170 } 3213 }
3171 3214
3172 uint32_t hash = key_string->Hash(); 3215 uint32_t hash = key_string->Hash();
3173 uint32_t index = ((hash & (kRegExpResultsCacheSize - 1)) & 3216 uint32_t index = ((hash & (kRegExpResultsCacheSize - 1)) &
3174 ~(kArrayEntriesPerCacheEntry - 1)); 3217 ~(kArrayEntriesPerCacheEntry - 1));
3175 if (cache->get(index + kStringOffset) == Smi::FromInt(0)) { 3218 if (cache->get(index + kStringOffset) == Smi::FromInt(0)) {
3176 cache->set(index + kStringOffset, *key_string); 3219 cache->set(index + kStringOffset, key_string);
3177 cache->set(index + kPatternOffset, *key_pattern); 3220 cache->set(index + kPatternOffset, key_pattern);
3178 cache->set(index + kArrayOffset, *value_array); 3221 cache->set(index + kArrayOffset, value_array);
3179 } else { 3222 } else {
3180 uint32_t index2 = 3223 uint32_t index2 =
3181 ((index + kArrayEntriesPerCacheEntry) & (kRegExpResultsCacheSize - 1)); 3224 ((index + kArrayEntriesPerCacheEntry) & (kRegExpResultsCacheSize - 1));
3182 if (cache->get(index2 + kStringOffset) == Smi::FromInt(0)) { 3225 if (cache->get(index2 + kStringOffset) == Smi::FromInt(0)) {
3183 cache->set(index2 + kStringOffset, *key_string); 3226 cache->set(index2 + kStringOffset, key_string);
3184 cache->set(index2 + kPatternOffset, *key_pattern); 3227 cache->set(index2 + kPatternOffset, key_pattern);
3185 cache->set(index2 + kArrayOffset, *value_array); 3228 cache->set(index2 + kArrayOffset, value_array);
3186 } else { 3229 } else {
3187 cache->set(index2 + kStringOffset, Smi::FromInt(0)); 3230 cache->set(index2 + kStringOffset, Smi::FromInt(0));
3188 cache->set(index2 + kPatternOffset, Smi::FromInt(0)); 3231 cache->set(index2 + kPatternOffset, Smi::FromInt(0));
3189 cache->set(index2 + kArrayOffset, Smi::FromInt(0)); 3232 cache->set(index2 + kArrayOffset, Smi::FromInt(0));
3190 cache->set(index + kStringOffset, *key_string); 3233 cache->set(index + kStringOffset, key_string);
3191 cache->set(index + kPatternOffset, *key_pattern); 3234 cache->set(index + kPatternOffset, key_pattern);
3192 cache->set(index + kArrayOffset, *value_array); 3235 cache->set(index + kArrayOffset, value_array);
3193 } 3236 }
3194 } 3237 }
3195 // If the array is a reasonably short list of substrings, convert it into a 3238 // If the array is a reasonably short list of substrings, convert it into a
3196 // list of internalized strings. 3239 // list of internalized strings.
3197 if (type == STRING_SPLIT_SUBSTRINGS && value_array->length() < 100) { 3240 if (type == STRING_SPLIT_SUBSTRINGS && value_array->length() < 100) {
3198 for (int i = 0; i < value_array->length(); i++) { 3241 for (int i = 0; i < value_array->length(); i++) {
3199 Handle<String> str(String::cast(value_array->get(i)), isolate); 3242 String* str = String::cast(value_array->get(i));
3200 Handle<String> internalized_str = factory->InternalizeString(str); 3243 Object* internalized_str;
3201 value_array->set(i, *internalized_str); 3244 MaybeObject* maybe_string = heap->InternalizeString(str);
3245 if (maybe_string->ToObject(&internalized_str)) {
3246 value_array->set(i, internalized_str);
3247 }
3202 } 3248 }
3203 } 3249 }
3204 // Convert backing store to a copy-on-write array. 3250 // Convert backing store to a copy-on-write array.
3205 value_array->set_map_no_write_barrier(*factory->fixed_cow_array_map()); 3251 value_array->set_map_no_write_barrier(heap->fixed_cow_array_map());
3206 } 3252 }
3207 3253
3208 3254
3209 void RegExpResultsCache::Clear(FixedArray* cache) { 3255 void RegExpResultsCache::Clear(FixedArray* cache) {
3210 for (int i = 0; i < kRegExpResultsCacheSize; i++) { 3256 for (int i = 0; i < kRegExpResultsCacheSize; i++) {
3211 cache->set(i, Smi::FromInt(0)); 3257 cache->set(i, Smi::FromInt(0));
3212 } 3258 }
3213 } 3259 }
3214 3260
3215 3261
(...skipping 2703 matching lines...) Expand 10 before | Expand all | Expand 10 after
5919 } 5965 }
5920 5966
5921 5967
5922 bool Heap::CreateHeapObjects() { 5968 bool Heap::CreateHeapObjects() {
5923 // Create initial maps. 5969 // Create initial maps.
5924 if (!CreateInitialMaps()) return false; 5970 if (!CreateInitialMaps()) return false;
5925 if (!CreateApiObjects()) return false; 5971 if (!CreateApiObjects()) return false;
5926 5972
5927 // Create initial objects 5973 // Create initial objects
5928 if (!CreateInitialObjects()) return false; 5974 if (!CreateInitialObjects()) return false;
5929 CHECK_EQ(0, gc_count_);
5930 5975
5931 native_contexts_list_ = undefined_value(); 5976 native_contexts_list_ = undefined_value();
5932 array_buffers_list_ = undefined_value(); 5977 array_buffers_list_ = undefined_value();
5933 allocation_sites_list_ = undefined_value(); 5978 allocation_sites_list_ = undefined_value();
5934 weak_object_to_code_table_ = undefined_value(); 5979 weak_object_to_code_table_ = undefined_value();
5980
5981 HandleScope scope(isolate());
5982 Runtime::InitializeIntrinsicFunctionNames(
5983 isolate(), handle(intrinsic_function_names(), isolate()));
5984
5935 return true; 5985 return true;
5936 } 5986 }
5937 5987
5938 5988
5939 void Heap::SetStackLimits() { 5989 void Heap::SetStackLimits() {
5940 ASSERT(isolate_ != NULL); 5990 ASSERT(isolate_ != NULL);
5941 ASSERT(isolate_ == isolate()); 5991 ASSERT(isolate_ == isolate());
5942 // On 64 bit machines, pointers are generally out of range of Smis. We write 5992 // On 64 bit machines, pointers are generally out of range of Smis. We write
5943 // something that looks like an out of range Smi to the GC. 5993 // something that looks like an out of range Smi to the GC.
5944 5994
(...skipping 1163 matching lines...) Expand 10 before | Expand all | Expand 10 after
7108 static_cast<int>(object_sizes_last_time_[index])); 7158 static_cast<int>(object_sizes_last_time_[index]));
7109 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT) 7159 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT)
7110 #undef ADJUST_LAST_TIME_OBJECT_COUNT 7160 #undef ADJUST_LAST_TIME_OBJECT_COUNT
7111 7161
7112 OS::MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); 7162 OS::MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_));
7113 OS::MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); 7163 OS::MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_));
7114 ClearObjectStats(); 7164 ClearObjectStats();
7115 } 7165 }
7116 7166
7117 } } // namespace v8::internal 7167 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/heap.h ('k') | src/objects.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698