Ignore:
Timestamp:
Apr 6, 2013, 11:24:37 AM (12 years ago)
Author:
[email protected]
Message:

Rolled out 147820 and 147818 because they caused plugins tests to ASSERT
https://bugs.webkit.org/show_bug.cgi?id=114094

Reviewed by Anders Carlsson.

Source/JavaScriptCore:

  • API/JSContextRef.cpp:

(JSContextCreateBacktrace):

  • bytecompiler/BytecodeGenerator.cpp:

(JSC::BytecodeGenerator::emitDebugHook):

  • interpreter/Interpreter.cpp:

(JSC):
(JSC::Interpreter::dumpRegisters):
(JSC::Interpreter::unwindCallFrame):
(JSC::getLineNumberForCallFrame):
(JSC::getCallerInfo):
(JSC::Interpreter::getStackTrace):
(JSC::Interpreter::addStackTraceIfNecessary):
(JSC::Interpreter::retrieveCallerFromVMCode):

  • interpreter/Interpreter.h:

(StackFrame):
(JSC::StackFrame::toString):
(JSC::StackFrame::friendlyLineNumber):
(Interpreter):

  • runtime/Error.cpp:

(JSC::throwError):

  • runtime/JSGlobalData.h:

(JSC):
(JSGlobalData):

  • runtime/JSGlobalObject.cpp:

(JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):

Source/WebCore:

  • bindings/js/ScriptCallStackFactory.cpp:

(WebCore::createScriptCallStack):

  • inspector/ScriptCallFrame.cpp:

(WebCore::ScriptCallFrame::isEqual):

  • inspector/ScriptCallFrame.h:

(ScriptCallFrame):
(WebCore::ScriptCallFrame::lineNumber):

Tools:

  • Scripts/run-jsc:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/API/JSContextRef.cpp

    r147818 r147846  
    3737#include "JSObject.h"
    3838#include "Operations.h"
    39 #include "SourceProvider.h"
    4039#include <wtf/text/StringBuilder.h>
    4140#include <wtf/text/StringHash.h>
     
    177176    ExecState* exec = toJS(ctx);
    178177    JSLockHolder lock(exec);
     178
     179    unsigned count = 0;
    179180    StringBuilder builder;
    180     Vector<StackFrame> stackTrace;
    181     Interpreter::getStackTrace(&exec->globalData(), stackTrace, maxStackSize);
    182 
    183     for (size_t i = 0; i < stackTrace.size(); i++) {
     181    CallFrame* callFrame = exec;
     182    String functionName;
     183    if (exec->callee()) {
     184        if (asObject(exec->callee())->inherits(&InternalFunction::s_info)) {
     185            functionName = asInternalFunction(exec->callee())->name(exec);
     186            builder.appendLiteral("#0 ");
     187            builder.append(functionName);
     188            builder.appendLiteral("() ");
     189            count++;
     190        }
     191    }
     192    while (true) {
     193        RELEASE_ASSERT(callFrame);
     194        int signedLineNumber;
     195        intptr_t sourceID;
    184196        String urlString;
    185         String functionName;
    186         StackFrame& frame = stackTrace[i];
    187         JSValue function = frame.callee.get();
    188         if (frame.callee)
    189             functionName = frame.friendlyFunctionName(exec);
     197        JSValue function;
     198
     199        exec->interpreter()->retrieveLastCaller(callFrame, signedLineNumber, sourceID, urlString, function);
     200
     201        if (function)
     202            functionName = jsCast<JSFunction*>(function)->name(exec);
    190203        else {
    191204            // Caller is unknown, but if frame is empty we should still add the frame, because
    192205            // something called us, and gave us arguments.
    193             if (i)
     206            if (count)
    194207                break;
    195208        }
    196         unsigned lineNumber = frame.line();
     209        unsigned lineNumber = signedLineNumber >= 0 ? signedLineNumber : 0;
    197210        if (!builder.isEmpty())
    198211            builder.append('\n');
    199212        builder.append('#');
    200         builder.appendNumber(i);
     213        builder.appendNumber(count);
    201214        builder.append(' ');
    202215        builder.append(functionName);
    203216        builder.appendLiteral("() at ");
    204217        builder.append(urlString);
    205         if (frame.codeType != StackFrameNativeCode) {
    206             builder.append(':');
    207             builder.appendNumber(lineNumber);
    208         }
    209         if (!function)
     218        builder.append(':');
     219        builder.appendNumber(lineNumber);
     220        if (!function || ++count == maxStackSize)
    210221            break;
     222        callFrame = callFrame->callerFrame();
    211223    }
    212224    return OpaqueJSString::create(builder.toString()).leakRef();
Note: See TracChangeset for help on using the changeset viewer.