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