OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 2423 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2434 // Returns true for both shared empty_descriptor_array and for smis, which the | 2434 // Returns true for both shared empty_descriptor_array and for smis, which the |
2435 // map uses to encode additional bit fields when the descriptor array is not | 2435 // map uses to encode additional bit fields when the descriptor array is not |
2436 // yet used. | 2436 // yet used. |
2437 inline bool IsEmpty(); | 2437 inline bool IsEmpty(); |
2438 inline bool MayContainTransitions(); | 2438 inline bool MayContainTransitions(); |
2439 | 2439 |
2440 DECL_ACCESSORS(elements_transition_map, Map) | 2440 DECL_ACCESSORS(elements_transition_map, Map) |
2441 | 2441 |
2442 // Returns the number of descriptors in the array. | 2442 // Returns the number of descriptors in the array. |
2443 int number_of_descriptors() { | 2443 int number_of_descriptors() { |
2444 ASSERT(length() > kFirstIndex || | 2444 ASSERT(length() >= kFirstIndex || IsEmpty()); |
2445 length() == kTransitionsIndex || | |
2446 IsEmpty()); | |
2447 int len = length(); | 2445 int len = length(); |
2448 return len <= kFirstIndex ? 0 : (len - kFirstIndex) / kDescriptorSize; | 2446 return len <= kFirstIndex ? 0 : (len - kFirstIndex) / kDescriptorSize; |
2449 } | 2447 } |
2450 | 2448 |
2451 int NextEnumerationIndex() { | 2449 int NextEnumerationIndex() { |
2452 if (IsEmpty()) return PropertyDetails::kInitialIndex; | 2450 if (IsEmpty()) return PropertyDetails::kInitialIndex; |
2453 Object* obj = get(kEnumerationIndexIndex); | 2451 Object* obj = get(kEnumerationIndexIndex); |
2454 if (obj->IsSmi()) { | 2452 if (obj->IsSmi()) { |
2455 return Smi::cast(obj)->value(); | 2453 return Smi::cast(obj)->value(); |
2456 } else { | 2454 } else { |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2608 MUST_USE_RESULT static MaybeObject* Allocate(int number_of_descriptors, | 2606 MUST_USE_RESULT static MaybeObject* Allocate(int number_of_descriptors, |
2609 SharedMode shared_mode); | 2607 SharedMode shared_mode); |
2610 | 2608 |
2611 // Casting. | 2609 // Casting. |
2612 static inline DescriptorArray* cast(Object* obj); | 2610 static inline DescriptorArray* cast(Object* obj); |
2613 | 2611 |
2614 // Constant for denoting key was not found. | 2612 // Constant for denoting key was not found. |
2615 static const int kNotFound = -1; | 2613 static const int kNotFound = -1; |
2616 | 2614 |
2617 static const int kBitField3StorageIndex = 0; | 2615 static const int kBitField3StorageIndex = 0; |
2618 static const int kTransitionsIndex = 1; | 2616 static const int kEnumerationIndexIndex = 1; |
2619 static const int kEnumerationIndexIndex = 2; | 2617 static const int kTransitionsIndex = 2; |
2620 static const int kFirstIndex = 3; | 2618 static const int kFirstIndex = 3; |
2621 | 2619 |
2622 // The length of the "bridge" to the enum cache. | 2620 // The length of the "bridge" to the enum cache. |
2623 static const int kEnumCacheBridgeLength = 3; | 2621 static const int kEnumCacheBridgeLength = 3; |
2624 static const int kEnumCacheBridgeEnumIndex = 0; | 2622 static const int kEnumCacheBridgeEnumIndex = 0; |
2625 static const int kEnumCacheBridgeCacheIndex = 1; | 2623 static const int kEnumCacheBridgeCacheIndex = 1; |
2626 static const int kEnumCacheBridgeIndicesCacheIndex = 2; | 2624 static const int kEnumCacheBridgeIndicesCacheIndex = 2; |
2627 | 2625 |
2628 // Layout description. | 2626 // Layout description. |
2629 static const int kBitField3StorageOffset = FixedArray::kHeaderSize; | 2627 static const int kBitField3StorageOffset = FixedArray::kHeaderSize; |
2630 static const int kTransitionsOffset = kBitField3StorageOffset + kPointerSize; | 2628 static const int kEnumerationIndexOffset = |
2631 static const int kEnumerationIndexOffset = kTransitionsOffset + kPointerSize; | 2629 kBitField3StorageOffset + kPointerSize; |
2632 static const int kFirstOffset = kEnumerationIndexOffset + kPointerSize; | 2630 static const int kTransitionsOffset = kEnumerationIndexOffset + kPointerSize; |
| 2631 static const int kFirstOffset = kTransitionsOffset + kPointerSize; |
2633 | 2632 |
2634 // Layout description for the bridge array. | 2633 // Layout description for the bridge array. |
2635 static const int kEnumCacheBridgeEnumOffset = FixedArray::kHeaderSize; | 2634 static const int kEnumCacheBridgeEnumOffset = FixedArray::kHeaderSize; |
2636 static const int kEnumCacheBridgeCacheOffset = | 2635 static const int kEnumCacheBridgeCacheOffset = |
2637 kEnumCacheBridgeEnumOffset + kPointerSize; | 2636 kEnumCacheBridgeEnumOffset + kPointerSize; |
2638 | 2637 |
2639 // Layout of descriptor. | 2638 // Layout of descriptor. |
2640 static const int kDescriptorKey = 0; | 2639 static const int kDescriptorKey = 0; |
2641 static const int kDescriptorDetails = 1; | 2640 static const int kDescriptorDetails = 1; |
2642 static const int kDescriptorValue = 2; | 2641 static const int kDescriptorValue = 2; |
(...skipping 6114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8757 } else { | 8756 } else { |
8758 value &= ~(1 << bit_position); | 8757 value &= ~(1 << bit_position); |
8759 } | 8758 } |
8760 return value; | 8759 return value; |
8761 } | 8760 } |
8762 }; | 8761 }; |
8763 | 8762 |
8764 } } // namespace v8::internal | 8763 } } // namespace v8::internal |
8765 | 8764 |
8766 #endif // V8_OBJECTS_H_ | 8765 #endif // V8_OBJECTS_H_ |
OLD | NEW |