Enable SharedArrayBuffer, remove the flag
[WebKit-https.git] / Source / JavaScriptCore / runtime / RuntimeFlags.h
1 /*
2  * Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
3  * Copyright (C) 2016 Apple 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
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
15  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
16  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
18  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
24  * THE POSSIBILITY OF SUCH DAMAGE.
25  */
26
27 #pragma once
28
29 #include <initializer_list>
30
31 namespace JSC {
32
33 // macro(name, isEnabledFlag)
34 #define JSC_RUNTIME_FLAG(macro)
35
36 class RuntimeFlags {
37 private:
38     enum RuntimeFlagShiftValue : unsigned {
39 #define JSC_DECLARE_RUNTIME_FLAG_SHIFT_VALUE(name, isEnabledFlag) shiftValueFor##name,
40         JSC_RUNTIME_FLAG(JSC_DECLARE_RUNTIME_FLAG_SHIFT_VALUE)
41 #undef JSC_DECLARE_RUNTIME_FLAG_SHIFT_VALUE
42     };
43
44 public:
45     enum RuntimeFlag : unsigned {
46 #define JSC_DECLARE_RUNTIME_FLAG(name, isEnabledFlag) name = 1u << (shiftValueFor##name),
47         JSC_RUNTIME_FLAG(JSC_DECLARE_RUNTIME_FLAG)
48 #undef JSC_DECLARE_RUNTIME_FLAG
49     };
50
51 #define JSC_DECLARE_RUNTIME_FLAG_ACCESSOR(name, isEnabledFlag) \
52     void set##name(bool value)\
53     {\
54         if (value)\
55             m_flags |= name;\
56         else\
57             m_flags &= (~name);\
58     }\
59     bool is##name() const\
60     {\
61         return m_flags & name;\
62     }
63     JSC_RUNTIME_FLAG(JSC_DECLARE_RUNTIME_FLAG_ACCESSOR)
64 #undef JSC_DECLARE_RUNTIME_FLAG_ACCESSOR
65
66     RuntimeFlags()
67         : RuntimeFlags(0u)
68     {
69     }
70
71     RuntimeFlags(std::initializer_list<RuntimeFlag> initializerList)
72         : RuntimeFlags()
73     {
74         for (RuntimeFlag flag : initializerList)
75             m_flags |= flag;
76     }
77
78     explicit RuntimeFlags(unsigned flags)
79         : m_flags(flags)
80     {
81     }
82
83     static RuntimeFlags createAllEnabled()
84     {
85         return RuntimeFlags(
86 #define JSC_USE_RUNTIME_FLAG(name, isEnabledFlag) ((isEnabledFlag) ? name : 0u) |
87             JSC_RUNTIME_FLAG(JSC_USE_RUNTIME_FLAG)
88 #undef JSC_USE_RUNTIME_FLAG
89             0u
90         );
91     }
92
93 private:
94     unsigned m_flags;
95 };
96
97 } // namespace JSC