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 // 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 778 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
789 return obj->IsJSFunction(); | 789 return obj->IsJSFunction(); |
790 } | 790 } |
791 | 791 |
792 | 792 |
793 TYPE_CHECKER(Code, CODE_TYPE) | 793 TYPE_CHECKER(Code, CODE_TYPE) |
794 TYPE_CHECKER(Oddball, ODDBALL_TYPE) | 794 TYPE_CHECKER(Oddball, ODDBALL_TYPE) |
795 TYPE_CHECKER(Cell, CELL_TYPE) | 795 TYPE_CHECKER(Cell, CELL_TYPE) |
796 TYPE_CHECKER(PropertyCell, PROPERTY_CELL_TYPE) | 796 TYPE_CHECKER(PropertyCell, PROPERTY_CELL_TYPE) |
797 TYPE_CHECKER(WeakCell, WEAK_CELL_TYPE) | 797 TYPE_CHECKER(WeakCell, WEAK_CELL_TYPE) |
798 TYPE_CHECKER(SharedFunctionInfo, SHARED_FUNCTION_INFO_TYPE) | 798 TYPE_CHECKER(SharedFunctionInfo, SHARED_FUNCTION_INFO_TYPE) |
| 799 TYPE_CHECKER(JSArgumentsObject, JS_ARGUMENTS_TYPE) |
799 TYPE_CHECKER(JSDate, JS_DATE_TYPE) | 800 TYPE_CHECKER(JSDate, JS_DATE_TYPE) |
800 TYPE_CHECKER(JSError, JS_ERROR_TYPE) | 801 TYPE_CHECKER(JSError, JS_ERROR_TYPE) |
801 TYPE_CHECKER(JSGeneratorObject, JS_GENERATOR_OBJECT_TYPE) | 802 TYPE_CHECKER(JSGeneratorObject, JS_GENERATOR_OBJECT_TYPE) |
802 TYPE_CHECKER(JSMessageObject, JS_MESSAGE_OBJECT_TYPE) | 803 TYPE_CHECKER(JSMessageObject, JS_MESSAGE_OBJECT_TYPE) |
803 TYPE_CHECKER(JSPromise, JS_PROMISE_TYPE) | 804 TYPE_CHECKER(JSPromise, JS_PROMISE_TYPE) |
804 TYPE_CHECKER(JSValue, JS_VALUE_TYPE) | 805 TYPE_CHECKER(JSValue, JS_VALUE_TYPE) |
805 | 806 |
806 bool HeapObject::IsAbstractCode() const { | 807 bool HeapObject::IsAbstractCode() const { |
807 return IsBytecodeArray() || IsCode(); | 808 return IsBytecodeArray() || IsCode(); |
808 } | 809 } |
(...skipping 1539 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2348 DCHECK(IsFixedArray()); | 2349 DCHECK(IsFixedArray()); |
2349 DCHECK_GE(index, 0); | 2350 DCHECK_GE(index, 0); |
2350 DCHECK_LT(index, this->length()); | 2351 DCHECK_LT(index, this->length()); |
2351 int offset = kHeaderSize + index * kPointerSize; | 2352 int offset = kHeaderSize + index * kPointerSize; |
2352 WRITE_FIELD(this, offset, value); | 2353 WRITE_FIELD(this, offset, value); |
2353 WRITE_BARRIER(GetHeap(), this, offset, value); | 2354 WRITE_BARRIER(GetHeap(), this, offset, value); |
2354 } | 2355 } |
2355 | 2356 |
2356 | 2357 |
2357 double FixedDoubleArray::get_scalar(int index) { | 2358 double FixedDoubleArray::get_scalar(int index) { |
2358 DCHECK(map() != GetHeap()->fixed_cow_array_map() && | 2359 DCHECK_NE(GetHeap()->fixed_cow_array_map(), map()); |
2359 map() != GetHeap()->fixed_array_map()); | 2360 DCHECK_NE(GetHeap()->fixed_array_map(), map()); |
2360 DCHECK(index >= 0 && index < this->length()); | 2361 DCHECK(index >= 0 && index < this->length()); |
2361 DCHECK(!is_the_hole(index)); | 2362 DCHECK(!is_the_hole(index)); |
2362 return READ_DOUBLE_FIELD(this, kHeaderSize + index * kDoubleSize); | 2363 return READ_DOUBLE_FIELD(this, kHeaderSize + index * kDoubleSize); |
2363 } | 2364 } |
2364 | 2365 |
2365 | 2366 |
2366 uint64_t FixedDoubleArray::get_representation(int index) { | 2367 uint64_t FixedDoubleArray::get_representation(int index) { |
2367 DCHECK(map() != GetHeap()->fixed_cow_array_map() && | 2368 DCHECK_NE(GetHeap()->fixed_cow_array_map(), map()); |
2368 map() != GetHeap()->fixed_array_map()); | 2369 DCHECK_NE(GetHeap()->fixed_array_map(), map()); |
2369 DCHECK(index >= 0 && index < this->length()); | 2370 DCHECK(index >= 0 && index < this->length()); |
2370 int offset = kHeaderSize + index * kDoubleSize; | 2371 int offset = kHeaderSize + index * kDoubleSize; |
2371 return READ_UINT64_FIELD(this, offset); | 2372 return READ_UINT64_FIELD(this, offset); |
2372 } | 2373 } |
2373 | 2374 |
2374 Handle<Object> FixedDoubleArray::get(FixedDoubleArray* array, int index, | 2375 Handle<Object> FixedDoubleArray::get(FixedDoubleArray* array, int index, |
2375 Isolate* isolate) { | 2376 Isolate* isolate) { |
2376 if (array->is_the_hole(index)) { | 2377 if (array->is_the_hole(index)) { |
2377 return isolate->factory()->the_hole_value(); | 2378 return isolate->factory()->the_hole_value(); |
2378 } else { | 2379 } else { |
(...skipping 821 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3200 CAST_ACCESSOR(FixedDoubleArray) | 3201 CAST_ACCESSOR(FixedDoubleArray) |
3201 CAST_ACCESSOR(FixedTypedArrayBase) | 3202 CAST_ACCESSOR(FixedTypedArrayBase) |
3202 CAST_ACCESSOR(Float32x4) | 3203 CAST_ACCESSOR(Float32x4) |
3203 CAST_ACCESSOR(Foreign) | 3204 CAST_ACCESSOR(Foreign) |
3204 CAST_ACCESSOR(GlobalDictionary) | 3205 CAST_ACCESSOR(GlobalDictionary) |
3205 CAST_ACCESSOR(HandlerTable) | 3206 CAST_ACCESSOR(HandlerTable) |
3206 CAST_ACCESSOR(HeapObject) | 3207 CAST_ACCESSOR(HeapObject) |
3207 CAST_ACCESSOR(Int16x8) | 3208 CAST_ACCESSOR(Int16x8) |
3208 CAST_ACCESSOR(Int32x4) | 3209 CAST_ACCESSOR(Int32x4) |
3209 CAST_ACCESSOR(Int8x16) | 3210 CAST_ACCESSOR(Int8x16) |
| 3211 CAST_ACCESSOR(JSArgumentsObject) |
3210 CAST_ACCESSOR(JSArray) | 3212 CAST_ACCESSOR(JSArray) |
3211 CAST_ACCESSOR(JSArrayBuffer) | 3213 CAST_ACCESSOR(JSArrayBuffer) |
3212 CAST_ACCESSOR(JSArrayBufferView) | 3214 CAST_ACCESSOR(JSArrayBufferView) |
3213 CAST_ACCESSOR(JSBoundFunction) | 3215 CAST_ACCESSOR(JSBoundFunction) |
3214 CAST_ACCESSOR(JSDataView) | 3216 CAST_ACCESSOR(JSDataView) |
3215 CAST_ACCESSOR(JSDate) | 3217 CAST_ACCESSOR(JSDate) |
3216 CAST_ACCESSOR(JSFunction) | 3218 CAST_ACCESSOR(JSFunction) |
3217 CAST_ACCESSOR(JSGeneratorObject) | 3219 CAST_ACCESSOR(JSGeneratorObject) |
3218 CAST_ACCESSOR(JSGlobalObject) | 3220 CAST_ACCESSOR(JSGlobalObject) |
3219 CAST_ACCESSOR(JSGlobalProxy) | 3221 CAST_ACCESSOR(JSGlobalProxy) |
(...skipping 3641 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6861 | 6863 |
6862 void JSRegExp::SetDataAt(int index, Object* value) { | 6864 void JSRegExp::SetDataAt(int index, Object* value) { |
6863 DCHECK(TypeTag() != NOT_COMPILED); | 6865 DCHECK(TypeTag() != NOT_COMPILED); |
6864 DCHECK(index >= kDataIndex); // Only implementation data can be set this way. | 6866 DCHECK(index >= kDataIndex); // Only implementation data can be set this way. |
6865 FixedArray::cast(data())->set(index, value); | 6867 FixedArray::cast(data())->set(index, value); |
6866 } | 6868 } |
6867 | 6869 |
6868 | 6870 |
6869 ElementsKind JSObject::GetElementsKind() { | 6871 ElementsKind JSObject::GetElementsKind() { |
6870 ElementsKind kind = map()->elements_kind(); | 6872 ElementsKind kind = map()->elements_kind(); |
6871 #if VERIFY_HEAP && DEBUG | |
6872 FixedArrayBase* fixed_array = | |
6873 reinterpret_cast<FixedArrayBase*>(READ_FIELD(this, kElementsOffset)); | |
6874 | |
6875 // If a GC was caused while constructing this object, the elements | |
6876 // pointer may point to a one pointer filler map. | |
6877 if (ElementsAreSafeToExamine()) { | |
6878 Map* map = fixed_array->map(); | |
6879 if (IsFastSmiOrObjectElementsKind(kind)) { | |
6880 DCHECK(map == GetHeap()->fixed_array_map() || | |
6881 map == GetHeap()->fixed_cow_array_map()); | |
6882 } else if (IsFastDoubleElementsKind(kind)) { | |
6883 DCHECK(fixed_array->IsFixedDoubleArray() || | |
6884 fixed_array == GetHeap()->empty_fixed_array()); | |
6885 } else if (kind == DICTIONARY_ELEMENTS) { | |
6886 DCHECK(fixed_array->IsFixedArray()); | |
6887 DCHECK(fixed_array->IsDictionary()); | |
6888 } else { | |
6889 DCHECK(kind > DICTIONARY_ELEMENTS); | |
6890 } | |
6891 DCHECK(!IsSloppyArgumentsElements(kind) || | |
6892 (elements()->IsFixedArray() && elements()->length() >= 2)); | |
6893 } | |
6894 #endif | |
6895 return kind; | 6873 return kind; |
6896 } | 6874 } |
6897 | 6875 |
6898 | 6876 |
6899 bool JSObject::HasFastObjectElements() { | 6877 bool JSObject::HasFastObjectElements() { |
6900 return IsFastObjectElementsKind(GetElementsKind()); | 6878 return IsFastObjectElementsKind(GetElementsKind()); |
6901 } | 6879 } |
6902 | 6880 |
6903 | 6881 |
6904 bool JSObject::HasFastSmiElements() { | 6882 bool JSObject::HasFastSmiElements() { |
(...skipping 1200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8105 #undef WRITE_INT64_FIELD | 8083 #undef WRITE_INT64_FIELD |
8106 #undef READ_BYTE_FIELD | 8084 #undef READ_BYTE_FIELD |
8107 #undef WRITE_BYTE_FIELD | 8085 #undef WRITE_BYTE_FIELD |
8108 #undef NOBARRIER_READ_BYTE_FIELD | 8086 #undef NOBARRIER_READ_BYTE_FIELD |
8109 #undef NOBARRIER_WRITE_BYTE_FIELD | 8087 #undef NOBARRIER_WRITE_BYTE_FIELD |
8110 | 8088 |
8111 } // namespace internal | 8089 } // namespace internal |
8112 } // namespace v8 | 8090 } // namespace v8 |
8113 | 8091 |
8114 #endif // V8_OBJECTS_INL_H_ | 8092 #endif // V8_OBJECTS_INL_H_ |
OLD | NEW |