PropertyTable* Structure::takePropertyTableOrCloneIfPinned(JSGlobalData& globalData, Structure* owner) { materializePropertyMapIfNecessaryForPinning(globalData); if (m_isPinnedPropertyTable) return propertyTable()->copy(globalData, owner, propertyTable()->size() + 1); PropertyTable* takenPropertyTable = propertyTable().get(); propertyTable().clear(); return takenPropertyTable; }
PropertyOffset Structure::removePropertyWithoutTransition(JSGlobalData& globalData, PropertyName propertyName) { ASSERT(isUncacheableDictionary()); ASSERT(!m_enumerationCache); materializePropertyMapIfNecessaryForPinning(globalData); pin(); return remove(propertyName); }
size_t Structure::removePropertyWithoutTransition(JSGlobalData& globalData, const Identifier& propertyName) { ASSERT(isUncacheableDictionary()); ASSERT(!m_enumerationCache); materializePropertyMapIfNecessaryForPinning(globalData); pin(); size_t offset = remove(propertyName); return offset; }
PropertyOffset Structure::addPropertyWithoutTransition(JSGlobalData& globalData, PropertyName propertyName, unsigned attributes, JSCell* specificValue) { ASSERT(!enumerationCache()); if (m_specificFunctionThrashCount == maxSpecificFunctionThrashCount) specificValue = 0; materializePropertyMapIfNecessaryForPinning(globalData); pin(); return putSpecificValue(globalData, propertyName, attributes, specificValue); }
size_t Structure::addPropertyWithoutTransition(JSGlobalData& globalData, const Identifier& propertyName, unsigned attributes, JSCell* specificValue) { ASSERT(!m_enumerationCache); if (m_specificFunctionThrashCount == maxSpecificFunctionThrashCount) specificValue = 0; materializePropertyMapIfNecessaryForPinning(globalData); pin(); size_t offset = putSpecificValue(globalData, propertyName, attributes, specificValue); if (propertyStorageSize() > propertyStorageCapacity()) growPropertyStorageCapacity(); return offset; }