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

Side by Side Diff: src/objects-inl.h

Issue 1254623002: Remove ExternalArray, derived types, and element kinds (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: updates Created 5 years, 5 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
OLDNEW
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 // Review notes: 5 // Review notes:
6 // 6 //
7 // - The use of macros in these inline functions may seem superfluous 7 // - The use of macros in these inline functions may seem superfluous
8 // but it is absolutely needed to make sure gcc generates optimal 8 // but it is absolutely needed to make sure gcc generates optimal
9 // code. gcc is not happy when attempting to inline too deep. 9 // code. gcc is not happy when attempting to inline too deep.
10 // 10 //
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 #define BOOL_ACCESSORS(holder, field, name, offset) \ 134 #define BOOL_ACCESSORS(holder, field, name, offset) \
135 bool holder::name() const { \ 135 bool holder::name() const { \
136 return BooleanBit::get(field(), offset); \ 136 return BooleanBit::get(field(), offset); \
137 } \ 137 } \
138 void holder::set_##name(bool value) { \ 138 void holder::set_##name(bool value) { \
139 set_##field(BooleanBit::set(field(), offset, value)); \ 139 set_##field(BooleanBit::set(field(), offset, value)); \
140 } 140 }
141 141
142 142
143 bool Object::IsFixedArrayBase() const { 143 bool Object::IsFixedArrayBase() const {
144 return IsFixedArray() || IsFixedDoubleArray() || IsFixedTypedArrayBase() || 144 return IsFixedArray() || IsFixedDoubleArray() || IsFixedTypedArrayBase();
145 IsExternalArray();
146 } 145 }
147 146
148 147
149 // External objects are not extensible, so the map check is enough. 148 // External objects are not extensible, so the map check is enough.
150 bool Object::IsExternal() const { 149 bool Object::IsExternal() const {
151 return Object::IsHeapObject() && 150 return Object::IsHeapObject() &&
152 HeapObject::cast(this)->map() == 151 HeapObject::cast(this)->map() ==
153 HeapObject::cast(this)->GetHeap()->external_map(); 152 HeapObject::cast(this)->GetHeap()->external_map();
154 } 153 }
155 154
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 262
264 bool Object::IsExternalTwoByteString() const { 263 bool Object::IsExternalTwoByteString() const {
265 if (!IsString()) return false; 264 if (!IsString()) return false;
266 return StringShape(String::cast(this)).IsExternal() && 265 return StringShape(String::cast(this)).IsExternal() &&
267 String::cast(this)->IsTwoByteRepresentation(); 266 String::cast(this)->IsTwoByteRepresentation();
268 } 267 }
269 268
270 269
271 bool Object::HasValidElements() { 270 bool Object::HasValidElements() {
272 // Dictionary is covered under FixedArray. 271 // Dictionary is covered under FixedArray.
273 return IsFixedArray() || IsFixedDoubleArray() || IsExternalArray() || 272 return IsFixedArray() || IsFixedDoubleArray() || IsFixedTypedArrayBase();
274 IsFixedTypedArrayBase();
275 } 273 }
276 274
277 275
278 bool Object::KeyEquals(Object* second) { 276 bool Object::KeyEquals(Object* second) {
279 Object* first = this; 277 Object* first = this;
280 if (second->IsNumber()) { 278 if (second->IsNumber()) {
281 if (first->IsNumber()) return first->Number() == second->Number(); 279 if (first->IsNumber()) return first->Number() == second->Number();
282 Object* temp = first; 280 Object* temp = first;
283 first = second; 281 first = second;
284 second = temp; 282 second = temp;
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
651 TYPE_CHECKER(FreeSpace, FREE_SPACE_TYPE) 649 TYPE_CHECKER(FreeSpace, FREE_SPACE_TYPE)
652 650
653 651
654 bool Object::IsFiller() const { 652 bool Object::IsFiller() const {
655 if (!Object::IsHeapObject()) return false; 653 if (!Object::IsHeapObject()) return false;
656 InstanceType instance_type = HeapObject::cast(this)->map()->instance_type(); 654 InstanceType instance_type = HeapObject::cast(this)->map()->instance_type();
657 return instance_type == FREE_SPACE_TYPE || instance_type == FILLER_TYPE; 655 return instance_type == FREE_SPACE_TYPE || instance_type == FILLER_TYPE;
658 } 656 }
659 657
660 658
661 bool Object::IsExternalArray() const {
662 if (!Object::IsHeapObject())
663 return false;
664 InstanceType instance_type =
665 HeapObject::cast(this)->map()->instance_type();
666 return (instance_type >= FIRST_EXTERNAL_ARRAY_TYPE &&
667 instance_type <= LAST_EXTERNAL_ARRAY_TYPE);
668 }
669
670 659
671 #define TYPED_ARRAY_TYPE_CHECKER(Type, type, TYPE, ctype, size) \ 660 #define TYPED_ARRAY_TYPE_CHECKER(Type, type, TYPE, ctype, size) \
672 TYPE_CHECKER(External##Type##Array, EXTERNAL_##TYPE##_ARRAY_TYPE) \
673 TYPE_CHECKER(Fixed##Type##Array, FIXED_##TYPE##_ARRAY_TYPE) 661 TYPE_CHECKER(Fixed##Type##Array, FIXED_##TYPE##_ARRAY_TYPE)
674 662
675 TYPED_ARRAYS(TYPED_ARRAY_TYPE_CHECKER) 663 TYPED_ARRAYS(TYPED_ARRAY_TYPE_CHECKER)
676 #undef TYPED_ARRAY_TYPE_CHECKER 664 #undef TYPED_ARRAY_TYPE_CHECKER
677 665
678 666
679 bool Object::IsFixedTypedArrayBase() const { 667 bool Object::IsFixedTypedArrayBase() const {
680 if (!Object::IsHeapObject()) return false; 668 if (!Object::IsHeapObject()) return false;
681 669
682 InstanceType instance_type = 670 InstanceType instance_type =
(...skipping 1952 matching lines...) Expand 10 before | Expand all | Expand 10 after
2635 PropertyDetails Map::GetLastDescriptorDetails() { 2623 PropertyDetails Map::GetLastDescriptorDetails() {
2636 return instance_descriptors()->GetDetails(LastAdded()); 2624 return instance_descriptors()->GetDetails(LastAdded());
2637 } 2625 }
2638 2626
2639 2627
2640 FixedArrayBase* Map::GetInitialElements() { 2628 FixedArrayBase* Map::GetInitialElements() {
2641 if (has_fast_smi_or_object_elements() || 2629 if (has_fast_smi_or_object_elements() ||
2642 has_fast_double_elements()) { 2630 has_fast_double_elements()) {
2643 DCHECK(!GetHeap()->InNewSpace(GetHeap()->empty_fixed_array())); 2631 DCHECK(!GetHeap()->InNewSpace(GetHeap()->empty_fixed_array()));
2644 return GetHeap()->empty_fixed_array(); 2632 return GetHeap()->empty_fixed_array();
2645 } else if (has_external_array_elements()) {
2646 ExternalArray* empty_array = GetHeap()->EmptyExternalArrayForMap(this);
2647 DCHECK(!GetHeap()->InNewSpace(empty_array));
2648 return empty_array;
2649 } else if (has_fixed_typed_array_elements()) { 2633 } else if (has_fixed_typed_array_elements()) {
2650 FixedTypedArrayBase* empty_array = 2634 FixedTypedArrayBase* empty_array =
2651 GetHeap()->EmptyFixedTypedArrayForMap(this); 2635 GetHeap()->EmptyFixedTypedArrayForMap(this);
2652 DCHECK(!GetHeap()->InNewSpace(empty_array)); 2636 DCHECK(!GetHeap()->InNewSpace(empty_array));
2653 return empty_array; 2637 return empty_array;
2654 } else { 2638 } else {
2655 UNREACHABLE(); 2639 UNREACHABLE();
2656 } 2640 }
2657 return NULL; 2641 return NULL;
2658 } 2642 }
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
2926 CAST_ACCESSOR(ByteArray) 2910 CAST_ACCESSOR(ByteArray)
2927 CAST_ACCESSOR(Cell) 2911 CAST_ACCESSOR(Cell)
2928 CAST_ACCESSOR(Code) 2912 CAST_ACCESSOR(Code)
2929 CAST_ACCESSOR(CodeCacheHashTable) 2913 CAST_ACCESSOR(CodeCacheHashTable)
2930 CAST_ACCESSOR(CompilationCacheTable) 2914 CAST_ACCESSOR(CompilationCacheTable)
2931 CAST_ACCESSOR(ConsString) 2915 CAST_ACCESSOR(ConsString)
2932 CAST_ACCESSOR(DeoptimizationInputData) 2916 CAST_ACCESSOR(DeoptimizationInputData)
2933 CAST_ACCESSOR(DeoptimizationOutputData) 2917 CAST_ACCESSOR(DeoptimizationOutputData)
2934 CAST_ACCESSOR(DependentCode) 2918 CAST_ACCESSOR(DependentCode)
2935 CAST_ACCESSOR(DescriptorArray) 2919 CAST_ACCESSOR(DescriptorArray)
2936 CAST_ACCESSOR(ExternalArray)
2937 CAST_ACCESSOR(ExternalOneByteString) 2920 CAST_ACCESSOR(ExternalOneByteString)
2938 CAST_ACCESSOR(ExternalFloat32Array)
2939 CAST_ACCESSOR(ExternalFloat64Array)
2940 CAST_ACCESSOR(ExternalInt16Array)
2941 CAST_ACCESSOR(ExternalInt32Array)
2942 CAST_ACCESSOR(ExternalInt8Array)
2943 CAST_ACCESSOR(ExternalString) 2921 CAST_ACCESSOR(ExternalString)
2944 CAST_ACCESSOR(ExternalTwoByteString) 2922 CAST_ACCESSOR(ExternalTwoByteString)
2945 CAST_ACCESSOR(ExternalUint16Array)
2946 CAST_ACCESSOR(ExternalUint32Array)
2947 CAST_ACCESSOR(ExternalUint8Array)
2948 CAST_ACCESSOR(ExternalUint8ClampedArray)
2949 CAST_ACCESSOR(FixedArray) 2923 CAST_ACCESSOR(FixedArray)
2950 CAST_ACCESSOR(FixedArrayBase) 2924 CAST_ACCESSOR(FixedArrayBase)
2951 CAST_ACCESSOR(FixedDoubleArray) 2925 CAST_ACCESSOR(FixedDoubleArray)
2952 CAST_ACCESSOR(FixedTypedArrayBase) 2926 CAST_ACCESSOR(FixedTypedArrayBase)
2953 CAST_ACCESSOR(Float32x4) 2927 CAST_ACCESSOR(Float32x4)
2954 CAST_ACCESSOR(Foreign) 2928 CAST_ACCESSOR(Foreign)
2955 CAST_ACCESSOR(GlobalDictionary) 2929 CAST_ACCESSOR(GlobalDictionary)
2956 CAST_ACCESSOR(GlobalObject) 2930 CAST_ACCESSOR(GlobalObject)
2957 CAST_ACCESSOR(HandlerTable) 2931 CAST_ACCESSOR(HandlerTable)
2958 CAST_ACCESSOR(HeapObject) 2932 CAST_ACCESSOR(HeapObject)
(...skipping 659 matching lines...) Expand 10 before | Expand all | Expand 10 after
3618 DCHECK_TAG_ALIGNED(address); 3592 DCHECK_TAG_ALIGNED(address);
3619 return reinterpret_cast<ByteArray*>(address - kHeaderSize + kHeapObjectTag); 3593 return reinterpret_cast<ByteArray*>(address - kHeaderSize + kHeapObjectTag);
3620 } 3594 }
3621 3595
3622 3596
3623 Address ByteArray::GetDataStartAddress() { 3597 Address ByteArray::GetDataStartAddress() {
3624 return reinterpret_cast<Address>(this) - kHeapObjectTag + kHeaderSize; 3598 return reinterpret_cast<Address>(this) - kHeapObjectTag + kHeaderSize;
3625 } 3599 }
3626 3600
3627 3601
3628 uint8_t* ExternalUint8ClampedArray::external_uint8_clamped_pointer() {
3629 return reinterpret_cast<uint8_t*>(external_pointer());
3630 }
3631
3632
3633 uint8_t ExternalUint8ClampedArray::get_scalar(int index) {
3634 DCHECK((index >= 0) && (index < this->length()));
3635 uint8_t* ptr = external_uint8_clamped_pointer();
3636 return ptr[index];
3637 }
3638
3639
3640 Handle<Object> ExternalUint8ClampedArray::get(
3641 Handle<ExternalUint8ClampedArray> array,
3642 int index) {
3643 return Handle<Smi>(Smi::FromInt(array->get_scalar(index)),
3644 array->GetIsolate());
3645 }
3646
3647
3648 void ExternalUint8ClampedArray::set(int index, uint8_t value) {
3649 DCHECK((index >= 0) && (index < this->length()));
3650 uint8_t* ptr = external_uint8_clamped_pointer();
3651 ptr[index] = value;
3652 }
3653
3654
3655 void* ExternalArray::external_pointer() const {
3656 intptr_t ptr = READ_INTPTR_FIELD(this, kExternalPointerOffset);
3657 return reinterpret_cast<void*>(ptr);
3658 }
3659
3660
3661 void ExternalArray::set_external_pointer(void* value, WriteBarrierMode mode) {
3662 intptr_t ptr = reinterpret_cast<intptr_t>(value);
3663 WRITE_INTPTR_FIELD(this, kExternalPointerOffset, ptr);
3664 }
3665
3666
3667 int8_t ExternalInt8Array::get_scalar(int index) {
3668 DCHECK((index >= 0) && (index < this->length()));
3669 int8_t* ptr = static_cast<int8_t*>(external_pointer());
3670 return ptr[index];
3671 }
3672
3673
3674 Handle<Object> ExternalInt8Array::get(Handle<ExternalInt8Array> array,
3675 int index) {
3676 return Handle<Smi>(Smi::FromInt(array->get_scalar(index)),
3677 array->GetIsolate());
3678 }
3679
3680
3681 void ExternalInt8Array::set(int index, int8_t value) {
3682 DCHECK((index >= 0) && (index < this->length()));
3683 int8_t* ptr = static_cast<int8_t*>(external_pointer());
3684 ptr[index] = value;
3685 }
3686
3687
3688 uint8_t ExternalUint8Array::get_scalar(int index) {
3689 DCHECK((index >= 0) && (index < this->length()));
3690 uint8_t* ptr = static_cast<uint8_t*>(external_pointer());
3691 return ptr[index];
3692 }
3693
3694
3695 Handle<Object> ExternalUint8Array::get(Handle<ExternalUint8Array> array,
3696 int index) {
3697 return Handle<Smi>(Smi::FromInt(array->get_scalar(index)),
3698 array->GetIsolate());
3699 }
3700
3701
3702 void ExternalUint8Array::set(int index, uint8_t value) {
3703 DCHECK((index >= 0) && (index < this->length()));
3704 uint8_t* ptr = static_cast<uint8_t*>(external_pointer());
3705 ptr[index] = value;
3706 }
3707
3708
3709 int16_t ExternalInt16Array::get_scalar(int index) {
3710 DCHECK((index >= 0) && (index < this->length()));
3711 int16_t* ptr = static_cast<int16_t*>(external_pointer());
3712 return ptr[index];
3713 }
3714
3715
3716 Handle<Object> ExternalInt16Array::get(Handle<ExternalInt16Array> array,
3717 int index) {
3718 return Handle<Smi>(Smi::FromInt(array->get_scalar(index)),
3719 array->GetIsolate());
3720 }
3721
3722
3723 void ExternalInt16Array::set(int index, int16_t value) {
3724 DCHECK((index >= 0) && (index < this->length()));
3725 int16_t* ptr = static_cast<int16_t*>(external_pointer());
3726 ptr[index] = value;
3727 }
3728
3729
3730 uint16_t ExternalUint16Array::get_scalar(int index) {
3731 DCHECK((index >= 0) && (index < this->length()));
3732 uint16_t* ptr = static_cast<uint16_t*>(external_pointer());
3733 return ptr[index];
3734 }
3735
3736
3737 Handle<Object> ExternalUint16Array::get(Handle<ExternalUint16Array> array,
3738 int index) {
3739 return Handle<Smi>(Smi::FromInt(array->get_scalar(index)),
3740 array->GetIsolate());
3741 }
3742
3743
3744 void ExternalUint16Array::set(int index, uint16_t value) {
3745 DCHECK((index >= 0) && (index < this->length()));
3746 uint16_t* ptr = static_cast<uint16_t*>(external_pointer());
3747 ptr[index] = value;
3748 }
3749
3750
3751 int32_t ExternalInt32Array::get_scalar(int index) {
3752 DCHECK((index >= 0) && (index < this->length()));
3753 int32_t* ptr = static_cast<int32_t*>(external_pointer());
3754 return ptr[index];
3755 }
3756
3757
3758 Handle<Object> ExternalInt32Array::get(Handle<ExternalInt32Array> array,
3759 int index) {
3760 return array->GetIsolate()->factory()->
3761 NewNumberFromInt(array->get_scalar(index));
3762 }
3763
3764
3765 void ExternalInt32Array::set(int index, int32_t value) {
3766 DCHECK((index >= 0) && (index < this->length()));
3767 int32_t* ptr = static_cast<int32_t*>(external_pointer());
3768 ptr[index] = value;
3769 }
3770
3771
3772 uint32_t ExternalUint32Array::get_scalar(int index) {
3773 DCHECK((index >= 0) && (index < this->length()));
3774 uint32_t* ptr = static_cast<uint32_t*>(external_pointer());
3775 return ptr[index];
3776 }
3777
3778
3779 Handle<Object> ExternalUint32Array::get(Handle<ExternalUint32Array> array,
3780 int index) {
3781 return array->GetIsolate()->factory()->
3782 NewNumberFromUint(array->get_scalar(index));
3783 }
3784
3785
3786 void ExternalUint32Array::set(int index, uint32_t value) {
3787 DCHECK((index >= 0) && (index < this->length()));
3788 uint32_t* ptr = static_cast<uint32_t*>(external_pointer());
3789 ptr[index] = value;
3790 }
3791
3792
3793 float ExternalFloat32Array::get_scalar(int index) {
3794 DCHECK((index >= 0) && (index < this->length()));
3795 float* ptr = static_cast<float*>(external_pointer());
3796 return ptr[index];
3797 }
3798
3799
3800 Handle<Object> ExternalFloat32Array::get(Handle<ExternalFloat32Array> array,
3801 int index) {
3802 return array->GetIsolate()->factory()->NewNumber(array->get_scalar(index));
3803 }
3804
3805
3806 void ExternalFloat32Array::set(int index, float value) {
3807 DCHECK((index >= 0) && (index < this->length()));
3808 float* ptr = static_cast<float*>(external_pointer());
3809 ptr[index] = value;
3810 }
3811
3812
3813 double ExternalFloat64Array::get_scalar(int index) {
3814 DCHECK((index >= 0) && (index < this->length()));
3815 double* ptr = static_cast<double*>(external_pointer());
3816 return ptr[index];
3817 }
3818
3819
3820 Handle<Object> ExternalFloat64Array::get(Handle<ExternalFloat64Array> array,
3821 int index) {
3822 return array->GetIsolate()->factory()->NewNumber(array->get_scalar(index));
3823 }
3824
3825
3826 void ExternalFloat64Array::set(int index, double value) {
3827 DCHECK((index >= 0) && (index < this->length()));
3828 double* ptr = static_cast<double*>(external_pointer());
3829 ptr[index] = value;
3830 }
3831
3832
3833 ACCESSORS(FixedTypedArrayBase, base_pointer, Object, kBasePointerOffset) 3602 ACCESSORS(FixedTypedArrayBase, base_pointer, Object, kBasePointerOffset)
3834 3603
3835 3604
3836 void* FixedTypedArrayBase::external_pointer() const { 3605 void* FixedTypedArrayBase::external_pointer() const {
3837 intptr_t ptr = READ_INTPTR_FIELD(this, kExternalPointerOffset); 3606 intptr_t ptr = READ_INTPTR_FIELD(this, kExternalPointerOffset);
3838 return reinterpret_cast<void*>(ptr); 3607 return reinterpret_cast<void*>(ptr);
3839 } 3608 }
3840 3609
3841 3610
3842 void FixedTypedArrayBase::set_external_pointer(void* value, 3611 void FixedTypedArrayBase::set_external_pointer(void* value,
(...skipping 22 matching lines...) Expand all
3865 #undef TYPED_ARRAY_CASE 3634 #undef TYPED_ARRAY_CASE
3866 default: 3635 default:
3867 UNREACHABLE(); 3636 UNREACHABLE();
3868 return 0; 3637 return 0;
3869 } 3638 }
3870 return element_size; 3639 return element_size;
3871 } 3640 }
3872 3641
3873 3642
3874 int FixedTypedArrayBase::DataSize(InstanceType type) { 3643 int FixedTypedArrayBase::DataSize(InstanceType type) {
3644 if (base_pointer() == Smi::FromInt(0)) return 0;
3875 return length() * ElementSize(type); 3645 return length() * ElementSize(type);
3876 } 3646 }
3877 3647
3878 3648
3879 int FixedTypedArrayBase::DataSize() { 3649 int FixedTypedArrayBase::DataSize() {
3880 return DataSize(map()->instance_type()); 3650 return DataSize(map()->instance_type());
3881 } 3651 }
3882 3652
3883 3653
3884 int FixedTypedArrayBase::size() { 3654 int FixedTypedArrayBase::size() {
(...skipping 2388 matching lines...) Expand 10 before | Expand all | Expand 10 after
6273 bool JSObject::HasSlowArgumentsElements() { 6043 bool JSObject::HasSlowArgumentsElements() {
6274 return GetElementsKind() == SLOW_SLOPPY_ARGUMENTS_ELEMENTS; 6044 return GetElementsKind() == SLOW_SLOPPY_ARGUMENTS_ELEMENTS;
6275 } 6045 }
6276 6046
6277 6047
6278 bool JSObject::HasSloppyArgumentsElements() { 6048 bool JSObject::HasSloppyArgumentsElements() {
6279 return IsSloppyArgumentsElements(GetElementsKind()); 6049 return IsSloppyArgumentsElements(GetElementsKind());
6280 } 6050 }
6281 6051
6282 6052
6283 bool JSObject::HasExternalArrayElements() {
6284 HeapObject* array = elements();
6285 DCHECK(array != NULL);
6286 return array->IsExternalArray();
6287 }
6288
6289
6290 #define EXTERNAL_ELEMENTS_CHECK(Type, type, TYPE, ctype, size) \
6291 bool JSObject::HasExternal##Type##Elements() { \
6292 HeapObject* array = elements(); \
6293 DCHECK(array != NULL); \
6294 if (!array->IsHeapObject()) \
6295 return false; \
6296 return array->map()->instance_type() == EXTERNAL_##TYPE##_ARRAY_TYPE; \
6297 }
6298
6299 TYPED_ARRAYS(EXTERNAL_ELEMENTS_CHECK)
6300
6301 #undef EXTERNAL_ELEMENTS_CHECK
6302
6303
6304 bool JSObject::HasFixedTypedArrayElements() { 6053 bool JSObject::HasFixedTypedArrayElements() {
6305 HeapObject* array = elements(); 6054 HeapObject* array = elements();
6306 DCHECK(array != NULL); 6055 DCHECK(array != NULL);
6307 return array->IsFixedTypedArrayBase(); 6056 return array->IsFixedTypedArrayBase();
6308 } 6057 }
6309 6058
6310 6059
6311 #define FIXED_TYPED_ELEMENTS_CHECK(Type, type, TYPE, ctype, size) \ 6060 #define FIXED_TYPED_ELEMENTS_CHECK(Type, type, TYPE, ctype, size) \
6312 bool JSObject::HasFixed##Type##Elements() { \ 6061 bool JSObject::HasFixed##Type##Elements() { \
6313 HeapObject* array = elements(); \ 6062 HeapObject* array = elements(); \
(...skipping 651 matching lines...) Expand 10 before | Expand all | Expand 10 after
6965 // If the new array won't fit in a some non-trivial fraction of the max old 6714 // If the new array won't fit in a some non-trivial fraction of the max old
6966 // space size, then force it to go dictionary mode. 6715 // space size, then force it to go dictionary mode.
6967 uint32_t max_fast_array_size = 6716 uint32_t max_fast_array_size =
6968 static_cast<uint32_t>((heap->MaxOldGenerationSize() / kDoubleSize) / 4); 6717 static_cast<uint32_t>((heap->MaxOldGenerationSize() / kDoubleSize) / 4);
6969 return new_length >= max_fast_array_size; 6718 return new_length >= max_fast_array_size;
6970 } 6719 }
6971 6720
6972 6721
6973 bool JSArray::AllowsSetLength() { 6722 bool JSArray::AllowsSetLength() {
6974 bool result = elements()->IsFixedArray() || elements()->IsFixedDoubleArray(); 6723 bool result = elements()->IsFixedArray() || elements()->IsFixedDoubleArray();
6975 DCHECK(result == !HasExternalArrayElements()); 6724 DCHECK(result == !HasFixedTypedArrayElements());
6976 return result; 6725 return result;
6977 } 6726 }
6978 6727
6979 6728
6980 void JSArray::SetContent(Handle<JSArray> array, 6729 void JSArray::SetContent(Handle<JSArray> array,
6981 Handle<FixedArrayBase> storage) { 6730 Handle<FixedArrayBase> storage) {
6982 EnsureCanContainElements(array, storage, storage->length(), 6731 EnsureCanContainElements(array, storage, storage->length(),
6983 ALLOW_COPIED_DOUBLE_ELEMENTS); 6732 ALLOW_COPIED_DOUBLE_ELEMENTS);
6984 6733
6985 DCHECK((storage->map() == array->GetHeap()->fixed_double_array_map() && 6734 DCHECK((storage->map() == array->GetHeap()->fixed_double_array_map() &&
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
7313 #undef READ_SHORT_FIELD 7062 #undef READ_SHORT_FIELD
7314 #undef WRITE_SHORT_FIELD 7063 #undef WRITE_SHORT_FIELD
7315 #undef READ_BYTE_FIELD 7064 #undef READ_BYTE_FIELD
7316 #undef WRITE_BYTE_FIELD 7065 #undef WRITE_BYTE_FIELD
7317 #undef NOBARRIER_READ_BYTE_FIELD 7066 #undef NOBARRIER_READ_BYTE_FIELD
7318 #undef NOBARRIER_WRITE_BYTE_FIELD 7067 #undef NOBARRIER_WRITE_BYTE_FIELD
7319 7068
7320 } } // namespace v8::internal 7069 } } // namespace v8::internal
7321 7070
7322 #endif // V8_OBJECTS_INL_H_ 7071 #endif // V8_OBJECTS_INL_H_
OLDNEW
« src/heap/heap.cc ('K') | « src/objects-debug.cc ('k') | src/objects-printer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698