Remove excessive headers from JavaScriptCore
[WebKit-https.git] / Source / JavaScriptCore / dfg / DFGMinifiedNode.h
1 /*
2  * Copyright (C) 2012, 2014, 2015 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 #if ENABLE(DFG_JIT)
29
30 #include "DFGMinifiedID.h"
31 #include "DFGNodeType.h"
32 #include "InlineCallFrame.h"
33 #include "JSCJSValue.h"
34
35 namespace JSC { namespace DFG {
36
37 struct Node;
38
39 inline bool belongsInMinifiedGraph(NodeType type)
40 {
41     switch (type) {
42     case JSConstant:
43     case Int52Constant:
44     case DoubleConstant:
45     case PhantomDirectArguments:
46     case PhantomClonedArguments:
47         return true;
48     default:
49         return false;
50     }
51 }
52
53 class MinifiedNode {
54 public:
55     MinifiedNode() { }
56     
57     static MinifiedNode fromNode(Node*);
58     
59     MinifiedID id() const { return m_id; }
60     NodeType op() const { return m_op; }
61     
62     bool hasConstant() const { return hasConstant(m_op); }
63     
64     JSValue constant() const
65     {
66         return JSValue::decode(bitwise_cast<EncodedJSValue>(m_info));
67     }
68     
69     bool hasInlineCallFrame() const { return hasInlineCallFrame(m_op); }
70     
71     InlineCallFrame* inlineCallFrame() const
72     {
73         return bitwise_cast<InlineCallFrame*>(static_cast<uintptr_t>(m_info));
74     }
75     
76     static MinifiedID getID(MinifiedNode* node) { return node->id(); }
77     static bool compareByNodeIndex(const MinifiedNode& a, const MinifiedNode& b)
78     {
79         return a.m_id < b.m_id;
80     }
81     
82 private:
83     static bool hasConstant(NodeType type)
84     {
85         return type == JSConstant || type == Int52Constant || type == DoubleConstant;
86     }
87     
88     static bool hasInlineCallFrame(NodeType type)
89     {
90         return type == PhantomDirectArguments || type == PhantomClonedArguments;
91     }
92     
93     MinifiedID m_id;
94     uint64_t m_info;
95     NodeType m_op;
96 };
97
98 } } // namespace JSC::DFG
99
100 #endif // ENABLE(DFG_JIT)