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