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_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 TYPE_PARAMETER = 1ULL << 18ULL, // function<x> 48 INTERSECTION = 1ULL << 19ULL, // x: a & b 49 INDEX = 1ULL << 20ULL, // keyof x 50 INDEX_ACCESS = 1ULL << 21ULL, // x[a] 51 TEMPLATE_LITERAL = 1ULL << 23ULL, // x: `hello ${World}` 52 ANY = 1ULL << 24ULL, // x: any 53 ARRAY = 1ULL << 25ULL, // x: number[] 54 FUNCTION = 1ULL << 26ULL, // x: (a) => b 55 NON_PRIMITIVE = 1ULL << 27ULL, // x: object 56 TYPE_REFERENCE = 1ULL << 28ULL, // x: A 57 READONLY = 1ULL << 29ULL, // type assigned to a readonly property 58 CONSTANT = 1ULL << 30ULL, // type for constant expressions containing the associated constant value 59 BYTE = 1ULL << 31ULL, // x: byte 60 SHORT = 1ULL << 32ULL, // x: short 61 INT = 1ULL << 33ULL, // x: int 62 LONG = 1ULL << 34ULL, // x: long 63 FLOAT = 1ULL << 35ULL, // x: float 64 DOUBLE = 1ULL << 36ULL, // x: double 65 CHAR = 1ULL << 37ULL, // x: char 66 ETS_BOOLEAN = 1ULL << 38ULL, // ETS boolean type 67 ETS_VOID = 1ULL << 39ULL, // ETS void type 68 ETS_OBJECT = 1ULL << 40ULL, // ETS class or interface type 69 ETS_ARRAY = 1ULL << 41ULL, // ETS array type 70 WILDCARD = 1ULL << 42ULL, // new A<?>() 71 ETS_TYPE_PARAMETER = 1ULL << 43ULL, // ETS type parameter 72 ETS_TYPE_REFERENCE = 1ULL << 44ULL, // ETS type reference 73 GENERIC = 1ULL << 45ULL, // ETS Generic 74 ETS_INT_ENUM = 1ULL << 46ULL, // ETS Enum 75 ETS_STRING_ENUM = 1ULL << 47ULL, // ETS string-type Enumeration 76 ETS_DYNAMIC_FLAG = 1ULL << 48ULL, // ETS Dynamic flag 77 GETTER = 1ULL << 49ULL, // ETS Getter 78 SETTER = 1ULL << 50ULL, // ETS Setter 79 ETS_EXTENSION_FUNC_HELPER = 1ULL << 51ULL, // ETS Extension Function Helper 80 ETS_UNION = 1ULL << 52ULL, // ETS union 81 ETS_TUPLE = 1ULL << 53ULL, // ETS tuple type 82 ETS_NULL = 1ULL << 54ULL, // ETS null 83 ETS_UNDEFINED = 1ULL << 55ULL, // ETS undefined 84 ETS_NONNULLISH = 1ULL << 56ULL, // ETS nonnullish type parameter 85 ETS_READONLY = 1ULL << 57ULL, // ETS readonly type parameter 86 ETS_REQUIRED_TYPE_PARAMETER = 1ULL << 58ULL, // ETS Required type parameter 87 ETS_PARTIAL_TYPE_PARAMETER = 1ULL << 59ULL, // ETS Partial type parameter 88 TYPE_ERROR = 1ULL << 60ULL, // type error 89 ETS_TYPE_ALIAS = 1ULL << 61ULL, // ETS Type alias 90 ETS_ANY = 1ULL << 22ULL, // ETS any, the value was *stolen* from the CONDITIONAL type kind 91 ETS_NEVER = 1ULL << 62ULL, // ETS never 92 ETS_METHOD = 1ULL << 63ULL, // ETS method (or function in module) (possibly overloaded) 93 ETS_DYNAMIC_TYPE = ETS_OBJECT | ETS_DYNAMIC_FLAG, 94 ETS_DYNAMIC_FUNCTION_TYPE = FUNCTION | ETS_DYNAMIC_FLAG, 95 ETS_INTEGRAL_NUMERIC = BYTE | SHORT | INT | LONG, 96 ETS_FLOATING_POINT = FLOAT | DOUBLE, 97 ETS_NUMERIC = ETS_INTEGRAL_NUMERIC | ETS_FLOATING_POINT, 98 ETS_INTEGRAL = ETS_INTEGRAL_NUMERIC | CHAR, 99 ETS_ENUM = ETS_INT_ENUM | ETS_STRING_ENUM, 100 ETS_ARRAY_INDEX = BYTE | SHORT | INT, 101 ETS_CONVERTIBLE_TO_NUMERIC = ETS_NUMERIC | CHAR | ETS_INT_ENUM, 102 VALID_SWITCH_TYPE = ETS_INTEGRAL, 103 ETS_ARRAY_OR_OBJECT = ETS_ARRAY | ETS_OBJECT, 104 ANY_OR_UNKNOWN = ANY | UNKNOWN, 105 ANY_OR_VOID = ANY | VOID, 106 LITERAL = NUMBER_LITERAL | BOOLEAN_LITERAL | STRING_LITERAL | BIGINT_LITERAL, 107 NUMBER_LIKE = NUMBER | NUMBER_LITERAL, 108 STRING_LIKE = STRING | STRING_LITERAL, 109 BOOLEAN_LIKE = BOOLEAN | BOOLEAN_LITERAL, 110 BIGINT_LIKE = BIGINT | BIGINT_LITERAL, 111 VOID_LIKE = VOID | UNDEFINED, 112 PRIMITIVE = 113 STRING | NUMBER | BIGINT | BOOLEAN | ENUM | ENUM_LITERAL | SYMBOL | VOID | UNDEFINED | NULL_TYPE | LITERAL, 114 PRIMITIVE_OR_ANY = PRIMITIVE | ANY, 115 UNION_OR_INTERSECTION = UNION | INTERSECTION, 116 DEFINITELY_FALSY = 117 STRING_LITERAL | NUMBER_LITERAL | BOOLEAN_LITERAL | BIGINT_LITERAL | VOID | UNDEFINED | NULL_TYPE, 118 POSSIBLY_FALSY = DEFINITELY_FALSY | STRING | NUMBER | BOOLEAN | BIGINT, 119 VALID_ARITHMETIC_TYPE = ANY | NUMBER_LIKE | BIGINT_LIKE | ENUM, 120 UNIT = LITERAL | UNDEFINED | NULL_TYPE, 121 GETTER_SETTER = GETTER | SETTER, 122 }; 123 124 } // namespace ark::es2panda::checker 125 126 template <> 127 struct enumbitops::IsAllowedType<ark::es2panda::checker::TypeFlag> : std::true_type { 128 }; 129 130 #endif /* TYPESCRIPT_TYPES_TYPE_FLAG_H */ 131