]>
git.saurik.com Git - apple/javascriptcore.git/blob - debugger/DebuggerCallFrame.cpp
   2  * Copyright (C) 2008 Apple Inc. All rights reserved. 
   4  * Redistribution and use in source and binary forms, with or without 
   5  * modification, are permitted provided that the following conditions 
   8  * 1.  Redistributions of source code must retain the above copyright 
   9  *     notice, this list of conditions and the following disclaimer. 
  10  * 2.  Redistributions in binary form must reproduce the above copyright 
  11  *     notice, this list of conditions and the following disclaimer in the 
  12  *     documentation and/or other materials provided with the distribution. 
  13  * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of 
  14  *     its contributors may be used to endorse or promote products derived 
  15  *     from this software without specific prior written permission. 
  17  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 
  18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
  19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
  20  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 
  21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
  22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
  23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
  24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
  25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
  26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  30 #include "DebuggerCallFrame.h" 
  32 #include "JSFunction.h" 
  33 #include "CodeBlock.h" 
  34 #include "Interpreter.h" 
  39 const UString
* DebuggerCallFrame::functionName() const 
  41     if (!m_callFrame
->codeBlock()) 
  44     if (!m_callFrame
->callee()) 
  47     JSObject
* function 
= m_callFrame
->callee(); 
  48     if (!function 
|| !function
->inherits(&JSFunction::s_info
)) 
  50     return &jsCast
<JSFunction
*>(function
)->name(m_callFrame
); 
  53 UString 
DebuggerCallFrame::calculatedFunctionName() const 
  55     if (!m_callFrame
->codeBlock()) 
  58     JSObject
* function 
= m_callFrame
->callee(); 
  63     return getCalculatedDisplayName(m_callFrame
, function
); 
  66 DebuggerCallFrame::Type 
DebuggerCallFrame::type() const 
  68     if (m_callFrame
->callee()) 
  74 JSObject
* DebuggerCallFrame::thisObject() const 
  76     CodeBlock
* codeBlock 
= m_callFrame
->codeBlock(); 
  80     JSValue thisValue 
= m_callFrame
->uncheckedR(codeBlock
->thisRegister()).jsValue(); 
  81     if (!thisValue
.isObject()) 
  84     return asObject(thisValue
); 
  87 JSValue 
DebuggerCallFrame::evaluate(const UString
& script
, JSValue
& exception
) const 
  89     if (!m_callFrame
->codeBlock()) 
  92     JSGlobalData
& globalData 
= m_callFrame
->globalData(); 
  93     EvalExecutable
* eval 
= EvalExecutable::create(m_callFrame
, makeSource(script
), m_callFrame
->codeBlock()->isStrictMode()); 
  94     if (globalData
.exception
) { 
  95         exception 
= globalData
.exception
; 
  96         globalData
.exception 
= JSValue(); 
  99     JSValue result 
= globalData
.interpreter
->execute(eval
, m_callFrame
, thisObject(), m_callFrame
->scopeChain()); 
 100     if (globalData
.exception
) { 
 101         exception 
= globalData
.exception
; 
 102         globalData
.exception 
= JSValue();