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