• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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