Ignore:
Timestamp:
Dec 16, 2008, 10:30:17 PM (16 years ago)
Author:
[email protected]
Message:

2008-12-16 Sam Weinig <[email protected]>

Reviewed by Geoffrey Garen.

Fix for https://bugs.webkit.org/show_bug.cgi?id=22838
Remove dependency on the bytecode Instruction buffer in Interpreter::throwException
Part of <rdar://problem/6428342>

  • bytecode/CodeBlock.cpp: (JSC::CodeBlock::functionRegisterForBytecodeOffset): Added. Function to get a function Register index in a callFrame for a bytecode offset. (JSC::CodeBlock::shrinkToFit): Shrink m_getByIdExceptionInfo and m_functionRegisterInfos.
  • bytecode/CodeBlock.h: (JSC::FunctionRegisterInfo::FunctionRegisterInfo): Added. (JSC::CodeBlock::addFunctionRegisterInfo):
  • bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::emitCall):
  • interpreter/Interpreter.cpp: (JSC::Interpreter::throwException): Use functionRegisterForBytecodeOffset in JIT mode.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/bytecode/CodeBlock.cpp

    r39284 r39354  
    14281428}
    14291429
     1430#if ENABLE(JIT)
     1431bool CodeBlock::functionRegisterForBytecodeOffset(unsigned bytecodeOffset, int& functionRegisterIndex)
     1432{
     1433    ASSERT(bytecodeOffset < m_instructions.size());
     1434
     1435    if (!m_rareData || !m_rareData->m_functionRegisterInfos.size())
     1436        return false;
     1437
     1438    int low = 0;
     1439    int high = m_rareData->m_functionRegisterInfos.size();
     1440    while (low < high) {
     1441        int mid = low + (high - low) / 2;
     1442        if (m_rareData->m_functionRegisterInfos[mid].bytecodeOffset <= bytecodeOffset)
     1443            low = mid + 1;
     1444        else
     1445            high = mid;
     1446    }
     1447
     1448    if (!low || m_rareData->m_functionRegisterInfos[low - 1].bytecodeOffset != bytecodeOffset)
     1449        return false;
     1450
     1451    functionRegisterIndex = m_rareData->m_functionRegisterInfos[low - 1].functionRegisterIndex;
     1452    return true;
     1453}
     1454#endif
     1455
    14301456void CodeBlock::shrinkToFit()
    14311457{
     
    14441470    m_expressionInfo.shrinkToFit();
    14451471    m_lineInfo.shrinkToFit();
     1472    m_getByIdExceptionInfo.shrinkToFit();
    14461473
    14471474    m_identifiers.shrinkToFit();
     
    14571484        m_rareData->m_characterSwitchJumpTables.shrinkToFit();
    14581485        m_rareData->m_stringSwitchJumpTables.shrinkToFit();
     1486#if ENABLE(JIT)
     1487        m_rareData->m_functionRegisterInfos.shrinkToFit();
     1488#endif
    14591489    }
    14601490}
Note: See TracChangeset for help on using the changeset viewer.