| 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 825 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 836 TYPE_CHECKER(Foreign, FOREIGN_TYPE) | 836 TYPE_CHECKER(Foreign, FOREIGN_TYPE) |
| 837 | 837 |
| 838 | 838 |
| 839 bool Object::IsBoolean() const { | 839 bool Object::IsBoolean() const { |
| 840 return IsOddball() && | 840 return IsOddball() && |
| 841 ((Oddball::cast(this)->kind() & Oddball::kNotBooleanMask) == 0); | 841 ((Oddball::cast(this)->kind() & Oddball::kNotBooleanMask) == 0); |
| 842 } | 842 } |
| 843 | 843 |
| 844 | 844 |
| 845 TYPE_CHECKER(JSArray, JS_ARRAY_TYPE) | 845 TYPE_CHECKER(JSArray, JS_ARRAY_TYPE) |
| 846 TYPE_CHECKER(JSArrayBuffer, JS_ARRAY_BUFFER_TYPE) | 846 |
| 847 TYPE_CHECKER(JSTypedArray, JS_TYPED_ARRAY_TYPE) | 847 |
| 848 bool Object::IsJSArrayBuffer() const { |
| 849 if (!IsHeapObject()) return false; |
| 850 |
| 851 InstanceType type = HeapObject::cast(this)->map()->instance_type(); |
| 852 return type == JS_ARRAY_BUFFER_TYPE || type == JS_SHARED_ARRAY_BUFFER_TYPE; |
| 853 } |
| 854 |
| 855 |
| 856 bool Object::IsJSTypedArray() const { |
| 857 if (!IsHeapObject()) return false; |
| 858 |
| 859 InstanceType type = HeapObject::cast(this)->map()->instance_type(); |
| 860 return type == JS_TYPED_ARRAY_TYPE || type == JS_SHARED_TYPED_ARRAY_TYPE; |
| 861 } |
| 862 |
| 863 |
| 848 TYPE_CHECKER(JSDataView, JS_DATA_VIEW_TYPE) | 864 TYPE_CHECKER(JSDataView, JS_DATA_VIEW_TYPE) |
| 849 | 865 |
| 850 | 866 |
| 851 bool Object::IsJSArrayBufferView() const { | 867 bool Object::IsJSArrayBufferView() const { |
| 852 return IsJSDataView() || IsJSTypedArray(); | 868 return IsJSDataView() || IsJSTypedArray(); |
| 853 } | 869 } |
| 854 | 870 |
| 855 | 871 |
| 856 TYPE_CHECKER(JSRegExp, JS_REGEXP_TYPE) | 872 TYPE_CHECKER(JSRegExp, JS_REGEXP_TYPE) |
| 857 | 873 |
| (...skipping 1100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1958 return JSBuiltinsObject::kSize; | 1974 return JSBuiltinsObject::kSize; |
| 1959 case JS_FUNCTION_TYPE: | 1975 case JS_FUNCTION_TYPE: |
| 1960 return JSFunction::kSize; | 1976 return JSFunction::kSize; |
| 1961 case JS_VALUE_TYPE: | 1977 case JS_VALUE_TYPE: |
| 1962 return JSValue::kSize; | 1978 return JSValue::kSize; |
| 1963 case JS_DATE_TYPE: | 1979 case JS_DATE_TYPE: |
| 1964 return JSDate::kSize; | 1980 return JSDate::kSize; |
| 1965 case JS_ARRAY_TYPE: | 1981 case JS_ARRAY_TYPE: |
| 1966 return JSArray::kSize; | 1982 return JSArray::kSize; |
| 1967 case JS_ARRAY_BUFFER_TYPE: | 1983 case JS_ARRAY_BUFFER_TYPE: |
| 1984 case JS_SHARED_ARRAY_BUFFER_TYPE: |
| 1968 return JSArrayBuffer::kSize; | 1985 return JSArrayBuffer::kSize; |
| 1969 case JS_TYPED_ARRAY_TYPE: | 1986 case JS_TYPED_ARRAY_TYPE: |
| 1987 case JS_SHARED_TYPED_ARRAY_TYPE: |
| 1970 return JSTypedArray::kSize; | 1988 return JSTypedArray::kSize; |
| 1971 case JS_DATA_VIEW_TYPE: | 1989 case JS_DATA_VIEW_TYPE: |
| 1972 return JSDataView::kSize; | 1990 return JSDataView::kSize; |
| 1973 case JS_SET_TYPE: | 1991 case JS_SET_TYPE: |
| 1974 return JSSet::kSize; | 1992 return JSSet::kSize; |
| 1975 case JS_MAP_TYPE: | 1993 case JS_MAP_TYPE: |
| 1976 return JSMap::kSize; | 1994 return JSMap::kSize; |
| 1977 case JS_SET_ITERATOR_TYPE: | 1995 case JS_SET_ITERATOR_TYPE: |
| 1978 return JSSetIterator::kSize; | 1996 return JSSetIterator::kSize; |
| 1979 case JS_MAP_ITERATOR_TYPE: | 1997 case JS_MAP_ITERATOR_TYPE: |
| (...skipping 4476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6456 bool JSArrayBuffer::is_neuterable() { | 6474 bool JSArrayBuffer::is_neuterable() { |
| 6457 return BooleanBit::get(flag(), kIsNeuterableBit); | 6475 return BooleanBit::get(flag(), kIsNeuterableBit); |
| 6458 } | 6476 } |
| 6459 | 6477 |
| 6460 | 6478 |
| 6461 void JSArrayBuffer::set_is_neuterable(bool value) { | 6479 void JSArrayBuffer::set_is_neuterable(bool value) { |
| 6462 set_flag(BooleanBit::set(flag(), kIsNeuterableBit, value)); | 6480 set_flag(BooleanBit::set(flag(), kIsNeuterableBit, value)); |
| 6463 } | 6481 } |
| 6464 | 6482 |
| 6465 | 6483 |
| 6484 bool JSArrayBuffer::is_shared() { |
| 6485 return BooleanBit::get(flag(), kIsSharedBit); |
| 6486 } |
| 6487 |
| 6488 |
| 6489 void JSArrayBuffer::set_is_shared(bool value) { |
| 6490 set_flag(BooleanBit::set(flag(), kIsSharedBit, value)); |
| 6491 } |
| 6492 |
| 6493 |
| 6466 ACCESSORS(JSArrayBuffer, weak_next, Object, kWeakNextOffset) | 6494 ACCESSORS(JSArrayBuffer, weak_next, Object, kWeakNextOffset) |
| 6467 ACCESSORS(JSArrayBuffer, weak_first_view, Object, kWeakFirstViewOffset) | 6495 ACCESSORS(JSArrayBuffer, weak_first_view, Object, kWeakFirstViewOffset) |
| 6468 | 6496 |
| 6469 | 6497 |
| 6470 ACCESSORS(JSArrayBufferView, buffer, Object, kBufferOffset) | 6498 ACCESSORS(JSArrayBufferView, buffer, Object, kBufferOffset) |
| 6471 ACCESSORS(JSArrayBufferView, byte_offset, Object, kByteOffsetOffset) | 6499 ACCESSORS(JSArrayBufferView, byte_offset, Object, kByteOffsetOffset) |
| 6472 ACCESSORS(JSArrayBufferView, byte_length, Object, kByteLengthOffset) | 6500 ACCESSORS(JSArrayBufferView, byte_length, Object, kByteLengthOffset) |
| 6473 ACCESSORS(JSArrayBufferView, weak_next, Object, kWeakNextOffset) | 6501 ACCESSORS(JSArrayBufferView, weak_next, Object, kWeakNextOffset) |
| 6474 ACCESSORS(JSTypedArray, length, Object, kLengthOffset) | 6502 ACCESSORS(JSTypedArray, length, Object, kLengthOffset) |
| 6475 | 6503 |
| 6504 |
| 6505 bool JSTypedArray::is_shared() const { |
| 6506 return Smi::cast(READ_FIELD(this, kIsSharedOffset))->value() != 0; |
| 6507 } |
| 6508 |
| 6509 |
| 6510 void JSTypedArray::set_is_shared(bool value) { |
| 6511 WRITE_FIELD(this, kIsSharedOffset, Smi::FromInt(value)); |
| 6512 } |
| 6513 |
| 6514 |
| 6476 ACCESSORS(JSRegExp, data, Object, kDataOffset) | 6515 ACCESSORS(JSRegExp, data, Object, kDataOffset) |
| 6477 | 6516 |
| 6478 | 6517 |
| 6479 JSRegExp::Type JSRegExp::TypeTag() { | 6518 JSRegExp::Type JSRegExp::TypeTag() { |
| 6480 Object* data = this->data(); | 6519 Object* data = this->data(); |
| 6481 if (data->IsUndefined()) return JSRegExp::NOT_COMPILED; | 6520 if (data->IsUndefined()) return JSRegExp::NOT_COMPILED; |
| 6482 Smi* smi = Smi::cast(FixedArray::cast(data)->get(kTagIndex)); | 6521 Smi* smi = Smi::cast(FixedArray::cast(data)->get(kTagIndex)); |
| 6483 return static_cast<JSRegExp::Type>(smi->value()); | 6522 return static_cast<JSRegExp::Type>(smi->value()); |
| 6484 } | 6523 } |
| 6485 | 6524 |
| (...skipping 1055 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7541 #undef READ_SHORT_FIELD | 7580 #undef READ_SHORT_FIELD |
| 7542 #undef WRITE_SHORT_FIELD | 7581 #undef WRITE_SHORT_FIELD |
| 7543 #undef READ_BYTE_FIELD | 7582 #undef READ_BYTE_FIELD |
| 7544 #undef WRITE_BYTE_FIELD | 7583 #undef WRITE_BYTE_FIELD |
| 7545 #undef NOBARRIER_READ_BYTE_FIELD | 7584 #undef NOBARRIER_READ_BYTE_FIELD |
| 7546 #undef NOBARRIER_WRITE_BYTE_FIELD | 7585 #undef NOBARRIER_WRITE_BYTE_FIELD |
| 7547 | 7586 |
| 7548 } } // namespace v8::internal | 7587 } } // namespace v8::internal |
| 7549 | 7588 |
| 7550 #endif // V8_OBJECTS_INL_H_ | 7589 #endif // V8_OBJECTS_INL_H_ |
| OLD | NEW |