Example #1
0
void ArrayProfile::computeUpdatedPrediction(const ConcurrentJITLocker&, CodeBlock* codeBlock, Structure* lastSeenStructure)
{
    m_observedArrayModes |= arrayModeFromStructure(lastSeenStructure);

    if (!m_didPerformFirstRunPruning
        && hasTwoOrMoreBitsSet(m_observedArrayModes)) {
        m_observedArrayModes = arrayModeFromStructure(lastSeenStructure);
        m_didPerformFirstRunPruning = true;
    }

    m_mayInterceptIndexedAccesses |=
        lastSeenStructure->typeInfo().interceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero();
    JSGlobalObject* globalObject = codeBlock->globalObject();
    if (!globalObject->isOriginalArrayStructure(lastSeenStructure)
        && !globalObject->isOriginalTypedArrayStructure(lastSeenStructure))
        m_usesOriginalArrayStructures = false;
}