Index: src/objects.h |
diff --git a/src/objects.h b/src/objects.h |
index f5b8ab67f5204a1e033d7ac58121e2ba812ded5e..076368830a934e3fa16080923443d16f75e1c225 100644 |
--- a/src/objects.h |
+++ b/src/objects.h |
@@ -2453,6 +2453,7 @@ class DescriptorArray: public FixedArray { |
// Accessors for fetching instance descriptor at descriptor number. |
inline String* GetKey(int descriptor_number); |
inline Object* GetValue(int descriptor_number); |
+ inline Object** GetValueSlot(int descriptor_number); |
inline PropertyDetails GetDetails(int descriptor_number); |
inline PropertyType GetType(int descriptor_number); |
inline int GetFieldIndex(int descriptor_number); |
@@ -2463,6 +2464,14 @@ class DescriptorArray: public FixedArray { |
inline bool IsTransitionOnly(int descriptor_number); |
inline bool IsNullDescriptor(int descriptor_number); |
+ // WhitenessWitness is used to prove that a specific descriptor array is white |
+ // (unmarked), so incremental write barriers can be skipped because the |
+ // marking invariant cannot be broken and slots pointing into evacuation |
+ // candidates will be discovered when the object is scanned. A witness is |
+ // always stack-allocated right after creating a descriptor array. By |
+ // allocating a witness, incremental marking is globally disabled. The witness |
+ // is then passed along wherever needed to statically prove that the |
+ // descriptor array is known to be white. |
class WhitenessWitness { |
public: |
inline explicit WhitenessWitness(DescriptorArray* array); |
@@ -2591,6 +2600,8 @@ class DescriptorArray: public FixedArray { |
static const int kMaxNumberOfDescriptors = 1024 + 512; |
private: |
+ friend class IntrusiveMapTransitionIterator; |
+ |
// An entry in a DescriptorArray, represented as an (array, index) pair. |
class Entry { |
public: |
@@ -2629,6 +2640,7 @@ class DescriptorArray: public FixedArray { |
FixedArray* GetContentArray() { |
return FixedArray::cast(get(kContentArrayIndex)); |
} |
+ |
DISALLOW_IMPLICIT_CONSTRUCTORS(DescriptorArray); |
}; |