Index: src/layout-descriptor.h |
diff --git a/src/layout-descriptor.h b/src/layout-descriptor.h |
index cc149f18a431b48a004d0fdf7827e5d07fa2d811..cc2666a4873919252e01ec395fe4f906a0c5a944 100644 |
--- a/src/layout-descriptor.h |
+++ b/src/layout-descriptor.h |
@@ -26,6 +26,14 @@ class LayoutDescriptor : public FixedTypedArray<Uint32ArrayTraits> { |
public: |
V8_INLINE bool IsTagged(int field_index); |
+ // Queries the contiguous region of fields that are either tagged or not. |
+ // Returns true if the given field is tagged or false otherwise and writes |
+ // the length of the contiguous region to |out_sequence_length|. |
+ // If the sequence is longer than |max_sequence_length| then |
+ // |out_sequence_length| is set to |max_sequence_length|. |
+ bool IsTagged(int field_index, int max_sequence_length, |
+ int* out_sequence_length); |
+ |
// Returns true if this is a layout of the object having only tagged fields. |
V8_INLINE bool IsFastPointerLayout(); |
V8_INLINE static bool IsFastPointerLayout(Object* layout_descriptor); |
@@ -76,10 +84,8 @@ class LayoutDescriptor : public FixedTypedArray<Uint32ArrayTraits> { |
// Capacity of layout descriptors in bits. |
V8_INLINE int capacity(); |
- V8_INLINE LayoutDescriptor* SetTaggedForTesting(int field_index, |
- bool tagged) { |
- return SetTagged(field_index, tagged); |
- } |
+ static Handle<LayoutDescriptor> NewForTesting(Isolate* isolate, int length); |
+ LayoutDescriptor* SetTaggedForTesting(int field_index, bool tagged); |
private: |
static const int kNumberOfBits = 32; |
@@ -96,7 +102,7 @@ class LayoutDescriptor : public FixedTypedArray<Uint32ArrayTraits> { |
// Returns false if requested field_index is out of bounds. |
V8_INLINE bool GetIndexes(int field_index, int* layout_word_index, |
- uint32_t* layout_mask); |
+ int* layout_bit_index); |
V8_INLINE MUST_USE_RESULT LayoutDescriptor* SetRawData(int field_index) { |
return SetTagged(field_index, false); |
@@ -107,15 +113,23 @@ class LayoutDescriptor : public FixedTypedArray<Uint32ArrayTraits> { |
}; |
-// InobjectPropertiesHelper is a helper class for querying layout descriptor |
+// LayoutDescriptorHelper is a helper class for querying layout descriptor |
// about whether the field at given offset is tagged or not. |
-class InobjectPropertiesHelper { |
+class LayoutDescriptorHelper { |
public: |
- inline explicit InobjectPropertiesHelper(Map* map); |
+ inline explicit LayoutDescriptorHelper(Map* map); |
bool all_fields_tagged() { return all_fields_tagged_; } |
inline bool IsTagged(int offset_in_bytes); |
+ // Queries the contiguous region of fields that are either tagged or not. |
+ // Returns true if fields starting at |offset_in_bytes| are tagged or false |
+ // otherwise and writes the offset of the end of the contiguous region to |
+ // |out_end_of_contiguous_region_offset|. The |end_offset| value is the |
+ // upper bound for |out_end_of_contiguous_region_offset|. |
+ bool IsTagged(int offset_in_bytes, int end_offset, |
+ int* out_end_of_contiguous_region_offset); |
+ |
private: |
bool all_fields_tagged_; |
int header_size_; |