• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2025 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 #include <cstdint>
19 #include "ecmascript/compiler/builtins/builtins_call_signature_list.h"
20 #include "ecmascript/js_tagged_value.h"
21 #include "ecmascript/mem/visitor.h"
22 #include "libpandabase/macros.h"
23 #include "ecmascript/cross_vm/global_env_constants_hybrid.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, TreeStringClass, TREE_STRING_CLASS_INDEX, ecma_roots_class)                                      \
43     V(JSTaggedValue, TaggedArrayClass, TAGGED_ARRAY_CLASS_INDEX, ecma_roots_class)                                    \
44     V(JSTaggedValue, ByteArrayClass, BYTE_ARRAY_CLASS_INDEX, ecma_roots_class)                                        \
45     V(JSTaggedValue, ConstantPoolClass, CONSTANT_POOL_CLASS_INDEX, ecma_roots_class)                                  \
46     V(JSTaggedValue, ProfileTypeInfoClass, PROFILE_TYPE_INFO_CLASS_INDEX, ecma_roots_class)                           \
47     V(JSTaggedValue, DictionaryClass, DICTIONARY_CLASS_INDEX, ecma_roots_class)                                       \
48     V(JSTaggedValue, COWArrayClass, COW_ARRAY_CLASS_INDEX, ecma_roots_class)                                          \
49     V(JSTaggedValue, MutantTaggedArrayClass, MUTANT_TAGGED_ARRAY_CLASS_INDEX, ecma_roots_class)                       \
50     V(JSTaggedValue, COWMutantTaggedArrayClass, COW_MUTANT_TAGGED_ARRAY_CLASS_INDEX, ecma_roots_class)                \
51     V(JSTaggedValue, BigIntClass, BIGINT_CLASS_INDEX, ecma_roots_class)                                               \
52     V(JSTaggedValue, JSNativePointerClass, JS_NATIVE_POINTER_CLASS_INDEX, ecma_roots_class)                           \
53     V(JSTaggedValue, SJSNativePointerClass, SENDABLE_JS_NATIVE_POINTER_CLASS_INDEX, ecma_roots_class)                 \
54     V(JSTaggedValue, LexicalEnvClass, LEXICAL_ENV_CLASS_INDEX, ecma_roots_class)                                      \
55     V(JSTaggedValue, SFunctionEnvClass, SFUNCTION_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, EnumCacheClass, ENUM_CACHE_CLASS_INDEX, ecma_roots_class)                                        \
71     V(JSTaggedValue, ProtoChangeMarkerClass, PROTO_CHANGE_MARKER_CLASS_INDEX, ecma_roots_class)                       \
72     V(JSTaggedValue, ProtoChangeDetailsClass, PROTO_CHANGE_DETAILS_CLASS_INDEX, ecma_roots_class)                     \
73     V(JSTaggedValue, MarkerCellClass, MARKER_CELL_CLASS_INDEX, ecma_roots_class)                                      \
74     V(JSTaggedValue, TrackInfoClass, TRACK_INFO_CLASS_INDEX, ecma_roots_class)                                        \
75     V(JSTaggedValue, PrototypeHandlerClass, PROTOTYPE_HANDLER_CLASS_INDEX, ecma_roots_class)                          \
76     V(JSTaggedValue, TransitionHandlerClass, TRANSITION_HANDLER_CLASS_INDEX, ecma_roots_class)                        \
77     V(JSTaggedValue, TransWithProtoHandlerClass, TRANS_WITH_PROTO_HANDLER_CLASS_INDEX, ecma_roots_class)              \
78     V(JSTaggedValue, StoreAOTHandlerClass, STORE_TS_HANDLER_CLASS_INDEX, ecma_roots_class)                            \
79     V(JSTaggedValue, PropertyBoxClass, PROPERTY_BOX_CLASS_INDEX, ecma_roots_class)                                    \
80     V(JSTaggedValue, ProgramClass, PROGRAM_CLASS_INDEX, ecma_roots_class)                                             \
81     V(JSTaggedValue, ImportEntryClass, IMPORT_ENTRY_CLASS_INDEX, ecma_roots_class)                                    \
82     V(JSTaggedValue, LocalExportEntryClass, LOCAL_EXPORT_ENTRY_CLASS_INDEX, ecma_roots_class)                         \
83     V(JSTaggedValue, IndirectExportEntryClass, INDIRECT_EXPORT_ENTRY_CLASS_INDEX, ecma_roots_class)                   \
84     V(JSTaggedValue, StarExportEntryClass, STAR_EXPORT_ENTRY_CLASS_INDEX, ecma_roots_class)                           \
85     V(JSTaggedValue, SourceTextModuleClass, SOURCE_TEXT_MODULE_CLASS_INDEX, ecma_roots_class)                         \
86     V(JSTaggedValue, ResolvedBindingClass, RESOLVED_BINDING_CLASS_INDEX, ecma_roots_class)                            \
87     V(JSTaggedValue, ResolvedIndexBindingClass, RESOLVED_INDEX_BINDING_CLASS_INDEX, ecma_roots_class)                 \
88     V(JSTaggedValue, MachineCodeClass, MACHINE_CODE_CLASS_INDEX, ecma_roots_class)                                    \
89     V(JSTaggedValue, ClassInfoExtractorHClass, CLASS_INFO_EXTRACTOR_HCLASS_INDEX, ecma_roots_class)                   \
90     V(JSTaggedValue, CellRecordClass, CELL_RECORD_CLASS_INDEX, ecma_roots_class)                                      \
91     V(JSTaggedValue, AOTLiteralInfoClass, AOT_LITERAL_INFO_CLASS_INDEX, ecma_roots_class)                             \
92     V(JSTaggedValue, MethodClass, METHOD_CLASS_INDEX, ecma_roots_class)                                               \
93     V(JSTaggedValue, LinkedNode, LINKED_NODE_CLASS_INDEX, ecma_roots_class)                                           \
94     V(JSTaggedValue, RBTreeNode, RB_TREENODE_CLASS_INDEX, ecma_roots_class)                                           \
95     V(JSTaggedValue, ClassLiteralClass, CLASS_LITERAL_HCLASS_INDEX, ecma_roots_class)                                 \
96     V(JSTaggedValue, ExtraProfileTypeInfoClass, EXTRA_PROFILE_TYPE_INFO_CLASS_INDEX, ecma_roots_class)                \
97     V(JSTaggedValue, ProfileTypeInfoCell0Class, PROFILE_TYPE_INFO_CELL_0_CLASS_INDEX, ecma_roots_class)               \
98     V(JSTaggedValue, ProfileTypeInfoCell1Class, PROFILE_TYPE_INFO_CELL_1_CLASS_INDEX, ecma_roots_class)               \
99     V(JSTaggedValue, ProfileTypeInfoCellNClass, PROFILE_TYPE_INFO_CELL_N_CLASS_INDEX, ecma_roots_class)               \
100     V(JSTaggedValue, FunctionTemplateClass, FUNCTION_TEMPLATE_CLASS_INDEX, ecma_roots_class)                          \
101     V(JSTaggedValue, VTableClass, VTABLE_CLASS_INDEX, ecma_roots_class)                                               \
102     V(JSTaggedValue, ResolvedRecordIndexBindingClass, RESOLVED_RECORD_INEDX_BINDING_CLASS_INDEX, ecma_roots_class)    \
103     V(JSTaggedValue, ResolvedRecordBindingClass, RESOLVED_RECORD_BINDING_CLASS_INDEX, ecma_roots_class)               \
104     V(JSTaggedValue, SendableEnvClass, SENDABLE_ENV_CLASS_INDEX, ecma_roots_class)
105 
106 #define SHARED_GLOBAL_ENV_CONSTANT_SHARED_CLASS(V)                                                                    \
107     V(JSTaggedValue, SharedTaggedArrayClass, SHARED_TAGGED_ARRAY_CLASS_INDEX, ecma_roots_class)                       \
108     V(JSTaggedValue, SharedConstantPoolClass, SHARED_CONSTANT_POOL_CLASS_INDEX, ecma_roots_class)                     \
109     /* ProfileTypeInfo only in local now */                                                                           \
110     V(JSTaggedValue, SharedDictionaryClass, SHARED_DICTIONARY_CLASS_INDEX, ecma_roots_class)                          \
111     V(JSTaggedValue, SharedCOWArrayClass, SHARED_COW_ARRAY_CLASS_INDEX, ecma_roots_class)                             \
112     V(JSTaggedValue, SharedMutantTaggedArrayClass, SHARED_MUTANT_TAGGED_ARRAY_CLASS_INDEX, ecma_roots_class)          \
113     /* COWMutantTaggedArray only in local now */                                                                      \
114     V(JSTaggedValue, SharedAOTLiteralInfoClass, SHARED_AOT_LITERAL_INFO_CLASS_INDEX, ecma_roots_class)                \
115     /* VTable only in local now */                                                                                    \
116     V(JSTaggedValue, CompositeBaseClassClass, COMPOSITE_BASE_CLASS_CLASS_INDEX, ecma_roots_class)
117 
118 #define GLOBAL_ENV_CONSTANT_CLASS(V)                                                                                  \
119     V(JSTaggedValue, JSProxyCallableClass, JS_PROXY_CALLABLE_CLASS_INDEX, ecma_roots_class)                           \
120     V(JSTaggedValue, JSProxyConstructClass, JS_PROXY_CONSTRUCT_CLASS_INDEX, ecma_roots_class)                         \
121     V(JSTaggedValue, JSRealmClass, JS_REALM_CLASS_INDEX, ecma_roots_class)                                            \
122     V(JSTaggedValue, JSProxyOrdinaryClass, JS_PROXY_ORDINARY_CLASS_INDEX, ecma_roots_class)                           \
123     V(JSTaggedValue, JSSetIteratorClass, JS_SET_ITERATOR_CLASS_INDEX, ecma_roots_class)                               \
124     V(JSTaggedValue, JSSharedSetIteratorClass, JS_SHARED_SET_ITERATOR_CLASS_INDEX, ecma_roots_class)                  \
125     V(JSTaggedValue, JSRegExpIteratorClass, JS_REGEXP_ITERATOR_CLASS_INDEX, ecma_roots_class)                         \
126     V(JSTaggedValue, JSMapIteratorClass, JS_MAP_ITERATOR_CLASS_INDEX, ecma_roots_class)                               \
127     V(JSTaggedValue, JSSharedMapIteratorClass, JS_SHARED_MAP_ITERATOR_CLASS_INDEX, ecma_roots_class)                  \
128     V(JSTaggedValue, JSArrayIteratorClass, JS_ARRAY_ITERATOR_CLASS_INDEX, ecma_roots_class)                           \
129     V(JSTaggedValue, JSSharedArrayIteratorClass, JS_SHARED_ARRAY_ITERATOR_CLASS_INDEX, ecma_roots_class)              \
130     V(JSTaggedValue, JSAPIArrayListIteratorClass, JS_API_ARRAYLIST_ITERATOR_CLASS_INDEX, ecma_roots_class)            \
131     V(JSTaggedValue, JSAPIDequeIteratorClass, JS_API_DEQUE_ITERATOR_CLASS_INDEX, ecma_roots_class)                    \
132     V(JSTaggedValue, JSAPILightWeightMapIteratorClass, JS_API_LIGHTWEIGHTMAP_ITERATOR_CLASS_INDEX, ecma_roots_class)  \
133     V(JSTaggedValue, JSAPILightWeightSetIteratorClass, JS_API_LIGHTWEIGHTSET_ITERATOR_CLASS_INDEX, ecma_roots_class)  \
134     V(JSTaggedValue, JSAPILinkedListIteratorClass, JS_API_LINKED_LIST_ITERATOR_CLASS_INDEX, ecma_roots_class)         \
135     V(JSTaggedValue, JSAPIListIteratorClass, JS_API_LIST_ITERATOR_CLASS_INDEX, ecma_roots_class)                      \
136     V(JSTaggedValue, JSAPIPlainArrayIteratorClass, JS_API_PLAIN_ARRAY_ITERATOR_CLASS_INDEX, ecma_roots_class)         \
137     V(JSTaggedValue, JSAPIQueueIteratorClass, JS_API_QUEUE_ITERATOR_CLASS_INDEX, ecma_roots_class)                    \
138     V(JSTaggedValue, JSAPIStackIteratorClass, JS_API_STACK_ITERATOR_CLASS_INDEX, ecma_roots_class)                    \
139     V(JSTaggedValue, JSAPIVectorIteratorClass, JS_API_VECTOR_ITERATOR_CLASS_INDEX, ecma_roots_class)                  \
140     V(JSTaggedValue, JSAPIBitVectorIteratorClass, JS_API_BITVECTOR_ITERATOR_CLASS_INDEX, ecma_roots_class)            \
141     V(JSTaggedValue, JSAPIHashMapIteratorClass, JS_API_HASH_MAP_ITERATOR_CLASS_INDEX, ecma_roots_class)               \
142     V(JSTaggedValue, JSAPIHashSetIteratorClass, JS_API_HASH_SET_ITERATOR_CLASS_INDEX, ecma_roots_class)               \
143     V(JSTaggedValue, JSAPITreeMapIteratorClass, JS_API_TREE_MAP_ITERATOR_CLASS_INDEX, ecma_roots_class)               \
144     V(JSTaggedValue, JSAPITreeSetIteratorClass, JS_API_TREE_SET_ITERATOR_CLASS_INDEX, ecma_roots_class)               \
145     V(JSTaggedValue, ObjectClass, OBJECT_HCLASS_INDEX, initial_object_hclass)                                         \
146     V(JSTaggedValue, ClassPrototypeClass, CLASS_PROTOTYPE_HCLASS_INDEX, ecma_roots_class)                             \
147     V(JSTaggedValue, ClassConstructorClass, CLASS_CONSTRUCTOR_HCLASS_INDEX, ecma_roots_class)                         \
148     GLOBAL_ENV_CONSTANT_CLASS_HYBRID(V)
149 
150 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
151 #define GLOBAL_ENV_CONSTANT_SPECIAL(V)                                                                 \
152     V(JSTaggedValue, EmptyLayoutInfo, EMPTY_LAYOUT_INFO_OBJECT_INDEX, ecma_roots_special)              \
153     V(JSTaggedValue, DefaultSupers, DEFAULT_SUPERS_INDEX, ecma_roots_special)                          \
154     V(JSTaggedValue, EmptyTaggedQueue, EMPTY_TAGGED_QUEUE_OBJECT_INDEX, ecma_roots_special)
155 
156 // All of type JSTaggedValue
157 #define SHARED_GLOBAL_ENV_CONSTANT_STRING(V)                                                                \
158     V(ConstructorString,              CONSTRUCTOR_STRING_INDEX,              "constructor")                 \
159     V(PrototypeString,                PROTOTYPE_STRING_INDEX,                "prototype")                   \
160     V(SizeString,                     SIZE_STRING_INDEX,                     "size")                        \
161     V(LengthString,                   LENGTH_STRING_INDEX,                   "length")                      \
162     V(ValueString,                    VALUE_STRING_INDEX,                    "value")                       \
163     V(SetString,                      SET_STRING_INDEX,                      "set")                         \
164     V(GetString,                      GET_STRING_INDEX,                      "get")                         \
165     V(SetWithSpaceString,             SET_SPACE_STRING_INDEX,                "set ")                        \
166     V(GetWithSpaceString,             GET_SPACE_STRING_INDEX,                "get ")                        \
167     V(WritableString,                 WRITABLE_STRING_INDEX,                 "writable")                    \
168     V(EnumerableString,               ENUMERABLE_STRING_INDEX,               "enumerable")                  \
169     V(ConfigurableString,             CONFIGURABLE_STRING_INDEX,             "configurable")                \
170     V(NameString,                     NAME_STRING_INDEX,                     "name")                        \
171     V(SendableElementsSymbol,         SENDABLE_ELEMENTS_INDEX,               "sendableElements")            \
172     /* SymbolTable * RegisterSymbols */                                                                     \
173     V(GetPrototypeOfString,           GETPROTOTYPEOF_STRING_INDEX,           "getPrototypeOf")              \
174     V(SetPrototypeOfString,           SETPROTOTYPEOF_STRING_INDEX,           "setPrototypeOf")              \
175     V(IsExtensibleString,             ISEXTENSIBLE_STRING_INDEX,             "isExtensible")                \
176     V(PreventExtensionsString,        PREVENTEXTENSIONS_STRING_INDEX,        "preventExtensions")           \
177     V(GetOwnPropertyDescriptorString, GETOWNPROPERTYDESCRIPTOR_STRING_INDEX, "getOwnPropertyDescriptor")    \
178     V(DefinePropertyString,           DEFINEPROPERTY_STRING_INDEX,           "defineProperty")              \
179     V(HasString,                      HAS_STRING_INDEX,                      "has")                         \
180     V(DeletePropertyString,           DELETEPROPERTY_STRING_INDEX,           "deleteProperty")              \
181     V(EnumerateString,                ENUMERATE_STRING_INDEX,                "enumerate")                   \
182     V(OwnKeysString,                  OWNKEYS_STRING_INDEX,                  "ownKeys")                     \
183     V(ApplyString,                    APPLY_STRING_INDEX,                    "apply")                       \
184     V(NegativeZeroString,             NEGATIVE_ZERO_STRING_INDEX,            "-0")                          \
185     V(DoneString,                     DONE_STRING_INDEX,                     "done")                        \
186     V(ProxyString,                    PROXY_STRING_INDEX,                    "proxy")                       \
187     V(RevokeString,                   REVOKE_STRING_INDEX,                   "revoke")                      \
188     V(NextString,                     NEXT_STRING_INDEX,                     "next")                        \
189     V(ToStringString,                 TO_STRING_STRING_INDEX,                "toString")                    \
190     V(ToLocaleStringString,           TO_LOCALE_STRING_STRING_INDEX,         "toLocaleString")              \
191     V(ValueOfString,                  VALUE_OF_STRING_INDEX,                 "valueOf")                     \
192     V(UndefinedString,                UNDEFINED_STRING_INDEX,                "undefined")                   \
193     V(NullString,                     NULL_STRING_INDEX,                     "null")                        \
194     V(BooleanString,                  BOOLEAN_STRING_INDEX,                  "boolean")                     \
195     V(NumberString,                   NUMBER_STRING_INDEX,                   "number")                      \
196     V(BigIntString,                   BIGINT_STRING_INDEX,                   "bigint")                      \
197     V(FunctionString,                 FUNCTION_STRING_INDEX,                 "function")                    \
198     V(StringString,                   STRING_STRING_INDEX,                   "string")                      \
199     V(SymbolString,                   SYMBOL_STRING_INDEX,                   "symbol")                      \
200     V(NativeModuleFailureInfoString,  NATIVE_MODULE_FAILURE_INFO_STRING_INDEX, "NativeModuleFailureInfo")   \
201     V(ObjectString,                   OBJECT_STRING_INDEX,                   "object")                      \
202     V(TrueString,                     TRUE_STRING_INDEX,                     "true")                        \
203     V(FalseString,                    FALSE_STRING_INDEX,                    "false")                       \
204     V(ReturnString,                   RETURN_STRING_INDEX,                   "return")                      \
205     V(ProxyConstructString,           PROXY_CONSTRUCT_STRING_INDEX,          "construct")                   \
206     V(ProxyCallString,                PROXY_CALL_STRING_INDEX,               "call")                        \
207     V(PromiseThenString,              PROMISE_THEN_STRING_INDEX,             "then")                        \
208     V(PromiseCatchString,             PROMISE_CATCH_STRING_INDEX,            "catch")                       \
209     V(PromiseFinallyString,           PROMISE_FINALLY_STRING_INDEX,          "finally")                     \
210     V(PromiseStatusString,            PROMISE_STATUS_STRING_INDEX,           "status")                      \
211     V(PromiseFulfilledString,         PROMISE_FULFILLED_STRING_INDEX,        "fulfilled")                   \
212     V(PromiseRejectedString,          PROMISE_REJECTED_STRING_INDEX,         "rejected")                    \
213     V(PromiseReasonString,            PROMISE_REASON_STRING_INDEX,           "reason")                      \
214     V(ScriptJobString,                SCRIPT_JOB_STRING_INDEX,               "ScriptJobs")                  \
215     V(PromiseString,                  PROMISE_STRING_INDEX,                  "PrimiseJobs")                 \
216     V(ThrowerString,                  THROWER_STRING_INDEX,                  "Thrower")                     \
217     V(IdentityString,                 IDENTITY_STRING_INDEX,                 "Identity")                    \
218     V(CallerString,                   CALLER_STRING_INDEX,                   "caller")                      \
219     V(CalleeString,                   CALLEE_STRING_INDEX,                   "callee")                      \
220     V(Int8ArrayString,                INT8_ARRAY_STRING_INDEX,               "Int8Array")                   \
221     V(Uint8ArrayString,               UINT8_ARRAY_STRING_INDEX,              "Uint8Array")                  \
222     V(Uint8ClampedArrayString,        UINT8_CLAMPED_ARRAY_STRING_INDEX,      "Uint8ClampedArray")           \
223     V(Int16ArrayString,               INT16_ARRAY_STRING_INDEX,              "Int16Array")                  \
224     V(Uint16ArrayString,              UINT16_ARRAY_STRING_INDEX,             "Uint16Array")                 \
225     V(Int32ArrayString,               INT32_ARRAY_STRING_INDEX,              "Int32Array")                  \
226     V(Uint32ArrayString,              UINT32_ARRAY_STRING_INDEX,             "Uint32Array")                 \
227     V(Float32ArrayString,             FLOAT32_ARRAY_STRING_INDEX,            "Float32Array")                \
228     V(Float64ArrayString,             FLOAT64_ARRAY_STRING_INDEX,            "Float64Array")                \
229     V(BigInt64ArrayString,            BIGINT64_ARRAY_STRING_INDEX,           "BigInt64Array")               \
230     V(BigUint64ArrayString,           BIGUINT64_ARRAY_STRING_INDEX,          "BigUint64Array")              \
231     V(SharedInt8ArrayString,          SHARED_INT8_ARRAY_STRING_INDEX,        "SharedInt8Array")             \
232     V(SharedUint8ArrayString,         SHARED_UINT8_ARRAY_STRING_INDEX,       "SharedUint8Array")            \
233     V(SharedUint8ClampedArrayString,  SHARED_UINT8_CLAMPED_ARRAY_STRING_INDEX, "SharedUint8ClampedArray")   \
234     V(SharedInt16ArrayString,         SHARED_INT16_ARRAY_STRING_INDEX,       "SharedInt16Array")            \
235     V(SharedUint16ArrayString,        SHARED_UINT16_ARRAY_STRING_INDEX,      "SharedUint16Array")           \
236     V(SharedInt32ArrayString,         SHARED_INT32_ARRAY_STRING_INDEX,       "SharedInt32Array")            \
237     V(SharedUint32ArrayString,        SHARED_UINT32_ARRAY_STRING_INDEX,      "SharedUint32Array")           \
238     V(SharedFloat32ArrayString,       SHARED_FLOAT32_ARRAY_STRING_INDEX,     "SharedFloat32Array")          \
239     V(SharedFloat64ArrayString,       SHARED_FLOAT64_ARRAY_STRING_INDEX,     "SharedFloat64Array")          \
240     V(SharedBigInt64ArrayString,      SHARED_BIGINT64_ARRAY_STRING_INDEX,    "SharedBigInt64Array")         \
241     V(SharedBigUint64ArrayString,     SHARED_BIGUINT64_ARRAY_STRING_INDEX,   "SharedBigUint64Array")        \
242     V(AsyncFunctionString,            ASYNC_FUNCTION_STRING_INDEX,           "AsyncFunction")               \
243     V(PromiseResolveString,           PROMISE_RESOLVE_STRING_INDEX,          "resolve")                     \
244     V(IdString,                       ID_STRING_INDEX,                       "id")                          \
245     V(MethodString,                   METHOD_STRING_INDEX,                   "method")                      \
246     V(ParamsString,                   PARAMS_STRING_INDEX,                   "params")                      \
247     V(ResultString,                   RESULT_STRING_INDEX,                   "result")                      \
248     V(ToJsonString,                   TO_JSON_STRING_INDEX,                  "toJSON")                      \
249     V(GlobalString,                   GLOBAL_STRING_INDEX,                   "global")                      \
250     V(MessageString,                  MESSAGE_STRING_INDEX,                  "message")                     \
251     V(CauseString,                    CAUSE_STRING_INDEX,                    "cause")                       \
252     V(ErrorString,                    ERROR_STRING_INDEX,                    "Error")                       \
253     V(ErrorsString,                   ERRORS_STRING_INDEX,                   "errors")                      \
254     V(AggregateErrorString,           AGGREGATE_ERROR_STRING_INDEX,          "AggregateError")              \
255     V(RangeErrorString,               RANGE_ERROR_STRING_INDEX,              "RangeError")                  \
256     V(ReferenceErrorString,           REFERENCE_ERROR_STRING_INDEX,          "ReferenceError")              \
257     V(TypeErrorString,                TYPE_ERROR_STRING_INDEX,               "TypeError")                   \
258     V(URIErrorString,                 URI_ERROR_STRING_INDEX,                "URIError")                    \
259     V(SyntaxErrorString,              SYNTAX_ERROR_STRING_INDEX,             "SyntaxError")                 \
260     V(EvalErrorString,                EVAL_ERROR_STRING_INDEX,               "EvalError")                   \
261     V(OOMErrorString,                 OOM_ERROR_STRING_INDEX,                "OutOfMemoryError")            \
262     V(TerminationErrorString,         TERMINATION_ERROR_STRING_INDEX,        "TerminationError")            \
263     V(ErrorFuncString,                ERROR_FUNC_STRING_INDEX,               "errorfunc")                   \
264     V(StackString,                    STACK_STRING_INDEX,                    "stack")                       \
265     V(TopStackString,                 TOP_STACK_STRING_INDEX,                "topstack")                    \
266     V(StackEmptyString,               STACK_EMPTY_STRING_INDEX,              "stackisempty")                \
267     V(ObjNotCoercibleString,          OBJ_NOT_COERCIBLE_STRING_INDEX,        "objectnotcoercible")          \
268     /* for Intl. */                                                                                         \
269     V(LanguageString,                 LANGUAGE_STRING_CLASS_INDEX,           "language")                    \
270     V(ScriptString,                   SCRIPT_STRING_CLASS_INDEX,             "script")                      \
271     V(RegionString,                   REGION_STRING_CLASS_INDEX,             "region")                      \
272     V(BaseNameString,                 BASE_NAME_STRING_CLASS_INDEX,          "baseName")                    \
273     V(CalendarString,                 CALENDAR_STRING_CLASS_INDEX,           "calendar")                    \
274     V(CollationString,                COLLATION_STRING_CLASS_INDEX,          "collation")                   \
275     V(HourCycleString,                HOUR_CYCLE_STRING_CLASS_INDEX,         "hourCycle")                   \
276     V(CaseFirstString,                CASE_FIRST_STRING_CLASS_INDEX,         "caseFirst")                   \
277     V(NumericString,                  NUMERIC_STRING_CLASS_INDEX,            "numeric")                     \
278     V(NumberingSystemString,          NUMBERING_SYSTEM_STRING_CLASS_INDEX,   "numberingSystem")             \
279     V(TypeString,                     TYPE_STRING_INDEX,                     "type")                        \
280     V(GranularityString,              GRANULARITY_STRING_INDEX,              "granularity")                 \
281     V(GraphemeString,                 GRAPHEME_STRING_INDEX,                 "grapheme")                    \
282     V(WordString,                     WORD_STRING_INDEX,                     "word")                        \
283     V(SentenceString,                 SENTENCE_STRING_INDEX,                 "sentence")                    \
284     V(SegmentString,                  SEGMENT_STRING_INDEX,                  "segment")                     \
285     V(IsWordLikeString,               ISWORDLIKE_STRING_INDEX,               "isWordLike")                  \
286     V(LocaleMatcherString,            LOCALE_MATCHER_STRING_INDEX,           "localeMatcher")               \
287     V(LanguageDisplayString,          LAUGUAGE_DISPLAY_STRING_INDEX,         "languageDisplay")             \
288     V(FormatMatcherString,            FORMAT_MATCHER_STRING_INDEX,           "formatMatcher")               \
289     V(Hour12String,                   HOUR12_STRING_INDEX,                   "hour12")                      \
290     V(H11String,                      H11_STRING_INDEX,                      "h11")                         \
291     V(H12String,                      H12_STRING_INDEX,                      "h12")                         \
292     V(H23String,                      H23_STRING_INDEX,                      "h23")                         \
293     V(H24String,                      H24_STRING_INDEX,                      "h24")                         \
294     V(WeekdayString,                  WEEK_DAY_STRING_INDEX,                 "weekday")                     \
295     V(EraString,                      ERA_STRING_INDEX,                      "era")                         \
296     V(YearString,                     YEAR_STRING_INDEX,                     "year")                        \
297     V(QuarterString,                  QUARTER_STRING_INDEX,                  "quarter")                     \
298     V(MonthString,                    MONTH_STRING_INDEX,                    "month")                       \
299     V(DayString,                      DAY_STRING_INDEX,                      "day")                         \
300     V(HourString,                     HOUR_STRING_INDEX,                     "hour")                        \
301     V(MinuteString,                   MINUTE_STRING_INDEX,                   "minute")                      \
302     V(SecondString,                   SECOND_STRING_INDEX,                   "second")                      \
303     V(YearsString,                    YEARS_STRING_INDEX,                    "years")                       \
304     V(QuartersString,                 QUARTERS_STRING_INDEX,                 "quarters")                    \
305     V(MonthsString,                   MONTHS_STRING_INDEX,                   "months")                      \
306     V(DaysString,                     DAYS_STRING_INDEX,                     "days")                        \
307     V(HoursString,                    HOURS_STRING_INDEX,                    "hours")                       \
308     V(MinutesString,                  MINUTES_STRING_INDEX,                  "minutes")                     \
309     V(SecondsString,                  SECONDS_STRING_INDEX,                  "seconds")                     \
310     V(TimeZoneNameString,             TIME_ZONE_NAME_STRING_INDEX,           "timeZoneName")                \
311     V(LocaleString,                   LOCALE_STRING_INDEX,                   "locale")                      \
312     V(TimeZoneString,                 TIME_ZONE_STRING_INDEX,                "timeZone")                    \
313     V(LiteralString,                  LITERAL_STRING_INDEX,                  "literal")                     \
314     V(YearNameString,                 YEAR_NAME_STRING_INDEX,                "yearName")                    \
315     V(DayPeriodString,                DAY_PERIOD_STRING_INDEX,               "dayPeriod")                   \
316     V(FractionalSecondDigitsString,   FRACTIONAL_SECOND_DIGITS_STRING_INDEX, "fractionalSecondDigits")      \
317     V(FractionalSecondString,         FRACTIONAL_SECOND_STRING_INDEX,        "fractionalSecond")            \
318     V(RelatedYearString,              RELATED_YEAR_STRING_INDEX,             "relatedYear")                 \
319     V(LookUpString,                   LOOK_UP_STRING_INDEX,                  "lookup")                      \
320     V(BestFitString,                  BEST_FIT_STRING_INDEX,                 "bestfit")                     \
321     V(DateStyleString,                DATE_STYLE_STRING_INDEX,               "dateStyle")                   \
322     V(TimeStyleString,                TIME_STYLE_STRING_INDEX,               "timeStyle")                   \
323     V(UTCString,                      UTC_STRING_INDEX,                      "UTC")                         \
324     V(WeekString,                     WEEK_STRING_INDEX,                     "week")                        \
325     V(WeeksString,                    WEEKS_STRING_INDEX,                    "weeks")                       \
326     V(SourceString,                   SOURCE_STRING_INDEX,                   "source")                      \
327     V(FormatString,                   FORMAT_STRING_INDEX,                   "format")                      \
328     V(EnUsString,                     EN_US_STRING_INDEX,                    "en-US")                       \
329     V(UndString,                      UND_STRING_INDEX,                      "und")                         \
330     V(LatnString,                     LATN_STRING_INDEX,                     "latn")                        \
331     V(StyleString,                    STYLE_STRING_INDEX,                    "style")                       \
332     V(UnitString,                     UNIT_STRING_INDEX,                     "unit")                        \
333     V(IntegerString,                  INTEGER_STRING_INDEX,                  "integer")                     \
334     V(NanString,                      NAN_STRING_INDEX,                      "nan")                         \
335     V(InfinityString,                 INFINITY_STRING_INDEX,                 "infinity")                    \
336     V(InfinityCapitalString,          INFINITY_CAP_STRING_INDEX,             "Infinity")                    \
337     V(MinusInfinityCapitalString,     MINUS_INFINITY_CAP_STRING_INDEX,       "-Infinity")                   \
338     V(FractionString,                 FRACTION_STRING_INDEX,                 "fraction")                    \
339     V(DecimalString,                  DECIMAL_STRING_INDEX,                  "decimal")                     \
340     V(GroupString,                    GROUP_STRING_INDEX,                    "group")                       \
341     V(GroupsString,                   GROUPS_STRING_INDEX,                   "groups")                      \
342     V(CurrencyString,                 CURRENCY_STRING_INDEX,                 "currency")                    \
343     V(CurrencySignString,             CURRENCY_SIGN_STRING_INDEX,            "currencySign")                \
344     V(CurrencyDisplayString,          CURRENCY_DISPLAY_STRING_INDEX,         "currencyDisplay")             \
345     V(PercentSignString,              PERCENT_SIGN_STRING_INDEX,             "percentSign")                 \
346     V(PercentString,                  PERCENT_STRING_INDEX,                  "percent")                     \
347     V(MinusSignString,                MINUS_SIGN_STRING_INDEX,               "minusSign")                   \
348     V(PlusSignString,                 PLUS_SIGN_STRING_INDEX,                "plusSign")                    \
349     V(ExponentSeparatorString,        EXPONENT_SEPARATOR_STRING_INDEX,       "exponentSeparator")           \
350     V(ExponentMinusSignString,        EXPONENT_MINUS_SIGN_INDEX,             "exponentMinusSign")           \
351     V(ExponentIntegerString,          EXPONENT_INTEGER_STRING_INDEX,         "exponentInteger")             \
352     V(LongString,                     LONG_STRING_INDEX,                     "long")                        \
353     V(ShortString,                    SHORT_STRING_INDEX,                    "short")                       \
354     V(FullString,                     FULL_STRING_INDEX,                     "full")                        \
355     V(MediumString,                   MEDIUM_STRING_INDEX,                   "medium")                      \
356     V(NarrowString,                   NARROW_STRING_INDEX,                   "narrow")                      \
357     V(AlwaysString,                   ALWAYS_STRING_INDEX,                   "always")                      \
358     V(AutoString,                     AUTO_STRING_INDEX,                     "auto")                        \
359     V(ThrowString,                    THROW_STRING_INDEX,                    "throw")                       \
360     V(UnitDisplayString,              UNIT_DISPLAY_INDEX,                    "unitDisplay")                 \
361     V(NotationString,                 NOTATION_INDEX,                        "notation")                    \
362     V(CompactDisplayString,           COMPACT_DISPALY_INDEX,                 "compactDisplay")              \
363     V(UserGroupingString,             USER_GROUPING_INDEX,                   "useGrouping")                 \
364     V(SignDisplayString,              SIGN_DISPLAY_INDEX,                    "signDisplay")                 \
365     V(CodeString,                     CODE_INDEX,                            "code")                        \
366     V(NarrowSymbolString,             NARROW_SYMBOL_INDEX,                   "narrowSymbol")                \
367     V(StandardString,                 STANDARD_INDEX,                        "standard")                    \
368     V(DialectString,                  DIALECT_INDEX,                         "dialect")                     \
369     V(AccountingString,               ACCOUNTING_INDEX,                      "accounting")                  \
370     V(ScientificString,               SCIENTIFIC_INDEX,                      "scientific")                  \
371     V(EngineeringString,              ENGINEERING_INDEX,                     "engineering")                 \
372     V(CompactString,                  COMPACT_STRING_INDEX,                  "compact")                     \
373     V(NeverString,                    NEVER_INDEX,                           "never")                       \
374     V(ExceptZeroString,               EXPECT_ZERO_INDEX,                     "exceptZero")                  \
375     V(MinimumIntegerDigitsString,     MINIMUM_INTEGER_DIGITS_INDEX,          "minimumIntegerDigits")        \
376     V(MinimumFractionDigitsString,    MINIMUM_FRACTIONDIGITS_INDEX,          "minimumFractionDigits")       \
377     V(MaximumFractionDigitsString,    MAXIMUM_FRACTIONDIGITS_INDEX,          "maximumFractionDigits")       \
378     V(MinimumSignificantDigitsString, MINIMUM_SIGNIFICANTDIGITS_INDEX,       "minimumSignificantDigits")    \
379     V(MaximumSignificantDigitsString, MAXIMUM_SIGNIFICANTDIGITS_INDEX,       "maximumSignificantDigits")    \
380     V(InvalidDateString,              INVALID_DATE_INDEX,                    "Invalid Date")                \
381     V(UsageString,                    USAGE_INDEX,                           "usage")                       \
382     V(CompareString,                  COMPARE_INDEX,                         "compare")                     \
383     V(SensitivityString,              SENSITIVITY_INDEX,                     "sensitivity")                 \
384     V(IgnorePunctuationString,        IGNORE_PUNCTUATION_INDEX,              "ignorePunctuation")           \
385     V(CardinalString,                 CARDINAL_INDEX,                        "cardinal")                    \
386     V(OrdinalString,                  ORDINAL_INDEX,                         "ordinal")                     \
387     V(ExecString,                     EXEC_INDEX,                            "exec")                        \
388     V(LastIndexString,                LAST_INDEX_INDEX,                      "lastIndex")                   \
389     V(PluralCategoriesString,         PLURAL_CATEGORIES_INDEX,               "pluralCategories")            \
390     V(SortString,                     SORT_INDEX,                            "sort")                        \
391     V(SearchString,                   SEARCH_INDEX,                          "search")                      \
392     V(BaseString,                     BASE_INDEX,                            "base")                        \
393     V(AccentString,                   ACCENT_INDEX,                          "accent")                      \
394     V(CaseString,                     CASE_INDEX,                            "case")                        \
395     V(VariantString,                  VARIANT_INDEX,                         "variant")                     \
396     V(EnUsPosixString,                EN_US_POSIX_STRING_INDEX,              "en-US-POSIX")                 \
397     V(UpperString,                    UPPER_INDEX,                           "upper")                       \
398     V(LowerString,                    LOWER_INDEX,                           "lower")                       \
399     V(DefaultString,                  DEFAULT_INDEX,                         "default")                     \
400     V(NotInitializedString,           NOT_INITIALIZED_INDEX,                 " is not initialized")         \
401     V(SharedString,                   SHARED_INDEX,                          "shared")                      \
402     V(StartRangeString,               START_RANGE_INDEX,                     "startRange")                  \
403     V(EndRangeString,                 END_RANGE_INDEX,                       "endRange")                    \
404     V(Iso8601String,                  ISO8601_INDEX,                         "iso8601")                     \
405     V(GregoryString,                  GREGORY_INDEX,                         "gregory")                     \
406     V(EthioaaString,                  ETHIOAA_INDEX,                         "ethioaa")                     \
407     V(StickyString,                   STICKY_INDEX,                          "sticky")                      \
408     V(HasIndicesString,               HAS_INDICES_INDEX,                     "hasIndices")                  \
409     V(DotAllString,                   DOT_ALL_INDEX,                         "dotAll")                      \
410     V(MultilineString,                MULTILINE_INDEX,                       "multiline")                   \
411     V(IgnoreCaseString,               IGNORE_CASE_INDEX,                     "ignoreCase")                  \
412     V(IndicesString,                  INDICES_INDEX,                         "indices")                     \
413     V(UString,                        U_INDEX,                               "u")                           \
414     V(IndexString,                    INDEX_INDEX,                           "index")                       \
415     V(InputString,                    INPUT_INDEX,                           "input")                       \
416     V(UnicodeString,                  UNICODE_INDEX,                         "unicode")                     \
417     V(ZeroString,                     ZERO_INDEX,                            "0")                           \
418     V(ValuesString,                   VALUES_INDEX,                          "values")                      \
419     V(AddString,                      ADD_INDEX,                             "add")                         \
420     V(AmbiguousString,                AMBIGUOUS_INDEX,                       "ambiguous")                   \
421     V(ModuleString,                   MODULE_INDEX,                          "Module")                      \
422     V(StarString,                     STAR_INDEX,                            "*")                           \
423     V(DateTimeFieldString,            DATETIMEFIELD_INDEX,                   "dateTimeField")               \
424     V(ConjunctionString,              CONJUNCTION_INDEX,                     "conjunction")                 \
425     V(NoneString,                     NONE_INDEX,                            "none")                        \
426     V(FallbackString,                 FALLBACK_INDEX,                        "fallback")                    \
427     V(DisjunctionString,              DISJUNCTION_INDEX,                     "disjunction")                 \
428     V(ElementString,                  ELEMENT_INDEX,                         "element")                     \
429     V(FlagsString,                    FLAGS_INDEX,                           "flags")                       \
430     V(GString,                        G_INDEX,                               "g")                           \
431     V(NfcString,                      NFC_INDEX,                             "NFC")                         \
432     V(NfdString,                      NFD_INDEX,                             "NFD")                         \
433     V(NfkcString,                     NFKC_INDEX,                            "NFKC")                        \
434     V(NfkdString,                     NFKD_INDEX,                            "NFKD")                        \
435     V(EntriesString,                  ENTRIES_INDEX,                         "entries")                     \
436     V(LeftSquareBracketString,        LEFT_SQUARE_BRACKET_INDEX,             "[")                           \
437     V(RightSquareBracketString,       RIGHT_SQUARE_BRACKET_INDEX,            "]")                           \
438     V(YString,                        Y_INDEX,                               "y")                           \
439     V(DollarString,                   DOLLAR_INDEX,                          "$")                           \
440     V(CommaString,                    COMMA_INDEX,                           ",")                           \
441     V(JoinString,                     JOIN_INDEX,                            "join")                        \
442     V(CopyWithinString,               COPY_WITHIN_INDEX,                     "copyWithin")                  \
443     V(FillString,                     FILL_INDEX,                            "fill")                        \
444     V(FindString,                     FIND_INDEX,                            "find")                        \
445     V(FindIndexString,                FIND_INDEX_INDEX,                      "findIndex")                   \
446     V(FlatString,                     FLAT_INDEX,                            "flat")                        \
447     V(FlatMapString,                  FLATMAP_INDEX,                         "flatMap")                     \
448     V(IncludesString,                 INCLUDES_INDEX,                        "includes")                    \
449     V(KeysString,                     KEYS_INDEX,                            "keys")                        \
450     V(BoundString,                    BOUND_INDEX,                           "bound")                       \
451     V(TrimLeftString,                 TRIMLEFT_INDEX,                        "trimLeft")                    \
452     V(TrimStartString,                TRIMSTART_INDEX,                       "trimStart")                   \
453     V(TrimRightString,                TRIMRIGHT_INDEX,                       "trimRight")                   \
454     V(TrimEndString,                  TRIMEND_INDEX,                         "trimEnd")                     \
455     V(BackslashString,                BACKSLASH_INDEX,                       "/")                           \
456     V(SpaceString,                    SPACE_INDEX,                           " ")                           \
457     V(NanCapitalString,               NAN_INDEX,                             "NaN")                         \
458     V(NotEqualString,                 NOT_EQUAL_INDEX,                       "not-equal")                   \
459     V(OkString,                       OK_INDEX,                              "ok")                          \
460     V(TimeoutString,                  TIMEOUT_INDEX,                         "timed-out")                   \
461     V(CjsExportsString,               CJS_EXPORTS_INDEX,                     "exports")                     \
462     V(CjsCacheString,                 CJS_CACHE_INDEX,                       "_cache")                      \
463     V(NapiWrapperString,              NAPI_WRAPPER_INDEX,                    "_napiwrapper")                \
464     /* for require native module */                                                                         \
465     V(RequireNativeModuleString,      REQUIRE_NATIVE_MOUDULE_FUNC_INDEX,     "requireNativeModule")         \
466     V(RequireNapiString,              REQUIRE_NAPI_FUNC_INDEX,               "requireNapi")                 \
467     V(RequireNapiPreviewString,       REQUIRE_NAPI_PREVIEW_FUNC_INDEX,       "requireNapiPreview")          \
468     V(PandaString,                    PANDA_STRING_INDEX,                    "Panda")                       \
469     V(DollarStringOne,                DOLLAR_STRING_ONE_INDEX,               "$1")                          \
470     V(DollarStringTwo,                DOLLAR_STRING_TWO_INDEX,               "$2")                          \
471     V(DollarStringThree,              DOLLAR_STRING_THREE_INDEX,             "$3")                          \
472     V(DollarStringFour,               DOLLAR_STRING_FOUR_INDEX,              "$4")                          \
473     V(DollarStringFive,               DOLLAR_STRING_FIVE_INDEX,              "$5")                          \
474     V(DollarStringSix,                DOLLAR_STRING_SIX_INDEX,               "$6")                          \
475     V(DollarStringSeven,              DOLLAR_STRING_SEVEN_INDEX,             "$7")                          \
476     V(DollarStringEight,              DOLLAR_STRING_EIGHT_INDEX,             "$8")                          \
477     V(DollarStringNine,               DOLLAR_STRING_NINE_INDEX,              "$9")                          \
478     /* for object to string */                                                                              \
479     V(UndefinedToString,              UNDEFINED_TO_STRING_INDEX,             "[object Undefined]")          \
480     V(NullToString,                   NULL_TO_STRING_INDEX,                  "[object Null]")               \
481     V(ObjectToString,                 OBJECT_TO_STRING_INDEX,                "[object Object]")             \
482     V(ArrayToString,                  ARRAY_TO_STRING_INDEX,                 "[object Array]")              \
483     V(StringToString,                 STRING_TO_STRING_INDEX,                "[object String]")             \
484     V(BooleanToString,                BOOLEAN_TO_STRING_INDEX,               "[object Boolean]")            \
485     V(NumberToString,                 NUMBER_TO_STRING_INDEX,                "[object Number]")             \
486     V(ArgumentsToString,              ARGUMENTS_TO_STRING_INDEX,             "[object Arguments]")          \
487     V(FunctionToString,               FUNCTION_TO_STRING_INDEX,              "[object Function]")           \
488     V(DateToString,                   DATE_TO_STRING_INDEX,                  "[object Date]")               \
489     V(ErrorToString,                  ERROR_TO_STRING_INDEX,                 "[object Error]")              \
490     V(RegExpToString,                 REGEXP_TO_STRING_INDEX,                "[object RegExp]")             \
491     V(YoungGcCause,                   YOUNG_GC_CAUSE,                        "young")                       \
492     V(OldGcCause,                     OLD_GC_CAUSE,                          "old")                         \
493     V(FullGcCause,                    FULL_GC_CAUSE,                         "full")                        \
494     V(AppSpawnFullGcCause,            APP_SPAWN_FULL_GC_CAUSE,               "app_spawn_full")              \
495     V(SharedGcCause,                  SHARED_GC_CAUSE,                       "shared")                      \
496     V(SharedPartialGcCause,           SHARED_PARTIAL_GC_CAUSE,               "shared_partial")              \
497     V(SharedFullGcCause,              SHARED_FULL_GC_CAUSE,                  "shared_full")                 \
498     V(AppSpawnSharedFullGcCause,      APP_SPAWN_SHARED_FULL_GC_CAUSE,        "app_spawn_shared_full")       \
499     V(SymbolLeftParentheses,          SYMBOL_LEFT_PARENTHESES,               "Symbol(")                     \
500     V(InteropJsNapiString,            INTEROP_JS_NAPI,                       "ets_interop_js_napi")         \
501     V(GetModuleString,                GET_MODULE,                            "getModule")                   \
502     SHARED_GLOBAL_ENV_CONSTANT_STRING_HYBRID(V)
503 
504 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
505 #define SHARED_GLOBAL_ENV_CONSTANT_ACCESSOR(V)                                                    \
506     V(JSTaggedValue, FunctionPrototypeAccessor, FUNCTION_PROTOTYPE_ACCESSOR, ecma_roots_accessor) \
507     V(JSTaggedValue, FunctionNameAccessor, FUNCTION_NAME_ACCESSOR, ecma_roots_accessor)           \
508     V(JSTaggedValue, FunctionLengthAccessor, FUNCTION_LENGTH_ACCESSOR, ecma_roots_accessor)       \
509     V(JSTaggedValue, ArrayLengthAccessor, ARRAY_LENGTH_ACCESSOR, ecma_roots_accessor)             \
510     V(JSTaggedValue, SharedArrayLengthAccessor, SHARED_ARRAY_LENGTH_ACCESSOR, ecma_roots_accessor)
511 
512 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
513 #define SHARED_GLOBAL_ENV_CONSTANT_SPECIAL(V)                                                                   \
514     V(JSTaggedValue, Undefined, UNDEFINED_INDEX, ecma_roots_special)                                            \
515     V(JSTaggedValue, Null, NULL_INDEX, ecma_roots_special)                                                      \
516     V(JSTaggedValue, Hole, HOLE_INDEX, ecma_roots_special)                                                      \
517     V(JSTaggedValue, True, TRUE_INDEX, ecma_roots_special)                                                      \
518     V(JSTaggedValue, False, FALSE_INDEX, ecma_roots_special)                                                    \
519     V(JSTaggedValue, ProtoTransRootHClassSymbol, PROTO_TRANS_ROOT_HCLASS_SYMBOL_INDEX, ecma_roots_special)      \
520     V(JSTaggedValue, EmptyString, EMPTY_STRING_OBJECT_INDEX, ecma_roots_special)                                \
521     V(JSTaggedValue, SingleCharTable, SINGLE_CHAR_TABLE_INDEX, ecma_roots_special)                              \
522     V(JSTaggedValue, EmptySLayoutInfo, EMPTY_SLAYOUT_INFO_OBJECT_INDEX, ecma_roots_special)                     \
523     V(JSTaggedValue, EmptyArray, EMPTY_ARRAY_OBJECT_INDEX, ecma_roots_special)                                  \
524     V(JSTaggedValue, EmptySFunctionEnv, EMPTY_SFUNCTION_ENV_INDEX, ecma_roots_special)                          \
525     V(JSTaggedValue, EmptyMutantArray, EMPTY_MUTANT_ARRAY_OBJECT_INDEX, ecma_roots_special)                     \
526     V(JSTaggedValue, ProxyMethod, PROXY_METHOD_INDEX, ecma_roots_special)                                       \
527     V(JSTaggedValue, Uint64MaxBigInt, UINT64_MAX_BIGINT_INDEX, ecma_roots_special)                              \
528     V(JSTaggedValue, Int64MaxBigInt, INT64_MAX_BIGINT_INDEX, ecma_roots_special)                                \
529     V(JSTaggedValue, EmptyProfileTypeInfoCell, EMPTY_PROFILE_TYPE_INFO_CELL_INDEX, ecma_roots_special)          \
530     V(JSTaggedValue, NormalFunctionMethod, NORMAL_FUNCTION_METHOD_INDEX, ecma_roots_special)                    \
531     V(JSTaggedValue, GetterFunctionMethod, GETTER_FUNCTION_METHOD_INDEX, ecma_roots_special)                    \
532     V(JSTaggedValue, SetterFunctionMethod, SETTER_FUNCTION_METHOD_INDEX, ecma_roots_special)                    \
533     V(JSTaggedValue, ArrowFunctionMethod, ARROW_FUNCTION_METHOD_INDEX, ecma_roots_special)                      \
534     V(JSTaggedValue, AsyncArrowFunctionMethod, ASYNC_ARROW_FUNCTION_METHOD_INDEX, ecma_roots_special)           \
535     V(JSTaggedValue, ConcurrentFunctionMethod, CONCURRENT_FUNCTION_METHOD_INDEX, ecma_roots_special)            \
536     V(JSTaggedValue, AsyncFunctionMethod, ASYNC_FUNCTION_METHOD_INDEX, ecma_roots_special)                      \
537     V(JSTaggedValue, BaseConstructorMethod, BASE_CONSTRUCTOR_METHOD_INDEX, ecma_roots_special)                  \
538     V(JSTaggedValue, ClassConstructorMethod, CLASS_CONSTRUCTOR_METHOD_INDEX, ecma_roots_special)                \
539     V(JSTaggedValue, BuiltinProxyConstructorMethod, BUILTIN_PROXY_CONSTRUCTOR_METHOD_INDEX, ecma_roots_special) \
540     V(JSTaggedValue, BuiltinConstructorMethod, BUILTIN_CONSTRUCTOR_METHOD_INDEX, ecma_roots_special)            \
541     V(JSTaggedValue, DerivedConstructorMethod, DERIVED_CONSTRUCTOR_METHOD_INDEX, ecma_roots_special)            \
542     V(JSTaggedValue, GeneratorFunctionMethod, GENERATOR_FUNCTION_METHOD_INDEX, ecma_roots_special)              \
543     V(JSTaggedValue, NoneFunctionMethod, NONE_FUNCTION_METHOD_INDEX, ecma_roots_special)                        \
544     V(JSTaggedValue, AsyncGeneratorFunctionMethod, ASYNC_GENERATOR_FUNCTION_METHOD_INDEX, ecma_roots_special)   \
545     V(JSTaggedValue, BoundFunctionMethod, BOUND_FUNCTION_METHOD_INDEX, ecma_roots_special)
546 
547 #define GLOBAL_ENV_CACHES(V)                \
548     V(JSTaggedValue, CachedJSCollatorLocales, CACHED_JSCOLLATOR_LOCALES_INDEX, cachedCollatorLocales)
549 
550 // ConstantIndex used for explicit visit each constant.
551 enum class ConstantIndex : size_t {
552 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
553 
554 #define INDEX_FILTER_COMMON(Index) Index,
555 #define INDEX_FILTER_WITH_TYPE(Type, Name, Index, Desc) INDEX_FILTER_COMMON(Index)
556 #define INDEX_FILTER_STRING(Name, Index, Token) INDEX_FILTER_COMMON(Index)
557     // Caveats: make sure shareds starts from 0 and placed before non-shareds.
558     SHARED_GLOBAL_ENV_CONSTANT_CLASS(INDEX_FILTER_WITH_TYPE)
559     SHARED_GLOBAL_ENV_CONSTANT_SHARED_CLASS(INDEX_FILTER_WITH_TYPE)
560     SHARED_GLOBAL_ENV_CONSTANT_STRING(INDEX_FILTER_STRING)
561     SHARED_GLOBAL_ENV_CONSTANT_ACCESSOR(INDEX_FILTER_WITH_TYPE)
562     SHARED_GLOBAL_ENV_CONSTANT_SPECIAL(INDEX_FILTER_WITH_TYPE)
563     GLOBAL_ENV_CONSTANT_CLASS(INDEX_FILTER_WITH_TYPE)
564     GLOBAL_ENV_CONSTANT_SPECIAL(INDEX_FILTER_WITH_TYPE)
565     GLOBAL_ENV_CACHES(INDEX_FILTER_WITH_TYPE)
566 #undef INDEX_FILTER_STRING
567 #undef INDEX_FILTER_WITH_TYPE
568 #undef INDEX_FILTER_COMMON
569 #undef INDEX_FILTER_BUILTIN4
570 #undef INDEX_FILTER_BUILTIN6
571 
572     CONSTANT_COUNT,
573 
574     CONSTANT_BEGIN = 0,
575     CONSTANT_END = CONSTANT_COUNT,
576 
577     SHARED_BEGIN = HCLASS_CLASS_INDEX,
578     SHARED_END = BOUND_FUNCTION_METHOD_INDEX,
579 
580     SHARED_HCLASS_BEGIN = HCLASS_CLASS_INDEX,
581     SHARED_HCLASS_END = VTABLE_CLASS_INDEX,
582     NON_SHARED_HCLASS_BEGIN = JS_PROXY_CALLABLE_CLASS_INDEX,
583     NON_SHARED_HCLASS_END = CLASS_CONSTRUCTOR_HCLASS_INDEX,
584     READ_ONLY_CONSTANT_BEGIN = CONSTANT_BEGIN,
585     READ_ONLY_CONSTANT_END = CONSTANT_END,
586 
587     INVALID = -1,
588     // ...
589 };
590 // clang-format on
591 
592 class GlobalEnvConstants {
593 public:
594     GlobalEnvConstants() = default;
595     ~GlobalEnvConstants() = default;
596 
597     DEFAULT_MOVE_SEMANTIC(GlobalEnvConstants);
598     DEFAULT_COPY_SEMANTIC(GlobalEnvConstants);
599 
600     const JSTaggedValue *BeginSlot() const;
601 
602     const JSTaggedValue *EndSlot() const;
603 
604     void Init(JSThread *thread);
605 
606     void CopySharedConstantsFrom(const GlobalEnvConstants *src);
607 
608     void InitSpecialForSnapshot();
609 
610     void SetCachedLocales(JSTaggedValue value);
611 
612     void SetConstant(ConstantIndex index, JSTaggedValue value);
613 
614     template<typename T>
615     void SetConstant(ConstantIndex index, JSHandle<T> value);
616 
617     uintptr_t GetGlobalConstantAddr(ConstantIndex index) const;
618 
619 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
620 #define DECL_GET_COMMON(Type, Name)                 \
621     const Type Get##Name() const;                   \
622     const JSHandle<Type> GetHandled##Name() const;  \
623     static size_t GetOffsetOf##Name();
624 #define DECL_GET_WITH_TYPE(Type, Name, Index, Desc) DECL_GET_COMMON(Type, Name)
625 #define DECL_GET_STRING(Name, Index, Token) DECL_GET_COMMON(JSTaggedValue, Name)
626     SHARED_GLOBAL_ENV_CONSTANT_CLASS(DECL_GET_WITH_TYPE)
SHARED_GLOBAL_ENV_CONSTANT_SHARED_CLASS(DECL_GET_WITH_TYPE)627     SHARED_GLOBAL_ENV_CONSTANT_SHARED_CLASS(DECL_GET_WITH_TYPE)
628     SHARED_GLOBAL_ENV_CONSTANT_STRING(DECL_GET_STRING)
629     SHARED_GLOBAL_ENV_CONSTANT_ACCESSOR(DECL_GET_WITH_TYPE)
630     SHARED_GLOBAL_ENV_CONSTANT_SPECIAL(DECL_GET_WITH_TYPE)
631     GLOBAL_ENV_CONSTANT_CLASS(DECL_GET_WITH_TYPE)
632     GLOBAL_ENV_CONSTANT_SPECIAL(DECL_GET_WITH_TYPE)
633     GLOBAL_ENV_CACHES(DECL_GET_WITH_TYPE)
634 #undef DECL_GET_STRING
635 #undef DECL_GET_WITH_TYPE
636 #undef DECL_GET_COMMON
637 #undef DECL_GET_BUILTIN
638 
639     void Iterate(RootVisitor &visitor)
640     {
641         visitor.VisitRangeRoot(Root::ROOT_VM, ObjectSlot(ToUintPtr(BeginSlot())), ObjectSlot(ToUintPtr(EndSlot())));
642     }
643 
GetGlobalConstantObject(size_t index)644     JSTaggedValue GetGlobalConstantObject(size_t index) const
645     {
646         ASSERT(static_cast<ConstantIndex>(index) < ConstantIndex::CONSTANT_COUNT);
647         return constants_[index];
648     }
649 
GetConstantCount()650     size_t GetConstantCount() const
651     {
652         return static_cast<size_t>(ConstantIndex::CONSTANT_COUNT);
653     }
654 
GetEmptyArrayIndex()655     size_t GetEmptyArrayIndex() const
656     {
657         return static_cast<size_t>(ConstantIndex::EMPTY_ARRAY_OBJECT_INDEX);
658     }
659 
GetEmptyMutantArrayIndex()660     size_t GetEmptyMutantArrayIndex() const
661     {
662         return static_cast<size_t>(ConstantIndex::EMPTY_MUTANT_ARRAY_OBJECT_INDEX);
663     }
664 
GetLineStringClassIndex()665     size_t GetLineStringClassIndex() const
666     {
667         return static_cast<size_t>(ConstantIndex::LINE_STRING_CLASS_INDEX);
668     }
669 
IsSpecialOrUndefined(size_t index)670     bool IsSpecialOrUndefined(size_t index) const
671     {
672         size_t specialBegin = static_cast<size_t>(ConstantIndex::UNDEFINED_INDEX);
673         size_t specialEnd = static_cast<size_t>(ConstantIndex::NULL_INDEX);
674         return (index >= specialBegin && index <= specialEnd);
675     }
676 
677     static constexpr size_t SizeArch32 =
678         JSTaggedValue::TaggedTypeSize() * static_cast<size_t>(ConstantIndex::CONSTANT_COUNT);
679     static constexpr size_t SizeArch64 =
680         JSTaggedValue::TaggedTypeSize() * static_cast<size_t>(ConstantIndex::CONSTANT_COUNT);
681 
682 private:
683     void InitSharedStrings(ObjectFactory *factory);
684     void InitCompositeBaseClasses(ObjectFactory* factory, JSHClass* hClass);
685     void InitSharedRootsClasses(ObjectFactory *factory);
686     void InitSharedMiscellaneous(JSThread *thread, ObjectFactory *factory);
687     void InitRootsClasses(ObjectFactory *factory);
688     void InitRootsClassesPartOne(JSHClass *hClass, ObjectFactory *factory);
689     void InitRootsClassesPartTwo(JSHClass *hClass, ObjectFactory *factory);
690     void InitMiscellaneous(JSThread *thread, ObjectFactory *factory);
691     void InitGlobalCaches();
692 
693     JSTaggedValue constants_[static_cast<int>(ConstantIndex::CONSTANT_COUNT)];  // NOLINT(modernize-avoid-c-arrays)
694 };
695 STATIC_ASSERT_EQ_ARCH(sizeof(GlobalEnvConstants), GlobalEnvConstants::SizeArch32, GlobalEnvConstants::SizeArch64);
696 }  // namespace panda::ecmascript
697 #endif  // ECMASCRIPT_GLOBAL_ENV_CONSTANTS_H
698