WebAssembly: Wasm::IndexOrName has a raw pointer to Name
[WebKit-https.git] / Source / JavaScriptCore / runtime / StackFrame.h
1 /*
2  * Copyright (C) 2016-2017 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 #pragma once
27
28 #include "WasmIndexOrName.h"
29 #include "WriteBarrier.h"
30 #include <limits.h>
31
32 namespace JSC {
33
34 class CodeBlock;
35 class JSObject;
36 class SlotVisitor;
37
38 class StackFrame {
39 public:
40     StackFrame(VM&, JSCell* owner, JSCell* callee);
41     StackFrame(VM&, JSCell* owner, JSCell* callee, CodeBlock*, unsigned bytecodeOffset);
42     StackFrame(Wasm::IndexOrName);
43
44     bool hasLineAndColumnInfo() const { return !!m_codeBlock; }
45     
46     void computeLineAndColumn(unsigned& line, unsigned& column) const;
47     String functionName(VM&) const;
48     intptr_t sourceID() const;
49     String sourceURL() const;
50     String toString(VM&) const;
51
52     bool hasBytecodeOffset() const { return m_bytecodeOffset != UINT_MAX && !m_isWasmFrame; }
53     unsigned bytecodeOffset()
54     {
55         ASSERT(hasBytecodeOffset());
56         return m_bytecodeOffset;
57     }
58     
59     void visitChildren(SlotVisitor&);
60
61 private:
62     WriteBarrier<JSCell> m_callee { };
63     WriteBarrier<CodeBlock> m_codeBlock { };
64     Wasm::IndexOrName m_wasmFunctionIndexOrName;
65     unsigned m_bytecodeOffset { UINT_MAX };
66     bool m_isWasmFrame { false };
67 };
68
69 } // namespace JSC
70