• 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 #include "globalTypesHolder.h"
17 
18 #include "checker/types/typeError.h"
19 #include "checker/types/ts/numberType.h"
20 #include "checker/types/ts/anyType.h"
21 #include "checker/types/ts/stringType.h"
22 #include "checker/types/ts/booleanType.h"
23 #include "checker/types/ts/voidType.h"
24 #include "checker/types/ts/nullType.h"
25 #include "checker/types/ts/undefinedType.h"
26 #include "checker/types/ts/unknownType.h"
27 #include "checker/types/ts/neverType.h"
28 #include "checker/types/ts/nonPrimitiveType.h"
29 #include "checker/types/ts/bigintType.h"
30 #include "checker/types/ts/booleanLiteralType.h"
31 #include "checker/types/ts/bigintLiteralType.h"
32 #include "checker/types/ts/numberLiteralType.h"
33 #include "checker/types/ts/stringLiteralType.h"
34 #include "checker/types/ts/tupleType.h"
35 #include "checker/types/ts/objectLiteralType.h"
36 #include "checker/types/ts/unionType.h"
37 #include "checker/types/ets/byteType.h"
38 #include "checker/types/ets/charType.h"
39 #include "checker/types/ets/doubleType.h"
40 #include "checker/types/ets/floatType.h"
41 #include "checker/types/ets/intType.h"
42 #include "checker/types/ets/longType.h"
43 #include "checker/types/ets/shortType.h"
44 #include "checker/types/ets/etsBooleanType.h"
45 #include "checker/types/ets/etsStringType.h"
46 #include "checker/types/ets/etsBigIntType.h"
47 #include "checker/types/ets/etsVoidType.h"
48 #include "checker/types/ets/etsNullishTypes.h"
49 #include "checker/types/ets/etsObjectType.h"
50 #include "checker/types/ets/wildcardType.h"
51 #include "util/helpers.h"
52 
53 namespace ark::es2panda::checker {
54 
AddETSEscompatLayer()55 void GlobalTypesHolder::AddETSEscompatLayer()
56 {
57     // ETS escompat layer
58     builtinNameMappings_.emplace("Array", GlobalTypeId::ETS_ARRAY_BUILTIN);
59     builtinNameMappings_.emplace("Date", GlobalTypeId::ETS_DATE_BUILTIN);
60     builtinNameMappings_.emplace("Error", GlobalTypeId::ETS_ERROR_BUILTIN);
61     builtinNameMappings_.emplace("OutOfMemoryError", GlobalTypeId::ETS_OUT_OF_MEMORY_ERROR_BUILTIN);
62     builtinNameMappings_.emplace("NoSuchMethodError", GlobalTypeId::ETS_NO_SUCH_METHOD_ERROR_BUILTIN);
63     builtinNameMappings_.emplace("DivideByZeroError", GlobalTypeId::ETS_DIVIDE_BY_ZERO_ERROR_BUILTIN);
64     builtinNameMappings_.emplace("NullPointerError", GlobalTypeId::ETS_NULL_POINTER_ERROR_BUILTIN);
65     builtinNameMappings_.emplace("UncaughtExceptionError", GlobalTypeId::ETS_UNCAUGHT_EXCEPTION_ERROR_BUILTIN);
66     builtinNameMappings_.emplace("Map", GlobalTypeId::ETS_MAP_BUILTIN);
67     builtinNameMappings_.emplace("RegExp", GlobalTypeId::ETS_REGEXP_BUILTIN);
68     builtinNameMappings_.emplace("Set", GlobalTypeId::ETS_SET_BUILTIN);
69 }
70 
AddTSSpecificTypes(ArenaAllocator * allocator)71 void GlobalTypesHolder::AddTSSpecificTypes(ArenaAllocator *allocator)
72 {
73     globalTypes_[static_cast<size_t>(GlobalTypeId::NUMBER)] = allocator->New<NumberType>();
74     globalTypes_[static_cast<size_t>(GlobalTypeId::ANY)] = allocator->New<AnyType>();
75     globalTypes_[static_cast<size_t>(GlobalTypeId::STRING)] = allocator->New<StringType>();
76     globalTypes_[static_cast<size_t>(GlobalTypeId::BOOLEAN)] = allocator->New<BooleanType>();
77     globalTypes_[static_cast<size_t>(GlobalTypeId::VOID)] = allocator->New<VoidType>();
78     globalTypes_[static_cast<size_t>(GlobalTypeId::NULL_ID)] = allocator->New<NullType>();
79     globalTypes_[static_cast<size_t>(GlobalTypeId::UNDEFINED)] = allocator->New<UndefinedType>();
80     globalTypes_[static_cast<size_t>(GlobalTypeId::UNKNOWN)] = allocator->New<UnknownType>();
81     globalTypes_[static_cast<size_t>(GlobalTypeId::NEVER)] = allocator->New<NeverType>();
82     globalTypes_[static_cast<size_t>(GlobalTypeId::NON_PRIMITIVE)] = allocator->New<NonPrimitiveType>();
83     globalTypes_[static_cast<size_t>(GlobalTypeId::BIGINT)] = allocator->New<BigintType>();
84     globalTypes_[static_cast<size_t>(GlobalTypeId::FALSE_ID)] = allocator->New<BooleanLiteralType>(false);
85     globalTypes_[static_cast<size_t>(GlobalTypeId::TRUE_ID)] = allocator->New<BooleanLiteralType>(true);
86     globalTypes_[static_cast<size_t>(GlobalTypeId::NUMBER_OR_BIGINT)] =
87         allocator->New<UnionType>(allocator, std::initializer_list<Type *> {GlobalNumberType(), GlobalBigintType()});
88     globalTypes_[static_cast<size_t>(GlobalTypeId::STRING_OR_NUMBER)] =
89         allocator->New<UnionType>(allocator, std::initializer_list<Type *> {GlobalStringType(), GlobalNumberType()});
90     globalTypes_[static_cast<size_t>(GlobalTypeId::ZERO)] = allocator->New<NumberLiteralType>(0);
91     globalTypes_[static_cast<size_t>(GlobalTypeId::EMPTY_STRING)] = allocator->New<StringLiteralType>("");
92     globalTypes_[static_cast<size_t>(GlobalTypeId::ZERO_BIGINT)] = allocator->New<BigintLiteralType>("0n", false);
93     globalTypes_[static_cast<size_t>(GlobalTypeId::PRIMITIVE)] = allocator->New<UnionType>(
94         allocator,
95         std::initializer_list<Type *> {GlobalNumberType(), GlobalStringType(), GlobalBigintType(), GlobalBooleanType(),
96                                        GlobalVoidType(), GlobalUndefinedType(), GlobalNullType()});
97     globalTypes_[static_cast<size_t>(GlobalTypeId::EMPTY_TUPLE)] = allocator->New<TupleType>(allocator);
98     globalTypes_[static_cast<size_t>(GlobalTypeId::EMPTY_OBJECT)] = allocator->New<ObjectLiteralType>();
99     globalTypes_[static_cast<size_t>(GlobalTypeId::RESOLVING_RETURN_TYPE)] = allocator->New<AnyType>();
100     globalTypes_[static_cast<size_t>(GlobalTypeId::ERROR_TYPE)] = allocator->New<AnyType>();
101 }
102 
AddEtsSpecificTypes(ArenaAllocator * allocator)103 void GlobalTypesHolder::AddEtsSpecificTypes(ArenaAllocator *allocator)
104 {
105     // ETS specific types
106     globalTypes_[static_cast<size_t>(GlobalTypeId::BYTE)] = allocator->New<ByteType>();
107     globalTypes_[static_cast<size_t>(GlobalTypeId::SHORT)] = allocator->New<ShortType>();
108     globalTypes_[static_cast<size_t>(GlobalTypeId::INT)] = allocator->New<IntType>();
109     globalTypes_[static_cast<size_t>(GlobalTypeId::LONG)] = allocator->New<LongType>();
110     globalTypes_[static_cast<size_t>(GlobalTypeId::FLOAT)] = allocator->New<FloatType>();
111     globalTypes_[static_cast<size_t>(GlobalTypeId::DOUBLE)] = allocator->New<DoubleType>();
112     globalTypes_[static_cast<size_t>(GlobalTypeId::CHAR)] = allocator->New<CharType>();
113     globalTypes_[static_cast<size_t>(GlobalTypeId::ETS_BOOLEAN)] = allocator->New<ETSBooleanType>();
114     globalTypes_[static_cast<size_t>(GlobalTypeId::ETS_VOID)] = allocator->New<ETSVoidType>();
115     globalTypes_[static_cast<size_t>(GlobalTypeId::ETS_NULL)] = allocator->New<ETSNullType>();
116     globalTypes_[static_cast<size_t>(GlobalTypeId::ETS_UNDEFINED)] = allocator->New<ETSUndefinedType>();
117     globalTypes_[static_cast<size_t>(GlobalTypeId::ETS_WILDCARD)] = allocator->New<WildcardType>();
118     globalTypes_[static_cast<size_t>(GlobalTypeId::TYPE_ERROR)] = allocator->New<TypeError>();
119 }
120 
AddEtsSpecificBuiltinTypes()121 void GlobalTypesHolder::AddEtsSpecificBuiltinTypes()
122 {
123     builtinNameMappings_.emplace("Boolean", GlobalTypeId::ETS_BOOLEAN_BUILTIN);
124     builtinNameMappings_.emplace("Byte", GlobalTypeId::ETS_BYTE_BUILTIN);
125     builtinNameMappings_.emplace("Char", GlobalTypeId::ETS_CHAR_BUILTIN);
126     builtinNameMappings_.emplace("Comparable", GlobalTypeId::ETS_COMPARABLE_BUILTIN);
127     builtinNameMappings_.emplace("Console", GlobalTypeId::ETS_CONSOLE_BUILTIN);
128     builtinNameMappings_.emplace("Double", GlobalTypeId::ETS_DOUBLE_BUILTIN);
129     builtinNameMappings_.emplace("Exception", GlobalTypeId::ETS_EXCEPTION_BUILTIN);
130     builtinNameMappings_.emplace("Float", GlobalTypeId::ETS_FLOAT_BUILTIN);
131     builtinNameMappings_.emplace("Floating", GlobalTypeId::ETS_FLOATING_BUILTIN);
132     builtinNameMappings_.emplace("Int", GlobalTypeId::ETS_INTEGER_BUILTIN);
133     builtinNameMappings_.emplace("Integral", GlobalTypeId::ETS_INTEGRAL_BUILTIN);
134     builtinNameMappings_.emplace("Long", GlobalTypeId::ETS_LONG_BUILTIN);
135     builtinNameMappings_.emplace("Object", GlobalTypeId::ETS_OBJECT_BUILTIN);
136     builtinNameMappings_.emplace("Runtime", GlobalTypeId::ETS_RUNTIME_BUILTIN);
137     builtinNameMappings_.emplace("Short", GlobalTypeId::ETS_SHORT_BUILTIN);
138     builtinNameMappings_.emplace("StackTraceElement", GlobalTypeId::ETS_STACK_TRACE_ELEMENT_BUILTIN);
139     builtinNameMappings_.emplace("StackTrace", GlobalTypeId::ETS_STACK_TRACE_BUILTIN);
140     builtinNameMappings_.emplace("NullPointerException", GlobalTypeId::ETS_NULL_POINTER_EXCEPTION_BUILTIN);
141     builtinNameMappings_.emplace("ArrayIndexOutOfBoundsError",
142                                  GlobalTypeId::ETS_ARRAY_INDEX_OUT_OF_BOUNDS_ERROR_BUILTIN);
143     builtinNameMappings_.emplace("ArithmeticError", GlobalTypeId::ETS_ARITHMETIC_ERROR_BUILTIN);
144     builtinNameMappings_.emplace("ClassNotFoundException", GlobalTypeId::ETS_CLASS_NOT_FOUND_EXCEPTION_BUILTIN);
145     builtinNameMappings_.emplace("ClassCastError", GlobalTypeId::ETS_CLASS_CAST_ERROR_BUILTIN);
146     builtinNameMappings_.emplace("String", GlobalTypeId::ETS_STRING_BUILTIN);
147     builtinNameMappings_.emplace("BigInt", GlobalTypeId::ETS_BIG_INT_BUILTIN);
148     builtinNameMappings_.emplace("StringBuilder", GlobalTypeId::ETS_STRING_BUILDER_BUILTIN);
149     builtinNameMappings_.emplace("Type", GlobalTypeId::ETS_TYPE_BUILTIN);
150     builtinNameMappings_.emplace("Types", GlobalTypeId::ETS_TYPES_BUILTIN);
151     builtinNameMappings_.emplace("Promise", GlobalTypeId::ETS_PROMISE_BUILTIN);
152     builtinNameMappings_.emplace("Box", GlobalTypeId::ETS_BOX_BUILTIN);
153     builtinNameMappings_.emplace("BooleanBox", GlobalTypeId::ETS_BOOLEAN_BOX_BUILTIN);
154     builtinNameMappings_.emplace("ByteBox", GlobalTypeId::ETS_BYTE_BOX_BUILTIN);
155     builtinNameMappings_.emplace("CharBox", GlobalTypeId::ETS_CHAR_BOX_BUILTIN);
156     builtinNameMappings_.emplace("ShortBox", GlobalTypeId::ETS_SHORT_BOX_BUILTIN);
157     builtinNameMappings_.emplace("IntBox", GlobalTypeId::ETS_INT_BOX_BUILTIN);
158     builtinNameMappings_.emplace("LongBox", GlobalTypeId::ETS_LONG_BOX_BUILTIN);
159     builtinNameMappings_.emplace("FloatBox", GlobalTypeId::ETS_FLOAT_BOX_BUILTIN);
160     builtinNameMappings_.emplace("DoubleBox", GlobalTypeId::ETS_DOUBLE_BOX_BUILTIN);
161     builtinNameMappings_.emplace("never", GlobalTypeId::ETS_NEVER_BUILTIN);
162 }
163 
GlobalTypesHolder(ArenaAllocator * allocator)164 GlobalTypesHolder::GlobalTypesHolder(ArenaAllocator *allocator) : builtinNameMappings_(allocator->Adapter())
165 {
166     // TS specific types
167     AddTSSpecificTypes(allocator);
168 
169     // ETS specific types
170     AddEtsSpecificTypes(allocator);
171 
172     AddEtsSpecificBuiltinTypes();
173 
174     // ETS escompat layer
175     AddETSEscompatLayer();
176 
177     builtinNameMappings_.emplace("TYPE ERROR", GlobalTypeId::TYPE_ERROR);
178 
179     // ETS functional types
180     for (size_t id = static_cast<size_t>(GlobalTypeId::ETS_FUNCTION0_CLASS), nargs = 0;
181          id < static_cast<size_t>(GlobalTypeId::ETS_FUNCTIONN_CLASS); id++, nargs++) {
182         builtinNameMappings_.emplace(util::UString("Function" + std::to_string(nargs), allocator).View(),
183                                      static_cast<GlobalTypeId>(id));
184     }
185 
186     builtinNameMappings_.emplace("FunctionN", GlobalTypeId::ETS_FUNCTIONN_CLASS);
187 
188     // ETS interop js specific types
189     builtinNameMappings_.emplace("JSRuntime", GlobalTypeId::ETS_INTEROP_JSRUNTIME_BUILTIN);
190     builtinNameMappings_.emplace("JSValue", GlobalTypeId::ETS_INTEROP_JSVALUE_BUILTIN);
191 }
192 
GlobalNumberType()193 Type *GlobalTypesHolder::GlobalNumberType()
194 {
195     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::NUMBER));
196 }
197 
GlobalAnyType()198 Type *GlobalTypesHolder::GlobalAnyType()
199 {
200     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ANY));
201 }
202 
GlobalStringType()203 Type *GlobalTypesHolder::GlobalStringType()
204 {
205     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::STRING));
206 }
207 
GlobalBooleanType()208 Type *GlobalTypesHolder::GlobalBooleanType()
209 {
210     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::BOOLEAN));
211 }
212 
GlobalVoidType()213 Type *GlobalTypesHolder::GlobalVoidType()
214 {
215     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::VOID));
216 }
217 
GlobalNullType()218 Type *GlobalTypesHolder::GlobalNullType()
219 {
220     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::NULL_ID));
221 }
222 
GlobalUndefinedType()223 Type *GlobalTypesHolder::GlobalUndefinedType()
224 {
225     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::UNDEFINED));
226 }
227 
GlobalUnknownType()228 Type *GlobalTypesHolder::GlobalUnknownType()
229 {
230     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::UNKNOWN));
231 }
232 
GlobalNeverType()233 Type *GlobalTypesHolder::GlobalNeverType()
234 {
235     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::NEVER));
236 }
237 
GlobalNonPrimitiveType()238 Type *GlobalTypesHolder::GlobalNonPrimitiveType()
239 {
240     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::NON_PRIMITIVE));
241 }
242 
GlobalBigintType()243 Type *GlobalTypesHolder::GlobalBigintType()
244 {
245     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::BIGINT));
246 }
247 
GlobalFalseType()248 Type *GlobalTypesHolder::GlobalFalseType()
249 {
250     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::FALSE_ID));
251 }
252 
GlobalTrueType()253 Type *GlobalTypesHolder::GlobalTrueType()
254 {
255     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::TRUE_ID));
256 }
257 
GlobalNumberOrBigintType()258 Type *GlobalTypesHolder::GlobalNumberOrBigintType()
259 {
260     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::NUMBER_OR_BIGINT));
261 }
262 
GlobalStringOrNumberType()263 Type *GlobalTypesHolder::GlobalStringOrNumberType()
264 {
265     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::STRING_OR_NUMBER));
266 }
267 
GlobalZeroType()268 Type *GlobalTypesHolder::GlobalZeroType()
269 {
270     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ZERO));
271 }
272 
GlobalEmptyStringType()273 Type *GlobalTypesHolder::GlobalEmptyStringType()
274 {
275     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::EMPTY_STRING));
276 }
277 
GlobalZeroBigintType()278 Type *GlobalTypesHolder::GlobalZeroBigintType()
279 {
280     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ZERO_BIGINT));
281 }
282 
GlobalPrimitiveType()283 Type *GlobalTypesHolder::GlobalPrimitiveType()
284 {
285     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::PRIMITIVE));
286 }
287 
GlobalEmptyTupleType()288 Type *GlobalTypesHolder::GlobalEmptyTupleType()
289 {
290     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::EMPTY_TUPLE));
291 }
292 
GlobalEmptyObjectType()293 Type *GlobalTypesHolder::GlobalEmptyObjectType()
294 {
295     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::EMPTY_OBJECT));
296 }
297 
GlobalResolvingReturnType()298 Type *GlobalTypesHolder::GlobalResolvingReturnType()
299 {
300     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::RESOLVING_RETURN_TYPE));
301 }
302 
GlobalErrorType()303 Type *GlobalTypesHolder::GlobalErrorType()
304 {
305     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ERROR_TYPE));
306 }
307 
GlobalByteType()308 Type *GlobalTypesHolder::GlobalByteType()
309 {
310     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::BYTE));
311 }
312 
GlobalShortType()313 Type *GlobalTypesHolder::GlobalShortType()
314 {
315     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::SHORT));
316 }
317 
GlobalIntType()318 Type *GlobalTypesHolder::GlobalIntType()
319 {
320     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::INT));
321 }
322 
GlobalLongType()323 Type *GlobalTypesHolder::GlobalLongType()
324 {
325     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::LONG));
326 }
327 
GlobalFloatType()328 Type *GlobalTypesHolder::GlobalFloatType()
329 {
330     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::FLOAT));
331 }
332 
GlobalDoubleType()333 Type *GlobalTypesHolder::GlobalDoubleType()
334 {
335     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::DOUBLE));
336 }
337 
GlobalCharType()338 Type *GlobalTypesHolder::GlobalCharType()
339 {
340     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::CHAR));
341 }
342 
GlobalETSBooleanType()343 Type *GlobalTypesHolder::GlobalETSBooleanType()
344 {
345     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_BOOLEAN));
346 }
347 
GlobalETSStringLiteralType()348 Type *GlobalTypesHolder::GlobalETSStringLiteralType()
349 {
350     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_STRING));
351 }
352 
GlobalETSVoidType()353 Type *GlobalTypesHolder::GlobalETSVoidType()
354 {
355     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_VOID));
356 }
357 
GlobalETSObjectType()358 Type *GlobalTypesHolder::GlobalETSObjectType()
359 {
360     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_OBJECT_BUILTIN));
361 }
362 
GlobalETSNullType()363 Type *GlobalTypesHolder::GlobalETSNullType()
364 {
365     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_NULL));
366 }
367 
GlobalETSUndefinedType()368 Type *GlobalTypesHolder::GlobalETSUndefinedType()
369 {
370     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_UNDEFINED));
371 }
372 
GlobalETSNullishObjectType()373 Type *GlobalTypesHolder::GlobalETSNullishObjectType()
374 {
375     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_NULLISH_OBJECT));
376 }
377 
GlobalETSNullishType()378 Type *GlobalTypesHolder::GlobalETSNullishType()
379 {
380     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_NULLISH_TYPE));
381 }
382 
GlobalWildcardType()383 Type *GlobalTypesHolder::GlobalWildcardType()
384 {
385     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_WILDCARD));
386 }
387 
GlobalETSBooleanBuiltinType()388 Type *GlobalTypesHolder::GlobalETSBooleanBuiltinType()
389 {
390     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_BOOLEAN_BUILTIN));
391 }
392 
GlobalByteBuiltinType()393 Type *GlobalTypesHolder::GlobalByteBuiltinType()
394 {
395     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_BYTE_BUILTIN));
396 }
397 
GlobalCharBuiltinType()398 Type *GlobalTypesHolder::GlobalCharBuiltinType()
399 {
400     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_CHAR_BUILTIN));
401 }
402 
GlobalComparableBuiltinType()403 Type *GlobalTypesHolder::GlobalComparableBuiltinType()
404 {
405     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_COMPARABLE_BUILTIN));
406 }
407 
GlobalConsoleBuiltinType()408 Type *GlobalTypesHolder::GlobalConsoleBuiltinType()
409 {
410     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_CONSOLE_BUILTIN));
411 }
412 
GlobalDoubleBuiltinType()413 Type *GlobalTypesHolder::GlobalDoubleBuiltinType()
414 {
415     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_DOUBLE_BUILTIN));
416 }
417 
GlobalExceptionBuiltinType()418 Type *GlobalTypesHolder::GlobalExceptionBuiltinType()
419 {
420     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_EXCEPTION_BUILTIN));
421 }
422 
GlobalFloatBuiltinType()423 Type *GlobalTypesHolder::GlobalFloatBuiltinType()
424 {
425     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_FLOAT_BUILTIN));
426 }
427 
GlobalFloatingBuiltinType()428 Type *GlobalTypesHolder::GlobalFloatingBuiltinType()
429 {
430     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_FLOATING_BUILTIN));
431 }
432 
GlobalIntegerBuiltinType()433 Type *GlobalTypesHolder::GlobalIntegerBuiltinType()
434 {
435     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_INTEGER_BUILTIN));
436 }
437 
GlobalIntegralBuiltinType()438 Type *GlobalTypesHolder::GlobalIntegralBuiltinType()
439 {
440     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_INTEGRAL_BUILTIN));
441 }
442 
GlobalLongBuiltinType()443 Type *GlobalTypesHolder::GlobalLongBuiltinType()
444 {
445     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_LONG_BUILTIN));
446 }
447 
GlobalMapBuiltinType()448 Type *GlobalTypesHolder::GlobalMapBuiltinType()
449 {
450     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_MAP_BUILTIN));
451 }
452 
GlobalErrorBuiltinType()453 Type *GlobalTypesHolder::GlobalErrorBuiltinType()
454 {
455     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_ERROR_BUILTIN));
456 }
457 
GlobalRuntimeBuiltinType()458 Type *GlobalTypesHolder::GlobalRuntimeBuiltinType()
459 {
460     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_RUNTIME_BUILTIN));
461 }
462 
GlobalSetBuiltinType()463 Type *GlobalTypesHolder::GlobalSetBuiltinType()
464 {
465     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_SET_BUILTIN));
466 }
467 
GlobalShortBuiltinType()468 Type *GlobalTypesHolder::GlobalShortBuiltinType()
469 {
470     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_SHORT_BUILTIN));
471 }
472 
GlobalStackTraceElementBuiltinType()473 Type *GlobalTypesHolder::GlobalStackTraceElementBuiltinType()
474 {
475     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_STACK_TRACE_ELEMENT_BUILTIN));
476 }
477 
GlobalStackTraceBuiltinType()478 Type *GlobalTypesHolder::GlobalStackTraceBuiltinType()
479 {
480     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_STACK_TRACE_BUILTIN));
481 }
482 
GlobalNullPointerExceptionBuiltinType()483 Type *GlobalTypesHolder::GlobalNullPointerExceptionBuiltinType()
484 {
485     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_NULL_POINTER_EXCEPTION_BUILTIN));
486 }
487 
GlobalArrayIndexOutOfBoundsErrorBuiltinType()488 Type *GlobalTypesHolder::GlobalArrayIndexOutOfBoundsErrorBuiltinType()
489 {
490     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_ARRAY_INDEX_OUT_OF_BOUNDS_ERROR_BUILTIN));
491 }
492 
GlobalArithmeticErrorBuiltinType()493 Type *GlobalTypesHolder::GlobalArithmeticErrorBuiltinType()
494 {
495     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_ARITHMETIC_ERROR_BUILTIN));
496 }
497 
GlobalClassNotFoundExceptionBuiltinType()498 Type *GlobalTypesHolder::GlobalClassNotFoundExceptionBuiltinType()
499 {
500     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_CLASS_NOT_FOUND_EXCEPTION_BUILTIN));
501 }
502 
GlobalClassCastErrorBuiltinType() const503 Type *GlobalTypesHolder::GlobalClassCastErrorBuiltinType() const noexcept
504 {
505     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_CLASS_CAST_ERROR_BUILTIN));
506 }
507 
GlobalClassOutOfMemoryErrorBuiltinType()508 Type *GlobalTypesHolder::GlobalClassOutOfMemoryErrorBuiltinType()
509 {
510     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_OUT_OF_MEMORY_ERROR_BUILTIN));
511 }
512 
GlobalNoSuchMethodErrorBuiltinType()513 Type *GlobalTypesHolder::GlobalNoSuchMethodErrorBuiltinType()
514 {
515     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_NO_SUCH_METHOD_ERROR_BUILTIN));
516 }
517 
GlobalAssertionErrorBuiltinType()518 Type *GlobalTypesHolder::GlobalAssertionErrorBuiltinType()
519 {
520     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_ASSERTION_ERROR_BUILTIN));
521 }
522 
GlobalDivideByZeroErrorBuiltinType()523 Type *GlobalTypesHolder::GlobalDivideByZeroErrorBuiltinType()
524 {
525     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_DIVIDE_BY_ZERO_ERROR_BUILTIN));
526 }
527 
GlobalNullPointerErrorBuiltinType()528 Type *GlobalTypesHolder::GlobalNullPointerErrorBuiltinType()
529 {
530     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_NULL_POINTER_ERROR_BUILTIN));
531 }
532 
GlobalUncaughtExceptionErrorBuiltinType()533 Type *GlobalTypesHolder::GlobalUncaughtExceptionErrorBuiltinType()
534 {
535     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_UNCAUGHT_EXCEPTION_ERROR_BUILTIN));
536 }
537 
GlobalETSStringBuiltinType()538 Type *GlobalTypesHolder::GlobalETSStringBuiltinType()
539 {
540     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_STRING_BUILTIN));
541 }
542 
GlobalETSBigIntBuiltinType()543 Type *GlobalTypesHolder::GlobalETSBigIntBuiltinType()
544 {
545     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_BIG_INT_BUILTIN));
546 }
547 
GlobalETSBigIntLiteralType()548 Type *GlobalTypesHolder::GlobalETSBigIntLiteralType()
549 {
550     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_BIG_INT));
551 }
552 
GlobalStringBuilderBuiltinType()553 Type *GlobalTypesHolder::GlobalStringBuilderBuiltinType()
554 {
555     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_STRING_BUILDER_BUILTIN));
556 }
557 
GlobalTypeBuiltinType()558 Type *GlobalTypesHolder::GlobalTypeBuiltinType()
559 {
560     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_TYPE_BUILTIN));
561 }
562 
GlobalTypesBuiltinType()563 Type *GlobalTypesHolder::GlobalTypesBuiltinType()
564 {
565     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_TYPES_BUILTIN));
566 }
567 
GlobalPromiseBuiltinType()568 Type *GlobalTypesHolder::GlobalPromiseBuiltinType()
569 {
570     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_PROMISE_BUILTIN));
571 }
572 
GlobalRegExpBuiltinType()573 Type *GlobalTypesHolder::GlobalRegExpBuiltinType()
574 {
575     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_REGEXP_BUILTIN));
576 }
577 
GlobalArrayBuiltinType()578 Type *GlobalTypesHolder::GlobalArrayBuiltinType()
579 {
580     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_ARRAY_BUILTIN));
581 }
582 
GlobalBoxBuiltinType()583 Type *GlobalTypesHolder::GlobalBoxBuiltinType()
584 {
585     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_BOX_BUILTIN));
586 }
587 
GlobalJSRuntimeBuiltinType()588 Type *GlobalTypesHolder::GlobalJSRuntimeBuiltinType()
589 {
590     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_INTEROP_JSRUNTIME_BUILTIN));
591 }
592 
GlobalJSValueBuiltinType()593 Type *GlobalTypesHolder::GlobalJSValueBuiltinType()
594 {
595     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_INTEROP_JSVALUE_BUILTIN));
596 }
597 
GlobalBooleanBoxBuiltinType()598 Type *GlobalTypesHolder::GlobalBooleanBoxBuiltinType()
599 {
600     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_BOOLEAN_BOX_BUILTIN));
601 }
602 
GlobalByteBoxBuiltinType()603 Type *GlobalTypesHolder::GlobalByteBoxBuiltinType()
604 {
605     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_BYTE_BOX_BUILTIN));
606 }
607 
GlobalCharBoxBuiltinType()608 Type *GlobalTypesHolder::GlobalCharBoxBuiltinType()
609 {
610     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_CHAR_BOX_BUILTIN));
611 }
612 
GlobalShortBoxBuiltinType()613 Type *GlobalTypesHolder::GlobalShortBoxBuiltinType()
614 {
615     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_SHORT_BOX_BUILTIN));
616 }
617 
GlobalIntBoxBuiltinType()618 Type *GlobalTypesHolder::GlobalIntBoxBuiltinType()
619 {
620     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_INT_BOX_BUILTIN));
621 }
622 
GlobalLongBoxBuiltinType()623 Type *GlobalTypesHolder::GlobalLongBoxBuiltinType()
624 {
625     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_LONG_BOX_BUILTIN));
626 }
627 
GlobalFloatBoxBuiltinType()628 Type *GlobalTypesHolder::GlobalFloatBoxBuiltinType()
629 {
630     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_FLOAT_BOX_BUILTIN));
631 }
632 
GlobalDoubleBoxBuiltinType()633 Type *GlobalTypesHolder::GlobalDoubleBoxBuiltinType()
634 {
635     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_DOUBLE_BOX_BUILTIN));
636 }
637 
GlobalBuiltinNeverType()638 Type *GlobalTypesHolder::GlobalBuiltinNeverType()
639 {
640     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_NEVER_BUILTIN));
641 }
642 
VariadicFunctionTypeThreshold()643 size_t GlobalTypesHolder::VariadicFunctionTypeThreshold()
644 {
645     return static_cast<size_t>(GlobalTypeId::ETS_FUNCTIONN_CLASS) -
646            static_cast<size_t>(GlobalTypeId::ETS_FUNCTION0_CLASS);
647 }
648 
GlobalFunctionBuiltinType(size_t nargs)649 Type *GlobalTypesHolder::GlobalFunctionBuiltinType(size_t nargs)
650 {
651     if (nargs >= VariadicFunctionTypeThreshold()) {
652         return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_FUNCTIONN_CLASS));
653     }
654     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::ETS_FUNCTION0_CLASS) + nargs);
655 }
656 
GlobalTypeError()657 Type *GlobalTypesHolder::GlobalTypeError()
658 {
659     return globalTypes_.at(static_cast<size_t>(GlobalTypeId::TYPE_ERROR));
660 }
661 
InitializeBuiltin(const util::StringView name,Type * type)662 void GlobalTypesHolder::InitializeBuiltin(const util::StringView name, Type *type)
663 {
664     const auto typeId = builtinNameMappings_.find(name);
665     if (typeId == builtinNameMappings_.end()) {
666         util::Helpers::LogDebug("Did not find '", name, "' builtin in GlobalTypesHolder, it should be added.");
667         return;
668     }
669     globalTypes_.at(static_cast<size_t>(typeId->second)) = type;
670 }
671 }  // namespace ark::es2panda::checker
672