Home | History | Annotate | Download | only in inspector
      1 /*
      2  * Copyright (C) 2008 Apple Inc. All Rights Reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
     14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
     17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 #include "config.h"
     27 #include "JavaScriptCallFrame.h"
     28 #include "JSDOMBinding.h"
     29 
     30 #if ENABLE(JAVASCRIPT_DEBUGGER) && USE(JSC)
     31 
     32 #include "PlatformString.h"
     33 #include <debugger/DebuggerCallFrame.h>
     34 #include <runtime/JSGlobalObject.h>
     35 #include <runtime/Completion.h>
     36 #include <runtime/JSLock.h>
     37 #include <runtime/JSObject.h>
     38 #include <runtime/JSValue.h>
     39 
     40 using namespace JSC;
     41 
     42 namespace WebCore {
     43 
     44 JavaScriptCallFrame::JavaScriptCallFrame(const DebuggerCallFrame& debuggerCallFrame, PassRefPtr<JavaScriptCallFrame> caller, intptr_t sourceID, int line)
     45     : m_debuggerCallFrame(debuggerCallFrame)
     46     , m_caller(caller)
     47     , m_sourceID(sourceID)
     48     , m_line(line)
     49     , m_isValid(true)
     50 {
     51 }
     52 
     53 JavaScriptCallFrame* JavaScriptCallFrame::caller()
     54 {
     55     return m_caller.get();
     56 }
     57 
     58 const JSC::ScopeChainNode* JavaScriptCallFrame::scopeChain() const
     59 {
     60     ASSERT(m_isValid);
     61     if (!m_isValid)
     62         return 0;
     63     return m_debuggerCallFrame.scopeChain();
     64 }
     65 
     66 JSC::JSGlobalObject* JavaScriptCallFrame::dynamicGlobalObject() const
     67 {
     68     ASSERT(m_isValid);
     69     if (!m_isValid)
     70         return 0;
     71     return m_debuggerCallFrame.dynamicGlobalObject();
     72 }
     73 
     74 String JavaScriptCallFrame::functionName() const
     75 {
     76     ASSERT(m_isValid);
     77     if (!m_isValid)
     78         return String();
     79     UString functionName = m_debuggerCallFrame.calculatedFunctionName();
     80     if (functionName.isEmpty())
     81         return String();
     82     return functionName;
     83 }
     84 
     85 DebuggerCallFrame::Type JavaScriptCallFrame::type() const
     86 {
     87     ASSERT(m_isValid);
     88     if (!m_isValid)
     89         return DebuggerCallFrame::ProgramType;
     90     return m_debuggerCallFrame.type();
     91 }
     92 
     93 JSObject* JavaScriptCallFrame::thisObject() const
     94 {
     95     ASSERT(m_isValid);
     96     if (!m_isValid)
     97         return 0;
     98     return m_debuggerCallFrame.thisObject();
     99 }
    100 
    101 // Evaluate some JavaScript code in the scope of this frame.
    102 JSValue JavaScriptCallFrame::evaluate(const UString& script, JSValue& exception) const
    103 {
    104     ASSERT(m_isValid);
    105     if (!m_isValid)
    106         return jsNull();
    107 
    108     JSLock lock(SilenceAssertionsOnly);
    109     return m_debuggerCallFrame.evaluate(script, exception);
    110 }
    111 
    112 } // namespace WebCore
    113 
    114 #endif // ENABLE(JAVASCRIPT_DEBUGGER)
    115