• 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_GLOBAL_TYPES_HOLDER_H
17 #define ES2PANDA_COMPILER_CHECKER_TYPES_GLOBAL_TYPES_HOLDER_H
18 
19 #include "checker/types/type.h"
20 
21 namespace panda::es2panda::checker {
22 enum class GlobalTypeId {
23     NUMBER,
24     ANY,
25     STRING,
26     BOOLEAN,
27     VOID,
28     NULL_ID,
29     UNDEFINED,
30     UNKNOWN,
31     NEVER,
32     NON_PRIMITIVE,
33     BIGINT,
34     FALSE_ID,
35     TRUE_ID,
36     NUMBER_OR_BIGINT,
37     STRING_OR_NUMBER,
38     ZERO,
39     EMPTY_STRING,
40     ZERO_BIGINT,
41     PRIMITIVE,
42     EMPTY_TUPLE,
43     EMPTY_OBJECT,
44     RESOLVING_RETURN_TYPE,
45     ERROR_TYPE,
46     BYTE,
47     SHORT,
48     INT,
49     LONG,
50     FLOAT,
51     DOUBLE,
52     CHAR,
53     ETS_BOOLEAN,
54     ETS_STRING,
55     ETS_VOID,
56     ETS_VOID_BUILTIN,
57     ETS_OBJECT_BUILTIN,
58     ETS_NULL,
59     ETS_UNDEFINED,
60     ETS_NULLISH_OBJECT,
61     ETS_WILDCARD,
62     ETS_BOOLEAN_BUILTIN,
63     ETS_BYTE_BUILTIN,
64     ETS_CHAR_BUILTIN,
65     ETS_COMPARABLE_BUILTIN,
66     ETS_CONSOLE_BUILTIN,
67     ETS_DATE_BUILTIN,
68     ETS_DOUBLE_BUILTIN,
69     ETS_EXCEPTION_BUILTIN,
70     ETS_FLOAT_BUILTIN,
71     ETS_FLOATING_BUILTIN,
72     ETS_INTEGER_BUILTIN,
73     ETS_INTEGRAL_BUILTIN,
74     ETS_LONG_BUILTIN,
75     ETS_MAP_BUILTIN,
76     ETS_ERROR_BUILTIN,
77     ETS_RUNTIME_BUILTIN,
78     ETS_SET_BUILTIN,
79     ETS_SHORT_BUILTIN,
80     ETS_STACK_TRACE_ELEMENT_BUILTIN,
81     ETS_STACK_TRACE_BUILTIN,
82     ETS_NULL_POINTER_EXCEPTION_BUILTIN,
83     ETS_ARRAY_INDEX_OUT_OF_BOUNDS_EXCEPTION_BUILTIN,
84     ETS_ARITHMETIC_EXCEPTION_BUILTIN,
85     ETS_CLASS_NOT_FOUND_EXCEPTION_BUILTIN,
86     ETS_CLASS_CAST_EXCEPTION_BUILTIN,
87     ETS_OUT_OF_MEMORY_ERROR_BUILTIN,
88     ETS_NO_SUCH_METHOD_ERROR_BUILTIN,
89     ETS_ASSERTION_ERROR_BUILTIN,
90     ETS_DIVIDE_BY_ZERO_ERROR_BUILTIN,
91     ETS_NULL_POINTER_ERROR_BUILTIN,
92     ETS_UNCATCHED_EXCEPTION_ERROR_BUILTIN,
93     ETS_STRING_BUILTIN,
94     ETS_STRING_BUILDER_BUILTIN,
95     ETS_TYPE_BUILTIN,
96     ETS_TYPES_BUILTIN,
97     ETS_PROMISE_BUILTIN,
98     ETS_REGEXP_BUILTIN,
99     ETS_ARRAY_BUILTIN,
100     ETS_INTEROP_JSRUNTIME_BUILTIN,
101     ETS_INTEROP_JSVALUE_BUILTIN,
102     ETS_BOX_BUILTIN,
103     ETS_BOOLEAN_BOX_BUILTIN,
104     ETS_BYTE_BOX_BUILTIN,
105     ETS_CHAR_BOX_BUILTIN,
106     ETS_SHORT_BOX_BUILTIN,
107     ETS_INT_BOX_BUILTIN,
108     ETS_LONG_BOX_BUILTIN,
109     ETS_FLOAT_BOX_BUILTIN,
110     ETS_DOUBLE_BOX_BUILTIN,
111     ETS_NEVER_BUILTIN,
112     ETS_BIG_INT_BUILTIN,
113     ETS_BIG_INT,
114 
115     COUNT,
116 };
117 
118 class GlobalTypesHolder {
119 public:
120     explicit GlobalTypesHolder(ArenaAllocator *allocator);
121     ~GlobalTypesHolder() = default;
122     NO_COPY_SEMANTIC(GlobalTypesHolder);
123     NO_MOVE_SEMANTIC(GlobalTypesHolder);
124 
125     // TS specific types
126     Type *GlobalNumberType();
127     Type *GlobalAnyType();
128     Type *GlobalStringType();
129     Type *GlobalBooleanType();
130     Type *GlobalVoidType();
131     Type *GlobalBuiltinVoidType();
132     Type *GlobalNullType();
133     Type *GlobalUndefinedType();
134     Type *GlobalUnknownType();
135     Type *GlobalNeverType();
136     Type *GlobalNonPrimitiveType();
137     Type *GlobalBigintType();
138     Type *GlobalFalseType();
139     Type *GlobalTrueType();
140     Type *GlobalNumberOrBigintType();
141     Type *GlobalStringOrNumberType();
142     Type *GlobalZeroType();
143     Type *GlobalEmptyStringType();
144     Type *GlobalZeroBigintType();
145     Type *GlobalPrimitiveType();
146     Type *GlobalEmptyTupleType();
147     Type *GlobalEmptyObjectType();
148     Type *GlobalResolvingReturnType();
149     Type *GlobalErrorType();
150 
151     // ETS specific types
152     Type *GlobalByteType();
153     Type *GlobalShortType();
154     Type *GlobalIntType();
155     Type *GlobalLongType();
156     Type *GlobalFloatType();
157     Type *GlobalDoubleType();
158     Type *GlobalCharType();
159     Type *GlobalETSBooleanType();
160     Type *GlobalETSStringLiteralType();
161     Type *GlobalETSVoidType();
162     Type *GlobalETSObjectType();
163     Type *GlobalETSNullType();
164     Type *GlobalETSUndefinedType();
165     Type *GlobalETSNullishObjectType();
166     Type *GlobalWildcardType();
167     Type *GlobalETSBooleanBuiltinType();
168     Type *GlobalByteBuiltinType();
169     Type *GlobalCharBuiltinType();
170     Type *GlobalComparableBuiltinType();
171     Type *GlobalConsoleBuiltinType();
172     Type *GlobalDoubleBuiltinType();
173     Type *GlobalExceptionBuiltinType();
174     Type *GlobalFloatBuiltinType();
175     Type *GlobalFloatingBuiltinType();
176     Type *GlobalIntegerBuiltinType();
177     Type *GlobalIntegralBuiltinType();
178     Type *GlobalLongBuiltinType();
179     Type *GlobalErrorBuiltinType();
180     Type *GlobalRuntimeBuiltinType();
181     Type *GlobalShortBuiltinType();
182     Type *GlobalStackTraceElementBuiltinType();
183     Type *GlobalStackTraceBuiltinType();
184     Type *GlobalNullPointerExceptionBuiltinType();
185     Type *GlobalArrayIndexOutOfBoundsExceptionBuiltinType();
186     Type *GlobalArithmeticExceptionBuiltinType();
187     Type *GlobalClassNotFoundExceptionBuiltinType();
188     [[nodiscard]] Type *GlobalClassCastExceptionBuiltinType() const noexcept;
189     Type *GlobalETSStringBuiltinType();
190     Type *GlobalETSBigIntBuiltinType();
191     Type *GlobalETSBigIntLiteralType();
192     Type *GlobalStringBuilderBuiltinType();
193     Type *GlobalTypeBuiltinType();
194     Type *GlobalTypesBuiltinType();
195     Type *GlobalPromiseBuiltinType();
196     Type *GlobalBoxBuiltinType();
197     Type *GlobalBooleanBoxBuiltinType();
198     Type *GlobalByteBoxBuiltinType();
199     Type *GlobalCharBoxBuiltinType();
200     Type *GlobalShortBoxBuiltinType();
201     Type *GlobalIntBoxBuiltinType();
202     Type *GlobalLongBoxBuiltinType();
203     Type *GlobalFloatBoxBuiltinType();
204     Type *GlobalDoubleBoxBuiltinType();
205     Type *GlobalBuiltinNeverType();
206 
207     // ETS escompat layer
208     Type *GlobalArrayBuiltinType();
209     Type *GlobalClassOutOfMemoryErrorBuiltinType();
210     Type *GlobalNoSuchMethodErrorBuiltinType();
211     Type *GlobalAssertionErrorBuiltinType();
212     Type *GlobalDivideByZeroErrorBuiltinType();
213     Type *GlobalNullPointerErrorBuiltinType();
214     Type *GlobalUncatchedExceptionErrorBuiltinType();
215     Type *GlobalMapBuiltinType();
216     Type *GlobalRegExpBuiltinType();
217     Type *GlobalSetBuiltinType();
218 
219     // JS specific types
220     Type *GlobalJSRuntimeBuiltinType();
221     Type *GlobalJSValueBuiltinType();
222 
223     void InitializeBuiltin(util::StringView name, Type *type);
224 
225     using Holder = std::array<Type *, static_cast<size_t>(GlobalTypeId::COUNT)>;
226 
GlobalTypes()227     Holder &GlobalTypes()
228     {
229         return globalTypes_;
230     }
231 
GlobalTypes()232     const Holder &GlobalTypes() const
233     {
234         return globalTypes_;
235     }
236 
237 private:
238     Holder globalTypes_ {};
239     ArenaMap<util::StringView, GlobalTypeId> builtinNameMappings_;
240 };
241 }  // namespace panda::es2panda::checker
242 
243 #endif /* ES2PANDA_COMPILER_CHECKER_TYPES_TS_GLOBAL_TYPES_HOLDER_H */
244