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