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 23namespace ark::es2panda::ir { 24 25using ENUMBITOPS_OPERATORS; 26 27enum 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 38enum 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 75enum class PrivateFieldKind { FIELD, METHOD, GET, SET, STATIC_FIELD, STATIC_METHOD, STATIC_GET, STATIC_SET }; 76 77enum 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 103enum class TSOperatorType { READONLY, KEYOF, UNIQUE }; 104enum class MappedOption { NO_OPTS, PLUS, MINUS }; 105 106enum 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 133namespace enumbitops { 134 135template <> 136struct IsAllowedType<ark::es2panda::ir::AstNodeFlags> : std::true_type { 137}; 138 139template <> 140struct IsAllowedType<ark::es2panda::ir::ModifierFlags> : std::true_type { 141}; 142 143template <> 144struct IsAllowedType<ark::es2panda::ir::ScriptFunctionFlags> : std::true_type { 145}; 146 147template <> 148struct IsAllowedType<ark::es2panda::ir::BoxingUnboxingFlags> : std::true_type { 149}; 150 151} // namespace enumbitops 152 153#endif 154