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