PropertyTable::PropertyTable(VM& vm, unsigned initialCapacity) : JSCell(vm, vm.propertyTableStructure.get()) , m_indexSize(sizeForCapacity(initialCapacity)) , m_indexMask(m_indexSize - 1) , m_index(static_cast<unsigned*>(fastZeroedMalloc(dataSize()))) , m_keyCount(0) , m_deletedCount(0) { ASSERT(isPowerOf2(m_indexSize)); }
PropertyTable::PropertyTable(VM& vm, unsigned initialCapacity, const PropertyTable& other) : JSCell(vm, vm.propertyTableStructure.get()) , m_indexSize(sizeForCapacity(initialCapacity)) , m_indexMask(m_indexSize - 1) , m_index(static_cast<unsigned*>(fastZeroedMalloc(dataSize()))) , m_keyCount(0) , m_deletedCount(0) { ASSERT(isPowerOf2(m_indexSize)); ASSERT(initialCapacity >= other.m_keyCount); const_iterator end = other.end(); for (const_iterator iter = other.begin(); iter != end; ++iter) { ASSERT(canInsert()); reinsert(*iter); iter->key->ref(); } // Copy the m_deletedOffsets vector. Vector<PropertyOffset>* otherDeletedOffsets = other.m_deletedOffsets.get(); if (otherDeletedOffsets) m_deletedOffsets = std::make_unique<Vector<PropertyOffset>>(*otherDeletedOffsets); }