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