• 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 ark::es2panda::checker {
22 enum class GlobalTypeId : std::size_t {
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_OBJECT_BUILTIN,
57     ETS_NULL,
58     ETS_UNDEFINED,
59     ETS_NULLISH_TYPE,
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_ERROR_BUILTIN,
84     ETS_ARITHMETIC_ERROR_BUILTIN,
85     ETS_CLASS_NOT_FOUND_EXCEPTION_BUILTIN,
86     ETS_CLASS_CAST_ERROR_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_UNCAUGHT_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     ETS_FUNCTION0_CLASS,
116     ETS_FUNCTION1_CLASS,
117     ETS_FUNCTION2_CLASS,
118     ETS_FUNCTION3_CLASS,
119     ETS_FUNCTION4_CLASS,
120     ETS_FUNCTION5_CLASS,
121     ETS_FUNCTION6_CLASS,
122     ETS_FUNCTION7_CLASS,
123     ETS_FUNCTION8_CLASS,
124     ETS_FUNCTION9_CLASS,
125     ETS_FUNCTION10_CLASS,
126     ETS_FUNCTION11_CLASS,
127     ETS_FUNCTION12_CLASS,
128     ETS_FUNCTION13_CLASS,
129     ETS_FUNCTION14_CLASS,
130     ETS_FUNCTION15_CLASS,
131     ETS_FUNCTION16_CLASS,
132     ETS_FUNCTIONN_CLASS,
133 
134     TYPE_ERROR,
135 
136     COUNT,
137 };
138 
139 class GlobalTypesHolder {
140 public:
141     explicit GlobalTypesHolder(ArenaAllocator *allocator);
142     ~GlobalTypesHolder() = default;
143     NO_COPY_SEMANTIC(GlobalTypesHolder);
144     NO_MOVE_SEMANTIC(GlobalTypesHolder);
145 
146     void AddETSEscompatLayer();
147     void AddEtsSpecificTypes(ArenaAllocator *allocator);
148     void AddEtsSpecificBuiltinTypes();
149     void AddTSSpecificTypes(ArenaAllocator *allocator);
150 
151     // TS specific types
152     Type *GlobalNumberType();
153     Type *GlobalAnyType();
154     Type *GlobalStringType();
155     Type *GlobalBooleanType();
156     Type *GlobalVoidType();
157     Type *GlobalNullType();
158     Type *GlobalUndefinedType();
159     Type *GlobalUnknownType();
160     Type *GlobalNeverType();
161     Type *GlobalNonPrimitiveType();
162     Type *GlobalBigintType();
163     Type *GlobalFalseType();
164     Type *GlobalTrueType();
165     Type *GlobalNumberOrBigintType();
166     Type *GlobalStringOrNumberType();
167     Type *GlobalZeroType();
168     Type *GlobalEmptyStringType();
169     Type *GlobalZeroBigintType();
170     Type *GlobalPrimitiveType();
171     Type *GlobalEmptyTupleType();
172     Type *GlobalEmptyObjectType();
173     Type *GlobalResolvingReturnType();
174     Type *GlobalErrorType();
175 
176     // ETS specific types
177     Type *GlobalByteType();
178     Type *GlobalShortType();
179     Type *GlobalIntType();
180     Type *GlobalLongType();
181     Type *GlobalFloatType();
182     Type *GlobalDoubleType();
183     Type *GlobalCharType();
184     Type *GlobalETSBooleanType();
185     Type *GlobalETSStringLiteralType();
186     Type *GlobalETSVoidType();
187     Type *GlobalETSObjectType();
188     Type *GlobalETSNullType();
189     Type *GlobalETSUndefinedType();
190     Type *GlobalETSNullishType();
191     Type *GlobalETSNullishObjectType();
192     Type *GlobalWildcardType();
193     Type *GlobalETSBooleanBuiltinType();
194     Type *GlobalByteBuiltinType();
195     Type *GlobalCharBuiltinType();
196     Type *GlobalComparableBuiltinType();
197     Type *GlobalConsoleBuiltinType();
198     Type *GlobalDoubleBuiltinType();
199     Type *GlobalExceptionBuiltinType();
200     Type *GlobalFloatBuiltinType();
201     Type *GlobalFloatingBuiltinType();
202     Type *GlobalIntegerBuiltinType();
203     Type *GlobalIntegralBuiltinType();
204     Type *GlobalLongBuiltinType();
205     Type *GlobalErrorBuiltinType();
206     Type *GlobalRuntimeBuiltinType();
207     Type *GlobalShortBuiltinType();
208     Type *GlobalStackTraceElementBuiltinType();
209     Type *GlobalStackTraceBuiltinType();
210     Type *GlobalNullPointerExceptionBuiltinType();
211     Type *GlobalArrayIndexOutOfBoundsErrorBuiltinType();
212     Type *GlobalArithmeticErrorBuiltinType();
213     Type *GlobalClassNotFoundExceptionBuiltinType();
214     [[nodiscard]] Type *GlobalClassCastErrorBuiltinType() const noexcept;
215     Type *GlobalETSStringBuiltinType();
216     Type *GlobalETSBigIntBuiltinType();
217     Type *GlobalETSBigIntLiteralType();
218     Type *GlobalStringBuilderBuiltinType();
219     Type *GlobalTypeBuiltinType();
220     Type *GlobalTypesBuiltinType();
221     Type *GlobalPromiseBuiltinType();
222     Type *GlobalBoxBuiltinType();
223     Type *GlobalBooleanBoxBuiltinType();
224     Type *GlobalByteBoxBuiltinType();
225     Type *GlobalCharBoxBuiltinType();
226     Type *GlobalShortBoxBuiltinType();
227     Type *GlobalIntBoxBuiltinType();
228     Type *GlobalLongBoxBuiltinType();
229     Type *GlobalFloatBoxBuiltinType();
230     Type *GlobalDoubleBoxBuiltinType();
231     Type *GlobalBuiltinNeverType();
232 
233     // Functional types
234     size_t VariadicFunctionTypeThreshold();
235     Type *GlobalFunctionBuiltinType(size_t nargs);
236 
237     // ETS escompat layer
238     Type *GlobalArrayBuiltinType();
239     Type *GlobalClassOutOfMemoryErrorBuiltinType();
240     Type *GlobalNoSuchMethodErrorBuiltinType();
241     Type *GlobalAssertionErrorBuiltinType();
242     Type *GlobalDivideByZeroErrorBuiltinType();
243     Type *GlobalNullPointerErrorBuiltinType();
244     Type *GlobalUncaughtExceptionErrorBuiltinType();
245     Type *GlobalMapBuiltinType();
246     Type *GlobalRegExpBuiltinType();
247     Type *GlobalSetBuiltinType();
248 
249     // JS specific types
250     Type *GlobalJSRuntimeBuiltinType();
251     Type *GlobalJSValueBuiltinType();
252 
253     Type *GlobalTypeError();
254 
255     void InitializeBuiltin(util::StringView name, Type *type);
256 
257     using Holder = std::array<Type *, static_cast<size_t>(GlobalTypeId::COUNT)>;
258 
GlobalTypes()259     Holder &GlobalTypes()
260     {
261         return globalTypes_;
262     }
263 
GlobalTypes()264     const Holder &GlobalTypes() const
265     {
266         return globalTypes_;
267     }
268 
269 private:
270     Holder globalTypes_ {};
271     ArenaMap<util::StringView, GlobalTypeId> builtinNameMappings_;
272 };
273 }  // namespace ark::es2panda::checker
274 
275 #endif /* ES2PANDA_COMPILER_CHECKER_TYPES_TS_GLOBAL_TYPES_HOLDER_H */
276