JavaScriptCallFrame.h revision ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddb
18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2008 Apple Inc. All Rights Reserved.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef JavaScriptCallFrame_h
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define JavaScriptCallFrame_h
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
295e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#if ENABLE(JAVASCRIPT_DEBUGGER) && USE(JSC)
305f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
31dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <debugger/DebuggerCallFrame.h>
32635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include <interpreter/CallFrame.h>
33dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include <wtf/Forward.h>
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/PassRefPtr.h>
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/RefCounted.h>
36ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#include <wtf/text/TextPosition.h>
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
40dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass JavaScriptCallFrame : public RefCounted<JavaScriptCallFrame> {
41dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockpublic:
42ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    static PassRefPtr<JavaScriptCallFrame> create(const JSC::DebuggerCallFrame& debuggerCallFrame, PassRefPtr<JavaScriptCallFrame> caller, intptr_t sourceID, const TextPosition1& textPosition)
43dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    {
44ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        return adoptRef(new JavaScriptCallFrame(debuggerCallFrame, caller, sourceID, textPosition));
45dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    }
46dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
47dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void invalidate()
48dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    {
49dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        m_isValid = false;
50dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        m_debuggerCallFrame = 0;
51dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    }
52dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
53dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    bool isValid() const { return m_isValid; }
54dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
55dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    JavaScriptCallFrame* caller();
56dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
57dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    intptr_t sourceID() const { return m_sourceID; }
58ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    int line() const { return m_textPosition.m_line.oneBasedInt(); }
59ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    int column() const { return m_textPosition.m_column.oneBasedInt(); }
60ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch
61ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    void update(const JSC::DebuggerCallFrame& debuggerCallFrame, intptr_t sourceID, const TextPosition1& textPosition)
62dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    {
63dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        m_debuggerCallFrame = debuggerCallFrame;
64ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        m_textPosition = textPosition;
65dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        m_sourceID = sourceID;
66dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        m_isValid = true;
67dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    }
68dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
69dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    String functionName() const;
70dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    JSC::DebuggerCallFrame::Type type() const;
71dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    const JSC::ScopeChainNode* scopeChain() const;
72dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    JSC::JSGlobalObject* dynamicGlobalObject() const;
73dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
74dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    JSC::JSObject* thisObject() const;
75dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    JSC::JSValue evaluate(const JSC::UString& script, JSC::JSValue& exception) const;
76dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
77dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockprivate:
78ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    JavaScriptCallFrame(const JSC::DebuggerCallFrame&, PassRefPtr<JavaScriptCallFrame> caller, intptr_t sourceID, const TextPosition1&);
79dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
80dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    JSC::DebuggerCallFrame m_debuggerCallFrame;
81dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    RefPtr<JavaScriptCallFrame> m_caller;
82dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    intptr_t m_sourceID;
83ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    TextPosition1 m_textPosition;
84dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    bool m_isValid;
85dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block};
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
895f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#endif // ENABLE(JAVASCRIPT_DEBUGGER)
905f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // JavaScriptCallFrame_h
92