• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2025 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     ALLOW_REQUIRED_INSTANTIATION = 1U << 2U,
31     HAS_EXPORT_ALIAS = 1U << 3U,
32     GENERATE_VALUE_OF = 1U << 4U,
33     RECHECK = 1U << 5U,
34     NOCLEANUP = 1U << 6U,
35     RESIZABLE_REST = 1U << 7U,
36     // TO BE REMOVED AFTER COMPLETE PRIMITIVE TYPES REFACTORING, DO NOT USE!!
37     TMP_CONVERT_PRIMITIVE_CAST_METHOD_CALL = 1U << 8U,
38     /* do not introduce new flags. all the existing to be removed */
39 };
40 
41 enum class ModifierFlags : uint32_t {
42     NONE = 0U,
43     STATIC = 1U << 0U,
44     ASYNC = 1U << 1U,
45     PUBLIC = 1U << 2U,
46     PROTECTED = 1U << 3U,
47     PRIVATE = 1U << 4U,
48     DECLARE = 1U << 5U,
49     READONLY = 1U << 6U,
50     OPTIONAL = 1U << 7U,
51     DEFINITE = 1U << 8U,
52     ABSTRACT = 1U << 9U,
53     CONST = 1U << 10U,
54     FINAL = 1U << 11U,
55     NATIVE = 1U << 12U,
56     OVERRIDE = 1U << 13U,
57     CONSTRUCTOR = 1U << 14U,
58     SYNCHRONIZED = 1U << 15U,
59     FUNCTIONAL = 1U << 16U,
60     IN = 1U << 17U,
61     OUT = 1U << 18U,
62     INTERNAL = 1U << 19U,
63     EXPORT = 1U << 20U,
64     GETTER = 1U << 21U,
65     SETTER = 1U << 22U,
66     DEFAULT_EXPORT = 1U << 23U,
67     EXPORT_TYPE = 1U << 24U,
68     SUPER_OWNER = 1U << 26U,
69     ANNOTATION_DECLARATION = 1U << 27U,
70     ANNOTATION_USAGE = 1U << 28U,
71     READONLY_PARAMETER = 1U << 29U,
72     ARRAY_SETTER = 1U << 30U,
73     ACCESS = PUBLIC | PROTECTED | PRIVATE | INTERNAL,
74     ALL = STATIC | ASYNC | ACCESS | DECLARE | READONLY | ABSTRACT,
75     ALLOWED_IN_CTOR_PARAMETER = ACCESS | READONLY,
76     INTERNAL_PROTECTED = INTERNAL | PROTECTED,
77     ACCESSOR_MODIFIERS = ABSTRACT | FINAL,
78     GETTER_SETTER = GETTER | SETTER,
79     EXPORTED = EXPORT | DEFAULT_EXPORT | EXPORT_TYPE
80 };
81 
82 enum class PrivateFieldKind { FIELD, METHOD, GET, SET, STATIC_FIELD, STATIC_METHOD, STATIC_GET, STATIC_SET };
83 
84 enum class ScriptFunctionFlags : uint32_t {
85     NONE = 0U,
86     GENERATOR = 1U << 0U,
87     ASYNC = 1U << 1U,
88     ARROW = 1U << 2U,
89     EXPRESSION = 1U << 3U,
90     OVERLOAD = 1U << 4U,
91     CONSTRUCTOR = 1U << 5U,
92     METHOD = 1U << 6U,
93     STATIC_BLOCK = 1U << 7U,
94     HIDDEN = 1U << 8U,
95     IMPLICIT_SUPER_CALL_NEEDED = 1U << 9U,
96     ENUM = 1U << 10U,
97     EXTERNAL = 1U << 11U,
98     PROXY = 1U << 12U,
99     THROWS = 1U << 13U,
100     RETHROWS = 1U << 14U,
101     GETTER = 1U << 15U,
102     SETTER = 1U << 16U,
103     ENTRY_POINT = 1U << 17U,
104     HAS_RETURN = 1U << 18U,
105     ASYNC_IMPL = 1U << 19U,
106     EXTERNAL_OVERLOAD = 1U << 20U,
107     HAS_THROW = 1U << 21U,
108 };
109 
110 enum class TSOperatorType { READONLY, KEYOF, UNIQUE };
111 enum class MappedOption { NO_OPTS, PLUS, MINUS };
112 
113 enum class BoxingUnboxingFlags : uint32_t {
114     NONE = 0U,
115     BOX_TO_BOOLEAN = 1U << 0U,
116     BOX_TO_BYTE = 1U << 1U,
117     BOX_TO_SHORT = 1U << 2U,
118     BOX_TO_CHAR = 1U << 3U,
119     BOX_TO_INT = 1U << 4U,
120     BOX_TO_LONG = 1U << 5U,
121     BOX_TO_FLOAT = 1U << 6U,
122     BOX_TO_DOUBLE = 1U << 7U,
123     BOX_TO_ENUM = 1U << 8U,
124     UNBOX_TO_BOOLEAN = 1U << 9U,
125     UNBOX_TO_BYTE = 1U << 10U,
126     UNBOX_TO_SHORT = 1U << 11U,
127     UNBOX_TO_CHAR = 1U << 12U,
128     UNBOX_TO_INT = 1U << 13U,
129     UNBOX_TO_LONG = 1U << 14U,
130     UNBOX_TO_FLOAT = 1U << 15U,
131     UNBOX_TO_DOUBLE = 1U << 16U,
132     BOXING_FLAG = BOX_TO_BOOLEAN | BOX_TO_BYTE | BOX_TO_SHORT | BOX_TO_CHAR | BOX_TO_INT | BOX_TO_LONG | BOX_TO_FLOAT |
133                   BOX_TO_DOUBLE | BOX_TO_ENUM,
134     UNBOXING_FLAG = UNBOX_TO_BOOLEAN | UNBOX_TO_BYTE | UNBOX_TO_SHORT | UNBOX_TO_CHAR | UNBOX_TO_INT | UNBOX_TO_LONG |
135                     UNBOX_TO_FLOAT | UNBOX_TO_DOUBLE,
136 };
137 }  // namespace ark::es2panda::ir
138 
139 namespace enumbitops {
140 
141 template <>
142 struct IsAllowedType<ark::es2panda::ir::AstNodeFlags> : std::true_type {
143 };
144 
145 template <>
146 struct IsAllowedType<ark::es2panda::ir::ModifierFlags> : std::true_type {
147 };
148 
149 template <>
150 struct IsAllowedType<ark::es2panda::ir::ScriptFunctionFlags> : std::true_type {
151 };
152 
153 template <>
154 struct IsAllowedType<ark::es2panda::ir::BoxingUnboxingFlags> : std::true_type {
155 };
156 
157 }  // namespace enumbitops
158 
159 #endif
160