• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef ES2PANDA_IR_AST_NODE_FLAGS_H
17 #define ES2PANDA_IR_AST_NODE_FLAGS_H
18 
19 #include <cstdint>
20 
21 #include "util/enumbitops.h"
22 
23 namespace ark::es2panda::ir {
24 
25 using ENUMBITOPS_OPERATORS;
26 
27 enum class AstNodeFlags {
28     NO_OPTS = 0,
29     CHECKCAST = 1U << 0U,
30     CONVERT_TO_STRING = 1U << 1U,
31     ALLOW_REQUIRED_INSTANTIATION = 1U << 2U,
32     HAS_EXPORT_ALIAS = 1U << 3U,
33     GENERATE_VALUE_OF = 1U << 4U,
34     GENERATE_GET_NAME = 1U << 5U,  // Transform the Enum[enumVar] MemberExpression to enumVar.getName() call
35     RECHECK = 1U << 6U,
36 };
37 
38 enum class ModifierFlags : uint32_t {
39     NONE = 0U,
40     STATIC = 1U << 0U,
41     ASYNC = 1U << 1U,
42     PUBLIC = 1U << 2U,
43     PROTECTED = 1U << 3U,
44     PRIVATE = 1U << 4U,
45     DECLARE = 1U << 5U,
46     READONLY = 1U << 6U,
47     OPTIONAL = 1U << 7U,
48     DEFINITE = 1U << 8U,
49     ABSTRACT = 1U << 9U,
50     CONST = 1U << 10U,
51     FINAL = 1U << 11U,
52     NATIVE = 1U << 12U,
53     OVERRIDE = 1U << 13U,
54     CONSTRUCTOR = 1U << 14U,
55     SYNCHRONIZED = 1U << 15U,
56     FUNCTIONAL = 1U << 16U,
57     IN = 1U << 17U,
58     OUT = 1U << 18U,
59     INTERNAL = 1U << 19U,
60     EXPORT = 1U << 20U,
61     GETTER = 1U << 21U,
62     SETTER = 1U << 22U,
63     DEFAULT_EXPORT = 1U << 23U,
64     EXPORT_TYPE = 1U << 24U,
65     SUPER_OWNER = 1U << 26U,
66     ACCESS = PUBLIC | PROTECTED | PRIVATE | INTERNAL,
67     ALL = STATIC | ASYNC | ACCESS | DECLARE | READONLY | ABSTRACT,
68     ALLOWED_IN_CTOR_PARAMETER = ACCESS | READONLY,
69     INTERNAL_PROTECTED = INTERNAL | PROTECTED,
70     ACCESSOR_MODIFIERS = ABSTRACT | FINAL,
71     GETTER_SETTER = GETTER | SETTER,
72     EXPORTED = EXPORT | DEFAULT_EXPORT | EXPORT_TYPE
73 };
74 
75 enum class PrivateFieldKind { FIELD, METHOD, GET, SET, STATIC_FIELD, STATIC_METHOD, STATIC_GET, STATIC_SET };
76 
77 enum class ScriptFunctionFlags : uint32_t {
78     NONE = 0U,
79     GENERATOR = 1U << 0U,
80     ASYNC = 1U << 1U,
81     ARROW = 1U << 2U,
82     EXPRESSION = 1U << 3U,
83     OVERLOAD = 1U << 4U,
84     CONSTRUCTOR = 1U << 5U,
85     METHOD = 1U << 6U,
86     STATIC_BLOCK = 1U << 7U,
87     HIDDEN = 1U << 8U,
88     IMPLICIT_SUPER_CALL_NEEDED = 1U << 9U,
89     ENUM = 1U << 10U,
90     EXTERNAL = 1U << 11U,
91     PROXY = 1U << 12U,
92     THROWS = 1U << 13U,
93     RETHROWS = 1U << 14U,
94     GETTER = 1U << 15U,
95     SETTER = 1U << 16U,
96     ENTRY_POINT = 1U << 17U,
97     INSTANCE_EXTENSION_METHOD = 1U << 18U,
98     HAS_RETURN = 1U << 19U,
99     ASYNC_IMPL = 1U << 20U,
100     EXTERNAL_OVERLOAD = 1U << 21U,
101 };
102 
103 enum class TSOperatorType { READONLY, KEYOF, UNIQUE };
104 enum class MappedOption { NO_OPTS, PLUS, MINUS };
105 
106 enum class BoxingUnboxingFlags : uint32_t {
107     NONE = 0U,
108     BOX_TO_BOOLEAN = 1U << 0U,
109     BOX_TO_BYTE = 1U << 1U,
110     BOX_TO_SHORT = 1U << 2U,
111     BOX_TO_CHAR = 1U << 3U,
112     BOX_TO_INT = 1U << 4U,
113     BOX_TO_LONG = 1U << 5U,
114     BOX_TO_FLOAT = 1U << 6U,
115     BOX_TO_DOUBLE = 1U << 7U,
116     BOX_TO_ENUM = 1U << 8U,
117     UNBOX_TO_BOOLEAN = 1U << 9U,
118     UNBOX_TO_BYTE = 1U << 10U,
119     UNBOX_TO_SHORT = 1U << 11U,
120     UNBOX_TO_CHAR = 1U << 12U,
121     UNBOX_TO_INT = 1U << 13U,
122     UNBOX_TO_LONG = 1U << 14U,
123     UNBOX_TO_FLOAT = 1U << 15U,
124     UNBOX_TO_DOUBLE = 1U << 16U,
125     UNBOX_TO_ENUM = 1U << 17U,
126     BOXING_FLAG = BOX_TO_BOOLEAN | BOX_TO_BYTE | BOX_TO_SHORT | BOX_TO_CHAR | BOX_TO_INT | BOX_TO_LONG | BOX_TO_FLOAT |
127                   BOX_TO_DOUBLE | BOX_TO_ENUM,
128     UNBOXING_FLAG = UNBOX_TO_BOOLEAN | UNBOX_TO_BYTE | UNBOX_TO_SHORT | UNBOX_TO_CHAR | UNBOX_TO_INT | UNBOX_TO_LONG |
129                     UNBOX_TO_FLOAT | UNBOX_TO_DOUBLE | UNBOX_TO_ENUM,
130 };
131 }  // namespace ark::es2panda::ir
132 
133 namespace enumbitops {
134 
135 template <>
136 struct IsAllowedType<ark::es2panda::ir::AstNodeFlags> : std::true_type {
137 };
138 
139 template <>
140 struct IsAllowedType<ark::es2panda::ir::ModifierFlags> : std::true_type {
141 };
142 
143 template <>
144 struct IsAllowedType<ark::es2panda::ir::ScriptFunctionFlags> : std::true_type {
145 };
146 
147 template <>
148 struct IsAllowedType<ark::es2panda::ir::BoxingUnboxingFlags> : std::true_type {
149 };
150 
151 }  // namespace enumbitops
152 
153 #endif
154