1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2  * vim: set ts=8 sts=4 et sw=4 tw=99:
3  * This Source Code Form is subject to the terms of the Mozilla Public
4  * License, v. 2.0. If a copy of the MPL was not distributed with this
5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 
7 #ifndef jit_JitFrameIterator_inl_h
8 #define jit_JitFrameIterator_inl_h
9 
10 #include "jit/JitFrameIterator.h"
11 
12 #include "jit/Bailouts.h"
13 #include "jit/BaselineFrame.h"
14 #include "jit/JitFrames.h"
15 
16 namespace js {
17 namespace jit {
18 
19 inline JitFrameLayout*
framePtr()20 JitProfilingFrameIterator::framePtr()
21 {
22     MOZ_ASSERT(!done());
23     return (JitFrameLayout*) fp_;
24 }
25 
26 inline JSScript*
frameScript()27 JitProfilingFrameIterator::frameScript()
28 {
29     return ScriptFromCalleeToken(framePtr()->calleeToken());
30 }
31 
32 inline BaselineFrame*
baselineFrame()33 JitFrameIterator::baselineFrame() const
34 {
35     MOZ_ASSERT(isBaselineJS());
36     return (BaselineFrame*)(fp() - BaselineFrame::FramePointerOffset - BaselineFrame::Size());
37 }
38 
39 template <typename T>
40 bool
isExitFrameLayout()41 JitFrameIterator::isExitFrameLayout() const
42 {
43     if (!isExitFrame() || isFakeExitFrame())
44         return false;
45     return exitFrame()->is<T>();
46 }
47 
48 } // namespace jit
49 } // namespace js
50 
51 #endif /* jit_JitFrameIterator_inl_h */
52