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 4541 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4552 int Map::unused_property_fields() { | 4552 int Map::unused_property_fields() { |
4553 return READ_BYTE_FIELD(this, kUnusedPropertyFieldsOffset); | 4553 return READ_BYTE_FIELD(this, kUnusedPropertyFieldsOffset); |
4554 } | 4554 } |
4555 | 4555 |
4556 | 4556 |
4557 void Map::set_unused_property_fields(int value) { | 4557 void Map::set_unused_property_fields(int value) { |
4558 WRITE_BYTE_FIELD(this, kUnusedPropertyFieldsOffset, Min(value, 255)); | 4558 WRITE_BYTE_FIELD(this, kUnusedPropertyFieldsOffset, Min(value, 255)); |
4559 } | 4559 } |
4560 | 4560 |
4561 | 4561 |
4562 byte Map::bit_field() { | 4562 byte Map::bit_field() const { return READ_BYTE_FIELD(this, kBitFieldOffset); } |
4563 return READ_BYTE_FIELD(this, kBitFieldOffset); | |
4564 } | |
4565 | 4563 |
4566 | 4564 |
4567 void Map::set_bit_field(byte value) { | 4565 void Map::set_bit_field(byte value) { |
4568 WRITE_BYTE_FIELD(this, kBitFieldOffset, value); | 4566 WRITE_BYTE_FIELD(this, kBitFieldOffset, value); |
4569 } | 4567 } |
4570 | 4568 |
4571 | 4569 |
4572 byte Map::bit_field2() { | 4570 byte Map::bit_field2() const { return READ_BYTE_FIELD(this, kBitField2Offset); } |
4573 return READ_BYTE_FIELD(this, kBitField2Offset); | |
4574 } | |
4575 | 4571 |
4576 | 4572 |
4577 void Map::set_bit_field2(byte value) { | 4573 void Map::set_bit_field2(byte value) { |
4578 WRITE_BYTE_FIELD(this, kBitField2Offset, value); | 4574 WRITE_BYTE_FIELD(this, kBitField2Offset, value); |
4579 } | 4575 } |
4580 | 4576 |
4581 | 4577 |
4582 void Map::set_non_instance_prototype(bool value) { | 4578 void Map::set_non_instance_prototype(bool value) { |
4583 if (value) { | 4579 if (value) { |
4584 set_bit_field(bit_field() | (1 << kHasNonInstancePrototype)); | 4580 set_bit_field(bit_field() | (1 << kHasNonInstancePrototype)); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4627 | 4623 |
4628 bool Map::is_extensible() { | 4624 bool Map::is_extensible() { |
4629 return ((1 << kIsExtensible) & bit_field2()) != 0; | 4625 return ((1 << kIsExtensible) & bit_field2()) != 0; |
4630 } | 4626 } |
4631 | 4627 |
4632 | 4628 |
4633 void Map::set_is_prototype_map(bool value) { | 4629 void Map::set_is_prototype_map(bool value) { |
4634 set_bit_field2(IsPrototypeMapBits::update(bit_field2(), value)); | 4630 set_bit_field2(IsPrototypeMapBits::update(bit_field2(), value)); |
4635 } | 4631 } |
4636 | 4632 |
4637 bool Map::is_prototype_map() { | 4633 bool Map::is_prototype_map() const { |
4638 return IsPrototypeMapBits::decode(bit_field2()); | 4634 return IsPrototypeMapBits::decode(bit_field2()); |
4639 } | 4635 } |
4640 | 4636 |
4641 | 4637 |
4642 void Map::set_dictionary_map(bool value) { | 4638 void Map::set_dictionary_map(bool value) { |
4643 uint32_t new_bit_field3 = DictionaryMap::update(bit_field3(), value); | 4639 uint32_t new_bit_field3 = DictionaryMap::update(bit_field3(), value); |
4644 new_bit_field3 = IsUnstable::update(new_bit_field3, value); | 4640 new_bit_field3 = IsUnstable::update(new_bit_field3, value); |
4645 set_bit_field3(new_bit_field3); | 4641 set_bit_field3(new_bit_field3); |
4646 } | 4642 } |
4647 | 4643 |
(...skipping 673 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5321 | 5317 |
5322 | 5318 |
5323 void Map::set_bit_field3(uint32_t bits) { | 5319 void Map::set_bit_field3(uint32_t bits) { |
5324 if (kInt32Size != kPointerSize) { | 5320 if (kInt32Size != kPointerSize) { |
5325 WRITE_UINT32_FIELD(this, kBitField3Offset + kInt32Size, 0); | 5321 WRITE_UINT32_FIELD(this, kBitField3Offset + kInt32Size, 0); |
5326 } | 5322 } |
5327 WRITE_UINT32_FIELD(this, kBitField3Offset, bits); | 5323 WRITE_UINT32_FIELD(this, kBitField3Offset, bits); |
5328 } | 5324 } |
5329 | 5325 |
5330 | 5326 |
5331 uint32_t Map::bit_field3() { | 5327 uint32_t Map::bit_field3() const { |
5332 return READ_UINT32_FIELD(this, kBitField3Offset); | 5328 return READ_UINT32_FIELD(this, kBitField3Offset); |
5333 } | 5329 } |
5334 | 5330 |
5335 | 5331 |
5336 LayoutDescriptor* Map::GetLayoutDescriptor() { | 5332 LayoutDescriptor* Map::GetLayoutDescriptor() { |
5337 return FLAG_unbox_double_fields ? layout_descriptor() | 5333 return FLAG_unbox_double_fields ? layout_descriptor() |
5338 : LayoutDescriptor::FastPointerLayout(); | 5334 : LayoutDescriptor::FastPointerLayout(); |
5339 } | 5335 } |
5340 | 5336 |
5341 | 5337 |
(...skipping 21 matching lines...) Expand all Loading... |
5363 return GetIsolate()->heap()->undefined_value(); | 5359 return GetIsolate()->heap()->undefined_value(); |
5364 } | 5360 } |
5365 | 5361 |
5366 | 5362 |
5367 Map* Map::ElementsTransitionMap() { | 5363 Map* Map::ElementsTransitionMap() { |
5368 return TransitionArray::SearchSpecial( | 5364 return TransitionArray::SearchSpecial( |
5369 this, GetHeap()->elements_transition_symbol()); | 5365 this, GetHeap()->elements_transition_symbol()); |
5370 } | 5366 } |
5371 | 5367 |
5372 | 5368 |
5373 ACCESSORS(Map, raw_transitions, Object, kTransitionsOffset) | 5369 ACCESSORS(Map, raw_transitions, Object, kTransitionsOrPrototypeInfoOffset) |
| 5370 |
| 5371 |
| 5372 Object* Map::prototype_info() const { |
| 5373 DCHECK(is_prototype_map()); |
| 5374 return READ_FIELD(this, Map::kTransitionsOrPrototypeInfoOffset); |
| 5375 } |
| 5376 void Map::set_prototype_info(Object* value, WriteBarrierMode mode) { |
| 5377 DCHECK(is_prototype_map()); |
| 5378 WRITE_FIELD(this, Map::kTransitionsOrPrototypeInfoOffset, value); |
| 5379 CONDITIONAL_WRITE_BARRIER( |
| 5380 GetHeap(), this, Map::kTransitionsOrPrototypeInfoOffset, value, mode); |
| 5381 } |
5374 | 5382 |
5375 | 5383 |
5376 void Map::SetBackPointer(Object* value, WriteBarrierMode mode) { | 5384 void Map::SetBackPointer(Object* value, WriteBarrierMode mode) { |
5377 DCHECK(instance_type() >= FIRST_JS_RECEIVER_TYPE); | 5385 DCHECK(instance_type() >= FIRST_JS_RECEIVER_TYPE); |
5378 DCHECK((value->IsUndefined() && GetBackPointer()->IsMap()) || | 5386 DCHECK((value->IsUndefined() && GetBackPointer()->IsMap()) || |
5379 (value->IsMap() && GetBackPointer()->IsUndefined())); | 5387 (value->IsMap() && GetBackPointer()->IsUndefined())); |
5380 DCHECK(!value->IsMap() || | 5388 DCHECK(!value->IsMap() || |
5381 Map::cast(value)->GetConstructor() == constructor_or_backpointer()); | 5389 Map::cast(value)->GetConstructor() == constructor_or_backpointer()); |
5382 set_constructor_or_backpointer(value, mode); | 5390 set_constructor_or_backpointer(value, mode); |
5383 } | 5391 } |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5423 ACCESSORS_TO_SMI(AccessorInfo, flag, kFlagOffset) | 5431 ACCESSORS_TO_SMI(AccessorInfo, flag, kFlagOffset) |
5424 ACCESSORS(AccessorInfo, expected_receiver_type, Object, | 5432 ACCESSORS(AccessorInfo, expected_receiver_type, Object, |
5425 kExpectedReceiverTypeOffset) | 5433 kExpectedReceiverTypeOffset) |
5426 | 5434 |
5427 ACCESSORS(ExecutableAccessorInfo, getter, Object, kGetterOffset) | 5435 ACCESSORS(ExecutableAccessorInfo, getter, Object, kGetterOffset) |
5428 ACCESSORS(ExecutableAccessorInfo, setter, Object, kSetterOffset) | 5436 ACCESSORS(ExecutableAccessorInfo, setter, Object, kSetterOffset) |
5429 ACCESSORS(ExecutableAccessorInfo, data, Object, kDataOffset) | 5437 ACCESSORS(ExecutableAccessorInfo, data, Object, kDataOffset) |
5430 | 5438 |
5431 ACCESSORS(Box, value, Object, kValueOffset) | 5439 ACCESSORS(Box, value, Object, kValueOffset) |
5432 | 5440 |
| 5441 ACCESSORS(PrototypeInfo, prototype_object, JSObject, kPrototypeObjectOffset) |
| 5442 ACCESSORS(PrototypeInfo, prototype_users, Object, kPrototypeUsersOffset) |
| 5443 ACCESSORS(PrototypeInfo, validity_cell, Object, kValidityCellOffset) |
| 5444 |
5433 ACCESSORS(AccessorPair, getter, Object, kGetterOffset) | 5445 ACCESSORS(AccessorPair, getter, Object, kGetterOffset) |
5434 ACCESSORS(AccessorPair, setter, Object, kSetterOffset) | 5446 ACCESSORS(AccessorPair, setter, Object, kSetterOffset) |
5435 | 5447 |
5436 ACCESSORS(AccessCheckInfo, named_callback, Object, kNamedCallbackOffset) | 5448 ACCESSORS(AccessCheckInfo, named_callback, Object, kNamedCallbackOffset) |
5437 ACCESSORS(AccessCheckInfo, indexed_callback, Object, kIndexedCallbackOffset) | 5449 ACCESSORS(AccessCheckInfo, indexed_callback, Object, kIndexedCallbackOffset) |
5438 ACCESSORS(AccessCheckInfo, data, Object, kDataOffset) | 5450 ACCESSORS(AccessCheckInfo, data, Object, kDataOffset) |
5439 | 5451 |
5440 ACCESSORS(InterceptorInfo, getter, Object, kGetterOffset) | 5452 ACCESSORS(InterceptorInfo, getter, Object, kGetterOffset) |
5441 ACCESSORS(InterceptorInfo, setter, Object, kSetterOffset) | 5453 ACCESSORS(InterceptorInfo, setter, Object, kSetterOffset) |
5442 ACCESSORS(InterceptorInfo, query, Object, kQueryOffset) | 5454 ACCESSORS(InterceptorInfo, query, Object, kQueryOffset) |
(...skipping 2053 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7496 #undef READ_SHORT_FIELD | 7508 #undef READ_SHORT_FIELD |
7497 #undef WRITE_SHORT_FIELD | 7509 #undef WRITE_SHORT_FIELD |
7498 #undef READ_BYTE_FIELD | 7510 #undef READ_BYTE_FIELD |
7499 #undef WRITE_BYTE_FIELD | 7511 #undef WRITE_BYTE_FIELD |
7500 #undef NOBARRIER_READ_BYTE_FIELD | 7512 #undef NOBARRIER_READ_BYTE_FIELD |
7501 #undef NOBARRIER_WRITE_BYTE_FIELD | 7513 #undef NOBARRIER_WRITE_BYTE_FIELD |
7502 | 7514 |
7503 } } // namespace v8::internal | 7515 } } // namespace v8::internal |
7504 | 7516 |
7505 #endif // V8_OBJECTS_INL_H_ | 7517 #endif // V8_OBJECTS_INL_H_ |
OLD | NEW |