Index: src/objects-inl.h |
diff --git a/src/objects-inl.h b/src/objects-inl.h |
index 98d96a8f28ac0747517e1b407753ed869a817ba0..cfd4e62a2339f4aa955f01dceb8d192532d20ad2 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]++; |
@@ -3362,6 +3396,7 @@ CAST_ACCESSOR(Struct) |
CAST_ACCESSOR(Symbol) |
CAST_ACCESSOR(UnseededNumberDictionary) |
CAST_ACCESSOR(WeakCell) |
+CAST_ACCESSOR(WeakFixedArray) |
CAST_ACCESSOR(WeakHashTable) |