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:
4281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    static PassRefPtr<JavaScriptCallFrame> create(const JSC::DebuggerCallFrame& debuggerCallFrame, PassRefPtr<JavaScriptCallFrame> caller, intptr_t sourceID, const TextPosition0& 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; }
5881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    const TextPosition0& position() const { return m_textPosition; }
5981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    int line() const { return m_textPosition.m_line.zeroBasedInt(); }
6081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    int column() const { return m_textPosition.m_column.zeroBasedInt(); }
61ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch
6281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void update(const JSC::DebuggerCallFrame& debuggerCallFrame, intptr_t sourceID, const TextPosition0& textPosition)
63dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    {
64dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        m_debuggerCallFrame = debuggerCallFrame;
65ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        m_textPosition = textPosition;
66dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        m_sourceID = sourceID;
67dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        m_isValid = true;
68dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    }
69dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
70dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    String functionName() const;
71dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    JSC::DebuggerCallFrame::Type type() const;
7281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    JSC::ScopeChainNode* scopeChain() const;
73dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    JSC::JSGlobalObject* dynamicGlobalObject() const;
74dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
75dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    JSC::JSObject* thisObject() const;
76dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    JSC::JSValue evaluate(const JSC::UString& script, JSC::JSValue& exception) const;
77dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
78dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockprivate:
7981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    JavaScriptCallFrame(const JSC::DebuggerCallFrame&, PassRefPtr<JavaScriptCallFrame> caller, intptr_t sourceID, const TextPosition0&);
80dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
81dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    JSC::DebuggerCallFrame m_debuggerCallFrame;
82dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    RefPtr<JavaScriptCallFrame> m_caller;
83dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    intptr_t m_sourceID;
8481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    TextPosition0 m_textPosition;
85dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    bool m_isValid;
86dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block};
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
905f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#endif // ENABLE(JAVASCRIPT_DEBUGGER)
915f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // JavaScriptCallFrame_h
93