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