Ignore:
Timestamp:
Dec 12, 2008, 1:31:33 PM (16 years ago)
Author:
[email protected]
Message:

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

Reviewed by Geoffrey Garen.

Change exception information accessors to take offsets into the bytecode
instruction buffer instead of pointers so that they can work even even
if the bytecode buffer is purged.

  • bytecode/CodeBlock.cpp: (JSC::instructionOffsetForNth): (JSC::CodeBlock::handlerForBytecodeOffset): (JSC::CodeBlock::lineNumberForBytecodeOffset): (JSC::CodeBlock::expressionRangeForBytecodeOffset):
  • bytecode/CodeBlock.h:
  • bytecode/SamplingTool.cpp: (JSC::SamplingTool::dump):
  • interpreter/Interpreter.cpp: (JSC::Interpreter::throwException): (JSC::Interpreter::privateExecute): (JSC::Interpreter::retrieveLastCaller):
  • jit/JIT.cpp: (JSC::JIT::privateCompileMainPass):
  • runtime/ExceptionHelpers.cpp: (JSC::createUndefinedVariableError): (JSC::createInvalidParamError): (JSC::createNotAConstructorError): (JSC::createNotAFunctionError): (JSC::createNotAnObjectError):
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/runtime/ExceptionHelpers.cpp

    r39070 r39252  
    9393    int endOffset = 0;
    9494    int divotPoint = 0;
    95     int line = codeBlock->expressionRangeForVPC(vPC, divotPoint, startOffset, endOffset);
     95    int line = codeBlock->expressionRangeForBytecodeOffset(vPC - codeBlock->instructions().begin(), divotPoint, startOffset, endOffset);
    9696    UString message = "Can't find variable: ";
    9797    message.append(ident.ustring());
     
    158158    int endOffset = 0;
    159159    int divotPoint = 0;
    160     int line = codeBlock->expressionRangeForVPC(vPC, divotPoint, startOffset, endOffset);
     160    int line = codeBlock->expressionRangeForBytecodeOffset(vPC - codeBlock->instructions().begin(), divotPoint, startOffset, endOffset);
    161161    UString errorMessage = createErrorMessage(exec, codeBlock, line, divotPoint, divotPoint + endOffset, value, message);
    162162    JSObject* exception = Error::create(exec, TypeError, errorMessage, line, codeBlock->ownerNode()->sourceID(), codeBlock->ownerNode()->sourceURL());
     
    172172    int endOffset = 0;
    173173    int divotPoint = 0;
    174     int line = codeBlock->expressionRangeForVPC(vPC, divotPoint, startOffset, endOffset);
     174    int line = codeBlock->expressionRangeForBytecodeOffset(vPC - codeBlock->instructions().begin(), divotPoint, startOffset, endOffset);
    175175
    176176    // We're in a "new" expression, so we need to skip over the "new.." part
     
    193193    int endOffset = 0;
    194194    int divotPoint = 0;
    195     int line = codeBlock->expressionRangeForVPC(vPC, divotPoint, startOffset, endOffset);
     195    int line = codeBlock->expressionRangeForBytecodeOffset(vPC - codeBlock->instructions().begin(), divotPoint, startOffset, endOffset);
    196196    UString errorMessage = createErrorMessage(exec, codeBlock, line, divotPoint - startOffset, divotPoint, value, "not a function");
    197197    JSObject* exception = Error::create(exec, TypeError, errorMessage, line, codeBlock->ownerNode()->sourceID(), codeBlock->ownerNode()->sourceURL());   
     
    217217    int endOffset = 0;
    218218    int divotPoint = 0;
    219     int line = codeBlock->expressionRangeForVPC(vPC, divotPoint, startOffset, endOffset);
     219    int line = codeBlock->expressionRangeForBytecodeOffset(vPC - codeBlock->instructions().begin(), divotPoint, startOffset, endOffset);
    220220    UString errorMessage = createErrorMessage(exec, codeBlock, line, divotPoint - startOffset, divotPoint, error->isNull() ? jsNull() : jsUndefined(), "not an object");
    221221    JSObject* exception = Error::create(exec, TypeError, errorMessage, line, codeBlock->ownerNode()->sourceID(), codeBlock->ownerNode()->sourceURL());
Note: See TracChangeset for help on using the changeset viewer.