1/* 2 * Copyright (C) 2014 Apple Inc. All rights reserved. 3 * Copyright (c) 2008, Google Inc. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: 8 * 9 * * Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * * Redistributions in binary form must reproduce the above 12 * copyright notice, this list of conditions and the following disclaimer 13 * in the documentation and/or other materials provided with the 14 * distribution. 15 * * Neither the name of Google Inc. nor the names of its 16 * contributors may be used to endorse or promote products derived from 17 * this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32#include "config.h" 33#include "ScriptCallStack.h" 34 35#include "InspectorValues.h" 36 37namespace Inspector { 38 39PassRefPtr<ScriptCallStack> ScriptCallStack::create() 40{ 41 return adoptRef(new ScriptCallStack); 42} 43 44PassRefPtr<ScriptCallStack> ScriptCallStack::create(Vector<ScriptCallFrame>& frames) 45{ 46 return adoptRef(new ScriptCallStack(frames)); 47} 48 49ScriptCallStack::ScriptCallStack() 50{ 51} 52 53ScriptCallStack::ScriptCallStack(Vector<ScriptCallFrame>& frames) 54{ 55 m_frames.swap(frames); 56} 57 58ScriptCallStack::~ScriptCallStack() 59{ 60} 61 62const ScriptCallFrame& ScriptCallStack::at(size_t index) const 63{ 64 ASSERT(m_frames.size() > index); 65 return m_frames[index]; 66} 67 68size_t ScriptCallStack::size() const 69{ 70 return m_frames.size(); 71} 72 73const ScriptCallFrame* ScriptCallStack::firstNonNativeCallFrame() const 74{ 75 if (!m_frames.size()) 76 return nullptr; 77 78 for (size_t i = 0; i < m_frames.size(); ++i) { 79 const ScriptCallFrame& frame = m_frames[i]; 80 if (frame.sourceURL() != "[native code]") 81 return &frame; 82 } 83 84 return nullptr; 85} 86 87void ScriptCallStack::append(const ScriptCallFrame& frame) 88{ 89 m_frames.append(frame); 90} 91 92bool ScriptCallStack::isEqual(ScriptCallStack* o) const 93{ 94 if (!o) 95 return false; 96 97 size_t frameCount = o->m_frames.size(); 98 if (frameCount != m_frames.size()) 99 return false; 100 101 for (size_t i = 0; i < frameCount; ++i) { 102 if (!m_frames[i].isEqual(o->m_frames[i])) 103 return false; 104 } 105 106 return true; 107} 108 109#if ENABLE(INSPECTOR) 110PassRefPtr<Inspector::TypeBuilder::Array<Inspector::TypeBuilder::Console::CallFrame>> ScriptCallStack::buildInspectorArray() const 111{ 112 RefPtr<Inspector::TypeBuilder::Array<Inspector::TypeBuilder::Console::CallFrame>> frames = Inspector::TypeBuilder::Array<Inspector::TypeBuilder::Console::CallFrame>::create(); 113 for (size_t i = 0; i < m_frames.size(); i++) 114 frames->addItem(m_frames.at(i).buildInspectorObject()); 115 return frames; 116} 117#endif 118 119} // namespace Inspector 120