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

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

Issue 1033653002: Move prototype metadata from internal properties to prototype maps (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: small fixes Created 5 years, 8 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
« no previous file with comments | « src/objects-debug.cc ('k') | src/objects-printer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 4547 matching lines...) Expand 10 before | Expand all | Expand 10 after
4558 int Map::unused_property_fields() { 4558 int Map::unused_property_fields() {
4559 return READ_BYTE_FIELD(this, kUnusedPropertyFieldsOffset); 4559 return READ_BYTE_FIELD(this, kUnusedPropertyFieldsOffset);
4560 } 4560 }
4561 4561
4562 4562
4563 void Map::set_unused_property_fields(int value) { 4563 void Map::set_unused_property_fields(int value) {
4564 WRITE_BYTE_FIELD(this, kUnusedPropertyFieldsOffset, Min(value, 255)); 4564 WRITE_BYTE_FIELD(this, kUnusedPropertyFieldsOffset, Min(value, 255));
4565 } 4565 }
4566 4566
4567 4567
4568 byte Map::bit_field() { 4568 byte Map::bit_field() const { return READ_BYTE_FIELD(this, kBitFieldOffset); }
4569 return READ_BYTE_FIELD(this, kBitFieldOffset);
4570 }
4571 4569
4572 4570
4573 void Map::set_bit_field(byte value) { 4571 void Map::set_bit_field(byte value) {
4574 WRITE_BYTE_FIELD(this, kBitFieldOffset, value); 4572 WRITE_BYTE_FIELD(this, kBitFieldOffset, value);
4575 } 4573 }
4576 4574
4577 4575
4578 byte Map::bit_field2() { 4576 byte Map::bit_field2() const { return READ_BYTE_FIELD(this, kBitField2Offset); }
4579 return READ_BYTE_FIELD(this, kBitField2Offset);
4580 }
4581 4577
4582 4578
4583 void Map::set_bit_field2(byte value) { 4579 void Map::set_bit_field2(byte value) {
4584 WRITE_BYTE_FIELD(this, kBitField2Offset, value); 4580 WRITE_BYTE_FIELD(this, kBitField2Offset, value);
4585 } 4581 }
4586 4582
4587 4583
4588 void Map::set_non_instance_prototype(bool value) { 4584 void Map::set_non_instance_prototype(bool value) {
4589 if (value) { 4585 if (value) {
4590 set_bit_field(bit_field() | (1 << kHasNonInstancePrototype)); 4586 set_bit_field(bit_field() | (1 << kHasNonInstancePrototype));
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
4633 4629
4634 bool Map::is_extensible() { 4630 bool Map::is_extensible() {
4635 return ((1 << kIsExtensible) & bit_field2()) != 0; 4631 return ((1 << kIsExtensible) & bit_field2()) != 0;
4636 } 4632 }
4637 4633
4638 4634
4639 void Map::set_is_prototype_map(bool value) { 4635 void Map::set_is_prototype_map(bool value) {
4640 set_bit_field2(IsPrototypeMapBits::update(bit_field2(), value)); 4636 set_bit_field2(IsPrototypeMapBits::update(bit_field2(), value));
4641 } 4637 }
4642 4638
4643 bool Map::is_prototype_map() { 4639 bool Map::is_prototype_map() const {
4644 return IsPrototypeMapBits::decode(bit_field2()); 4640 return IsPrototypeMapBits::decode(bit_field2());
4645 } 4641 }
4646 4642
4647 4643
4648 void Map::set_dictionary_map(bool value) { 4644 void Map::set_dictionary_map(bool value) {
4649 uint32_t new_bit_field3 = DictionaryMap::update(bit_field3(), value); 4645 uint32_t new_bit_field3 = DictionaryMap::update(bit_field3(), value);
4650 new_bit_field3 = IsUnstable::update(new_bit_field3, value); 4646 new_bit_field3 = IsUnstable::update(new_bit_field3, value);
4651 set_bit_field3(new_bit_field3); 4647 set_bit_field3(new_bit_field3);
4652 } 4648 }
4653 4649
(...skipping 673 matching lines...) Expand 10 before | Expand all | Expand 10 after
5327 5323
5328 5324
5329 void Map::set_bit_field3(uint32_t bits) { 5325 void Map::set_bit_field3(uint32_t bits) {
5330 if (kInt32Size != kPointerSize) { 5326 if (kInt32Size != kPointerSize) {
5331 WRITE_UINT32_FIELD(this, kBitField3Offset + kInt32Size, 0); 5327 WRITE_UINT32_FIELD(this, kBitField3Offset + kInt32Size, 0);
5332 } 5328 }
5333 WRITE_UINT32_FIELD(this, kBitField3Offset, bits); 5329 WRITE_UINT32_FIELD(this, kBitField3Offset, bits);
5334 } 5330 }
5335 5331
5336 5332
5337 uint32_t Map::bit_field3() { 5333 uint32_t Map::bit_field3() const {
5338 return READ_UINT32_FIELD(this, kBitField3Offset); 5334 return READ_UINT32_FIELD(this, kBitField3Offset);
5339 } 5335 }
5340 5336
5341 5337
5342 LayoutDescriptor* Map::GetLayoutDescriptor() { 5338 LayoutDescriptor* Map::GetLayoutDescriptor() {
5343 return FLAG_unbox_double_fields ? layout_descriptor() 5339 return FLAG_unbox_double_fields ? layout_descriptor()
5344 : LayoutDescriptor::FastPointerLayout(); 5340 : LayoutDescriptor::FastPointerLayout();
5345 } 5341 }
5346 5342
5347 5343
(...skipping 21 matching lines...) Expand all
5369 return GetIsolate()->heap()->undefined_value(); 5365 return GetIsolate()->heap()->undefined_value();
5370 } 5366 }
5371 5367
5372 5368
5373 Map* Map::ElementsTransitionMap() { 5369 Map* Map::ElementsTransitionMap() {
5374 return TransitionArray::SearchSpecial( 5370 return TransitionArray::SearchSpecial(
5375 this, GetHeap()->elements_transition_symbol()); 5371 this, GetHeap()->elements_transition_symbol());
5376 } 5372 }
5377 5373
5378 5374
5379 ACCESSORS(Map, raw_transitions, Object, kTransitionsOffset) 5375 ACCESSORS(Map, raw_transitions, Object, kTransitionsOrPrototypeInfoOffset)
5376
5377
5378 Object* Map::prototype_info() const {
5379 DCHECK(is_prototype_map());
5380 return READ_FIELD(this, Map::kTransitionsOrPrototypeInfoOffset);
5381 }
5382
5383
5384 void Map::set_prototype_info(Object* value, WriteBarrierMode mode) {
5385 DCHECK(is_prototype_map());
5386 WRITE_FIELD(this, Map::kTransitionsOrPrototypeInfoOffset, value);
5387 CONDITIONAL_WRITE_BARRIER(
5388 GetHeap(), this, Map::kTransitionsOrPrototypeInfoOffset, value, mode);
5389 }
5380 5390
5381 5391
5382 void Map::SetBackPointer(Object* value, WriteBarrierMode mode) { 5392 void Map::SetBackPointer(Object* value, WriteBarrierMode mode) {
5383 DCHECK(instance_type() >= FIRST_JS_RECEIVER_TYPE); 5393 DCHECK(instance_type() >= FIRST_JS_RECEIVER_TYPE);
5384 DCHECK((value->IsUndefined() && GetBackPointer()->IsMap()) || 5394 DCHECK((value->IsUndefined() && GetBackPointer()->IsMap()) ||
5385 (value->IsMap() && GetBackPointer()->IsUndefined())); 5395 (value->IsMap() && GetBackPointer()->IsUndefined()));
5386 DCHECK(!value->IsMap() || 5396 DCHECK(!value->IsMap() ||
5387 Map::cast(value)->GetConstructor() == constructor_or_backpointer()); 5397 Map::cast(value)->GetConstructor() == constructor_or_backpointer());
5388 set_constructor_or_backpointer(value, mode); 5398 set_constructor_or_backpointer(value, mode);
5389 } 5399 }
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
5429 ACCESSORS_TO_SMI(AccessorInfo, flag, kFlagOffset) 5439 ACCESSORS_TO_SMI(AccessorInfo, flag, kFlagOffset)
5430 ACCESSORS(AccessorInfo, expected_receiver_type, Object, 5440 ACCESSORS(AccessorInfo, expected_receiver_type, Object,
5431 kExpectedReceiverTypeOffset) 5441 kExpectedReceiverTypeOffset)
5432 5442
5433 ACCESSORS(ExecutableAccessorInfo, getter, Object, kGetterOffset) 5443 ACCESSORS(ExecutableAccessorInfo, getter, Object, kGetterOffset)
5434 ACCESSORS(ExecutableAccessorInfo, setter, Object, kSetterOffset) 5444 ACCESSORS(ExecutableAccessorInfo, setter, Object, kSetterOffset)
5435 ACCESSORS(ExecutableAccessorInfo, data, Object, kDataOffset) 5445 ACCESSORS(ExecutableAccessorInfo, data, Object, kDataOffset)
5436 5446
5437 ACCESSORS(Box, value, Object, kValueOffset) 5447 ACCESSORS(Box, value, Object, kValueOffset)
5438 5448
5449 ACCESSORS(PrototypeInfo, prototype_users, Object, kPrototypeUsersOffset)
5450 ACCESSORS(PrototypeInfo, validity_cell, Object, kValidityCellOffset)
5451
5439 ACCESSORS(AccessorPair, getter, Object, kGetterOffset) 5452 ACCESSORS(AccessorPair, getter, Object, kGetterOffset)
5440 ACCESSORS(AccessorPair, setter, Object, kSetterOffset) 5453 ACCESSORS(AccessorPair, setter, Object, kSetterOffset)
5441 5454
5442 ACCESSORS(AccessCheckInfo, named_callback, Object, kNamedCallbackOffset) 5455 ACCESSORS(AccessCheckInfo, named_callback, Object, kNamedCallbackOffset)
5443 ACCESSORS(AccessCheckInfo, indexed_callback, Object, kIndexedCallbackOffset) 5456 ACCESSORS(AccessCheckInfo, indexed_callback, Object, kIndexedCallbackOffset)
5444 ACCESSORS(AccessCheckInfo, data, Object, kDataOffset) 5457 ACCESSORS(AccessCheckInfo, data, Object, kDataOffset)
5445 5458
5446 ACCESSORS(InterceptorInfo, getter, Object, kGetterOffset) 5459 ACCESSORS(InterceptorInfo, getter, Object, kGetterOffset)
5447 ACCESSORS(InterceptorInfo, setter, Object, kSetterOffset) 5460 ACCESSORS(InterceptorInfo, setter, Object, kSetterOffset)
5448 ACCESSORS(InterceptorInfo, query, Object, kQueryOffset) 5461 ACCESSORS(InterceptorInfo, query, Object, kQueryOffset)
(...skipping 2053 matching lines...) Expand 10 before | Expand all | Expand 10 after
7502 #undef READ_SHORT_FIELD 7515 #undef READ_SHORT_FIELD
7503 #undef WRITE_SHORT_FIELD 7516 #undef WRITE_SHORT_FIELD
7504 #undef READ_BYTE_FIELD 7517 #undef READ_BYTE_FIELD
7505 #undef WRITE_BYTE_FIELD 7518 #undef WRITE_BYTE_FIELD
7506 #undef NOBARRIER_READ_BYTE_FIELD 7519 #undef NOBARRIER_READ_BYTE_FIELD
7507 #undef NOBARRIER_WRITE_BYTE_FIELD 7520 #undef NOBARRIER_WRITE_BYTE_FIELD
7508 7521
7509 } } // namespace v8::internal 7522 } } // namespace v8::internal
7510 7523
7511 #endif // V8_OBJECTS_INL_H_ 7524 #endif // V8_OBJECTS_INL_H_
OLDNEW
« no previous file with comments | « src/objects-debug.cc ('k') | src/objects-printer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698