| 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 2354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2365 } | 2365 } |
| 2366 | 2366 |
| 2367 | 2367 |
| 2368 AllocationResult Heap::AllocateHeapNumber(double value, MutableMode mode, | 2368 AllocationResult Heap::AllocateHeapNumber(double value, MutableMode mode, |
| 2369 PretenureFlag pretenure) { | 2369 PretenureFlag pretenure) { |
| 2370 // Statically ensure that it is safe to allocate heap numbers in paged | 2370 // Statically ensure that it is safe to allocate heap numbers in paged |
| 2371 // spaces. | 2371 // spaces. |
| 2372 int size = HeapNumber::kSize; | 2372 int size = HeapNumber::kSize; |
| 2373 STATIC_ASSERT(HeapNumber::kSize <= Page::kMaxRegularHeapObjectSize); | 2373 STATIC_ASSERT(HeapNumber::kSize <= Page::kMaxRegularHeapObjectSize); |
| 2374 | 2374 |
| 2375 AllocationSpace space = SelectSpace(size, pretenure); | 2375 AllocationSpace space = SelectSpace(pretenure); |
| 2376 | 2376 |
| 2377 HeapObject* result = nullptr; | 2377 HeapObject* result = nullptr; |
| 2378 { | 2378 { |
| 2379 AllocationResult allocation = | 2379 AllocationResult allocation = |
| 2380 AllocateRaw(size, space, OLD_SPACE, kDoubleUnaligned); | 2380 AllocateRaw(size, space, OLD_SPACE, kDoubleUnaligned); |
| 2381 if (!allocation.To(&result)) return allocation; | 2381 if (!allocation.To(&result)) return allocation; |
| 2382 } | 2382 } |
| 2383 | 2383 |
| 2384 Map* map = mode == MUTABLE ? mutable_heap_number_map() : heap_number_map(); | 2384 Map* map = mode == MUTABLE ? mutable_heap_number_map() : heap_number_map(); |
| 2385 HeapObject::cast(result)->set_map_no_write_barrier(map); | 2385 HeapObject::cast(result)->set_map_no_write_barrier(map); |
| 2386 HeapNumber::cast(result)->set_value(value); | 2386 HeapNumber::cast(result)->set_value(value); |
| 2387 return result; | 2387 return result; |
| 2388 } | 2388 } |
| 2389 | 2389 |
| 2390 #define SIMD_ALLOCATE_DEFINITION(TYPE, Type, type, lane_count, lane_type) \ | 2390 #define SIMD_ALLOCATE_DEFINITION(TYPE, Type, type, lane_count, lane_type) \ |
| 2391 AllocationResult Heap::Allocate##Type(lane_type lanes[lane_count], \ | 2391 AllocationResult Heap::Allocate##Type(lane_type lanes[lane_count], \ |
| 2392 PretenureFlag pretenure) { \ | 2392 PretenureFlag pretenure) { \ |
| 2393 int size = Type::kSize; \ | 2393 int size = Type::kSize; \ |
| 2394 STATIC_ASSERT(Type::kSize <= Page::kMaxRegularHeapObjectSize); \ | 2394 STATIC_ASSERT(Type::kSize <= Page::kMaxRegularHeapObjectSize); \ |
| 2395 \ | 2395 \ |
| 2396 AllocationSpace space = SelectSpace(size, pretenure); \ | 2396 AllocationSpace space = SelectSpace(pretenure); \ |
| 2397 \ | 2397 \ |
| 2398 HeapObject* result = nullptr; \ | 2398 HeapObject* result = nullptr; \ |
| 2399 { \ | 2399 { \ |
| 2400 AllocationResult allocation = \ | 2400 AllocationResult allocation = \ |
| 2401 AllocateRaw(size, space, OLD_SPACE, kSimd128Unaligned); \ | 2401 AllocateRaw(size, space, OLD_SPACE, kSimd128Unaligned); \ |
| 2402 if (!allocation.To(&result)) return allocation; \ | 2402 if (!allocation.To(&result)) return allocation; \ |
| 2403 } \ | 2403 } \ |
| 2404 \ | 2404 \ |
| 2405 result->set_map_no_write_barrier(type##_map()); \ | 2405 result->set_map_no_write_barrier(type##_map()); \ |
| 2406 Type* instance = Type::cast(result); \ | 2406 Type* instance = Type::cast(result); \ |
| (...skipping 517 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2924 result->set_foreign_address(address); | 2924 result->set_foreign_address(address); |
| 2925 return result; | 2925 return result; |
| 2926 } | 2926 } |
| 2927 | 2927 |
| 2928 | 2928 |
| 2929 AllocationResult Heap::AllocateByteArray(int length, PretenureFlag pretenure) { | 2929 AllocationResult Heap::AllocateByteArray(int length, PretenureFlag pretenure) { |
| 2930 if (length < 0 || length > ByteArray::kMaxLength) { | 2930 if (length < 0 || length > ByteArray::kMaxLength) { |
| 2931 v8::internal::Heap::FatalProcessOutOfMemory("invalid array length", true); | 2931 v8::internal::Heap::FatalProcessOutOfMemory("invalid array length", true); |
| 2932 } | 2932 } |
| 2933 int size = ByteArray::SizeFor(length); | 2933 int size = ByteArray::SizeFor(length); |
| 2934 AllocationSpace space = SelectSpace(size, pretenure); | 2934 AllocationSpace space = SelectSpace(pretenure); |
| 2935 HeapObject* result = nullptr; | 2935 HeapObject* result = nullptr; |
| 2936 { | 2936 { |
| 2937 AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE); | 2937 AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE); |
| 2938 if (!allocation.To(&result)) return allocation; | 2938 if (!allocation.To(&result)) return allocation; |
| 2939 } | 2939 } |
| 2940 | 2940 |
| 2941 result->set_map_no_write_barrier(byte_array_map()); | 2941 result->set_map_no_write_barrier(byte_array_map()); |
| 2942 ByteArray::cast(result)->set_length(length); | 2942 ByteArray::cast(result)->set_length(length); |
| 2943 return result; | 2943 return result; |
| 2944 } | 2944 } |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3135 if (profiler->is_tracking_allocations()) { | 3135 if (profiler->is_tracking_allocations()) { |
| 3136 profiler->UpdateObjectSizeEvent(object->address(), object->Size()); | 3136 profiler->UpdateObjectSizeEvent(object->address(), object->Size()); |
| 3137 } | 3137 } |
| 3138 } | 3138 } |
| 3139 | 3139 |
| 3140 | 3140 |
| 3141 AllocationResult Heap::AllocateFixedTypedArrayWithExternalPointer( | 3141 AllocationResult Heap::AllocateFixedTypedArrayWithExternalPointer( |
| 3142 int length, ExternalArrayType array_type, void* external_pointer, | 3142 int length, ExternalArrayType array_type, void* external_pointer, |
| 3143 PretenureFlag pretenure) { | 3143 PretenureFlag pretenure) { |
| 3144 int size = FixedTypedArrayBase::kHeaderSize; | 3144 int size = FixedTypedArrayBase::kHeaderSize; |
| 3145 AllocationSpace space = SelectSpace(size, pretenure); | 3145 AllocationSpace space = SelectSpace(pretenure); |
| 3146 HeapObject* result = nullptr; | 3146 HeapObject* result = nullptr; |
| 3147 { | 3147 { |
| 3148 AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE); | 3148 AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE); |
| 3149 if (!allocation.To(&result)) return allocation; | 3149 if (!allocation.To(&result)) return allocation; |
| 3150 } | 3150 } |
| 3151 | 3151 |
| 3152 result->set_map_no_write_barrier(MapForFixedTypedArray(array_type)); | 3152 result->set_map_no_write_barrier(MapForFixedTypedArray(array_type)); |
| 3153 FixedTypedArrayBase* elements = FixedTypedArrayBase::cast(result); | 3153 FixedTypedArrayBase* elements = FixedTypedArrayBase::cast(result); |
| 3154 elements->set_base_pointer(Smi::FromInt(0), SKIP_WRITE_BARRIER); | 3154 elements->set_base_pointer(Smi::FromInt(0), SKIP_WRITE_BARRIER); |
| 3155 elements->set_external_pointer(external_pointer, SKIP_WRITE_BARRIER); | 3155 elements->set_external_pointer(external_pointer, SKIP_WRITE_BARRIER); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 3179 | 3179 |
| 3180 AllocationResult Heap::AllocateFixedTypedArray(int length, | 3180 AllocationResult Heap::AllocateFixedTypedArray(int length, |
| 3181 ExternalArrayType array_type, | 3181 ExternalArrayType array_type, |
| 3182 bool initialize, | 3182 bool initialize, |
| 3183 PretenureFlag pretenure) { | 3183 PretenureFlag pretenure) { |
| 3184 int element_size; | 3184 int element_size; |
| 3185 ElementsKind elements_kind; | 3185 ElementsKind elements_kind; |
| 3186 ForFixedTypedArray(array_type, &element_size, &elements_kind); | 3186 ForFixedTypedArray(array_type, &element_size, &elements_kind); |
| 3187 int size = OBJECT_POINTER_ALIGN(length * element_size + | 3187 int size = OBJECT_POINTER_ALIGN(length * element_size + |
| 3188 FixedTypedArrayBase::kDataOffset); | 3188 FixedTypedArrayBase::kDataOffset); |
| 3189 AllocationSpace space = SelectSpace(size, pretenure); | 3189 AllocationSpace space = SelectSpace(pretenure); |
| 3190 | 3190 |
| 3191 HeapObject* object = nullptr; | 3191 HeapObject* object = nullptr; |
| 3192 AllocationResult allocation = AllocateRaw( | 3192 AllocationResult allocation = AllocateRaw( |
| 3193 size, space, OLD_SPACE, | 3193 size, space, OLD_SPACE, |
| 3194 array_type == kExternalFloat64Array ? kDoubleAligned : kWordAligned); | 3194 array_type == kExternalFloat64Array ? kDoubleAligned : kWordAligned); |
| 3195 if (!allocation.To(&object)) return allocation; | 3195 if (!allocation.To(&object)) return allocation; |
| 3196 | 3196 |
| 3197 object->set_map_no_write_barrier(MapForFixedTypedArray(array_type)); | 3197 object->set_map_no_write_barrier(MapForFixedTypedArray(array_type)); |
| 3198 FixedTypedArrayBase* elements = FixedTypedArrayBase::cast(object); | 3198 FixedTypedArrayBase* elements = FixedTypedArrayBase::cast(object); |
| 3199 elements->set_base_pointer(elements, SKIP_WRITE_BARRIER); | 3199 elements->set_base_pointer(elements, SKIP_WRITE_BARRIER); |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3394 | 3394 |
| 3395 // Both types of global objects should be allocated using | 3395 // Both types of global objects should be allocated using |
| 3396 // AllocateGlobalObject to be properly initialized. | 3396 // AllocateGlobalObject to be properly initialized. |
| 3397 DCHECK(map->instance_type() != JS_GLOBAL_OBJECT_TYPE); | 3397 DCHECK(map->instance_type() != JS_GLOBAL_OBJECT_TYPE); |
| 3398 DCHECK(map->instance_type() != JS_BUILTINS_OBJECT_TYPE); | 3398 DCHECK(map->instance_type() != JS_BUILTINS_OBJECT_TYPE); |
| 3399 | 3399 |
| 3400 // Allocate the backing storage for the properties. | 3400 // Allocate the backing storage for the properties. |
| 3401 FixedArray* properties = empty_fixed_array(); | 3401 FixedArray* properties = empty_fixed_array(); |
| 3402 | 3402 |
| 3403 // Allocate the JSObject. | 3403 // Allocate the JSObject. |
| 3404 int size = map->instance_size(); | 3404 AllocationSpace space = SelectSpace(pretenure); |
| 3405 AllocationSpace space = SelectSpace(size, pretenure); | |
| 3406 JSObject* js_obj = nullptr; | 3405 JSObject* js_obj = nullptr; |
| 3407 AllocationResult allocation = Allocate(map, space, allocation_site); | 3406 AllocationResult allocation = Allocate(map, space, allocation_site); |
| 3408 if (!allocation.To(&js_obj)) return allocation; | 3407 if (!allocation.To(&js_obj)) return allocation; |
| 3409 | 3408 |
| 3410 // Initialize the JSObject. | 3409 // Initialize the JSObject. |
| 3411 InitializeJSObjectFromMap(js_obj, properties, map); | 3410 InitializeJSObjectFromMap(js_obj, properties, map); |
| 3412 DCHECK(js_obj->HasFastElements() || js_obj->HasFixedTypedArrayElements()); | 3411 DCHECK(js_obj->HasFastElements() || js_obj->HasFixedTypedArrayElements()); |
| 3413 return js_obj; | 3412 return js_obj; |
| 3414 } | 3413 } |
| 3415 | 3414 |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3596 | 3595 |
| 3597 DCHECK_LE(0, chars); | 3596 DCHECK_LE(0, chars); |
| 3598 DCHECK_GE(String::kMaxLength, chars); | 3597 DCHECK_GE(String::kMaxLength, chars); |
| 3599 if (is_one_byte) { | 3598 if (is_one_byte) { |
| 3600 map = one_byte_internalized_string_map(); | 3599 map = one_byte_internalized_string_map(); |
| 3601 size = SeqOneByteString::SizeFor(chars); | 3600 size = SeqOneByteString::SizeFor(chars); |
| 3602 } else { | 3601 } else { |
| 3603 map = internalized_string_map(); | 3602 map = internalized_string_map(); |
| 3604 size = SeqTwoByteString::SizeFor(chars); | 3603 size = SeqTwoByteString::SizeFor(chars); |
| 3605 } | 3604 } |
| 3606 AllocationSpace space = SelectSpace(size, TENURED); | |
| 3607 | 3605 |
| 3608 // Allocate string. | 3606 // Allocate string. |
| 3609 HeapObject* result = nullptr; | 3607 HeapObject* result = nullptr; |
| 3610 { | 3608 { |
| 3611 AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE); | 3609 AllocationResult allocation = AllocateRaw(size, OLD_SPACE, OLD_SPACE); |
| 3612 if (!allocation.To(&result)) return allocation; | 3610 if (!allocation.To(&result)) return allocation; |
| 3613 } | 3611 } |
| 3614 | 3612 |
| 3615 result->set_map_no_write_barrier(map); | 3613 result->set_map_no_write_barrier(map); |
| 3616 // Set length and hash fields of the allocated string. | 3614 // Set length and hash fields of the allocated string. |
| 3617 String* answer = String::cast(result); | 3615 String* answer = String::cast(result); |
| 3618 answer->set_length(chars); | 3616 answer->set_length(chars); |
| 3619 answer->set_hash_field(hash_field); | 3617 answer->set_hash_field(hash_field); |
| 3620 | 3618 |
| 3621 DCHECK_EQ(size, answer->Size()); | 3619 DCHECK_EQ(size, answer->Size()); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 3639 template AllocationResult Heap::AllocateInternalizedStringImpl<false>( | 3637 template AllocationResult Heap::AllocateInternalizedStringImpl<false>( |
| 3640 Vector<const char>, int, uint32_t); | 3638 Vector<const char>, int, uint32_t); |
| 3641 | 3639 |
| 3642 | 3640 |
| 3643 AllocationResult Heap::AllocateRawOneByteString(int length, | 3641 AllocationResult Heap::AllocateRawOneByteString(int length, |
| 3644 PretenureFlag pretenure) { | 3642 PretenureFlag pretenure) { |
| 3645 DCHECK_LE(0, length); | 3643 DCHECK_LE(0, length); |
| 3646 DCHECK_GE(String::kMaxLength, length); | 3644 DCHECK_GE(String::kMaxLength, length); |
| 3647 int size = SeqOneByteString::SizeFor(length); | 3645 int size = SeqOneByteString::SizeFor(length); |
| 3648 DCHECK(size <= SeqOneByteString::kMaxSize); | 3646 DCHECK(size <= SeqOneByteString::kMaxSize); |
| 3649 AllocationSpace space = SelectSpace(size, pretenure); | 3647 AllocationSpace space = SelectSpace(pretenure); |
| 3650 | 3648 |
| 3651 HeapObject* result = nullptr; | 3649 HeapObject* result = nullptr; |
| 3652 { | 3650 { |
| 3653 AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE); | 3651 AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE); |
| 3654 if (!allocation.To(&result)) return allocation; | 3652 if (!allocation.To(&result)) return allocation; |
| 3655 } | 3653 } |
| 3656 | 3654 |
| 3657 // Partially initialize the object. | 3655 // Partially initialize the object. |
| 3658 result->set_map_no_write_barrier(one_byte_string_map()); | 3656 result->set_map_no_write_barrier(one_byte_string_map()); |
| 3659 String::cast(result)->set_length(length); | 3657 String::cast(result)->set_length(length); |
| 3660 String::cast(result)->set_hash_field(String::kEmptyHashField); | 3658 String::cast(result)->set_hash_field(String::kEmptyHashField); |
| 3661 DCHECK_EQ(size, HeapObject::cast(result)->Size()); | 3659 DCHECK_EQ(size, HeapObject::cast(result)->Size()); |
| 3662 | 3660 |
| 3663 return result; | 3661 return result; |
| 3664 } | 3662 } |
| 3665 | 3663 |
| 3666 | 3664 |
| 3667 AllocationResult Heap::AllocateRawTwoByteString(int length, | 3665 AllocationResult Heap::AllocateRawTwoByteString(int length, |
| 3668 PretenureFlag pretenure) { | 3666 PretenureFlag pretenure) { |
| 3669 DCHECK_LE(0, length); | 3667 DCHECK_LE(0, length); |
| 3670 DCHECK_GE(String::kMaxLength, length); | 3668 DCHECK_GE(String::kMaxLength, length); |
| 3671 int size = SeqTwoByteString::SizeFor(length); | 3669 int size = SeqTwoByteString::SizeFor(length); |
| 3672 DCHECK(size <= SeqTwoByteString::kMaxSize); | 3670 DCHECK(size <= SeqTwoByteString::kMaxSize); |
| 3673 AllocationSpace space = SelectSpace(size, pretenure); | 3671 AllocationSpace space = SelectSpace(pretenure); |
| 3674 | 3672 |
| 3675 HeapObject* result = nullptr; | 3673 HeapObject* result = nullptr; |
| 3676 { | 3674 { |
| 3677 AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE); | 3675 AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE); |
| 3678 if (!allocation.To(&result)) return allocation; | 3676 if (!allocation.To(&result)) return allocation; |
| 3679 } | 3677 } |
| 3680 | 3678 |
| 3681 // Partially initialize the object. | 3679 // Partially initialize the object. |
| 3682 result->set_map_no_write_barrier(string_map()); | 3680 result->set_map_no_write_barrier(string_map()); |
| 3683 String::cast(result)->set_length(length); | 3681 String::cast(result)->set_length(length); |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3798 return obj; | 3796 return obj; |
| 3799 } | 3797 } |
| 3800 | 3798 |
| 3801 | 3799 |
| 3802 AllocationResult Heap::AllocateRawFixedArray(int length, | 3800 AllocationResult Heap::AllocateRawFixedArray(int length, |
| 3803 PretenureFlag pretenure) { | 3801 PretenureFlag pretenure) { |
| 3804 if (length < 0 || length > FixedArray::kMaxLength) { | 3802 if (length < 0 || length > FixedArray::kMaxLength) { |
| 3805 v8::internal::Heap::FatalProcessOutOfMemory("invalid array length", true); | 3803 v8::internal::Heap::FatalProcessOutOfMemory("invalid array length", true); |
| 3806 } | 3804 } |
| 3807 int size = FixedArray::SizeFor(length); | 3805 int size = FixedArray::SizeFor(length); |
| 3808 AllocationSpace space = SelectSpace(size, pretenure); | 3806 AllocationSpace space = SelectSpace(pretenure); |
| 3809 | 3807 |
| 3810 return AllocateRaw(size, space, OLD_SPACE); | 3808 return AllocateRaw(size, space, OLD_SPACE); |
| 3811 } | 3809 } |
| 3812 | 3810 |
| 3813 | 3811 |
| 3814 AllocationResult Heap::AllocateFixedArrayWithFiller(int length, | 3812 AllocationResult Heap::AllocateFixedArrayWithFiller(int length, |
| 3815 PretenureFlag pretenure, | 3813 PretenureFlag pretenure, |
| 3816 Object* filler) { | 3814 Object* filler) { |
| 3817 DCHECK(length >= 0); | 3815 DCHECK(length >= 0); |
| 3818 DCHECK(empty_fixed_array()->IsFixedArray()); | 3816 DCHECK(empty_fixed_array()->IsFixedArray()); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3867 } | 3865 } |
| 3868 | 3866 |
| 3869 | 3867 |
| 3870 AllocationResult Heap::AllocateRawFixedDoubleArray(int length, | 3868 AllocationResult Heap::AllocateRawFixedDoubleArray(int length, |
| 3871 PretenureFlag pretenure) { | 3869 PretenureFlag pretenure) { |
| 3872 if (length < 0 || length > FixedDoubleArray::kMaxLength) { | 3870 if (length < 0 || length > FixedDoubleArray::kMaxLength) { |
| 3873 v8::internal::Heap::FatalProcessOutOfMemory("invalid array length", | 3871 v8::internal::Heap::FatalProcessOutOfMemory("invalid array length", |
| 3874 kDoubleAligned); | 3872 kDoubleAligned); |
| 3875 } | 3873 } |
| 3876 int size = FixedDoubleArray::SizeFor(length); | 3874 int size = FixedDoubleArray::SizeFor(length); |
| 3877 AllocationSpace space = SelectSpace(size, pretenure); | 3875 AllocationSpace space = SelectSpace(pretenure); |
| 3878 | 3876 |
| 3879 HeapObject* object = nullptr; | 3877 HeapObject* object = nullptr; |
| 3880 { | 3878 { |
| 3881 AllocationResult allocation = | 3879 AllocationResult allocation = |
| 3882 AllocateRaw(size, space, OLD_SPACE, kDoubleAligned); | 3880 AllocateRaw(size, space, OLD_SPACE, kDoubleAligned); |
| 3883 if (!allocation.To(&object)) return allocation; | 3881 if (!allocation.To(&object)) return allocation; |
| 3884 } | 3882 } |
| 3885 | 3883 |
| 3886 return object; | 3884 return object; |
| 3887 } | 3885 } |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3924 case NAME##_TYPE: \ | 3922 case NAME##_TYPE: \ |
| 3925 map = name##_map(); \ | 3923 map = name##_map(); \ |
| 3926 break; | 3924 break; |
| 3927 STRUCT_LIST(MAKE_CASE) | 3925 STRUCT_LIST(MAKE_CASE) |
| 3928 #undef MAKE_CASE | 3926 #undef MAKE_CASE |
| 3929 default: | 3927 default: |
| 3930 UNREACHABLE(); | 3928 UNREACHABLE(); |
| 3931 return exception(); | 3929 return exception(); |
| 3932 } | 3930 } |
| 3933 int size = map->instance_size(); | 3931 int size = map->instance_size(); |
| 3934 AllocationSpace space = SelectSpace(size, TENURED); | |
| 3935 Struct* result = nullptr; | 3932 Struct* result = nullptr; |
| 3936 { | 3933 { |
| 3937 AllocationResult allocation = Allocate(map, space); | 3934 AllocationResult allocation = Allocate(map, OLD_SPACE); |
| 3938 if (!allocation.To(&result)) return allocation; | 3935 if (!allocation.To(&result)) return allocation; |
| 3939 } | 3936 } |
| 3940 result->InitializeBody(size); | 3937 result->InitializeBody(size); |
| 3941 return result; | 3938 return result; |
| 3942 } | 3939 } |
| 3943 | 3940 |
| 3944 | 3941 |
| 3945 bool Heap::IsHeapIterable() { | 3942 bool Heap::IsHeapIterable() { |
| 3946 // TODO(hpayer): This function is not correct. Allocation folding in old | 3943 // TODO(hpayer): This function is not correct. Allocation folding in old |
| 3947 // space breaks the iterability. | 3944 // space breaks the iterability. |
| (...skipping 2179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6127 } | 6124 } |
| 6128 | 6125 |
| 6129 | 6126 |
| 6130 // static | 6127 // static |
| 6131 int Heap::GetStaticVisitorIdForMap(Map* map) { | 6128 int Heap::GetStaticVisitorIdForMap(Map* map) { |
| 6132 return StaticVisitorBase::GetVisitorId(map); | 6129 return StaticVisitorBase::GetVisitorId(map); |
| 6133 } | 6130 } |
| 6134 | 6131 |
| 6135 } // namespace internal | 6132 } // namespace internal |
| 6136 } // namespace v8 | 6133 } // namespace v8 |
| OLD | NEW |