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_COMPILER_CHECKER_TYPES_TYPE_FLAG_H 17 #define ES2PANDA_COMPILER_CHECKER_TYPES_TYPE_FLAG_H 18 19 #include "util/enumbitops.h" 20 21 #include <cinttypes> 22 23 namespace ark::es2panda::checker { 24 25 using ENUMBITOPS_OPERATORS; 26 27 enum class TypeFlag : uint64_t { 28 NONE = 0, 29 NUMBER = 1ULL << 0ULL, // x: number 30 STRING = 1ULL << 1ULL, // x: string 31 BOOLEAN = 1ULL << 2ULL, // x: boolean 32 VOID = 1ULL << 3ULL, // x: void 33 NULL_TYPE = 1ULL << 4ULL, // x: null 34 UNDEFINED = 1ULL << 5ULL, // x: undefined 35 UNKNOWN = 1ULL << 6ULL, // x: unknown 36 NEVER = 1ULL << 7ULL, // x: never 37 UNION = 1ULL << 8ULL, // x: a | b 38 OBJECT = 1ULL << 9ULL, // x: object 39 BIGINT = 1ULL << 10ULL, // x: bigint 40 BOOLEAN_LITERAL = 1ULL << 11ULL, // x: true 41 NUMBER_LITERAL = 1ULL << 12ULL, // x: 10 42 STRING_LITERAL = 1ULL << 13ULL, // x: "foo" 43 BIGINT_LITERAL = 1ULL << 14ULL, // x: 10n 44 ENUM = 1ULL << 15ULL, // enum x 45 ENUM_LITERAL = 1ULL << 16ULL, // member of enum 46 SYMBOL = 1ULL << 17ULL, // x: symbol 47 UNIQUE_SYMBOL = 1ULL << 18ULL, // one of JS unique symbols 48 TYPE_PARAMETER = 1ULL << 19ULL, // function<x> 49 INTERSECTION = 1ULL << 20ULL, // x: a & b 50 INDEX = 1ULL << 21ULL, // keyof x 51 INDEX_ACCESS = 1ULL << 22ULL, // x[a] 52 CONDITIONAL = 1ULL << 23ULL, // x extends a ? b : c 53 SUBSTITUTION = 1ULL << 24ULL, // type parameter substitution 54 TEMPLATE_LITERAL = 1ULL << 25ULL, // x: `hello ${World}` 55 STRING_MAPPING = 1ULL << 27ULL, // Uppercase/Lowercase type 56 ANY = 1ULL << 28ULL, // x: any 57 ARRAY = 1ULL << 29ULL, // x: number[] 58 FUNCTION = 1ULL << 30ULL, // x: (a) => b 59 NON_PRIMITIVE = 1ULL << 31ULL, // x: object 60 TYPE_REFERENCE = 1ULL << 32ULL, // x: A 61 READONLY = 1ULL << 33ULL, // type assigned to a readonly property 62 CONSTANT = 1ULL << 34ULL, // type for constant expressions containing the associated constant value 63 BYTE = 1ULL << 35ULL, // x: byte 64 SHORT = 1ULL << 36ULL, // x: short 65 INT = 1ULL << 37ULL, // x: int 66 LONG = 1ULL << 38ULL, // x: long 67 FLOAT = 1ULL << 39ULL, // x: float 68 DOUBLE = 1ULL << 40ULL, // x: double 69 CHAR = 1ULL << 41ULL, // x: char 70 ETS_BOOLEAN = 1ULL << 42ULL, // ETS boolean type 71 ETS_VOID = 1ULL << 43ULL, // ETS void type 72 ETS_OBJECT = 1ULL << 44ULL, // ETS class or interface type 73 ETS_ARRAY = 1ULL << 45ULL, // ETS array type 74 WILDCARD = 1ULL << 46ULL, // new A<?>() 75 ETS_TYPE_PARAMETER = 1ULL << 47ULL, // ETS type parameter 76 ETS_TYPE_REFERENCE = 1ULL << 48ULL, // ETS type reference 77 GENERIC = 1ULL << 49ULL, // ETS Generic 78 ETS_INT_ENUM = 1ULL << 50ULL, // ETS Enum 79 ETS_STRING_ENUM = 1ULL << 51ULL, // ETS string-type Enumeration 80 ETS_DYNAMIC_FLAG = 1ULL << 52ULL, // ETS Dynamic flag 81 GETTER = 1ULL << 53ULL, // ETS Getter 82 SETTER = 1ULL << 54ULL, // ETS Setter 83 ETS_EXTENSION_FUNC_HELPER = 1ULL << 55ULL, // ETS Extension Function Helper 84 ETS_UNION = 1ULL << 56ULL, // ETS union 85 ETS_TUPLE = 1ULL << 57ULL, // ETS tuple type 86 ETS_NULL = 1ULL << 58ULL, // ETS null 87 ETS_UNDEFINED = 1ULL << 59ULL, // ETS undefined 88 ETS_NONNULLISH = 1ULL << 60ULL, // ETS nonnullish type parameter 89 ETS_READONLY = 1ULL << 61ULL, // ETS readonly type parameter 90 ETS_REQUIRED_TYPE_PARAMETER = 1ULL << 62ULL, // ETS Required type parameter 91 TYPE_ERROR = 1ULL << 63ULL, // type error 92 ETS_DYNAMIC_TYPE = ETS_OBJECT | ETS_DYNAMIC_FLAG, 93 ETS_DYNAMIC_FUNCTION_TYPE = FUNCTION | ETS_DYNAMIC_FLAG, 94 ETS_TYPE = BYTE | SHORT | INT | LONG | FLOAT | DOUBLE | CHAR | ETS_BOOLEAN | ETS_VOID | ETS_OBJECT | ETS_ARRAY | 95 WILDCARD | ETS_TYPE_PARAMETER | ETS_INT_ENUM | ETS_STRING_ENUM | ETS_DYNAMIC_TYPE | ETS_UNION | 96 ETS_NULL | ETS_UNDEFINED | ETS_NONNULLISH | ETS_READONLY, 97 ETS_PRIMITIVE = BYTE | SHORT | INT | LONG | FLOAT | DOUBLE | CHAR | ETS_BOOLEAN, 98 ETS_PRIMITIVE_RETURN = ETS_PRIMITIVE | ETS_INT_ENUM, 99 ETS_ARRAY_INDEX = BYTE | SHORT | INT, 100 ETS_INTEGRAL = BYTE | CHAR | SHORT | INT | LONG, 101 ETS_FLOATING_POINT = FLOAT | DOUBLE, 102 ETS_NUMERIC = BYTE | SHORT | INT | LONG | ETS_FLOATING_POINT, 103 ETS_CONVERTIBLE_TO_NUMERIC = ETS_NUMERIC | CHAR | ETS_INT_ENUM, 104 ETS_ARRAY_OR_OBJECT = ETS_ARRAY | ETS_OBJECT, 105 ETS_WIDE_NUMERIC = LONG | DOUBLE, 106 VALID_SWITCH_TYPE = BYTE | SHORT | INT | CHAR | LONG | ETS_INT_ENUM | ETS_STRING_ENUM, 107 NARROWABLE_TO_FLOAT = DOUBLE, 108 NARROWABLE_TO_LONG = FLOAT | NARROWABLE_TO_FLOAT, 109 NARROWABLE_TO_INT = LONG | NARROWABLE_TO_LONG, 110 NARROWABLE_TO_CHAR = SHORT | INT | NARROWABLE_TO_INT, 111 NARROWABLE_TO_SHORT = CHAR | INT | NARROWABLE_TO_INT, 112 NARROWABLE_TO_BYTE = CHAR | NARROWABLE_TO_CHAR, 113 WIDENABLE_TO_SHORT = BYTE, 114 WIDENABLE_TO_CHAR = BYTE, 115 WIDENABLE_TO_INT = CHAR | SHORT | WIDENABLE_TO_SHORT, 116 WIDENABLE_TO_LONG = INT | WIDENABLE_TO_INT, 117 WIDENABLE_TO_FLOAT = LONG | WIDENABLE_TO_LONG, 118 WIDENABLE_TO_DOUBLE = FLOAT | WIDENABLE_TO_FLOAT, 119 COMPUTED_TYPE_LITERAL_NAME = STRING_LITERAL | NUMBER_LITERAL | ENUM, 120 COMPUTED_NAME = COMPUTED_TYPE_LITERAL_NAME | STRING | NUMBER | ANY | SYMBOL, 121 ANY_OR_UNKNOWN = ANY | UNKNOWN, 122 ANY_OR_VOID = ANY | VOID, 123 ANY_OR_NULLISH = ANY | UNDEFINED | NULL_TYPE, 124 LITERAL = NUMBER_LITERAL | BOOLEAN_LITERAL | STRING_LITERAL | BIGINT_LITERAL, 125 NUMBER_LIKE = NUMBER | NUMBER_LITERAL, 126 NUMBER_LIKE_ENUM = NUMBER_LIKE | ENUM, 127 STRING_LIKE = STRING | STRING_LITERAL, 128 BOOLEAN_LIKE = BOOLEAN | BOOLEAN_LITERAL, 129 BIGINT_LIKE = BIGINT | BIGINT_LITERAL, 130 VOID_LIKE = VOID | UNDEFINED, 131 NUMBER_OR_ANY = NUMBER | ANY, 132 PRIMITIVE = STRING | NUMBER | BIGINT | BOOLEAN | ENUM | ENUM_LITERAL | SYMBOL | VOID | UNDEFINED | NULL_TYPE | 133 LITERAL | UNIQUE_SYMBOL, 134 PRIMITIVE_OR_ANY = PRIMITIVE | ANY, 135 UNION_OR_INTERSECTION = UNION | INTERSECTION, 136 DEFINITELY_FALSY = 137 STRING_LITERAL | NUMBER_LITERAL | BOOLEAN_LITERAL | BIGINT_LITERAL | VOID | UNDEFINED | NULL_TYPE, 138 POSSIBLY_FALSY = DEFINITELY_FALSY | STRING | NUMBER | BOOLEAN | BIGINT, 139 VALID_ARITHMETIC_TYPE = ANY | NUMBER_LIKE | BIGINT_LIKE | ENUM, 140 UNIT = LITERAL | UNIQUE_SYMBOL | UNDEFINED | NULL_TYPE, 141 GETTER_SETTER = GETTER | SETTER, 142 CONDITION_EXPRESSION_TYPE = ETS_NULL | ETS_UNDEFINED | ETS_OBJECT | ETS_ARRAY | ETS_UNION | CONSTANT | BYTE | CHAR | 143 SHORT | INT | LONG | FLOAT | DOUBLE | ETS_BOOLEAN | ETS_INT_ENUM | ETS_STRING_ENUM 144 }; 145 146 } // namespace ark::es2panda::checker 147 148 template <> 149 struct enumbitops::IsAllowedType<ark::es2panda::checker::TypeFlag> : std::true_type { 150 }; 151 152 #endif /* TYPESCRIPT_TYPES_TYPE_FLAG_H */ 153