OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/heap/heap.h" | 5 #include "src/heap/heap.h" |
6 | 6 |
7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
8 #include "src/api.h" | 8 #include "src/api.h" |
9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
10 #include "src/base/once.h" | 10 #include "src/base/once.h" |
(...skipping 2346 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2357 } | 2357 } |
2358 | 2358 |
2359 | 2359 |
2360 AllocationResult Heap::AllocateHeapNumber(double value, MutableMode mode, | 2360 AllocationResult Heap::AllocateHeapNumber(double value, MutableMode mode, |
2361 PretenureFlag pretenure) { | 2361 PretenureFlag pretenure) { |
2362 // Statically ensure that it is safe to allocate heap numbers in paged | 2362 // Statically ensure that it is safe to allocate heap numbers in paged |
2363 // spaces. | 2363 // spaces. |
2364 int size = HeapNumber::kSize; | 2364 int size = HeapNumber::kSize; |
2365 STATIC_ASSERT(HeapNumber::kSize <= Page::kMaxRegularHeapObjectSize); | 2365 STATIC_ASSERT(HeapNumber::kSize <= Page::kMaxRegularHeapObjectSize); |
2366 | 2366 |
2367 AllocationSpace space = SelectSpace(pretenure); | 2367 AllocationSpace space = SelectSpace(size, pretenure); |
2368 | 2368 |
2369 HeapObject* result = nullptr; | 2369 HeapObject* result = nullptr; |
2370 { | 2370 { |
2371 AllocationResult allocation = | 2371 AllocationResult allocation = |
2372 AllocateRaw(size, space, OLD_SPACE, kDoubleUnaligned); | 2372 AllocateRaw(size, space, OLD_SPACE, kDoubleUnaligned); |
2373 if (!allocation.To(&result)) return allocation; | 2373 if (!allocation.To(&result)) return allocation; |
2374 } | 2374 } |
2375 | 2375 |
2376 Map* map = mode == MUTABLE ? mutable_heap_number_map() : heap_number_map(); | 2376 Map* map = mode == MUTABLE ? mutable_heap_number_map() : heap_number_map(); |
2377 HeapObject::cast(result)->set_map_no_write_barrier(map); | 2377 HeapObject::cast(result)->set_map_no_write_barrier(map); |
2378 HeapNumber::cast(result)->set_value(value); | 2378 HeapNumber::cast(result)->set_value(value); |
2379 return result; | 2379 return result; |
2380 } | 2380 } |
2381 | 2381 |
2382 #define SIMD_ALLOCATE_DEFINITION(TYPE, Type, type, lane_count, lane_type) \ | 2382 #define SIMD_ALLOCATE_DEFINITION(TYPE, Type, type, lane_count, lane_type) \ |
2383 AllocationResult Heap::Allocate##Type(lane_type lanes[lane_count], \ | 2383 AllocationResult Heap::Allocate##Type(lane_type lanes[lane_count], \ |
2384 PretenureFlag pretenure) { \ | 2384 PretenureFlag pretenure) { \ |
2385 int size = Type::kSize; \ | 2385 int size = Type::kSize; \ |
2386 STATIC_ASSERT(Type::kSize <= Page::kMaxRegularHeapObjectSize); \ | 2386 STATIC_ASSERT(Type::kSize <= Page::kMaxRegularHeapObjectSize); \ |
2387 \ | 2387 \ |
2388 AllocationSpace space = SelectSpace(pretenure); \ | 2388 AllocationSpace space = SelectSpace(size, pretenure); \ |
2389 \ | 2389 \ |
2390 HeapObject* result = nullptr; \ | 2390 HeapObject* result = nullptr; \ |
2391 { \ | 2391 { \ |
2392 AllocationResult allocation = \ | 2392 AllocationResult allocation = \ |
2393 AllocateRaw(size, space, OLD_SPACE, kSimd128Unaligned); \ | 2393 AllocateRaw(size, space, OLD_SPACE, kSimd128Unaligned); \ |
2394 if (!allocation.To(&result)) return allocation; \ | 2394 if (!allocation.To(&result)) return allocation; \ |
2395 } \ | 2395 } \ |
2396 \ | 2396 \ |
2397 result->set_map_no_write_barrier(type##_map()); \ | 2397 result->set_map_no_write_barrier(type##_map()); \ |
2398 Type* instance = Type::cast(result); \ | 2398 Type* instance = Type::cast(result); \ |
(...skipping 517 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2916 result->set_foreign_address(address); | 2916 result->set_foreign_address(address); |
2917 return result; | 2917 return result; |
2918 } | 2918 } |
2919 | 2919 |
2920 | 2920 |
2921 AllocationResult Heap::AllocateByteArray(int length, PretenureFlag pretenure) { | 2921 AllocationResult Heap::AllocateByteArray(int length, PretenureFlag pretenure) { |
2922 if (length < 0 || length > ByteArray::kMaxLength) { | 2922 if (length < 0 || length > ByteArray::kMaxLength) { |
2923 v8::internal::Heap::FatalProcessOutOfMemory("invalid array length", true); | 2923 v8::internal::Heap::FatalProcessOutOfMemory("invalid array length", true); |
2924 } | 2924 } |
2925 int size = ByteArray::SizeFor(length); | 2925 int size = ByteArray::SizeFor(length); |
2926 AllocationSpace space = SelectSpace(pretenure); | 2926 AllocationSpace space = SelectSpace(size, pretenure); |
2927 HeapObject* result = nullptr; | 2927 HeapObject* result = nullptr; |
2928 { | 2928 { |
2929 AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE); | 2929 AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE); |
2930 if (!allocation.To(&result)) return allocation; | 2930 if (!allocation.To(&result)) return allocation; |
2931 } | 2931 } |
2932 | 2932 |
2933 result->set_map_no_write_barrier(byte_array_map()); | 2933 result->set_map_no_write_barrier(byte_array_map()); |
2934 ByteArray::cast(result)->set_length(length); | 2934 ByteArray::cast(result)->set_length(length); |
2935 return result; | 2935 return result; |
2936 } | 2936 } |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3127 if (profiler->is_tracking_allocations()) { | 3127 if (profiler->is_tracking_allocations()) { |
3128 profiler->UpdateObjectSizeEvent(object->address(), object->Size()); | 3128 profiler->UpdateObjectSizeEvent(object->address(), object->Size()); |
3129 } | 3129 } |
3130 } | 3130 } |
3131 | 3131 |
3132 | 3132 |
3133 AllocationResult Heap::AllocateFixedTypedArrayWithExternalPointer( | 3133 AllocationResult Heap::AllocateFixedTypedArrayWithExternalPointer( |
3134 int length, ExternalArrayType array_type, void* external_pointer, | 3134 int length, ExternalArrayType array_type, void* external_pointer, |
3135 PretenureFlag pretenure) { | 3135 PretenureFlag pretenure) { |
3136 int size = FixedTypedArrayBase::kHeaderSize; | 3136 int size = FixedTypedArrayBase::kHeaderSize; |
3137 AllocationSpace space = SelectSpace(pretenure); | 3137 AllocationSpace space = SelectSpace(size, pretenure); |
3138 HeapObject* result = nullptr; | 3138 HeapObject* result = nullptr; |
3139 { | 3139 { |
3140 AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE); | 3140 AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE); |
3141 if (!allocation.To(&result)) return allocation; | 3141 if (!allocation.To(&result)) return allocation; |
3142 } | 3142 } |
3143 | 3143 |
3144 result->set_map_no_write_barrier(MapForFixedTypedArray(array_type)); | 3144 result->set_map_no_write_barrier(MapForFixedTypedArray(array_type)); |
3145 FixedTypedArrayBase* elements = FixedTypedArrayBase::cast(result); | 3145 FixedTypedArrayBase* elements = FixedTypedArrayBase::cast(result); |
3146 elements->set_base_pointer(Smi::FromInt(0), SKIP_WRITE_BARRIER); | 3146 elements->set_base_pointer(Smi::FromInt(0), SKIP_WRITE_BARRIER); |
3147 elements->set_external_pointer(external_pointer, SKIP_WRITE_BARRIER); | 3147 elements->set_external_pointer(external_pointer, SKIP_WRITE_BARRIER); |
(...skipping 23 matching lines...) Expand all Loading... |
3171 | 3171 |
3172 AllocationResult Heap::AllocateFixedTypedArray(int length, | 3172 AllocationResult Heap::AllocateFixedTypedArray(int length, |
3173 ExternalArrayType array_type, | 3173 ExternalArrayType array_type, |
3174 bool initialize, | 3174 bool initialize, |
3175 PretenureFlag pretenure) { | 3175 PretenureFlag pretenure) { |
3176 int element_size; | 3176 int element_size; |
3177 ElementsKind elements_kind; | 3177 ElementsKind elements_kind; |
3178 ForFixedTypedArray(array_type, &element_size, &elements_kind); | 3178 ForFixedTypedArray(array_type, &element_size, &elements_kind); |
3179 int size = OBJECT_POINTER_ALIGN(length * element_size + | 3179 int size = OBJECT_POINTER_ALIGN(length * element_size + |
3180 FixedTypedArrayBase::kDataOffset); | 3180 FixedTypedArrayBase::kDataOffset); |
3181 AllocationSpace space = SelectSpace(pretenure); | 3181 AllocationSpace space = SelectSpace(size, pretenure); |
3182 | 3182 |
3183 HeapObject* object = nullptr; | 3183 HeapObject* object = nullptr; |
3184 AllocationResult allocation = AllocateRaw( | 3184 AllocationResult allocation = AllocateRaw( |
3185 size, space, OLD_SPACE, | 3185 size, space, OLD_SPACE, |
3186 array_type == kExternalFloat64Array ? kDoubleAligned : kWordAligned); | 3186 array_type == kExternalFloat64Array ? kDoubleAligned : kWordAligned); |
3187 if (!allocation.To(&object)) return allocation; | 3187 if (!allocation.To(&object)) return allocation; |
3188 | 3188 |
3189 object->set_map_no_write_barrier(MapForFixedTypedArray(array_type)); | 3189 object->set_map_no_write_barrier(MapForFixedTypedArray(array_type)); |
3190 FixedTypedArrayBase* elements = FixedTypedArrayBase::cast(object); | 3190 FixedTypedArrayBase* elements = FixedTypedArrayBase::cast(object); |
3191 elements->set_base_pointer(elements, SKIP_WRITE_BARRIER); | 3191 elements->set_base_pointer(elements, SKIP_WRITE_BARRIER); |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3386 | 3386 |
3387 // Both types of global objects should be allocated using | 3387 // Both types of global objects should be allocated using |
3388 // AllocateGlobalObject to be properly initialized. | 3388 // AllocateGlobalObject to be properly initialized. |
3389 DCHECK(map->instance_type() != JS_GLOBAL_OBJECT_TYPE); | 3389 DCHECK(map->instance_type() != JS_GLOBAL_OBJECT_TYPE); |
3390 DCHECK(map->instance_type() != JS_BUILTINS_OBJECT_TYPE); | 3390 DCHECK(map->instance_type() != JS_BUILTINS_OBJECT_TYPE); |
3391 | 3391 |
3392 // Allocate the backing storage for the properties. | 3392 // Allocate the backing storage for the properties. |
3393 FixedArray* properties = empty_fixed_array(); | 3393 FixedArray* properties = empty_fixed_array(); |
3394 | 3394 |
3395 // Allocate the JSObject. | 3395 // Allocate the JSObject. |
3396 AllocationSpace space = SelectSpace(pretenure); | 3396 int size = map->instance_size(); |
| 3397 AllocationSpace space = SelectSpace(size, pretenure); |
3397 JSObject* js_obj = nullptr; | 3398 JSObject* js_obj = nullptr; |
3398 AllocationResult allocation = Allocate(map, space, allocation_site); | 3399 AllocationResult allocation = Allocate(map, space, allocation_site); |
3399 if (!allocation.To(&js_obj)) return allocation; | 3400 if (!allocation.To(&js_obj)) return allocation; |
3400 | 3401 |
3401 // Initialize the JSObject. | 3402 // Initialize the JSObject. |
3402 InitializeJSObjectFromMap(js_obj, properties, map); | 3403 InitializeJSObjectFromMap(js_obj, properties, map); |
3403 DCHECK(js_obj->HasFastElements() || js_obj->HasFixedTypedArrayElements()); | 3404 DCHECK(js_obj->HasFastElements() || js_obj->HasFixedTypedArrayElements()); |
3404 return js_obj; | 3405 return js_obj; |
3405 } | 3406 } |
3406 | 3407 |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3587 | 3588 |
3588 DCHECK_LE(0, chars); | 3589 DCHECK_LE(0, chars); |
3589 DCHECK_GE(String::kMaxLength, chars); | 3590 DCHECK_GE(String::kMaxLength, chars); |
3590 if (is_one_byte) { | 3591 if (is_one_byte) { |
3591 map = one_byte_internalized_string_map(); | 3592 map = one_byte_internalized_string_map(); |
3592 size = SeqOneByteString::SizeFor(chars); | 3593 size = SeqOneByteString::SizeFor(chars); |
3593 } else { | 3594 } else { |
3594 map = internalized_string_map(); | 3595 map = internalized_string_map(); |
3595 size = SeqTwoByteString::SizeFor(chars); | 3596 size = SeqTwoByteString::SizeFor(chars); |
3596 } | 3597 } |
| 3598 AllocationSpace space = SelectSpace(size, TENURED); |
3597 | 3599 |
3598 // Allocate string. | 3600 // Allocate string. |
3599 HeapObject* result = nullptr; | 3601 HeapObject* result = nullptr; |
3600 { | 3602 { |
3601 AllocationResult allocation = AllocateRaw(size, OLD_SPACE, OLD_SPACE); | 3603 AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE); |
3602 if (!allocation.To(&result)) return allocation; | 3604 if (!allocation.To(&result)) return allocation; |
3603 } | 3605 } |
3604 | 3606 |
3605 result->set_map_no_write_barrier(map); | 3607 result->set_map_no_write_barrier(map); |
3606 // Set length and hash fields of the allocated string. | 3608 // Set length and hash fields of the allocated string. |
3607 String* answer = String::cast(result); | 3609 String* answer = String::cast(result); |
3608 answer->set_length(chars); | 3610 answer->set_length(chars); |
3609 answer->set_hash_field(hash_field); | 3611 answer->set_hash_field(hash_field); |
3610 | 3612 |
3611 DCHECK_EQ(size, answer->Size()); | 3613 DCHECK_EQ(size, answer->Size()); |
(...skipping 17 matching lines...) Expand all Loading... |
3629 template AllocationResult Heap::AllocateInternalizedStringImpl<false>( | 3631 template AllocationResult Heap::AllocateInternalizedStringImpl<false>( |
3630 Vector<const char>, int, uint32_t); | 3632 Vector<const char>, int, uint32_t); |
3631 | 3633 |
3632 | 3634 |
3633 AllocationResult Heap::AllocateRawOneByteString(int length, | 3635 AllocationResult Heap::AllocateRawOneByteString(int length, |
3634 PretenureFlag pretenure) { | 3636 PretenureFlag pretenure) { |
3635 DCHECK_LE(0, length); | 3637 DCHECK_LE(0, length); |
3636 DCHECK_GE(String::kMaxLength, length); | 3638 DCHECK_GE(String::kMaxLength, length); |
3637 int size = SeqOneByteString::SizeFor(length); | 3639 int size = SeqOneByteString::SizeFor(length); |
3638 DCHECK(size <= SeqOneByteString::kMaxSize); | 3640 DCHECK(size <= SeqOneByteString::kMaxSize); |
3639 AllocationSpace space = SelectSpace(pretenure); | 3641 AllocationSpace space = SelectSpace(size, pretenure); |
3640 | 3642 |
3641 HeapObject* result = nullptr; | 3643 HeapObject* result = nullptr; |
3642 { | 3644 { |
3643 AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE); | 3645 AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE); |
3644 if (!allocation.To(&result)) return allocation; | 3646 if (!allocation.To(&result)) return allocation; |
3645 } | 3647 } |
3646 | 3648 |
3647 // Partially initialize the object. | 3649 // Partially initialize the object. |
3648 result->set_map_no_write_barrier(one_byte_string_map()); | 3650 result->set_map_no_write_barrier(one_byte_string_map()); |
3649 String::cast(result)->set_length(length); | 3651 String::cast(result)->set_length(length); |
3650 String::cast(result)->set_hash_field(String::kEmptyHashField); | 3652 String::cast(result)->set_hash_field(String::kEmptyHashField); |
3651 DCHECK_EQ(size, HeapObject::cast(result)->Size()); | 3653 DCHECK_EQ(size, HeapObject::cast(result)->Size()); |
3652 | 3654 |
3653 return result; | 3655 return result; |
3654 } | 3656 } |
3655 | 3657 |
3656 | 3658 |
3657 AllocationResult Heap::AllocateRawTwoByteString(int length, | 3659 AllocationResult Heap::AllocateRawTwoByteString(int length, |
3658 PretenureFlag pretenure) { | 3660 PretenureFlag pretenure) { |
3659 DCHECK_LE(0, length); | 3661 DCHECK_LE(0, length); |
3660 DCHECK_GE(String::kMaxLength, length); | 3662 DCHECK_GE(String::kMaxLength, length); |
3661 int size = SeqTwoByteString::SizeFor(length); | 3663 int size = SeqTwoByteString::SizeFor(length); |
3662 DCHECK(size <= SeqTwoByteString::kMaxSize); | 3664 DCHECK(size <= SeqTwoByteString::kMaxSize); |
3663 AllocationSpace space = SelectSpace(pretenure); | 3665 AllocationSpace space = SelectSpace(size, pretenure); |
3664 | 3666 |
3665 HeapObject* result = nullptr; | 3667 HeapObject* result = nullptr; |
3666 { | 3668 { |
3667 AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE); | 3669 AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE); |
3668 if (!allocation.To(&result)) return allocation; | 3670 if (!allocation.To(&result)) return allocation; |
3669 } | 3671 } |
3670 | 3672 |
3671 // Partially initialize the object. | 3673 // Partially initialize the object. |
3672 result->set_map_no_write_barrier(string_map()); | 3674 result->set_map_no_write_barrier(string_map()); |
3673 String::cast(result)->set_length(length); | 3675 String::cast(result)->set_length(length); |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3788 return obj; | 3790 return obj; |
3789 } | 3791 } |
3790 | 3792 |
3791 | 3793 |
3792 AllocationResult Heap::AllocateRawFixedArray(int length, | 3794 AllocationResult Heap::AllocateRawFixedArray(int length, |
3793 PretenureFlag pretenure) { | 3795 PretenureFlag pretenure) { |
3794 if (length < 0 || length > FixedArray::kMaxLength) { | 3796 if (length < 0 || length > FixedArray::kMaxLength) { |
3795 v8::internal::Heap::FatalProcessOutOfMemory("invalid array length", true); | 3797 v8::internal::Heap::FatalProcessOutOfMemory("invalid array length", true); |
3796 } | 3798 } |
3797 int size = FixedArray::SizeFor(length); | 3799 int size = FixedArray::SizeFor(length); |
3798 AllocationSpace space = SelectSpace(pretenure); | 3800 AllocationSpace space = SelectSpace(size, pretenure); |
3799 | 3801 |
3800 return AllocateRaw(size, space, OLD_SPACE); | 3802 return AllocateRaw(size, space, OLD_SPACE); |
3801 } | 3803 } |
3802 | 3804 |
3803 | 3805 |
3804 AllocationResult Heap::AllocateFixedArrayWithFiller(int length, | 3806 AllocationResult Heap::AllocateFixedArrayWithFiller(int length, |
3805 PretenureFlag pretenure, | 3807 PretenureFlag pretenure, |
3806 Object* filler) { | 3808 Object* filler) { |
3807 DCHECK(length >= 0); | 3809 DCHECK(length >= 0); |
3808 DCHECK(empty_fixed_array()->IsFixedArray()); | 3810 DCHECK(empty_fixed_array()->IsFixedArray()); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3857 } | 3859 } |
3858 | 3860 |
3859 | 3861 |
3860 AllocationResult Heap::AllocateRawFixedDoubleArray(int length, | 3862 AllocationResult Heap::AllocateRawFixedDoubleArray(int length, |
3861 PretenureFlag pretenure) { | 3863 PretenureFlag pretenure) { |
3862 if (length < 0 || length > FixedDoubleArray::kMaxLength) { | 3864 if (length < 0 || length > FixedDoubleArray::kMaxLength) { |
3863 v8::internal::Heap::FatalProcessOutOfMemory("invalid array length", | 3865 v8::internal::Heap::FatalProcessOutOfMemory("invalid array length", |
3864 kDoubleAligned); | 3866 kDoubleAligned); |
3865 } | 3867 } |
3866 int size = FixedDoubleArray::SizeFor(length); | 3868 int size = FixedDoubleArray::SizeFor(length); |
3867 AllocationSpace space = SelectSpace(pretenure); | 3869 AllocationSpace space = SelectSpace(size, pretenure); |
3868 | 3870 |
3869 HeapObject* object = nullptr; | 3871 HeapObject* object = nullptr; |
3870 { | 3872 { |
3871 AllocationResult allocation = | 3873 AllocationResult allocation = |
3872 AllocateRaw(size, space, OLD_SPACE, kDoubleAligned); | 3874 AllocateRaw(size, space, OLD_SPACE, kDoubleAligned); |
3873 if (!allocation.To(&object)) return allocation; | 3875 if (!allocation.To(&object)) return allocation; |
3874 } | 3876 } |
3875 | 3877 |
3876 return object; | 3878 return object; |
3877 } | 3879 } |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3914 case NAME##_TYPE: \ | 3916 case NAME##_TYPE: \ |
3915 map = name##_map(); \ | 3917 map = name##_map(); \ |
3916 break; | 3918 break; |
3917 STRUCT_LIST(MAKE_CASE) | 3919 STRUCT_LIST(MAKE_CASE) |
3918 #undef MAKE_CASE | 3920 #undef MAKE_CASE |
3919 default: | 3921 default: |
3920 UNREACHABLE(); | 3922 UNREACHABLE(); |
3921 return exception(); | 3923 return exception(); |
3922 } | 3924 } |
3923 int size = map->instance_size(); | 3925 int size = map->instance_size(); |
| 3926 AllocationSpace space = SelectSpace(size, TENURED); |
3924 Struct* result = nullptr; | 3927 Struct* result = nullptr; |
3925 { | 3928 { |
3926 AllocationResult allocation = Allocate(map, OLD_SPACE); | 3929 AllocationResult allocation = Allocate(map, space); |
3927 if (!allocation.To(&result)) return allocation; | 3930 if (!allocation.To(&result)) return allocation; |
3928 } | 3931 } |
3929 result->InitializeBody(size); | 3932 result->InitializeBody(size); |
3930 return result; | 3933 return result; |
3931 } | 3934 } |
3932 | 3935 |
3933 | 3936 |
3934 bool Heap::IsHeapIterable() { | 3937 bool Heap::IsHeapIterable() { |
3935 // TODO(hpayer): This function is not correct. Allocation folding in old | 3938 // TODO(hpayer): This function is not correct. Allocation folding in old |
3936 // space breaks the iterability. | 3939 // space breaks the iterability. |
(...skipping 2165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6102 } | 6105 } |
6103 | 6106 |
6104 | 6107 |
6105 // static | 6108 // static |
6106 int Heap::GetStaticVisitorIdForMap(Map* map) { | 6109 int Heap::GetStaticVisitorIdForMap(Map* map) { |
6107 return StaticVisitorBase::GetVisitorId(map); | 6110 return StaticVisitorBase::GetVisitorId(map); |
6108 } | 6111 } |
6109 | 6112 |
6110 } // namespace internal | 6113 } // namespace internal |
6111 } // namespace v8 | 6114 } // namespace v8 |
OLD | NEW |