Generate WebScriptCallFrame instances dynamically
authoraroben@apple.com <aroben@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 4 Mar 2008 17:00:04 +0000 (17:00 +0000)
committeraroben@apple.com <aroben@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 4 Mar 2008 17:00:04 +0000 (17:00 +0000)
commit2ab43c4816b625b11c3ccbb495ae99570bd8da12
tree95f7018694fa421594f465dee877d144527a1972
parent91d044c772a3c7cda5eb82941784660e7d6aff83
    Generate WebScriptCallFrame instances dynamically

        WebScriptDebugger no longer holds a reference to the topmost call
        frame, and WebScriptCallFrame no longer holds a reference to its
        caller. We now generate WebScriptCallFrame instances as needed by
        walking the callingExecState chain.

        By making WebKit no longer responsible for keeping track of the call
        stack, we get one step closer to moving most JS debugging code out of
        WebKit entirely.

        This incidentally fixes a bug in Drosera where we'd never show the
        global scope in the call stack.

        Reviewed by Sam and Kevin M.

        * WebScriptCallFrame.cpp:
        (callingFunctionOrGlobalExecState): Finds the nearest calling
        ExecState that is a FunctionExecState or GlobalExecState, if any, and
        returns it.
        (WebScriptCallFrame::WebScriptCallFrame):
          - No longer takes a caller parameter.
          - Sets m_state to the callingFunctionOrGlobalExecState of the
            ExecState passed in.
        (WebScriptCallFrame::createInstance): Removed the caller parameter.
        (WebScriptCallFrame::caller): Generate a new WebScriptCallFrame on the
        fly from our ExecState.
        * WebScriptCallFrame.h: No longer holds a reference to the caller.
        * WebScriptDebugger.cpp:
        (WebScriptDebugger::WebScriptDebugger): Removed the call to callEvent
        that was supposed to set up the global scope call frame, but never
        worked because m_callingServer was set to true, which would cause
        callEvent to return early without doing anything. Also removed the
        m_callingServer guards since we're not calling callEvent anymore.
        (WebScriptDebugger::callEvent): Create a WebScriptCallFrame on the
        fly from the passed-in ExecState.
        (WebScriptDebugger::atStatement): Ditto.
        (WebScriptDebugger::returnEvent): Ditto, but use the callingExecState.
        This is equivalent to what calling leaveFrame() did before.
        (WebScriptDebugger::exception): Ditto, using the passed-in ExecState.
        * WebScriptDebugger.h: Removed m_topStackFrame member and
        enterFrame/leaveFrame methods.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@30751 268f45cc-cd09-0410-ab3c-d52691b4dbfc
WebKit/win/ChangeLog
WebKit/win/WebScriptCallFrame.cpp
WebKit/win/WebScriptCallFrame.h
WebKit/win/WebScriptDebugger.cpp
WebKit/win/WebScriptDebugger.h