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