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