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