Ignore:
Timestamp:
Jan 9, 2009, 10:47:37 AM (16 years ago)
Author:
[email protected]
Message:

2009-01-09 Sam Weinig <[email protected]>

Roll r39720 back in with a working interpreted mode.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/interpreter/Interpreter.cpp

    r39737 r39752  
    9090static const int preferredScriptCheckTimeInterval = 1000;
    9191
    92 static ALWAYS_INLINE unsigned bytecodeOffsetForPC(CodeBlock* codeBlock, void* pc)
     92static ALWAYS_INLINE unsigned bytecodeOffsetForPC(CallFrame* callFrame, CodeBlock* codeBlock, void* pc)
    9393{
    9494#if ENABLE(JIT)
    95     return codeBlock->getBytecodeIndex(pc);
     95    return codeBlock->getBytecodeIndex(callFrame, pc);
    9696#else
     97    UNUSED_PARAM(callFrame);
    9798    return static_cast<Instruction*>(pc) - codeBlock->instructions().begin();
    9899#endif
     
    773774
    774775    codeBlock = callFrame->codeBlock();
    775     bytecodeOffset = bytecodeOffsetForPC(codeBlock, returnPC);
     776    bytecodeOffset = bytecodeOffsetForPC(callFrame, codeBlock, returnPC);
    776777    return true;
    777778}
     
    23492350    }
    23502351    DEFINE_OPCODE(op_get_global_var) {
    2351         /* get_global_var dst(r) globalObject(c) index(n) nop(n) nop(n)
     2352        /* get_global_var dst(r) globalObject(c) index(n)
    23522353
    23532354           Gets the global var at global slot index and places it in register dst.
    23542355         */
    2355         int dst = vPC[1].u.operand;
    2356         JSGlobalObject* scope = static_cast<JSGlobalObject*>(vPC[2].u.jsCell);
     2356        int dst = (++vPC)->u.operand;
     2357        JSGlobalObject* scope = static_cast<JSGlobalObject*>((++vPC)->u.jsCell);
    23572358        ASSERT(scope->isGlobalObject());
    2358         int index = vPC[3].u.operand;
     2359        int index = (++vPC)->u.operand;
    23592360
    23602361        callFrame[dst] = scope->registerAt(index);
    2361 
    2362         vPC += OPCODE_LENGTH(op_resolve_global);
     2362        ++vPC;
    23632363        NEXT_INSTRUCTION();
    23642364    }
     
    40334033        return;
    40344034
    4035     unsigned bytecodeOffset = bytecodeOffsetForPC(callerCodeBlock, callFrame->returnPC());
     4035    unsigned bytecodeOffset = bytecodeOffsetForPC(callerFrame, callerCodeBlock, callFrame->returnPC());
    40364036    lineNumber = callerCodeBlock->lineNumberForBytecodeOffset(callerFrame, bytecodeOffset - 1);
    40374037    sourceID = callerCodeBlock->ownerNode()->sourceID();
     
    47404740        CallFrame* callFrame = ARG_callFrame;
    47414741        CodeBlock* codeBlock = callFrame->codeBlock();
    4742         unsigned vPCIndex = codeBlock->getBytecodeIndex(STUB_RETURN_ADDRESS);
     4742        unsigned vPCIndex = codeBlock->getBytecodeIndex(callFrame, STUB_RETURN_ADDRESS);
    47434743        ARG_globalData->exception = createInvalidParamError(callFrame, "instanceof", baseVal, vPCIndex, codeBlock);
    47444744        VM_THROW_EXCEPTION();
     
    49434943    ASSERT(callType == CallTypeNone);
    49444944
    4945     CodeBlock* codeBlock = ARG_callFrame->codeBlock();
    4946     unsigned vPCIndex = codeBlock->getBytecodeIndex(STUB_RETURN_ADDRESS);
     4945    CallFrame* callFrame = ARG_callFrame;
     4946    CodeBlock* codeBlock = callFrame->codeBlock();
     4947    unsigned vPCIndex = codeBlock->getBytecodeIndex(callFrame, STUB_RETURN_ADDRESS);
    49474948    ARG_globalData->exception = createNotAFunctionError(ARG_callFrame, funcVal, vPCIndex, codeBlock);
    49484949    VM_THROW_EXCEPTION();
     
    50385039
    50395040    CodeBlock* codeBlock = callFrame->codeBlock();
    5040     unsigned vPCIndex = codeBlock->getBytecodeIndex(STUB_RETURN_ADDRESS);
     5041    unsigned vPCIndex = codeBlock->getBytecodeIndex(callFrame, STUB_RETURN_ADDRESS);
    50415042    ARG_globalData->exception = createUndefinedVariableError(callFrame, ident, vPCIndex, codeBlock);
    50425043    VM_THROW_EXCEPTION();
     
    50895090
    50905091    CodeBlock* codeBlock = callFrame->codeBlock();
    5091     unsigned vPCIndex = codeBlock->getBytecodeIndex(STUB_RETURN_ADDRESS);
     5092    unsigned vPCIndex = codeBlock->getBytecodeIndex(callFrame, STUB_RETURN_ADDRESS);
    50925093    ARG_globalData->exception = createNotAConstructorError(callFrame, constrVal, vPCIndex, codeBlock);
    50935094    VM_THROW_EXCEPTION();
     
    51675168
    51685169    CodeBlock* codeBlock = callFrame->codeBlock();
    5169     unsigned vPCIndex = codeBlock->getBytecodeIndex(STUB_RETURN_ADDRESS);
     5170    unsigned vPCIndex = codeBlock->getBytecodeIndex(callFrame, STUB_RETURN_ADDRESS);
    51705171    ARG_globalData->exception = createUndefinedVariableError(callFrame, ident, vPCIndex, codeBlock);
    51715172    VM_THROW_EXCEPTION_2();
     
    53355336
    53365337    CodeBlock* codeBlock = callFrame->codeBlock();
    5337     unsigned vPCIndex = codeBlock->getBytecodeIndex(STUB_RETURN_ADDRESS);
     5338    unsigned vPCIndex = codeBlock->getBytecodeIndex(callFrame, STUB_RETURN_ADDRESS);
    53385339    ARG_globalData->exception = createUndefinedVariableError(callFrame, ident, vPCIndex, codeBlock);
    53395340    VM_THROW_EXCEPTION();
     
    53675368    }
    53685369
    5369     unsigned vPCIndex = ARG_callFrame->codeBlock()->getBytecodeIndex(STUB_RETURN_ADDRESS);
     5370    unsigned vPCIndex = callFrame->codeBlock()->getBytecodeIndex(callFrame, STUB_RETURN_ADDRESS);
    53705371    ARG_globalData->exception = createUndefinedVariableError(callFrame, ident, vPCIndex, callFrame->codeBlock());
    53715372    VM_THROW_EXCEPTION();
     
    55735574
    55745575    CodeBlock* codeBlock = callFrame->codeBlock();
    5575     unsigned vPCIndex = codeBlock->getBytecodeIndex(STUB_RETURN_ADDRESS);
     5576    unsigned vPCIndex = codeBlock->getBytecodeIndex(callFrame, STUB_RETURN_ADDRESS);
    55765577    ARG_globalData->exception = createUndefinedVariableError(callFrame, ident, vPCIndex, codeBlock);
    55775578    VM_THROW_EXCEPTION_2();
     
    57295730    CodeBlock* codeBlock = callFrame->codeBlock();
    57305731
    5731     unsigned vPCIndex = codeBlock->getBytecodeIndex(STUB_RETURN_ADDRESS);
     5732    unsigned vPCIndex = codeBlock->getBytecodeIndex(callFrame, STUB_RETURN_ADDRESS);
    57325733
    57335734    JSValuePtr exceptionValue = ARG_src1;
     
    58835884        CallFrame* callFrame = ARG_callFrame;
    58845885        CodeBlock* codeBlock = callFrame->codeBlock();
    5885         unsigned vPCIndex = codeBlock->getBytecodeIndex(STUB_RETURN_ADDRESS);
     5886        unsigned vPCIndex = codeBlock->getBytecodeIndex(callFrame, STUB_RETURN_ADDRESS);
    58865887        ARG_globalData->exception = createInvalidParamError(callFrame, "in", baseVal, vPCIndex, codeBlock);
    58875888        VM_THROW_EXCEPTION();
     
    60746075    JSGlobalData* globalData = ARG_globalData;
    60756076
    6076     unsigned vPCIndex = codeBlock->getBytecodeIndex(globalData->exceptionLocation);
     6077    unsigned vPCIndex = codeBlock->getBytecodeIndex(callFrame, globalData->exceptionLocation);
    60776078
    60786079    JSValuePtr exceptionValue = globalData->exception;
Note: See TracChangeset for help on using the changeset viewer.