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 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
298 if (filter & SKIP_STRINGS) return true; | 298 if (filter & SKIP_STRINGS) return true; |
299 } | 299 } |
300 return false; | 300 return false; |
301 } | 301 } |
302 | 302 |
303 | 303 |
304 Handle<Object> Object::NewStorageFor(Isolate* isolate, | 304 Handle<Object> Object::NewStorageFor(Isolate* isolate, |
305 Handle<Object> object, | 305 Handle<Object> object, |
306 Representation representation) { | 306 Representation representation) { |
307 if (representation.IsSmi() && object->IsUninitialized(isolate)) { | 307 if (representation.IsSmi() && object->IsUninitialized(isolate)) { |
308 return handle(Smi::FromInt(0), isolate); | 308 return handle(Smi::kZero, isolate); |
309 } | 309 } |
310 if (!representation.IsDouble()) return object; | 310 if (!representation.IsDouble()) return object; |
311 double value; | 311 double value; |
312 if (object->IsUninitialized(isolate)) { | 312 if (object->IsUninitialized(isolate)) { |
313 value = 0; | 313 value = 0; |
314 } else if (object->IsMutableHeapNumber()) { | 314 } else if (object->IsMutableHeapNumber()) { |
315 value = HeapNumber::cast(*object)->value(); | 315 value = HeapNumber::cast(*object)->value(); |
316 } else { | 316 } else { |
317 value = object->Number(); | 317 value = object->Number(); |
318 } | 318 } |
(...skipping 1263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1582 } | 1582 } |
1583 | 1583 |
1584 | 1584 |
1585 FixedArrayBase* JSObject::elements() const { | 1585 FixedArrayBase* JSObject::elements() const { |
1586 Object* array = READ_FIELD(this, kElementsOffset); | 1586 Object* array = READ_FIELD(this, kElementsOffset); |
1587 return static_cast<FixedArrayBase*>(array); | 1587 return static_cast<FixedArrayBase*>(array); |
1588 } | 1588 } |
1589 | 1589 |
1590 | 1590 |
1591 void AllocationSite::Initialize() { | 1591 void AllocationSite::Initialize() { |
1592 set_transition_info(Smi::FromInt(0)); | 1592 set_transition_info(Smi::kZero); |
1593 SetElementsKind(GetInitialFastElementsKind()); | 1593 SetElementsKind(GetInitialFastElementsKind()); |
1594 set_nested_site(Smi::FromInt(0)); | 1594 set_nested_site(Smi::kZero); |
1595 set_pretenure_data(0); | 1595 set_pretenure_data(0); |
1596 set_pretenure_create_count(0); | 1596 set_pretenure_create_count(0); |
1597 set_dependent_code(DependentCode::cast(GetHeap()->empty_fixed_array()), | 1597 set_dependent_code(DependentCode::cast(GetHeap()->empty_fixed_array()), |
1598 SKIP_WRITE_BARRIER); | 1598 SKIP_WRITE_BARRIER); |
1599 } | 1599 } |
1600 | 1600 |
1601 | 1601 |
1602 bool AllocationSite::IsZombie() { return pretenure_decision() == kZombie; } | 1602 bool AllocationSite::IsZombie() { return pretenure_decision() == kZombie; } |
1603 | 1603 |
1604 | 1604 |
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2012 | 2012 |
2013 | 2013 |
2014 Object* WeakCell::value() const { return READ_FIELD(this, kValueOffset); } | 2014 Object* WeakCell::value() const { return READ_FIELD(this, kValueOffset); } |
2015 | 2015 |
2016 | 2016 |
2017 void WeakCell::clear() { | 2017 void WeakCell::clear() { |
2018 // Either the garbage collector is clearing the cell or we are simply | 2018 // Either the garbage collector is clearing the cell or we are simply |
2019 // initializing the root empty weak cell. | 2019 // initializing the root empty weak cell. |
2020 DCHECK(GetHeap()->gc_state() == Heap::MARK_COMPACT || | 2020 DCHECK(GetHeap()->gc_state() == Heap::MARK_COMPACT || |
2021 this == GetHeap()->empty_weak_cell()); | 2021 this == GetHeap()->empty_weak_cell()); |
2022 WRITE_FIELD(this, kValueOffset, Smi::FromInt(0)); | 2022 WRITE_FIELD(this, kValueOffset, Smi::kZero); |
2023 } | 2023 } |
2024 | 2024 |
2025 | 2025 |
2026 void WeakCell::initialize(HeapObject* val) { | 2026 void WeakCell::initialize(HeapObject* val) { |
2027 WRITE_FIELD(this, kValueOffset, val); | 2027 WRITE_FIELD(this, kValueOffset, val); |
2028 // We just have to execute the generational barrier here because we never | 2028 // We just have to execute the generational barrier here because we never |
2029 // mark through a weak cell and collect evacuation candidates when we process | 2029 // mark through a weak cell and collect evacuation candidates when we process |
2030 // all weak cells. | 2030 // all weak cells. |
2031 WriteBarrierMode mode = Marking::IsBlack(ObjectMarking::MarkBitFrom(this)) | 2031 WriteBarrierMode mode = Marking::IsBlack(ObjectMarking::MarkBitFrom(this)) |
2032 ? UPDATE_WRITE_BARRIER | 2032 ? UPDATE_WRITE_BARRIER |
2033 : UPDATE_WEAK_WRITE_BARRIER; | 2033 : UPDATE_WEAK_WRITE_BARRIER; |
2034 CONDITIONAL_WRITE_BARRIER(GetHeap(), this, kValueOffset, val, mode); | 2034 CONDITIONAL_WRITE_BARRIER(GetHeap(), this, kValueOffset, val, mode); |
2035 } | 2035 } |
2036 | 2036 |
2037 | 2037 bool WeakCell::cleared() const { return value() == Smi::kZero; } |
2038 bool WeakCell::cleared() const { return value() == Smi::FromInt(0); } | |
2039 | |
2040 | 2038 |
2041 Object* WeakCell::next() const { return READ_FIELD(this, kNextOffset); } | 2039 Object* WeakCell::next() const { return READ_FIELD(this, kNextOffset); } |
2042 | 2040 |
2043 | 2041 |
2044 void WeakCell::set_next(Object* val, WriteBarrierMode mode) { | 2042 void WeakCell::set_next(Object* val, WriteBarrierMode mode) { |
2045 WRITE_FIELD(this, kNextOffset, val); | 2043 WRITE_FIELD(this, kNextOffset, val); |
2046 if (mode == UPDATE_WRITE_BARRIER) { | 2044 if (mode == UPDATE_WRITE_BARRIER) { |
2047 WRITE_BARRIER(GetHeap(), this, kNextOffset, val); | 2045 WRITE_BARRIER(GetHeap(), this, kNextOffset, val); |
2048 } | 2046 } |
2049 } | 2047 } |
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2462 } | 2460 } |
2463 | 2461 |
2464 | 2462 |
2465 bool WeakFixedArray::IsEmptySlot(int index) const { | 2463 bool WeakFixedArray::IsEmptySlot(int index) const { |
2466 DCHECK(index < Length()); | 2464 DCHECK(index < Length()); |
2467 return Get(index)->IsSmi(); | 2465 return Get(index)->IsSmi(); |
2468 } | 2466 } |
2469 | 2467 |
2470 | 2468 |
2471 void WeakFixedArray::Clear(int index) { | 2469 void WeakFixedArray::Clear(int index) { |
2472 FixedArray::cast(this)->set(index + kFirstIndex, Smi::FromInt(0)); | 2470 FixedArray::cast(this)->set(index + kFirstIndex, Smi::kZero); |
2473 } | 2471 } |
2474 | 2472 |
2475 | 2473 |
2476 int WeakFixedArray::Length() const { | 2474 int WeakFixedArray::Length() const { |
2477 return FixedArray::cast(this)->length() - kFirstIndex; | 2475 return FixedArray::cast(this)->length() - kFirstIndex; |
2478 } | 2476 } |
2479 | 2477 |
2480 | 2478 |
2481 int WeakFixedArray::last_used_index() const { | 2479 int WeakFixedArray::last_used_index() const { |
2482 return Smi::cast(FixedArray::cast(this)->get(kLastUsedIndexIndex))->value(); | 2480 return Smi::cast(FixedArray::cast(this)->get(kLastUsedIndexIndex))->value(); |
(...skipping 1737 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4220 #undef TYPED_ARRAY_CASE | 4218 #undef TYPED_ARRAY_CASE |
4221 default: | 4219 default: |
4222 UNREACHABLE(); | 4220 UNREACHABLE(); |
4223 return 0; | 4221 return 0; |
4224 } | 4222 } |
4225 return element_size; | 4223 return element_size; |
4226 } | 4224 } |
4227 | 4225 |
4228 | 4226 |
4229 int FixedTypedArrayBase::DataSize(InstanceType type) { | 4227 int FixedTypedArrayBase::DataSize(InstanceType type) { |
4230 if (base_pointer() == Smi::FromInt(0)) return 0; | 4228 if (base_pointer() == Smi::kZero) return 0; |
4231 return length() * ElementSize(type); | 4229 return length() * ElementSize(type); |
4232 } | 4230 } |
4233 | 4231 |
4234 | 4232 |
4235 int FixedTypedArrayBase::DataSize() { | 4233 int FixedTypedArrayBase::DataSize() { |
4236 return DataSize(map()->instance_type()); | 4234 return DataSize(map()->instance_type()); |
4237 } | 4235 } |
4238 | 4236 |
4239 | 4237 |
4240 int FixedTypedArrayBase::size() { | 4238 int FixedTypedArrayBase::size() { |
(...skipping 2669 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6910 | 6908 |
6911 bool JSArrayBuffer::is_shared() { return IsShared::decode(bit_field()); } | 6909 bool JSArrayBuffer::is_shared() { return IsShared::decode(bit_field()); } |
6912 | 6910 |
6913 | 6911 |
6914 void JSArrayBuffer::set_is_shared(bool value) { | 6912 void JSArrayBuffer::set_is_shared(bool value) { |
6915 set_bit_field(IsShared::update(bit_field(), value)); | 6913 set_bit_field(IsShared::update(bit_field(), value)); |
6916 } | 6914 } |
6917 | 6915 |
6918 | 6916 |
6919 Object* JSArrayBufferView::byte_offset() const { | 6917 Object* JSArrayBufferView::byte_offset() const { |
6920 if (WasNeutered()) return Smi::FromInt(0); | 6918 if (WasNeutered()) return Smi::kZero; |
6921 return Object::cast(READ_FIELD(this, kByteOffsetOffset)); | 6919 return Object::cast(READ_FIELD(this, kByteOffsetOffset)); |
6922 } | 6920 } |
6923 | 6921 |
6924 | 6922 |
6925 void JSArrayBufferView::set_byte_offset(Object* value, WriteBarrierMode mode) { | 6923 void JSArrayBufferView::set_byte_offset(Object* value, WriteBarrierMode mode) { |
6926 WRITE_FIELD(this, kByteOffsetOffset, value); | 6924 WRITE_FIELD(this, kByteOffsetOffset, value); |
6927 CONDITIONAL_WRITE_BARRIER(GetHeap(), this, kByteOffsetOffset, value, mode); | 6925 CONDITIONAL_WRITE_BARRIER(GetHeap(), this, kByteOffsetOffset, value, mode); |
6928 } | 6926 } |
6929 | 6927 |
6930 | 6928 |
6931 Object* JSArrayBufferView::byte_length() const { | 6929 Object* JSArrayBufferView::byte_length() const { |
6932 if (WasNeutered()) return Smi::FromInt(0); | 6930 if (WasNeutered()) return Smi::kZero; |
6933 return Object::cast(READ_FIELD(this, kByteLengthOffset)); | 6931 return Object::cast(READ_FIELD(this, kByteLengthOffset)); |
6934 } | 6932 } |
6935 | 6933 |
6936 | 6934 |
6937 void JSArrayBufferView::set_byte_length(Object* value, WriteBarrierMode mode) { | 6935 void JSArrayBufferView::set_byte_length(Object* value, WriteBarrierMode mode) { |
6938 WRITE_FIELD(this, kByteLengthOffset, value); | 6936 WRITE_FIELD(this, kByteLengthOffset, value); |
6939 CONDITIONAL_WRITE_BARRIER(GetHeap(), this, kByteLengthOffset, value, mode); | 6937 CONDITIONAL_WRITE_BARRIER(GetHeap(), this, kByteLengthOffset, value, mode); |
6940 } | 6938 } |
6941 | 6939 |
6942 | 6940 |
6943 ACCESSORS(JSArrayBufferView, buffer, Object, kBufferOffset) | 6941 ACCESSORS(JSArrayBufferView, buffer, Object, kBufferOffset) |
6944 #ifdef VERIFY_HEAP | 6942 #ifdef VERIFY_HEAP |
6945 ACCESSORS(JSArrayBufferView, raw_byte_offset, Object, kByteOffsetOffset) | 6943 ACCESSORS(JSArrayBufferView, raw_byte_offset, Object, kByteOffsetOffset) |
6946 ACCESSORS(JSArrayBufferView, raw_byte_length, Object, kByteLengthOffset) | 6944 ACCESSORS(JSArrayBufferView, raw_byte_length, Object, kByteLengthOffset) |
6947 #endif | 6945 #endif |
6948 | 6946 |
6949 | 6947 |
6950 bool JSArrayBufferView::WasNeutered() const { | 6948 bool JSArrayBufferView::WasNeutered() const { |
6951 return JSArrayBuffer::cast(buffer())->was_neutered(); | 6949 return JSArrayBuffer::cast(buffer())->was_neutered(); |
6952 } | 6950 } |
6953 | 6951 |
6954 | 6952 |
6955 Object* JSTypedArray::length() const { | 6953 Object* JSTypedArray::length() const { |
6956 if (WasNeutered()) return Smi::FromInt(0); | 6954 if (WasNeutered()) return Smi::kZero; |
6957 return Object::cast(READ_FIELD(this, kLengthOffset)); | 6955 return Object::cast(READ_FIELD(this, kLengthOffset)); |
6958 } | 6956 } |
6959 | 6957 |
6960 | 6958 |
6961 uint32_t JSTypedArray::length_value() const { | 6959 uint32_t JSTypedArray::length_value() const { |
6962 if (WasNeutered()) return 0; | 6960 if (WasNeutered()) return 0; |
6963 uint32_t index = 0; | 6961 uint32_t index = 0; |
6964 CHECK(Object::cast(READ_FIELD(this, kLengthOffset))->ToArrayLength(&index)); | 6962 CHECK(Object::cast(READ_FIELD(this, kLengthOffset))->ToArrayLength(&index)); |
6965 return index; | 6963 return index; |
6966 } | 6964 } |
(...skipping 731 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7698 | 7696 |
7699 bool AccessorPair::IsJSAccessor(Object* obj) { | 7697 bool AccessorPair::IsJSAccessor(Object* obj) { |
7700 return obj->IsCallable() || obj->IsUndefined(GetIsolate()); | 7698 return obj->IsCallable() || obj->IsUndefined(GetIsolate()); |
7701 } | 7699 } |
7702 | 7700 |
7703 | 7701 |
7704 template<typename Derived, typename Shape, typename Key> | 7702 template<typename Derived, typename Shape, typename Key> |
7705 void Dictionary<Derived, Shape, Key>::SetEntry(int entry, | 7703 void Dictionary<Derived, Shape, Key>::SetEntry(int entry, |
7706 Handle<Object> key, | 7704 Handle<Object> key, |
7707 Handle<Object> value) { | 7705 Handle<Object> value) { |
7708 this->SetEntry(entry, key, value, PropertyDetails(Smi::FromInt(0))); | 7706 this->SetEntry(entry, key, value, PropertyDetails(Smi::kZero)); |
7709 } | 7707 } |
7710 | 7708 |
7711 | 7709 |
7712 template<typename Derived, typename Shape, typename Key> | 7710 template<typename Derived, typename Shape, typename Key> |
7713 void Dictionary<Derived, Shape, Key>::SetEntry(int entry, | 7711 void Dictionary<Derived, Shape, Key>::SetEntry(int entry, |
7714 Handle<Object> key, | 7712 Handle<Object> key, |
7715 Handle<Object> value, | 7713 Handle<Object> value, |
7716 PropertyDetails details) { | 7714 PropertyDetails details) { |
7717 Shape::SetEntry(static_cast<Derived*>(this), entry, key, value, details); | 7715 Shape::SetEntry(static_cast<Derived*>(this), entry, key, value, details); |
7718 } | 7716 } |
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8090 if (delta == 0) return; | 8088 if (delta == 0) return; |
8091 int new_count = ic_generic_count() + delta; | 8089 int new_count = ic_generic_count() + delta; |
8092 if (new_count >= 0) { | 8090 if (new_count >= 0) { |
8093 new_count &= ~Smi::kMinValue; | 8091 new_count &= ~Smi::kMinValue; |
8094 WRITE_FIELD(this, kStorage3Offset, Smi::FromInt(new_count)); | 8092 WRITE_FIELD(this, kStorage3Offset, Smi::FromInt(new_count)); |
8095 } | 8093 } |
8096 } | 8094 } |
8097 | 8095 |
8098 | 8096 |
8099 void TypeFeedbackInfo::initialize_storage() { | 8097 void TypeFeedbackInfo::initialize_storage() { |
8100 WRITE_FIELD(this, kStorage1Offset, Smi::FromInt(0)); | 8098 WRITE_FIELD(this, kStorage1Offset, Smi::kZero); |
8101 WRITE_FIELD(this, kStorage2Offset, Smi::FromInt(0)); | 8099 WRITE_FIELD(this, kStorage2Offset, Smi::kZero); |
8102 WRITE_FIELD(this, kStorage3Offset, Smi::FromInt(0)); | 8100 WRITE_FIELD(this, kStorage3Offset, Smi::kZero); |
8103 } | 8101 } |
8104 | 8102 |
8105 | 8103 |
8106 void TypeFeedbackInfo::change_own_type_change_checksum() { | 8104 void TypeFeedbackInfo::change_own_type_change_checksum() { |
8107 int value = Smi::cast(READ_FIELD(this, kStorage1Offset))->value(); | 8105 int value = Smi::cast(READ_FIELD(this, kStorage1Offset))->value(); |
8108 int checksum = OwnTypeChangeChecksum::decode(value); | 8106 int checksum = OwnTypeChangeChecksum::decode(value); |
8109 checksum = (checksum + 1) % (1 << kTypeChangeChecksumBits); | 8107 checksum = (checksum + 1) % (1 << kTypeChangeChecksumBits); |
8110 value = OwnTypeChangeChecksum::update(value, checksum); | 8108 value = OwnTypeChangeChecksum::update(value, checksum); |
8111 // Ensure packed bit field is in Smi range. | 8109 // Ensure packed bit field is in Smi range. |
8112 if (value > Smi::kMaxValue) value |= Smi::kMinValue; | 8110 if (value > Smi::kMaxValue) value |= Smi::kMinValue; |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8315 #undef WRITE_INT64_FIELD | 8313 #undef WRITE_INT64_FIELD |
8316 #undef READ_BYTE_FIELD | 8314 #undef READ_BYTE_FIELD |
8317 #undef WRITE_BYTE_FIELD | 8315 #undef WRITE_BYTE_FIELD |
8318 #undef NOBARRIER_READ_BYTE_FIELD | 8316 #undef NOBARRIER_READ_BYTE_FIELD |
8319 #undef NOBARRIER_WRITE_BYTE_FIELD | 8317 #undef NOBARRIER_WRITE_BYTE_FIELD |
8320 | 8318 |
8321 } // namespace internal | 8319 } // namespace internal |
8322 } // namespace v8 | 8320 } // namespace v8 |
8323 | 8321 |
8324 #endif // V8_OBJECTS_INL_H_ | 8322 #endif // V8_OBJECTS_INL_H_ |
OLD | NEW |