Index: src/objects-inl.h |
diff --git a/src/objects-inl.h b/src/objects-inl.h |
index 4da93fb4be23e7d2f263ad66831e6a3709b45253..2fde78b8b29f62277f7e1518171e47410e70682a 100644 |
--- a/src/objects-inl.h |
+++ b/src/objects-inl.h |
@@ -707,6 +707,7 @@ TYPE_CHECKER(JSContextExtensionObject, JS_CONTEXT_EXTENSION_OBJECT_TYPE) |
TYPE_CHECKER(Map, MAP_TYPE) |
TYPE_CHECKER(FixedArray, FIXED_ARRAY_TYPE) |
TYPE_CHECKER(FixedDoubleArray, FIXED_DOUBLE_ARRAY_TYPE) |
+TYPE_CHECKER(WeakFixedArray, FIXED_ARRAY_TYPE) |
TYPE_CHECKER(ConstantPoolArray, CONSTANT_POOL_ARRAY_TYPE) |
@@ -2368,6 +2369,39 @@ void FixedDoubleArray::FillWithHoles(int from, int to) { |
} |
+Object* WeakFixedArray::Get(int index) const { |
+ Object* raw = FixedArray::cast(this)->get(index + kFirstIndex); |
+ if (raw->IsSmi()) return raw; |
+ return WeakCell::cast(raw)->value(); |
+} |
+ |
+ |
+bool WeakFixedArray::IsEmptySlot(int index) const { |
+ DCHECK(index < Length()); |
+ return Get(index)->IsSmi(); |
+} |
+ |
+ |
+void WeakFixedArray::clear(int index) { |
+ FixedArray::cast(this)->set(index + kFirstIndex, Smi::FromInt(0)); |
+} |
+ |
+ |
+int WeakFixedArray::Length() const { |
+ return FixedArray::cast(this)->length() - kFirstIndex; |
+} |
+ |
+ |
+int WeakFixedArray::last_used_index() const { |
+ return Smi::cast(FixedArray::cast(this)->get(kLastUsedIndexIndex))->value(); |
+} |
+ |
+ |
+void WeakFixedArray::set_last_used_index(int index) { |
+ FixedArray::cast(this)->set(kLastUsedIndexIndex, Smi::FromInt(index)); |
+} |
+ |
+ |
void ConstantPoolArray::NumberOfEntries::increment(Type type) { |
DCHECK(type < NUMBER_OF_TYPES); |
element_counts_[type]++; |
@@ -3364,6 +3398,7 @@ CAST_ACCESSOR(Struct) |
CAST_ACCESSOR(Symbol) |
CAST_ACCESSOR(UnseededNumberDictionary) |
CAST_ACCESSOR(WeakCell) |
+CAST_ACCESSOR(WeakFixedArray) |
CAST_ACCESSOR(WeakHashTable) |