Structure* Structure::despecifyFunctionTransition(JSGlobalData& globalData, Structure* structure, PropertyName replaceFunction) { ASSERT(structure->m_specificFunctionThrashCount < maxSpecificFunctionThrashCount); Structure* transition = create(globalData, structure); ++transition->m_specificFunctionThrashCount; // Don't set m_offset, as one can not transition to this. structure->materializePropertyMapIfNecessary(globalData); transition->m_propertyTable = structure->copyPropertyTableForPinning(globalData, transition); transition->pin(); if (transition->m_specificFunctionThrashCount == maxSpecificFunctionThrashCount) transition->despecifyAllFunctions(globalData); else { bool removed = transition->despecifyFunction(globalData, replaceFunction); ASSERT_UNUSED(removed, removed); } return transition; }
Structure* Structure::despecifyFunctionTransition(JSGlobalData& globalData, Structure* structure, PropertyName replaceFunction) { ASSERT(structure->m_specificFunctionThrashCount < maxSpecificFunctionThrashCount); Structure* transition = create(globalData, structure); ++transition->m_specificFunctionThrashCount; structure->materializePropertyMapIfNecessary(globalData); transition->propertyTable().set(globalData, transition, structure->copyPropertyTableForPinning(globalData, transition)); transition->m_offset = structure->m_offset; transition->pin(); if (transition->m_specificFunctionThrashCount == maxSpecificFunctionThrashCount) transition->despecifyAllFunctions(globalData); else { bool removed = transition->despecifyFunction(globalData, replaceFunction); ASSERT_UNUSED(removed, removed); } transition->checkOffsetConsistency(); return transition; }