• 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     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