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