Index: src/objects.h |
diff --git a/src/objects.h b/src/objects.h |
index 888117cb7da297e24377cf726e48cc807a6d7e7c..26dd4018eec295aebb875c05bc45db309aaad8fb 100644 |
--- a/src/objects.h |
+++ b/src/objects.h |
@@ -3211,6 +3211,11 @@ class FixedDoubleArray: public FixedArrayBase { |
// [first_int32_index()] ... [length - 1] : 32 bit entries |
class ConstantPoolArray: public FixedArrayBase { |
public: |
+ enum WeakObjectState { |
+ NO_WEAK_OBJECTS, |
+ WEAK_OBJECTS_IN_OPTIMIZED_CODE |
+ }; |
+ |
// Getters for the field storing the first index for different type entries. |
inline int first_code_ptr_index(); |
inline int first_heap_ptr_index(); |
@@ -3230,6 +3235,10 @@ class ConstantPoolArray: public FixedArrayBase { |
inline int32_t get_int32_entry(int index); |
inline double get_int64_entry_as_double(int index); |
+ // Setter and getter for weak objects state |
+ inline void set_weak_object_state(WeakObjectState state); |
+ inline WeakObjectState get_weak_object_state(); |
+ |
inline void set(int index, Address value); |
inline void set(int index, Object* value); |
inline void set(int index, int64_t value); |
@@ -3237,10 +3246,10 @@ class ConstantPoolArray: public FixedArrayBase { |
inline void set(int index, int32_t value); |
// Set up initial state. |
- inline void SetEntryCounts(int number_of_int64_entries, |
- int number_of_code_ptr_entries, |
- int number_of_heap_ptr_entries, |
- int number_of_int32_entries); |
+ inline void Init(int number_of_int64_entries, |
+ int number_of_code_ptr_entries, |
+ int number_of_heap_ptr_entries, |
+ int number_of_int32_entries); |
// Copy operations |
MUST_USE_RESULT inline MaybeObject* Copy(); |
@@ -3283,12 +3292,16 @@ class ConstantPoolArray: public FixedArrayBase { |
} |
// Layout description. |
- static const int kFirstCodePointerIndexOffset = FixedArray::kHeaderSize; |
- static const int kFirstHeapPointerIndexOffset = |
- kFirstCodePointerIndexOffset + kPointerSize; |
- static const int kFirstInt32IndexOffset = |
- kFirstHeapPointerIndexOffset + kPointerSize; |
- static const int kFirstOffset = kFirstInt32IndexOffset + kPointerSize; |
+ static const int kArrayLayoutOffset = FixedArray::kHeaderSize; |
+ static const int kFirstOffset = kArrayLayoutOffset + kPointerSize; |
+ |
+ static const int kFieldBitSize = 10; |
+ static const int kMaxEntriesPerType = (1 << kFieldBitSize) - 1; |
+ |
+ class NumberOfInt64EntriesField: public BitField<int, 0, kFieldBitSize> {}; |
+ class NumberOfCodePtrEntriesField: public BitField<int, 10, kFieldBitSize> {}; |
+ class NumberOfHeapPtrEntriesField: public BitField<int, 20, kFieldBitSize> {}; |
+ class WeakObjectStateField: public BitField<WeakObjectState, 30, 2> {}; |
// Dispatched behavior. |
void ConstantPoolIterateBody(ObjectVisitor* v); |
@@ -3297,10 +3310,6 @@ class ConstantPoolArray: public FixedArrayBase { |
DECLARE_VERIFIER(ConstantPoolArray) |
private: |
- inline void set_first_code_ptr_index(int value); |
- inline void set_first_heap_ptr_index(int value); |
- inline void set_first_int32_index(int value); |
- |
inline static int OffsetAt(int number_of_int64_entries, |
int number_of_code_ptr_entries, |
int number_of_heap_ptr_entries, |
@@ -5729,7 +5738,7 @@ class Code: public HeapObject { |
return is_optimized_code() && IsWeakObjectInOptimizedCode(object); |
} |
- inline bool IsWeakObjectInOptimizedCode(Object* object); |
+ static inline bool IsWeakObjectInOptimizedCode(Object* object); |
// Max loop nesting marker used to postpose OSR. We don't take loop |
// nesting that is deeper than 5 levels into account. |