1 /* 2 * Copyright (c) 2021-2022 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 ECMASCRIPT_GLOBAL_ENV_CONSTANTS_H 17 #define ECMASCRIPT_GLOBAL_ENV_CONSTANTS_H 18 19 #include <cstdint> 20 #include "ecmascript/compiler/builtins/builtins_call_signature_list.h" 21 #include "ecmascript/js_tagged_value.h" 22 #include "ecmascript/mem/visitor.h" 23 #include "libpandabase/macros.h" 24 25 namespace panda::ecmascript { 26 // Forward Declaration 27 template<typename T> 28 class JSHandle; 29 class JSHClass; 30 class JSThread; 31 class ObjectFactory; 32 33 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 34 #define SHARED_GLOBAL_ENV_CONSTANT_CLASS(V) \ 35 /* GC Root */ \ 36 V(JSTaggedValue, HClassClass, HCLASS_CLASS_INDEX, ecma_roots_class) \ 37 V(JSTaggedValue, FreeObjectWithNoneFieldClass, FREE_OBJECT_WITH_NONE_FIELD_CLASS_INDEX, ecma_roots_class) \ 38 V(JSTaggedValue, FreeObjectWithOneFieldClass, FREE_OBJECT_WITH_ONE_FIELD_CLASS_INDEX, ecma_roots_class) \ 39 V(JSTaggedValue, FreeObjectWithTwoFieldClass, FREE_OBJECT_WITH_TWO_FIELD_CLASS_INDEX, ecma_roots_class) \ 40 V(JSTaggedValue, LineStringClass, LINE_STRING_CLASS_INDEX, ecma_roots_class) \ 41 V(JSTaggedValue, SlicedStringClass, SLICED_STRING_CLASS_INDEX, ecma_roots_class) \ 42 V(JSTaggedValue, ConstantStringClass, CONSTANT_STRING_CLASS_INDEX, ecma_roots_class) \ 43 V(JSTaggedValue, TreeStringClass, TREE_STRING_CLASS_INDEX, ecma_roots_class) \ 44 V(JSTaggedValue, ArrayClass, ARRAY_CLASS_INDEX, ecma_roots_class) \ 45 V(JSTaggedValue, ByteArrayClass, BYTE_ARRAY_CLASS_INDEX, ecma_roots_class) \ 46 V(JSTaggedValue, ConstantPoolClass, CONSTANT_POOL_CLASS_INDEX, ecma_roots_class) \ 47 V(JSTaggedValue, ProfileTypeInfoClass, PROFILE_TYPE_INFO_CLASS_INDEX, ecma_roots_class) \ 48 V(JSTaggedValue, DictionaryClass, DICTIONARY_CLASS_INDEX, ecma_roots_class) \ 49 V(JSTaggedValue, COWArrayClass, COW_ARRAY_CLASS_INDEX, ecma_roots_class) \ 50 V(JSTaggedValue, MutantTaggedArrayClass, MUTANT_TAGGED_ARRAY_CLASS_INDEX, ecma_roots_class) \ 51 V(JSTaggedValue, COWMutantTaggedArrayClass, COW_MUTANT_TAGGED_ARRAY_CLASS_INDEX, ecma_roots_class) \ 52 V(JSTaggedValue, BigIntClass, BIGINT_CLASS_INDEX, ecma_roots_class) \ 53 V(JSTaggedValue, JSNativePointerClass, JS_NATIVE_POINTER_CLASS_INDEX, ecma_roots_class) \ 54 V(JSTaggedValue, SJSNativePointerClass, SENDABLE_JS_NATIVE_POINTER_CLASS_INDEX, ecma_roots_class) \ 55 V(JSTaggedValue, EnvClass, ENV_CLASS_INDEX, ecma_roots_class) \ 56 V(JSTaggedValue, SymbolClass, SYMBOL_CLASS_INDEX, ecma_roots_class) \ 57 V(JSTaggedValue, AccessorDataClass, ACCESSOR_DATA_CLASS_INDEX, ecma_roots_class) \ 58 V(JSTaggedValue, InternalAccessorClass, INTERNAL_ACCESSOR_CLASS_INDEX, ecma_roots_class) \ 59 V(JSTaggedValue, CompletionRecordClass, COMPLETION_RECORD_CLASS_INDEX, ecma_roots_class) \ 60 V(JSTaggedValue, GeneratorContextClass, GENERATOR_CONTEST_INDEX, ecma_roots_class) \ 61 V(JSTaggedValue, AsyncGeneratorRequestRecordClass, ASYNC_GENERATOR_REQUEST_CLASS_INDEX, ecma_roots_class) \ 62 V(JSTaggedValue, AsyncIteratorRecordClass, ASYNC_ITERATOR_RECORD_CLASS_INDEX, ecma_roots_class) \ 63 V(JSTaggedValue, CapabilityRecordClass, CAPABILITY_RECORD_CLASS_INDEX, ecma_roots_class) \ 64 V(JSTaggedValue, ReactionsRecordClass, REACTIONS_RECORD_CLASS_INDEX, ecma_roots_class) \ 65 V(JSTaggedValue, PromiseIteratorRecordClass, PROMISE_ITERATOR_RECORD_CLASS_INDEX, ecma_roots_class) \ 66 V(JSTaggedValue, PromiseRecordClass, PROMISE_RECORD_CLASS_INDEX, ecma_roots_class) \ 67 V(JSTaggedValue, PromiseResolvingFunctionsRecordClass, PROMISE_RESOLVING_FUNCTIONS_CLASS_INDEX, ecma_roots_class) \ 68 V(JSTaggedValue, MicroJobQueueClass, MICRO_JOB_QUEUE_CLASS_INDEX, ecma_roots_class) \ 69 V(JSTaggedValue, PendingJobClass, PENDING_JOB_CLASS_INDEX, ecma_roots_class) \ 70 V(JSTaggedValue, ProtoChangeMarkerClass, PROTO_CHANGE_MARKER_CLASS_INDEX, ecma_roots_class) \ 71 V(JSTaggedValue, ProtoChangeDetailsClass, PROTO_CHANGE_DETAILS_CLASS_INDEX, ecma_roots_class) \ 72 V(JSTaggedValue, MarkerCellClass, MARKER_CELL_CLASS_INDEX, ecma_roots_class) \ 73 V(JSTaggedValue, TrackInfoClass, TRACK_INFO_CLASS_INDEX, ecma_roots_class) \ 74 V(JSTaggedValue, PrototypeHandlerClass, PROTOTYPE_HANDLER_CLASS_INDEX, ecma_roots_class) \ 75 V(JSTaggedValue, TransitionHandlerClass, TRANSITION_HANDLER_CLASS_INDEX, ecma_roots_class) \ 76 V(JSTaggedValue, TransWithProtoHandlerClass, TRANS_WITH_PROTO_HANDLER_CLASS_INDEX, ecma_roots_class) \ 77 V(JSTaggedValue, StoreAOTHandlerClass, STORE_TS_HANDLER_CLASS_INDEX, ecma_roots_class) \ 78 V(JSTaggedValue, PropertyBoxClass, PROPERTY_BOX_CLASS_INDEX, ecma_roots_class) \ 79 V(JSTaggedValue, ProgramClass, PROGRAM_CLASS_INDEX, ecma_roots_class) \ 80 V(JSTaggedValue, ImportEntryClass, IMPORT_ENTRY_CLASS_INDEX, ecma_roots_class) \ 81 V(JSTaggedValue, LocalExportEntryClass, LOCAL_EXPORT_ENTRY_CLASS_INDEX, ecma_roots_class) \ 82 V(JSTaggedValue, IndirectExportEntryClass, INDIRECT_EXPORT_ENTRY_CLASS_INDEX, ecma_roots_class) \ 83 V(JSTaggedValue, StarExportEntryClass, STAR_EXPORT_ENTRY_CLASS_INDEX, ecma_roots_class) \ 84 V(JSTaggedValue, SourceTextModuleClass, SOURCE_TEXT_MODULE_CLASS_INDEX, ecma_roots_class) \ 85 V(JSTaggedValue, ResolvedBindingClass, RESOLVED_BINDING_CLASS_INDEX, ecma_roots_class) \ 86 V(JSTaggedValue, ResolvedIndexBindingClass, RESOLVED_INDEX_BINDING_CLASS_INDEX, ecma_roots_class) \ 87 V(JSTaggedValue, MachineCodeClass, MACHINE_CODE_CLASS_INDEX, ecma_roots_class) \ 88 V(JSTaggedValue, ClassInfoExtractorHClass, CLASS_INFO_EXTRACTOR_HCLASS_INDEX, ecma_roots_class) \ 89 V(JSTaggedValue, CellRecordClass, CELL_RECORD_CLASS_INDEX, ecma_roots_class) \ 90 V(JSTaggedValue, AOTLiteralInfoClass, AOT_LITERAL_INFO_CLASS_INDEX, ecma_roots_class) \ 91 V(JSTaggedValue, MethodClass, METHOD_CLASS_INDEX, ecma_roots_class) \ 92 V(JSTaggedValue, LinkedNode, LINKED_NODE_CLASS_INDEX, ecma_roots_class) \ 93 V(JSTaggedValue, RBTreeNode, RB_TREENODE_CLASS_INDEX, ecma_roots_class) \ 94 V(JSTaggedValue, ClassLiteralClass, CLASS_LITERAL_HCLASS_INDEX, ecma_roots_class) \ 95 V(JSTaggedValue, ExtraProfileTypeInfoClass, EXTRA_PROFILE_TYPE_INFO_CLASS_INDEX, ecma_roots_class) \ 96 V(JSTaggedValue, ProfileTypeInfoCell0Class, PROFILE_TYPE_INFO_CELL_0_CLASS_INDEX, ecma_roots_class) \ 97 V(JSTaggedValue, ProfileTypeInfoCell1Class, PROFILE_TYPE_INFO_CELL_1_CLASS_INDEX, ecma_roots_class) \ 98 V(JSTaggedValue, ProfileTypeInfoCellNClass, PROFILE_TYPE_INFO_CELL_N_CLASS_INDEX, ecma_roots_class) \ 99 V(JSTaggedValue, FunctionTemplateClass, FUNCTION_TEMPLATE_CLASS_INDEX, ecma_roots_class) \ 100 V(JSTaggedValue, VTableClass, VTABLE_CLASS_INDEX, ecma_roots_class) \ 101 V(JSTaggedValue, ResolvedRecordIndexBindingClass, RESOLVED_RECORD_INEDX_BINDING_CLASS_INDEX, ecma_roots_class) \ 102 V(JSTaggedValue, ResolvedRecordBindingClass, RESOLVED_RECORD_BINDING_CLASS_INDEX, ecma_roots_class) \ 103 V(JSTaggedValue, SendableEnvClass, SENDABLE_ENV_CLASS_INDEX, ecma_roots_class) \ 104 105 #define GLOBAL_ENV_CONSTANT_CLASS(V) \ 106 V(JSTaggedValue, JSProxyCallableClass, JS_PROXY_CALLABLE_CLASS_INDEX, ecma_roots_class) \ 107 V(JSTaggedValue, JSProxyConstructClass, JS_PROXY_CONSTRUCT_CLASS_INDEX, ecma_roots_class) \ 108 V(JSTaggedValue, JSRealmClass, JS_REALM_CLASS_INDEX, ecma_roots_class) \ 109 V(JSTaggedValue, JSRegExpClass, JS_REGEXP_CLASS_INDEX, ecma_roots_class) \ 110 V(JSTaggedValue, JSProxyOrdinaryClass, JS_PROXY_ORDINARY_CLASS_INDEX, ecma_roots_class) \ 111 V(JSTaggedValue, JSSetIteratorClass, JS_SET_ITERATOR_CLASS_INDEX, ecma_roots_class) \ 112 V(JSTaggedValue, JSSharedSetIteratorClass, JS_SHARED_SET_ITERATOR_CLASS_INDEX, ecma_roots_class) \ 113 V(JSTaggedValue, JSRegExpIteratorClass, JS_REGEXP_ITERATOR_CLASS_INDEX, ecma_roots_class) \ 114 V(JSTaggedValue, JSMapIteratorClass, JS_MAP_ITERATOR_CLASS_INDEX, ecma_roots_class) \ 115 V(JSTaggedValue, JSSharedMapIteratorClass, JS_SHARED_MAP_ITERATOR_CLASS_INDEX, ecma_roots_class) \ 116 V(JSTaggedValue, JSArrayIteratorClass, JS_ARRAY_ITERATOR_CLASS_INDEX, ecma_roots_class) \ 117 V(JSTaggedValue, JSSharedArrayIteratorClass, JS_SHARED_ARRAY_ITERATOR_CLASS_INDEX, ecma_roots_class) \ 118 V(JSTaggedValue, JSAPIArrayListIteratorClass, JS_API_ARRAYLIST_ITERATOR_CLASS_INDEX, ecma_roots_class) \ 119 V(JSTaggedValue, JSAPIDequeIteratorClass, JS_API_DEQUE_ITERATOR_CLASS_INDEX, ecma_roots_class) \ 120 V(JSTaggedValue, JSAPILightWeightMapIteratorClass, JS_API_LIGHTWEIGHTMAP_ITERATOR_CLASS_INDEX, ecma_roots_class) \ 121 V(JSTaggedValue, JSAPILightWeightSetIteratorClass, JS_API_LIGHTWEIGHTSET_ITERATOR_CLASS_INDEX, ecma_roots_class) \ 122 V(JSTaggedValue, JSAPILinkedListIteratorClass, JS_API_LINKED_LIST_ITERATOR_CLASS_INDEX, ecma_roots_class) \ 123 V(JSTaggedValue, JSAPIListIteratorClass, JS_API_LIST_ITERATOR_CLASS_INDEX, ecma_roots_class) \ 124 V(JSTaggedValue, JSAPIPlainArrayIteratorClass, JS_API_PLAIN_ARRAY_ITERATOR_CLASS_INDEX, ecma_roots_class) \ 125 V(JSTaggedValue, JSAPIQueueIteratorClass, JS_API_QUEUE_ITERATOR_CLASS_INDEX, ecma_roots_class) \ 126 V(JSTaggedValue, JSAPIStackIteratorClass, JS_API_STACK_ITERATOR_CLASS_INDEX, ecma_roots_class) \ 127 V(JSTaggedValue, JSAPIVectorIteratorClass, JS_API_VECTOR_ITERATOR_CLASS_INDEX, ecma_roots_class) \ 128 V(JSTaggedValue, JSAPIBitVectorIteratorClass, JS_API_BITVECTOR_ITERATOR_CLASS_INDEX, ecma_roots_class) \ 129 V(JSTaggedValue, JSAPIHashMapIteratorClass, JS_API_HASH_MAP_ITERATOR_CLASS_INDEX, ecma_roots_class) \ 130 V(JSTaggedValue, JSAPIHashSetIteratorClass, JS_API_HASH_SET_ITERATOR_CLASS_INDEX, ecma_roots_class) \ 131 V(JSTaggedValue, JSAPITreeMapIteratorClass, JS_API_TREE_MAP_ITERATOR_CLASS_INDEX, ecma_roots_class) \ 132 V(JSTaggedValue, JSAPITreeSetIteratorClass, JS_API_TREE_SET_ITERATOR_CLASS_INDEX, ecma_roots_class) \ 133 V(JSTaggedValue, JSAPIIteratorFuncHClass, JS_API_ITERATOR_FUNC_CLASS_INDEX, ecma_roots_class) \ 134 V(JSTaggedValue, JSAPIAsyncIteratorFuncHClass, JS_API_ASYNCITERATOR_FUNC_CLASS_INDEX, ecma_roots_class) \ 135 V(JSTaggedValue, ObjectClass, OBJECT_HCLASS_INDEX, initial_object_hclass) \ 136 V(JSTaggedValue, IteratorResultClass, ITERATOR_RESULT_CLASS, ecma_roots_class) \ 137 V(JSTaggedValue, ClassPrototypeClass, CLASS_PROTOTYPE_HCLASS_INDEX, ecma_roots_class) \ 138 V(JSTaggedValue, ClassConstructorClass, CLASS_CONSTRUCTOR_HCLASS_INDEX, ecma_roots_class) \ 139 V(JSTaggedValue, ElementNoneProtoClass, ELEMENT_NONE_PROTO_HCLASS_INDEX, ecma_roots_class) \ 140 V(JSTaggedValue, ElementHoleProtoClass, ELEMENT_HOLE_PROTO_HCLASS_INDEX, ecma_roots_class) \ 141 V(JSTaggedValue, ElementIntProtoClass, ELEMENT_INT_PROTO_HCLASS_INDEX, ecma_roots_class) \ 142 V(JSTaggedValue, ElementNumberProtoClass, ELEMENT_NUMBER_PROTO_HCLASS_INDEX, ecma_roots_class) \ 143 V(JSTaggedValue, ElementStringProtoClass, ELEMENT_STRING_PROTO_HCLASS_INDEX, ecma_roots_class) \ 144 V(JSTaggedValue, ElementObjectProtoClass, ELEMENT_OBJECT_PROTO_HCLASS_INDEX, ecma_roots_class) \ 145 V(JSTaggedValue, ElementTaggedProtoClass, ELEMENT_TAGGED_PROTO_HCLASS_INDEX, ecma_roots_class) \ 146 V(JSTaggedValue, ElementHoleIntProtoClass, ELEMENT_HOLE_INT_PROTO_HCLASS_INDEX, ecma_roots_class) \ 147 V(JSTaggedValue, ElementHoleNumberProtoClass, ELEMENT_HOLE_NUMBER_PROTO_HCLASS_INDEX, ecma_roots_class) \ 148 V(JSTaggedValue, ElementHoleStringProtoClass, ELEMENT_HOLE_STRING_PROTO_HCLASS_INDEX, ecma_roots_class) \ 149 V(JSTaggedValue, ElementHoleObjectProtoClass, ELEMENT_HOLE_OBJECT_PROTO_HCLASS_INDEX, ecma_roots_class) \ 150 V(JSTaggedValue, ElementHoleTaggedProtoClass, ELEMENT_HOLE_TAGGED_PROTO_HCLASS_INDEX, ecma_roots_class) \ 151 V(JSTaggedValue, ElementNoneClass, ELEMENT_NONE_HCLASS_INDEX, ecma_roots_class) \ 152 V(JSTaggedValue, ElementHoleClass, ELEMENT_HOLE_HCLASS_INDEX, ecma_roots_class) \ 153 V(JSTaggedValue, ElementIntClass, ELEMENT_INT_HCLASS_INDEX, ecma_roots_class) \ 154 V(JSTaggedValue, ElementNumberClass, ELEMENT_NUMBER_HCLASS_INDEX, ecma_roots_class) \ 155 V(JSTaggedValue, ElementStringClass, ELEMENT_STRING_HCLASS_INDEX, ecma_roots_class) \ 156 V(JSTaggedValue, ElementObjectClass, ELEMENT_OBJECT_HCLASS_INDEX, ecma_roots_class) \ 157 V(JSTaggedValue, ElementTaggedClass, ELEMENT_TAGGED_HCLASS_INDEX, ecma_roots_class) \ 158 V(JSTaggedValue, ElementHoleIntClass, ELEMENT_HOLE_INT_HCLASS_INDEX, ecma_roots_class) \ 159 V(JSTaggedValue, ElementHoleNumberClass, ELEMENT_HOLE_NUMBER_HCLASS_INDEX, ecma_roots_class) \ 160 V(JSTaggedValue, ElementHoleStringClass, ELEMENT_HOLE_STRING_HCLASS_INDEX, ecma_roots_class) \ 161 V(JSTaggedValue, ElementHoleObjectClass, ELEMENT_HOLE_OBJECT_HCLASS_INDEX, ecma_roots_class) \ 162 V(JSTaggedValue, ElementHoleTaggedClass, ELEMENT_HOLE_TAGGED_HCLASS_INDEX, ecma_roots_class) 163 164 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 165 #define GLOBAL_ENV_CONSTANT_SPECIAL(V) \ 166 V(JSTaggedValue, EmptyLayoutInfo, EMPTY_LAYOUT_INFO_OBJECT_INDEX, ecma_roots_special) \ 167 V(JSTaggedValue, DefaultSupers, DEFAULT_SUPERS_INDEX, ecma_roots_special) \ 168 V(JSTaggedValue, EmptyTaggedQueue, EMPTY_TAGGED_QUEUE_OBJECT_INDEX, ecma_roots_special) \ 169 V(JSTaggedValue, UndefinedCompletionRecord, UNDEFINED_COMPLRTION_RECORD_INDEX, ecma_roots_special) \ 170 V(JSTaggedValue, ArraySpeciesAccessor, ARRAY_SPECIES_ACCESSOR, ecma_roots_special) 171 172 // Use for builtins inlining 173 #define GLOBAL_ENV_INLINED_BUILTINS(V) \ 174 V(JSTaggedValue, MathSqrt, MATH_SQRT_INDEX, ecma_roots_builtins) \ 175 V(JSTaggedValue, MathAcos, MATH_ACOS_INDEX, ecma_roots_builtins) \ 176 V(JSTaggedValue, MathAcosh, MATH_ACOSH_INDEX, ecma_roots_builtins) \ 177 V(JSTaggedValue, MathAsin, MATH_ASIN_INDEX, ecma_roots_builtins) \ 178 V(JSTaggedValue, MathAsinh, MATH_ASINH_INDEX, ecma_roots_builtins) \ 179 V(JSTaggedValue, MathAtan, MATH_ATAN_INDEX, ecma_roots_builtins) \ 180 V(JSTaggedValue, MathAtan2, MATH_ATAN2_INDEX, ecma_roots_builtins) \ 181 V(JSTaggedValue, MathAtanh, MATH_ATANH_INDEX, ecma_roots_builtins) \ 182 V(JSTaggedValue, MathCos, MATH_COS_INDEX, ecma_roots_builtins) \ 183 V(JSTaggedValue, MathCosh, MATH_COSH_INDEX, ecma_roots_builtins) \ 184 V(JSTaggedValue, MathSign, MATH_SIGN_INDEX, ecma_roots_builtins) \ 185 V(JSTaggedValue, MathSin, MATH_SIN_INDEX, ecma_roots_builtins) \ 186 V(JSTaggedValue, MathSinh, MATH_SINH_INDEX, ecma_roots_builtins) \ 187 V(JSTaggedValue, MathTan, MATH_TAN_INDEX, ecma_roots_builtins) \ 188 V(JSTaggedValue, MathTanh, MATH_TANH_INDEX, ecma_roots_builtins) \ 189 V(JSTaggedValue, MathTrunc, MATH_TRUNC_INDEX, ecma_roots_builtins) \ 190 V(JSTaggedValue, MathLog, MATH_LOG_INDEX, ecma_roots_builtins) \ 191 V(JSTaggedValue, MathLog2, MATH_LOG2_INDEX, ecma_roots_builtins) \ 192 V(JSTaggedValue, MathLog10, MATH_LOG10_INDEX, ecma_roots_builtins) \ 193 V(JSTaggedValue, MathLog1p, MATH_LOG1P_INDEX, ecma_roots_builtins) \ 194 V(JSTaggedValue, MathExp, MATH_EXP_INDEX, ecma_roots_builtins) \ 195 V(JSTaggedValue, MathExpm1, MATH_EXPM1_INDEX, ecma_roots_builtins) \ 196 V(JSTaggedValue, MathClz32, MATH_CLZ32_INDEX, ecma_roots_builtins) \ 197 V(JSTaggedValue, MathAbs, MATH_ABS_INDEX, ecma_roots_builtins) \ 198 V(JSTaggedValue, MathPow, MATH_POW_INDEX, ecma_roots_builtins) \ 199 V(JSTaggedValue, MathCbrt, MATH_CBRT_INDEX, ecma_roots_builtins) \ 200 V(JSTaggedValue, MathMin, MATH_MIN_INDEX, ecma_roots_builtins) \ 201 V(JSTaggedValue, MathMax, MATH_MAX_INDEX, ecma_roots_builtins) \ 202 V(JSTaggedValue, MathRound, MATH_ROUND_INDEX, ecma_roots_builtins) \ 203 V(JSTaggedValue, MathFRound, MATH_FROUND_INDEX, ecma_roots_builtins) \ 204 V(JSTaggedValue, MathCeil, MATH_CEIL_INDEX, ecma_roots_builtins) \ 205 V(JSTaggedValue, MathFloor, MATH_FLOOR_INDEX, ecma_roots_builtins) \ 206 V(JSTaggedValue, MathImul, MATH_IMUL_INDEX, ecma_roots_builtins) \ 207 V(JSTaggedValue, BigIntAsIntN, BIGINT_AS_INTN_INDEX, ecma_roots_builtins) \ 208 V(JSTaggedValue, BigIntAsUintN, BIGINT_AS_UINTN_INDEX, ecma_roots_builtins) \ 209 V(JSTaggedValue, GlobalIsFinite, GLOBAL_IS_FINITE_INDEX, ecma_roots_builtins) \ 210 V(JSTaggedValue, GlobalIsNan, GLOBAL_IS_NAN_INDEX, ecma_roots_builtins) \ 211 V(JSTaggedValue, LocaleCompareFunction, LOCALE_COMPARE_FUNCTION_INDEX, ecma_roots_builtins) \ 212 V(JSTaggedValue, ArraySortFunction, ARRAY_SORT_FUNCTION_INDEX, ecma_roots_builtins) \ 213 V(JSTaggedValue, JsonStringifyFunction, JSON_STRINGIFY_FUNCTION_INDEX, ecma_roots_builtins) \ 214 V(JSTaggedValue, MapIteratorProtoNext, MAP_ITERATOR_PROTO_NEXT_INDEX, ecma_roots_builtins) \ 215 V(JSTaggedValue, SetIteratorProtoNext, SET_ITERATOR_PROTO_NEXT_INDEX, ecma_roots_builtins) \ 216 V(JSTaggedValue, StringIteratorProtoNext, STRING_ITERATOR_PROTO_NEXT_INDEX, ecma_roots_builtins) \ 217 V(JSTaggedValue, ArrayIteratorProtoNext, ARRAY_ITERATOR_PROTO_NEXT_INDEX, ecma_roots_builtins) \ 218 V(JSTaggedValue, IteratorProtoReturn, ITERATOR_PROTO_RETURN_INDEX, ecma_roots_builtins) \ 219 V(JSTaggedValue, ArrayBufferIsView, ARRAY_BUFFER_IS_VIEW_INDEX, ecma_roots_builtins) \ 220 V(JSTaggedValue, DataViewGetFloat32, DATA_VIEW_GET_FLOAT32_INDEX, ecma_roots_builtins) \ 221 V(JSTaggedValue, DataViewGetFloat64, DATA_VIEW_GET_FLOAT64_INDEX, ecma_roots_builtins) \ 222 V(JSTaggedValue, DataViewGetInt8, DATA_VIEW_GET_INT8_INDEX, ecma_roots_builtins) \ 223 V(JSTaggedValue, DataViewGetInt16, DATA_VIEW_GET_INT16_INDEX, ecma_roots_builtins) \ 224 V(JSTaggedValue, DataViewGetInt32, DATA_VIEW_GET_INT32_INDEX, ecma_roots_builtins) \ 225 V(JSTaggedValue, DataViewGetUint16, DATA_VIEW_GET_UINT16_INDEX, ecma_roots_builtins) \ 226 V(JSTaggedValue, DataViewGetUint32, DATA_VIEW_GET_UINT32_INDEX, ecma_roots_builtins) \ 227 V(JSTaggedValue, DataViewGetUint8, DATA_VIEW_GET_UINT8_INDEX, ecma_roots_builtins) \ 228 V(JSTaggedValue, DataViewSetInt8, DATA_VIEW_SET_INT8_INDEX, ecma_roots_builtins) \ 229 V(JSTaggedValue, DataViewSetInt16, DATA_VIEW_SET_INT16_INDEX, ecma_roots_builtins) \ 230 V(JSTaggedValue, DataViewSetUint8, DATA_VIEW_SET_UINT8_INDEX, ecma_roots_builtins) \ 231 V(JSTaggedValue, DataViewSetUint16, DATA_VIEW_SET_UINT16_INDEX, ecma_roots_builtins) \ 232 V(JSTaggedValue, DataViewSetUint32, DATA_VIEW_SET_UINT32_INDEX, ecma_roots_builtins) \ 233 V(JSTaggedValue, DateGetTime, DATE_GET_TIME_INDEX, ecma_roots_special) \ 234 V(JSTaggedValue, DateNow, DATE_NOW_INDEX, ecma_roots_special) \ 235 V(JSTaggedValue, ObjectIs, OBJECT_IS_INDEX, ecma_roots_special) \ 236 V(JSTaggedValue, ObjectGetPrototo, OBJECT_GET_PROTO_INDEX, ecma_roots_special) \ 237 V(JSTaggedValue, ObjectIsPrototypeOf, OBJECT_IS_PROTOTYPE_OF_INDEX, ecma_roots_special) \ 238 V(JSTaggedValue, ReflectGetPrototypeOf, REFLECT_GET_PROTOTYPE_OF_INDEX, ecma_roots_special) \ 239 V(JSTaggedValue, ReflectHas, REFLECT_HAS_INDEX, ecma_roots_special) \ 240 V(JSTaggedValue, ReflectConstruct, REFLECT_CONSTRUCT_INDEX, ecma_roots_special) \ 241 V(JSTaggedValue, ReflectApply, REFLECT_APPLY_INDEX, ecma_roots_special) \ 242 V(JSTaggedValue, FunctionHasInstance, FUNCTION_PROTOTYPE_HAS_INSTANCE_INDEX, ecma_roots_special) \ 243 V(JSTaggedValue, ArrayKeys, ARRAY_KEYS_INDEX, ecma_roots_builtins) \ 244 V(JSTaggedValue, ArrayEntries, ARRAY_ENTRIES_INDEX, ecma_roots_builtins) \ 245 V(JSTaggedValue, GloablDecodeURIComponent, GLOBAL_DECODE_URI_COMPONENT, ecma_roots_builtins) 246 247 // All of type JSTaggedValue 248 #define SHARED_GLOBAL_ENV_CONSTANT_STRING(V) \ 249 V(ConstructorString, CONSTRUCTOR_STRING_INDEX, "constructor") \ 250 V(PrototypeString, PROTOTYPE_STRING_INDEX, "prototype") \ 251 V(SizeString, SIZE_STRING_INDEX, "size") \ 252 V(LengthString, LENGTH_STRING_INDEX, "length") \ 253 V(ValueString, VALUE_STRING_INDEX, "value") \ 254 V(SetString, SET_STRING_INDEX, "set") \ 255 V(GetString, GET_STRING_INDEX, "get") \ 256 V(SetWithSpaceString, SET_SPACE_STRING_INDEX, "set ") \ 257 V(GetWithSpaceString, GET_SPACE_STRING_INDEX, "get ") \ 258 V(WritableString, WRITABLE_STRING_INDEX, "writable") \ 259 V(EnumerableString, ENUMERABLE_STRING_INDEX, "enumerable") \ 260 V(ConfigurableString, CONFIGURABLE_STRING_INDEX, "configurable") \ 261 V(NameString, NAME_STRING_INDEX, "name") \ 262 V(SendableElementsSymbol, SENDABLE_ELEMENTS_INDEX, "sendableElements") \ 263 /* SymbolTable * RegisterSymbols */ \ 264 V(GetPrototypeOfString, GETPROTOTYPEOF_STRING_INDEX, "getPrototypeOf") \ 265 V(SetPrototypeOfString, SETPROTOTYPEOF_STRING_INDEX, "setPrototypeOf") \ 266 V(IsExtensibleString, ISEXTENSIBLE_STRING_INDEX, "isExtensible") \ 267 V(PreventExtensionsString, PREVENTEXTENSIONS_STRING_INDEX, "preventExtensions") \ 268 V(GetOwnPropertyDescriptorString, GETOWNPROPERTYDESCRIPTOR_STRING_INDEX, "getOwnPropertyDescriptor") \ 269 V(DefinePropertyString, DEFINEPROPERTY_STRING_INDEX, "defineProperty") \ 270 V(HasString, HAS_STRING_INDEX, "has") \ 271 V(DeletePropertyString, DELETEPROPERTY_STRING_INDEX, "deleteProperty") \ 272 V(EnumerateString, ENUMERATE_STRING_INDEX, "enumerate") \ 273 V(OwnKeysString, OWNKEYS_STRING_INDEX, "ownKeys") \ 274 V(ApplyString, APPLY_STRING_INDEX, "apply") \ 275 V(NegativeZeroString, NEGATIVE_ZERO_STRING_INDEX, "-0") \ 276 V(DoneString, DONE_STRING_INDEX, "done") \ 277 V(ProxyString, PROXY_STRING_INDEX, "proxy") \ 278 V(RevokeString, REVOKE_STRING_INDEX, "revoke") \ 279 V(NextString, NEXT_STRING_INDEX, "next") \ 280 V(ToStringString, TO_STRING_STRING_INDEX, "toString") \ 281 V(ToLocaleStringString, TO_LOCALE_STRING_STRING_INDEX, "toLocaleString") \ 282 V(ValueOfString, VALUE_OF_STRING_INDEX, "valueOf") \ 283 V(UndefinedString, UNDEFINED_STRING_INDEX, "undefined") \ 284 V(NullString, NULL_STRING_INDEX, "null") \ 285 V(BooleanString, BOOLEAN_STRING_INDEX, "boolean") \ 286 V(NumberString, NUMBER_STRING_INDEX, "number") \ 287 V(BigIntString, BIGINT_STRING_INDEX, "bigint") \ 288 V(FunctionString, FUNCTION_STRING_INDEX, "function") \ 289 V(StringString, STRING_STRING_INDEX, "string") \ 290 V(SymbolString, SYMBOL_STRING_INDEX, "symbol") \ 291 V(NativeModuleFailureInfoString, NATIVE_MODULE_FAILURE_INFO_STRING_INDEX, "NativeModuleFailureInfo") \ 292 V(ObjectString, OBJECT_STRING_INDEX, "object") \ 293 V(TrueString, TRUE_STRING_INDEX, "true") \ 294 V(FalseString, FALSE_STRING_INDEX, "false") \ 295 V(ReturnString, RETURN_STRING_INDEX, "return") \ 296 V(ProxyConstructString, PROXY_CONSTRUCT_STRING_INDEX, "construct") \ 297 V(ProxyCallString, PROXY_CALL_STRING_INDEX, "call") \ 298 V(PromiseThenString, PROMISE_THEN_STRING_INDEX, "then") \ 299 V(PromiseCatchString, PROMISE_CATCH_STRING_INDEX, "catch") \ 300 V(PromiseFinallyString, PROMISE_FINALLY_STRING_INDEX, "finally") \ 301 V(PromiseStatusString, PROMISE_STATUS_STRING_INDEX, "status") \ 302 V(PromiseFulfilledString, PROMISE_FULFILLED_STRING_INDEX, "fulfilled") \ 303 V(PromiseRejectedString, PROMISE_REJECTED_STRING_INDEX, "rejected") \ 304 V(PromiseReasonString, PROMISE_REASON_STRING_INDEX, "reason") \ 305 V(ScriptJobString, SCRIPT_JOB_STRING_INDEX, "ScriptJobs") \ 306 V(PromiseString, PROMISE_STRING_INDEX, "PrimiseJobs") \ 307 V(ThrowerString, THROWER_STRING_INDEX, "Thrower") \ 308 V(IdentityString, IDENTITY_STRING_INDEX, "Identity") \ 309 V(CallerString, CALLER_STRING_INDEX, "caller") \ 310 V(CalleeString, CALLEE_STRING_INDEX, "callee") \ 311 V(Int8ArrayString, INT8_ARRAY_STRING_INDEX, "Int8Array") \ 312 V(Uint8ArrayString, UINT8_ARRAY_STRING_INDEX, "Uint8Array") \ 313 V(Uint8ClampedArrayString, UINT8_CLAMPED_ARRAY_STRING_INDEX, "Uint8ClampedArray") \ 314 V(Int16ArrayString, INT16_ARRAY_STRING_INDEX, "Int16Array") \ 315 V(Uint16ArrayString, UINT16_ARRAY_STRING_INDEX, "Uint16Array") \ 316 V(Int32ArrayString, INT32_ARRAY_STRING_INDEX, "Int32Array") \ 317 V(Uint32ArrayString, UINT32_ARRAY_STRING_INDEX, "Uint32Array") \ 318 V(Float32ArrayString, FLOAT32_ARRAY_STRING_INDEX, "Float32Array") \ 319 V(Float64ArrayString, FLOAT64_ARRAY_STRING_INDEX, "Float64Array") \ 320 V(BigInt64ArrayString, BIGINT64_ARRAY_STRING_INDEX, "BigInt64Array") \ 321 V(BigUint64ArrayString, BIGUINT64_ARRAY_STRING_INDEX, "BigUint64Array") \ 322 V(SharedInt8ArrayString, SHARED_INT8_ARRAY_STRING_INDEX, "SharedInt8Array") \ 323 V(SharedUint8ArrayString, SHARED_UINT8_ARRAY_STRING_INDEX, "SharedUint8Array") \ 324 V(SharedUint8ClampedArrayString, SHARED_UINT8_CLAMPED_ARRAY_STRING_INDEX, "SharedUint8ClampedArray") \ 325 V(SharedInt16ArrayString, SHARED_INT16_ARRAY_STRING_INDEX, "SharedInt16Array") \ 326 V(SharedUint16ArrayString, SHARED_UINT16_ARRAY_STRING_INDEX, "SharedUint16Array") \ 327 V(SharedInt32ArrayString, SHARED_INT32_ARRAY_STRING_INDEX, "SharedInt32Array") \ 328 V(SharedUint32ArrayString, SHARED_UINT32_ARRAY_STRING_INDEX, "SharedUint32Array") \ 329 V(SharedFloat32ArrayString, SHARED_FLOAT32_ARRAY_STRING_INDEX, "SharedFloat32Array") \ 330 V(SharedFloat64ArrayString, SHARED_FLOAT64_ARRAY_STRING_INDEX, "SharedFloat64Array") \ 331 V(SharedBigInt64ArrayString, SHARED_BIGINT64_ARRAY_STRING_INDEX, "SharedBigInt64Array") \ 332 V(SharedBigUint64ArrayString, SHARED_BIGUINT64_ARRAY_STRING_INDEX, "SharedBigUint64Array") \ 333 V(AsyncFunctionString, ASYNC_FUNCTION_STRING_INDEX, "AsyncFunction") \ 334 V(PromiseResolveString, PROMISE_RESOLVE_STRING_INDEX, "resolve") \ 335 V(IdString, ID_STRING_INDEX, "id") \ 336 V(MethodString, METHOD_STRING_INDEX, "method") \ 337 V(ParamsString, PARAMS_STRING_INDEX, "params") \ 338 V(ResultString, RESULT_STRING_INDEX, "result") \ 339 V(ToJsonString, TO_JSON_STRING_INDEX, "toJSON") \ 340 V(GlobalString, GLOBAL_STRING_INDEX, "global") \ 341 V(MessageString, MESSAGE_STRING_INDEX, "message") \ 342 V(CauseString, CAUSE_STRING_INDEX, "cause") \ 343 V(ErrorString, ERROR_STRING_INDEX, "Error") \ 344 V(ErrorsString, ERRORS_STRING_INDEX, "errors") \ 345 V(AggregateErrorString, AGGREGATE_ERROR_STRING_INDEX, "AggregateError") \ 346 V(RangeErrorString, RANGE_ERROR_STRING_INDEX, "RangeError") \ 347 V(ReferenceErrorString, REFERENCE_ERROR_STRING_INDEX, "ReferenceError") \ 348 V(TypeErrorString, TYPE_ERROR_STRING_INDEX, "TypeError") \ 349 V(URIErrorString, URI_ERROR_STRING_INDEX, "URIError") \ 350 V(SyntaxErrorString, SYNTAX_ERROR_STRING_INDEX, "SyntaxError") \ 351 V(EvalErrorString, EVAL_ERROR_STRING_INDEX, "EvalError") \ 352 V(OOMErrorString, OOM_ERROR_STRING_INDEX, "OutOfMemoryError") \ 353 V(TerminationErrorString, TERMINATION_ERROR_STRING_INDEX, "TerminationError") \ 354 V(ErrorFuncString, ERROR_FUNC_STRING_INDEX, "errorfunc") \ 355 V(StackString, STACK_STRING_INDEX, "stack") \ 356 V(TopStackString, TOP_STACK_STRING_INDEX, "topstack") \ 357 V(StackEmptyString, STACK_EMPTY_STRING_INDEX, "stackisempty") \ 358 V(ObjNotCoercibleString, OBJ_NOT_COERCIBLE_STRING_INDEX, "objectnotcoercible") \ 359 /* for Intl. */ \ 360 V(LanguageString, LANGUAGE_STRING_CLASS_INDEX, "language") \ 361 V(ScriptString, SCRIPT_STRING_CLASS_INDEX, "script") \ 362 V(RegionString, REGION_STRING_CLASS_INDEX, "region") \ 363 V(BaseNameString, BASE_NAME_STRING_CLASS_INDEX, "baseName") \ 364 V(CalendarString, CALENDAR_STRING_CLASS_INDEX, "calendar") \ 365 V(CollationString, COLLATION_STRING_CLASS_INDEX, "collation") \ 366 V(HourCycleString, HOUR_CYCLE_STRING_CLASS_INDEX, "hourCycle") \ 367 V(CaseFirstString, CASE_FIRST_STRING_CLASS_INDEX, "caseFirst") \ 368 V(NumericString, NUMERIC_STRING_CLASS_INDEX, "numeric") \ 369 V(NumberingSystemString, NUMBERING_SYSTEM_STRING_CLASS_INDEX, "numberingSystem") \ 370 V(TypeString, TYPE_STRING_INDEX, "type") \ 371 V(GranularityString, GRANULARITY_STRING_INDEX, "granularity") \ 372 V(GraphemeString, GRAPHEME_STRING_INDEX, "grapheme") \ 373 V(WordString, WORD_STRING_INDEX, "word") \ 374 V(SentenceString, SENTENCE_STRING_INDEX, "sentence") \ 375 V(SegmentString, SEGMENT_STRING_INDEX, "segment") \ 376 V(IsWordLikeString, ISWORDLIKE_STRING_INDEX, "isWordLike") \ 377 V(LocaleMatcherString, LOCALE_MATCHER_STRING_INDEX, "localeMatcher") \ 378 V(LanguageDisplayString, LAUGUAGE_DISPLAY_STRING_INDEX, "languageDisplay") \ 379 V(FormatMatcherString, FORMAT_MATCHER_STRING_INDEX, "formatMatcher") \ 380 V(Hour12String, HOUR12_STRING_INDEX, "hour12") \ 381 V(H11String, H11_STRING_INDEX, "h11") \ 382 V(H12String, H12_STRING_INDEX, "h12") \ 383 V(H23String, H23_STRING_INDEX, "h23") \ 384 V(H24String, H24_STRING_INDEX, "h24") \ 385 V(WeekdayString, WEEK_DAY_STRING_INDEX, "weekday") \ 386 V(EraString, ERA_STRING_INDEX, "era") \ 387 V(YearString, YEAR_STRING_INDEX, "year") \ 388 V(QuarterString, QUARTER_STRING_INDEX, "quarter") \ 389 V(MonthString, MONTH_STRING_INDEX, "month") \ 390 V(DayString, DAY_STRING_INDEX, "day") \ 391 V(HourString, HOUR_STRING_INDEX, "hour") \ 392 V(MinuteString, MINUTE_STRING_INDEX, "minute") \ 393 V(SecondString, SECOND_STRING_INDEX, "second") \ 394 V(YearsString, YEARS_STRING_INDEX, "years") \ 395 V(QuartersString, QUARTERS_STRING_INDEX, "quarters") \ 396 V(MonthsString, MONTHS_STRING_INDEX, "months") \ 397 V(DaysString, DAYS_STRING_INDEX, "days") \ 398 V(HoursString, HOURS_STRING_INDEX, "hours") \ 399 V(MinutesString, MINUTES_STRING_INDEX, "minutes") \ 400 V(SecondsString, SECONDS_STRING_INDEX, "seconds") \ 401 V(TimeZoneNameString, TIME_ZONE_NAME_STRING_INDEX, "timeZoneName") \ 402 V(LocaleString, LOCALE_STRING_INDEX, "locale") \ 403 V(TimeZoneString, TIME_ZONE_STRING_INDEX, "timeZone") \ 404 V(LiteralString, LITERAL_STRING_INDEX, "literal") \ 405 V(YearNameString, YEAR_NAME_STRING_INDEX, "yearName") \ 406 V(DayPeriodString, DAY_PERIOD_STRING_INDEX, "dayPeriod") \ 407 V(FractionalSecondDigitsString, FRACTIONAL_SECOND_DIGITS_STRING_INDEX, "fractionalSecondDigits") \ 408 V(FractionalSecondString, FRACTIONAL_SECOND_STRING_INDEX, "fractionalSecond") \ 409 V(RelatedYearString, RELATED_YEAR_STRING_INDEX, "relatedYear") \ 410 V(LookUpString, LOOK_UP_STRING_INDEX, "lookup") \ 411 V(BestFitString, BEST_FIT_STRING_INDEX, "bestfit") \ 412 V(DateStyleString, DATE_STYLE_STRING_INDEX, "dateStyle") \ 413 V(TimeStyleString, TIME_STYLE_STRING_INDEX, "timeStyle") \ 414 V(UTCString, UTC_STRING_INDEX, "UTC") \ 415 V(WeekString, WEEK_STRING_INDEX, "week") \ 416 V(WeeksString, WEEKS_STRING_INDEX, "weeks") \ 417 V(SourceString, SOURCE_STRING_INDEX, "source") \ 418 V(FormatString, FORMAT_STRING_INDEX, "format") \ 419 V(EnUsString, EN_US_STRING_INDEX, "en-US") \ 420 V(UndString, UND_STRING_INDEX, "und") \ 421 V(LatnString, LATN_STRING_INDEX, "latn") \ 422 V(StyleString, STYLE_STRING_INDEX, "style") \ 423 V(UnitString, UNIT_STRING_INDEX, "unit") \ 424 V(IntegerString, INTEGER_STRING_INDEX, "integer") \ 425 V(NanString, NAN_STRING_INDEX, "nan") \ 426 V(InfinityString, INFINITY_STRING_INDEX, "infinity") \ 427 V(InfinityCapitalString, INFINITY_CAP_STRING_INDEX, "Infinity") \ 428 V(MinusInfinityCapitalString, MINUS_INFINITY_CAP_STRING_INDEX, "-Infinity") \ 429 V(FractionString, FRACTION_STRING_INDEX, "fraction") \ 430 V(DecimalString, DECIMAL_STRING_INDEX, "decimal") \ 431 V(GroupString, GROUP_STRING_INDEX, "group") \ 432 V(GroupsString, GROUPS_STRING_INDEX, "groups") \ 433 V(CurrencyString, CURRENCY_STRING_INDEX, "currency") \ 434 V(CurrencySignString, CURRENCY_SIGN_STRING_INDEX, "currencySign") \ 435 V(CurrencyDisplayString, CURRENCY_DISPLAY_STRING_INDEX, "currencyDisplay") \ 436 V(PercentSignString, PERCENT_SIGN_STRING_INDEX, "percentSign") \ 437 V(PercentString, PERCENT_STRING_INDEX, "percent") \ 438 V(MinusSignString, MINUS_SIGN_STRING_INDEX, "minusSign") \ 439 V(PlusSignString, PLUS_SIGN_STRING_INDEX, "plusSign") \ 440 V(ExponentSeparatorString, EXPONENT_SEPARATOR_STRING_INDEX, "exponentSeparator") \ 441 V(ExponentMinusSignString, EXPONENT_MINUS_SIGN_INDEX, "exponentMinusSign") \ 442 V(ExponentIntegerString, EXPONENT_INTEGER_STRING_INDEX, "exponentInteger") \ 443 V(LongString, LONG_STRING_INDEX, "long") \ 444 V(ShortString, SHORT_STRING_INDEX, "short") \ 445 V(FullString, FULL_STRING_INDEX, "full") \ 446 V(MediumString, MEDIUM_STRING_INDEX, "medium") \ 447 V(NarrowString, NARROW_STRING_INDEX, "narrow") \ 448 V(AlwaysString, ALWAYS_STRING_INDEX, "always") \ 449 V(AutoString, AUTO_STRING_INDEX, "auto") \ 450 V(ThrowString, THROW_STRING_INDEX, "throw") \ 451 V(UnitDisplayString, UNIT_DISPLAY_INDEX, "unitDisplay") \ 452 V(NotationString, NOTATION_INDEX, "notation") \ 453 V(CompactDisplayString, COMPACT_DISPALY_INDEX, "compactDisplay") \ 454 V(UserGroupingString, USER_GROUPING_INDEX, "useGrouping") \ 455 V(SignDisplayString, SIGN_DISPLAY_INDEX, "signDisplay") \ 456 V(CodeString, CODE_INDEX, "code") \ 457 V(NarrowSymbolString, NARROW_SYMBOL_INDEX, "narrowSymbol") \ 458 V(StandardString, STANDARD_INDEX, "standard") \ 459 V(DialectString, DIALECT_INDEX, "dialect") \ 460 V(AccountingString, ACCOUNTING_INDEX, "accounting") \ 461 V(ScientificString, SCIENTIFIC_INDEX, "scientific") \ 462 V(EngineeringString, ENGINEERING_INDEX, "engineering") \ 463 V(CompactString, COMPACT_STRING_INDEX, "compact") \ 464 V(NeverString, NEVER_INDEX, "never") \ 465 V(ExceptZeroString, EXPECT_ZERO_INDEX, "exceptZero") \ 466 V(MinimumIntegerDigitsString, MINIMUM_INTEGER_DIGITS_INDEX, "minimumIntegerDigits") \ 467 V(MinimumFractionDigitsString, MINIMUM_FRACTIONDIGITS_INDEX, "minimumFractionDigits") \ 468 V(MaximumFractionDigitsString, MAXIMUM_FRACTIONDIGITS_INDEX, "maximumFractionDigits") \ 469 V(MinimumSignificantDigitsString, MINIMUM_SIGNIFICANTDIGITS_INDEX, "minimumSignificantDigits") \ 470 V(MaximumSignificantDigitsString, MAXIMUM_SIGNIFICANTDIGITS_INDEX, "maximumSignificantDigits") \ 471 V(InvalidDateString, INVALID_DATE_INDEX, "Invalid Date") \ 472 V(UsageString, USAGE_INDEX, "usage") \ 473 V(CompareString, COMPARE_INDEX, "compare") \ 474 V(SensitivityString, SENSITIVITY_INDEX, "sensitivity") \ 475 V(IgnorePunctuationString, IGNORE_PUNCTUATION_INDEX, "ignorePunctuation") \ 476 V(CardinalString, CARDINAL_INDEX, "cardinal") \ 477 V(OrdinalString, ORDINAL_INDEX, "ordinal") \ 478 V(ExecString, EXEC_INDEX, "exec") \ 479 V(LastIndexString, LAST_INDEX_INDEX, "lastIndex") \ 480 V(PluralCategoriesString, PLURAL_CATEGORIES_INDEX, "pluralCategories") \ 481 V(SortString, SORT_INDEX, "sort") \ 482 V(SearchString, SEARCH_INDEX, "search") \ 483 V(BaseString, BASE_INDEX, "base") \ 484 V(AccentString, ACCENT_INDEX, "accent") \ 485 V(CaseString, CASE_INDEX, "case") \ 486 V(VariantString, VARIANT_INDEX, "variant") \ 487 V(EnUsPosixString, EN_US_POSIX_STRING_INDEX, "en-US-POSIX") \ 488 V(UpperString, UPPER_INDEX, "upper") \ 489 V(LowerString, LOWER_INDEX, "lower") \ 490 V(DefaultString, DEFAULT_INDEX, "default") \ 491 V(SharedString, SHARED_INDEX, "shared") \ 492 V(StartRangeString, START_RANGE_INDEX, "startRange") \ 493 V(EndRangeString, END_RANGE_INDEX, "endRange") \ 494 V(Iso8601String, ISO8601_INDEX, "iso8601") \ 495 V(GregoryString, GREGORY_INDEX, "gregory") \ 496 V(EthioaaString, ETHIOAA_INDEX, "ethioaa") \ 497 V(StickyString, STICKY_INDEX, "sticky") \ 498 V(HasIndicesString, HAS_INDICES_INDEX, "hasIndices") \ 499 V(DotAllString, DOT_ALL_INDEX, "dotAll") \ 500 V(MultilineString, MULTILINE_INDEX, "multiline") \ 501 V(IgnoreCaseString, IGNORE_CASE_INDEX, "ignoreCase") \ 502 V(IndicesString, INDICES_INDEX, "indices") \ 503 V(UString, U_INDEX, "u") \ 504 V(IndexString, INDEX_INDEX, "index") \ 505 V(InputString, INPUT_INDEX, "input") \ 506 V(UnicodeString, UNICODE_INDEX, "unicode") \ 507 V(ZeroString, ZERO_INDEX, "0") \ 508 V(ValuesString, VALUES_INDEX, "values") \ 509 V(AddString, ADD_INDEX, "add") \ 510 V(AmbiguousString, AMBIGUOUS_INDEX, "ambiguous") \ 511 V(ModuleString, MODULE_INDEX, "Module") \ 512 V(StarString, STAR_INDEX, "*") \ 513 V(DateTimeFieldString, DATETIMEFIELD_INDEX, "dateTimeField") \ 514 V(ConjunctionString, CONJUNCTION_INDEX, "conjunction") \ 515 V(NoneString, NONE_INDEX, "none") \ 516 V(FallbackString, FALLBACK_INDEX, "fallback") \ 517 V(DisjunctionString, DISJUNCTION_INDEX, "disjunction") \ 518 V(ElementString, ELEMENT_INDEX, "element") \ 519 V(FlagsString, FLAGS_INDEX, "flags") \ 520 V(GString, G_INDEX, "g") \ 521 V(NfcString, NFC_INDEX, "NFC") \ 522 V(NfdString, NFD_INDEX, "NFD") \ 523 V(NfkcString, NFKC_INDEX, "NFKC") \ 524 V(NfkdString, NFKD_INDEX, "NFKD") \ 525 V(EntriesString, ENTRIES_INDEX, "entries") \ 526 V(LeftSquareBracketString, LEFT_SQUARE_BRACKET_INDEX, "[") \ 527 V(RightSquareBracketString, RIGHT_SQUARE_BRACKET_INDEX, "]") \ 528 V(YString, Y_INDEX, "y") \ 529 V(DollarString, DOLLAR_INDEX, "$") \ 530 V(CommaString, COMMA_INDEX, ",") \ 531 V(JoinString, JOIN_INDEX, "join") \ 532 V(CopyWithinString, COPY_WITHIN_INDEX, "copyWithin") \ 533 V(FillString, FILL_INDEX, "fill") \ 534 V(FindString, FIND_INDEX, "find") \ 535 V(FindIndexString, FIND_INDEX_INDEX, "findIndex") \ 536 V(FlatString, FLAT_INDEX, "flat") \ 537 V(FlatMapString, FLATMAP_INDEX, "flatMap") \ 538 V(IncludesString, INCLUDES_INDEX, "includes") \ 539 V(KeysString, KEYS_INDEX, "keys") \ 540 V(BoundString, BOUND_INDEX, "bound") \ 541 V(TrimLeftString, TRIMLEFT_INDEX, "trimLeft") \ 542 V(TrimStartString, TRIMSTART_INDEX, "trimStart") \ 543 V(TrimRightString, TRIMRIGHT_INDEX, "trimRight") \ 544 V(TrimEndString, TRIMEND_INDEX, "trimEnd") \ 545 V(BackslashString, BACKSLASH_INDEX, "/") \ 546 V(SpaceString, SPACE_INDEX, " ") \ 547 V(NanCapitalString, NAN_INDEX, "NaN") \ 548 V(NotEqualString, NOT_EQUAL_INDEX, "not-equal") \ 549 V(OkString, OK_INDEX, "ok") \ 550 V(TimeoutString, TIMEOUT_INDEX, "timed-out") \ 551 V(CjsExportsString, CJS_EXPORTS_INDEX, "exports") \ 552 V(CjsCacheString, CJS_CACHE_INDEX, "_cache") \ 553 V(NapiWrapperString, NAPI_WRAPPER_INDEX, "_napiwrapper") \ 554 /* for require native module */ \ 555 V(RequireNativeModuleString, REQUIRE_NATIVE_MOUDULE_FUNC_INDEX, "requireNativeModule") \ 556 V(RequireNapiString, REQUIRE_NAPI_FUNC_INDEX, "requireNapi") \ 557 V(DollarStringOne, DOLLAR_STRING_ONE_INDEX, "$1") \ 558 V(DollarStringTwo, DOLLAR_STRING_TWO_INDEX, "$2") \ 559 V(DollarStringThree, DOLLAR_STRING_THREE_INDEX, "$3") \ 560 V(DollarStringFour, DOLLAR_STRING_FOUR_INDEX, "$4") \ 561 V(DollarStringFive, DOLLAR_STRING_FIVE_INDEX, "$5") \ 562 V(DollarStringSix, DOLLAR_STRING_SIX_INDEX, "$6") \ 563 V(DollarStringSeven, DOLLAR_STRING_SEVEN_INDEX, "$7") \ 564 V(DollarStringEight, DOLLAR_STRING_EIGHT_INDEX, "$8") \ 565 V(DollarStringNine, DOLLAR_STRING_NINE_INDEX, "$9") \ 566 /* for object to string */ \ 567 V(UndefinedToString, UNDEFINED_TO_STRING_INDEX, "[object Undefined]") \ 568 V(NullToString, NULL_TO_STRING_INDEX, "[object Null]") \ 569 V(ObjectToString, OBJECT_TO_STRING_INDEX, "[object Object]") \ 570 V(ArrayToString, ARRAY_TO_STRING_INDEX, "[object Array]") \ 571 V(StringToString, STRING_TO_STRING_INDEX, "[object String]") \ 572 V(BooleanToString, BOOLEAN_TO_STRING_INDEX, "[object Boolean]") \ 573 V(NumberToString, NUMBER_TO_STRING_INDEX, "[object Number]") \ 574 V(ArgumentsToString, ARGUMENTS_TO_STRING_INDEX, "[object Arguments]") \ 575 V(FunctionToString, FUNCTION_TO_STRING_INDEX, "[object Function]") \ 576 V(DateToString, DATE_TO_STRING_INDEX, "[object Date]") \ 577 V(ErrorToString, ERROR_TO_STRING_INDEX, "[object Error]") \ 578 V(RegExpToString, REGEXP_TO_STRING_INDEX, "[object RegExp]") \ 579 V(YoungGcCause, YOUNG_GC_CAUSE, "young") \ 580 V(OldGcCause, OLD_GC_CAUSE, "old") \ 581 V(FullGcCause, FULL_GC_CAUSE, "full") \ 582 V(AppSpawnFullGcCause, APP_SPAWN_FULL_GC_CAUSE, "app_spawn_full") \ 583 V(SharedGcCause, SHARED_GC_CAUSE, "shared") \ 584 V(SharedPartialGcCause, SHARED_PARTIAL_GC_CAUSE, "shared_partial") \ 585 V(SharedFullGcCause, SHARED_FULL_GC_CAUSE, "shared_full") \ 586 V(AppSpawnSharedFullGcCause, APP_SPAWN_SHARED_FULL_GC_CAUSE, "app_spawn_shared_full") \ 587 V(SymbolLeftParentheses, SYMBOL_LEFT_PARENTHESES, "Symbol(") 588 589 /* GlobalConstant */ 590 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 591 #define GLOBAL_ENV_CONSTANT_CONSTANT(V) \ 592 /* non ECMA standard jsapi containers iterators */ \ 593 V(JSTaggedValue, ArrayListFunction, ARRAYLIST_FUNCTION_INDEX, ArrayListFunction) \ 594 V(JSTaggedValue, ArrayListIteratorPrototype, ARRAYLIST_ITERATOR_PROTOTYPE_INDEX, ArrayListIterator) \ 595 V(JSTaggedValue, HashMapIteratorPrototype, HASHMAP_ITERATOR_PROTOTYPE_INDEX, HashMapIterator) \ 596 V(JSTaggedValue, HashSetIteratorPrototype, HASHSET_ITERATOR_PROTOTYPE_INDEX, HashSetIterator) \ 597 V(JSTaggedValue, LightWeightMapIteratorPrototype, \ 598 LIGHTWEIGHTMAP_ITERATOR_PROTOTYPE_INDEX, LightWeightMapIterator) \ 599 V(JSTaggedValue, LightWeightSetIteratorPrototype, \ 600 LIGHTWEIGHTSET_ITERATOR_PROTOTYPE_INDEX, LightWeightSetIterator) \ 601 V(JSTaggedValue, TreeMapIteratorPrototype, TREEMAP_ITERATOR_PROTOTYPE_INDEX, TreeMapIterator) \ 602 V(JSTaggedValue, TreeSetIteratorPrototype, TREESET_ITERATOR_PROTOTYPE_INDEX, TreeSetIterator) \ 603 V(JSTaggedValue, VectorFunction, VECTOR_FUNCTION_INDEX, VectorFunction) \ 604 V(JSTaggedValue, VectorIteratorPrototype, VECTOR_ITERATOR_PROTOTYPE_INDEX, VectorIterator) \ 605 V(JSTaggedValue, QueueIteratorPrototype, QUEUE_ITERATOR_PROTOTYPE_INDEX, QueueIterator) \ 606 V(JSTaggedValue, PlainArrayIteratorPrototype, PLAIN_ARRAY_ITERATOR_PROTOTYPE_INDEX, PlainArrayIterator) \ 607 V(JSTaggedValue, PlainArrayFunction, PLAIN_ARRAY_FUNCTION_INDEX, PlainArrayFunction) \ 608 V(JSTaggedValue, DequeIteratorPrototype, DEQUE_ITERATOR_PROTOTYPE_INDEX, DequeIterator) \ 609 V(JSTaggedValue, StackIteratorPrototype, STACK_ITERATOR_PROTOTYPE_INDEX, StackIterator) \ 610 V(JSTaggedValue, ListFunction, LIST_FUNCTION_INDEX, ListFunction) \ 611 V(JSTaggedValue, LinkedListFunction, LINKED_LIST_FUNCTION_INDEX, LinkedListFunction) \ 612 V(JSTaggedValue, ListIteratorPrototype, LIST_ITERATOR_PROTOTYPE_INDEX, ListIterator) \ 613 V(JSTaggedValue, UndefinedIterResult, UNDEFINED_INTERATOR_RESULT_INDEX, UndefinedIterResult) \ 614 V(JSTaggedValue, LinkedListIteratorPrototype, LINKED_LIST_ITERATOR_PROTOTYPE_INDEX, LinkedListIterator) 615 616 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 617 #define SHARED_GLOBAL_ENV_CONSTANT_ACCESSOR(V) \ 618 V(JSTaggedValue, FunctionPrototypeAccessor, FUNCTION_PROTOTYPE_ACCESSOR, ecma_roots_accessor) \ 619 V(JSTaggedValue, FunctionNameAccessor, FUNCTION_NAME_ACCESSOR, ecma_roots_accessor) \ 620 V(JSTaggedValue, FunctionLengthAccessor, FUNCTION_LENGTH_ACCESSOR, ecma_roots_accessor) \ 621 V(JSTaggedValue, ArrayLengthAccessor, ARRAY_LENGTH_ACCESSOR, ecma_roots_accessor) \ 622 V(JSTaggedValue, SharedArrayLengthAccessor, SHARED_ARRAY_LENGTH_ACCESSOR, ecma_roots_accessor) 623 624 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 625 #define SHARED_GLOBAL_ENV_CONSTANT_SPECIAL(V) \ 626 V(JSTaggedValue, Undefined, UNDEFINED_INDEX, ecma_roots_special) \ 627 V(JSTaggedValue, Null, NULL_INDEX, ecma_roots_special) \ 628 V(JSTaggedValue, Hole, HOLE_INDEX, ecma_roots_special) \ 629 V(JSTaggedValue, True, TRUE_INDEX, ecma_roots_special) \ 630 V(JSTaggedValue, False, FALSE_INDEX, ecma_roots_special) \ 631 V(JSTaggedValue, ProtoTransRootHClassSymbol, PROTO_TRANS_ROOT_HCLASS_SYMBOL_INDEX, ecma_roots_special) \ 632 V(JSTaggedValue, EmptyString, EMPTY_STRING_OBJECT_INDEX, ecma_roots_special) \ 633 V(JSTaggedValue, SingleCharTable, SINGLE_CHAR_TABLE_INDEX, ecma_roots_special) \ 634 V(JSTaggedValue, EmptySLayoutInfo, EMPTY_SLAYOUT_INFO_OBJECT_INDEX, ecma_roots_special) \ 635 V(JSTaggedValue, EmptyArray, EMPTY_ARRAY_OBJECT_INDEX, ecma_roots_special) \ 636 V(JSTaggedValue, EmptyMutantArray, EMPTY_MUTANT_ARRAY_OBJECT_INDEX, ecma_roots_special) \ 637 V(JSTaggedValue, ProxyMethod, PROXY_METHOD_INDEX, ecma_roots_special) \ 638 V(JSTaggedValue, Uint64MaxBigInt, UINT64_MAX_BIGINT_INDEX, ecma_roots_special) \ 639 V(JSTaggedValue, Int64MaxBigInt, INT64_MAX_BIGINT_INDEX, ecma_roots_special) \ 640 V(JSTaggedValue, EmptyProfileTypeInfoCell, EMPTY_PROFILE_TYPE_INFO_CELL_INDEX, ecma_roots_special) \ 641 V(JSTaggedValue, NormalFunctionMethod, NORMAL_FUNCTION_METHOD_INDEX, ecma_roots_special) \ 642 V(JSTaggedValue, GetterFunctionMethod, GETTER_FUNCTION_METHOD_INDEX, ecma_roots_special) \ 643 V(JSTaggedValue, SetterFunctionMethod, SETTER_FUNCTION_METHOD_INDEX, ecma_roots_special) \ 644 V(JSTaggedValue, ArrowFunctionMethod, ARROW_FUNCTION_METHOD_INDEX, ecma_roots_special) \ 645 V(JSTaggedValue, AsyncArrowFunctionMethod, ASYNC_ARROW_FUNCTION_METHOD_INDEX, ecma_roots_special) \ 646 V(JSTaggedValue, ConcurrentFunctionMethod, CONCURRENT_FUNCTION_METHOD_INDEX, ecma_roots_special) \ 647 V(JSTaggedValue, AsyncFunctionMethod, ASYNC_FUNCTION_METHOD_INDEX, ecma_roots_special) \ 648 V(JSTaggedValue, BaseConstructorMethod, BASE_CONSTRUCTOR_METHOD_INDEX, ecma_roots_special) \ 649 V(JSTaggedValue, ClassConstructorMethod, CLASS_CONSTRUCTOR_METHOD_INDEX, ecma_roots_special) \ 650 V(JSTaggedValue, BuiltinProxyConstructorMethod, BUILTIN_PROXY_CONSTRUCTOR_METHOD_INDEX, ecma_roots_special) \ 651 V(JSTaggedValue, BuiltinConstructorMethod, BUILTIN_CONSTRUCTOR_METHOD_INDEX, ecma_roots_special) \ 652 V(JSTaggedValue, DerivedConstructorMethod, DERIVED_CONSTRUCTOR_METHOD_INDEX, ecma_roots_special) \ 653 V(JSTaggedValue, GeneratorFunctionMethod, GENERATOR_FUNCTION_METHOD_INDEX, ecma_roots_special) \ 654 V(JSTaggedValue, NoneFunctionMethod, NONE_FUNCTION_METHOD_INDEX, ecma_roots_special) \ 655 V(JSTaggedValue, AsyncGeneratorFunctionMethod, ASYNC_GENERATOR_FUNCTION_METHOD_INDEX, ecma_roots_special) \ 656 V(JSTaggedValue, BoundFunctionMethod, BOUND_FUNCTION_METHOD_INDEX, ecma_roots_special) 657 658 #define GLOBAL_ENV_CACHES(V) \ 659 V(JSTaggedValue, CachedJSCollatorLocales, CACHED_JSCOLLATOR_LOCALES_INDEX, cachedCollatorLocales) 660 661 // ConstantIndex used for explicit visit each constant. 662 enum class ConstantIndex : size_t { 663 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 664 665 #define INDEX_FILTER_BUILTIN4(ARG1, ARG2, ARG3, Index) Index##_INDEX, 666 #define INDEX_FILTER_BUILTIN6(ARG1, ARG2, ARG3, ARG4, ARG5, Index) Index##_INDEX, 667 #define INDEX_FILTER_COMMON(Index) Index, 668 #define INDEX_FILTER_WITH_TYPE(Type, Name, Index, Desc) INDEX_FILTER_COMMON(Index) 669 #define INDEX_FILTER_STRING(Name, Index, Token) INDEX_FILTER_COMMON(Index) 670 // Caveats: make sure shareds starts from 0 and placed before non-shareds. 671 SHARED_GLOBAL_ENV_CONSTANT_CLASS(INDEX_FILTER_WITH_TYPE) 672 SHARED_GLOBAL_ENV_CONSTANT_STRING(INDEX_FILTER_STRING) 673 SHARED_GLOBAL_ENV_CONSTANT_ACCESSOR(INDEX_FILTER_WITH_TYPE) 674 SHARED_GLOBAL_ENV_CONSTANT_SPECIAL(INDEX_FILTER_WITH_TYPE) 675 GLOBAL_ENV_CONSTANT_CLASS(INDEX_FILTER_WITH_TYPE) 676 GLOBAL_ENV_CONSTANT_SPECIAL(INDEX_FILTER_WITH_TYPE) 677 BUILTINS_METHOD_STUB_LIST(INDEX_FILTER_BUILTIN4, INDEX_FILTER_BUILTIN4, \ 678 INDEX_FILTER_BUILTIN4, INDEX_FILTER_BUILTIN6) 679 GLOBAL_ENV_INLINED_BUILTINS(INDEX_FILTER_WITH_TYPE) 680 GLOBAL_ENV_CONSTANT_CONSTANT(INDEX_FILTER_WITH_TYPE) 681 GLOBAL_ENV_CACHES(INDEX_FILTER_WITH_TYPE) 682 #undef INDEX_FILTER_STRING 683 #undef INDEX_FILTER_WITH_TYPE 684 #undef INDEX_FILTER_COMMON 685 #undef INDEX_FILTER_BUILTIN4 686 #undef INDEX_FILTER_BUILTIN6 687 688 CONSTANT_COUNT, 689 690 CONSTANT_BEGIN = 0, 691 CONSTANT_END = CONSTANT_COUNT, 692 693 SHARED_BEGIN = HCLASS_CLASS_INDEX, 694 SHARED_END = BOUND_FUNCTION_METHOD_INDEX, 695 696 SHARED_HCLASS_BEGIN = HCLASS_CLASS_INDEX, 697 SHARED_HCLASS_END = VTABLE_CLASS_INDEX, 698 NON_SHARED_HCLASS_BEGIN = JS_PROXY_CALLABLE_CLASS_INDEX, 699 NON_SHARED_HCLASS_END = ELEMENT_HOLE_TAGGED_HCLASS_INDEX, 700 READ_ONLY_CONSTANT_BEGIN = CONSTANT_BEGIN, 701 READ_ONLY_CONSTANT_END = CONSTANT_END, 702 JSAPI_CONTAINERS_BEGIN = ARRAYLIST_FUNCTION_INDEX, 703 JSAPI_CONTAINERS_END = LINKED_LIST_ITERATOR_PROTOTYPE_INDEX, 704 705 INVALID = -1, 706 // ... 707 }; 708 // clang-format on 709 710 class GlobalEnvConstants { 711 public: 712 GlobalEnvConstants() = default; 713 ~GlobalEnvConstants() = default; 714 715 DEFAULT_MOVE_SEMANTIC(GlobalEnvConstants); 716 DEFAULT_COPY_SEMANTIC(GlobalEnvConstants); 717 718 const JSTaggedValue *BeginSlot() const; 719 720 const JSTaggedValue *EndSlot() const; 721 722 void Init(JSThread *thread); 723 724 void CopySharedConstantsFrom(const GlobalEnvConstants *src); 725 726 void InitSpecialForSnapshot(); 727 728 void InitElementKindHClass(const JSThread *thread, JSHandle<JSHClass> originHClass); 729 730 void SetCachedLocales(JSTaggedValue value); 731 732 void SetConstant(ConstantIndex index, JSTaggedValue value); 733 734 template<typename T> 735 void SetConstant(ConstantIndex index, JSHandle<T> value); 736 737 uintptr_t GetGlobalConstantAddr(ConstantIndex index) const; 738 739 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 740 #define DECL_GET_COMMON(Type, Name) \ 741 const Type Get##Name() const; \ 742 const JSHandle<Type> GetHandled##Name() const; \ 743 static size_t GetOffsetOf##Name(); 744 #define DECL_GET_BUILTIN(Method, Object, ...) DECL_GET_COMMON(JSTaggedValue, Object##Method) 745 #define DECL_GET_WITH_TYPE(Type, Name, Index, Desc) DECL_GET_COMMON(Type, Name) 746 #define DECL_GET_STRING(Name, Index, Token) DECL_GET_COMMON(JSTaggedValue, Name) 747 SHARED_GLOBAL_ENV_CONSTANT_CLASS(DECL_GET_WITH_TYPE) SHARED_GLOBAL_ENV_CONSTANT_STRING(DECL_GET_STRING)748 SHARED_GLOBAL_ENV_CONSTANT_STRING(DECL_GET_STRING) 749 SHARED_GLOBAL_ENV_CONSTANT_ACCESSOR(DECL_GET_WITH_TYPE) 750 SHARED_GLOBAL_ENV_CONSTANT_SPECIAL(DECL_GET_WITH_TYPE) 751 GLOBAL_ENV_CONSTANT_CLASS(DECL_GET_WITH_TYPE) 752 GLOBAL_ENV_CONSTANT_SPECIAL(DECL_GET_WITH_TYPE) 753 BUILTINS_METHOD_STUB_LIST(DECL_GET_BUILTIN, DECL_GET_BUILTIN, DECL_GET_BUILTIN, DECL_GET_BUILTIN) 754 GLOBAL_ENV_INLINED_BUILTINS(DECL_GET_WITH_TYPE) 755 GLOBAL_ENV_CONSTANT_CONSTANT(DECL_GET_WITH_TYPE) 756 GLOBAL_ENV_CACHES(DECL_GET_WITH_TYPE) 757 #undef DECL_GET_STRING 758 #undef DECL_GET_WITH_TYPE 759 #undef DECL_GET_COMMON 760 #undef DECL_GET_BUILTIN 761 762 void Iterate(RootVisitor &visitor) 763 { 764 visitor.VisitRangeRoot(Root::ROOT_VM, ObjectSlot(ToUintPtr(BeginSlot())), ObjectSlot(ToUintPtr(EndSlot()))); 765 } 766 GetGlobalConstantObject(size_t index)767 JSTaggedValue GetGlobalConstantObject(size_t index) const 768 { 769 ASSERT(static_cast<ConstantIndex>(index) < ConstantIndex::CONSTANT_COUNT); 770 return constants_[index]; 771 } 772 GetConstantCount()773 size_t GetConstantCount() const 774 { 775 return static_cast<size_t>(ConstantIndex::CONSTANT_COUNT); 776 } 777 GetEmptyArrayIndex()778 size_t GetEmptyArrayIndex() const 779 { 780 return static_cast<size_t>(ConstantIndex::EMPTY_ARRAY_OBJECT_INDEX); 781 } 782 GetEmptyMutantArrayIndex()783 size_t GetEmptyMutantArrayIndex() const 784 { 785 return static_cast<size_t>(ConstantIndex::EMPTY_MUTANT_ARRAY_OBJECT_INDEX); 786 } 787 GetJSAPIContainersBegin()788 size_t GetJSAPIContainersBegin() const 789 { 790 return static_cast<size_t>(ConstantIndex::JSAPI_CONTAINERS_BEGIN); 791 } 792 GetJSAPIContainersEnd()793 size_t GetJSAPIContainersEnd() const 794 { 795 return static_cast<size_t>(ConstantIndex::JSAPI_CONTAINERS_END); 796 } 797 GetLineStringClassIndex()798 size_t GetLineStringClassIndex() const 799 { 800 return static_cast<size_t>(ConstantIndex::LINE_STRING_CLASS_INDEX); 801 } 802 GetConstStringClassIndex()803 size_t GetConstStringClassIndex() const 804 { 805 return static_cast<size_t>(ConstantIndex::CONSTANT_STRING_CLASS_INDEX); 806 } 807 IsSpecialOrUndefined(size_t index)808 bool IsSpecialOrUndefined(size_t index) const 809 { 810 size_t specialBegin = static_cast<size_t>(ConstantIndex::UNDEFINED_INDEX); 811 size_t specialEnd = static_cast<size_t>(ConstantIndex::NULL_INDEX); 812 size_t undefinedBegin = GetJSAPIContainersBegin(); 813 size_t undefinedEnd = GetJSAPIContainersEnd(); 814 return (index >= specialBegin && index <= specialEnd) || (index >= undefinedBegin && index <= undefinedEnd); 815 } 816 817 static constexpr size_t SizeArch32 = 818 JSTaggedValue::TaggedTypeSize() * static_cast<size_t>(ConstantIndex::CONSTANT_COUNT); 819 static constexpr size_t SizeArch64 = 820 JSTaggedValue::TaggedTypeSize() * static_cast<size_t>(ConstantIndex::CONSTANT_COUNT); 821 822 private: 823 void InitSharedStrings(ObjectFactory *factory); 824 void InitSharedRootsClasses(ObjectFactory *factory); 825 void InitSharedMiscellanious(JSThread *thread, ObjectFactory *factory); 826 void InitRootsClasses(ObjectFactory *factory); 827 void InitRootsClassesPartOne(JSHClass *hClass, ObjectFactory *factory); 828 void InitRootsClassesPartTwo(JSHClass *hClass, ObjectFactory *factory); 829 void InitMiscellanious(JSThread *thread, ObjectFactory *factory); 830 void InitGlobalCaches(); 831 void InitJSAPIContainers(); 832 833 JSTaggedValue constants_[static_cast<int>(ConstantIndex::CONSTANT_COUNT)]; // NOLINT(modernize-avoid-c-arrays) 834 }; 835 STATIC_ASSERT_EQ_ARCH(sizeof(GlobalEnvConstants), GlobalEnvConstants::SizeArch32, GlobalEnvConstants::SizeArch64); 836 } // namespace panda::ecmascript 837 #endif // ECMASCRIPT_GLOBAL_ENV_CONSTANTS_H 838