• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 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 #include "ecmascript/byte_array.h"
16 #include "ecmascript/dfx/native_module_failure_info.h"
17 #include "ecmascript/ic/ic_handler.h"
18 #include "ecmascript/ic/profile_type_info.h"
19 #include "ecmascript/ic/proto_change_details.h"
20 #include "ecmascript/jobs/micro_job_queue.h"
21 #include "ecmascript/jobs/pending_job.h"
22 #include "ecmascript/js_native_pointer.h"
23 #include "ecmascript/js_object.h"
24 #include "ecmascript/js_tagged_value.h"
25 #include "ecmascript/js_arraybuffer.h"
26 #include "ecmascript/js_array_iterator.h"
27 #include "ecmascript/js_async_function.h"
28 #include "ecmascript/js_async_from_sync_iterator.h"
29 #include "ecmascript/js_async_generator_object.h"
30 #include "ecmascript/js_iterator.h"
31 #include "ecmascript/js_finalization_registry.h"
32 #include "ecmascript/js_api/js_api_arraylist_iterator.h"
33 #include "ecmascript/js_api/js_api_arraylist.h"
34 #include "ecmascript/js_api/js_api_bitvector.h"
35 #include "ecmascript/js_api/js_api_bitvector_iterator.h"
36 #include "ecmascript/js_api/js_api_buffer.h"
37 #include "ecmascript/js_api/js_api_deque.h"
38 #include "ecmascript/js_api/js_api_deque_iterator.h"
39 #include "ecmascript/js_api/js_api_hashmap.h"
40 #include "ecmascript/js_api/js_api_hashmap_iterator.h"
41 #include "ecmascript/js_api/js_api_hashset.h"
42 #include "ecmascript/js_api/js_api_hashset_iterator.h"
43 #include "ecmascript/js_api/js_api_lightweightmap.h"
44 #include "ecmascript/js_api/js_api_lightweightmap_iterator.h"
45 #include "ecmascript/js_api/js_api_lightweightset.h"
46 #include "ecmascript/js_api/js_api_lightweightset_iterator.h"
47 #include "ecmascript/js_api/js_api_linked_list.h"
48 #include "ecmascript/js_api/js_api_linked_list_iterator.h"
49 #include "ecmascript/js_api/js_api_list.h"
50 #include "ecmascript/js_api/js_api_list_iterator.h"
51 #include "ecmascript/js_api/js_api_plain_array.h"
52 #include "ecmascript/js_api/js_api_plain_array_iterator.h"
53 #include "ecmascript/js_api/js_api_queue.h"
54 #include "ecmascript/js_api/js_api_queue_iterator.h"
55 #include "ecmascript/js_api/js_api_stack.h"
56 #include "ecmascript/js_api/js_api_stack_iterator.h"
57 #include "ecmascript/js_api/js_api_tree_map.h"
58 #include "ecmascript/js_api/js_api_tree_map_iterator.h"
59 #include "ecmascript/js_api/js_api_tree_set.h"
60 #include "ecmascript/js_api/js_api_tree_set_iterator.h"
61 #include "ecmascript/js_api/js_api_vector.h"
62 #include "ecmascript/js_api/js_api_vector_iterator.h"
63 #include "ecmascript/js_arguments.h"
64 #include "ecmascript/js_array.h"
65 #include "ecmascript/js_array_iterator.h"
66 #include "ecmascript/js_arraybuffer.h"
67 #include "ecmascript/js_async_function.h"
68 #include "ecmascript/js_async_generator_object.h"
69 #include "ecmascript/js_collator.h"
70 #include "ecmascript/js_dataview.h"
71 #include "ecmascript/js_date.h"
72 #include "ecmascript/js_date_time_format.h"
73 #include "ecmascript/js_for_in_iterator.h"
74 #include "ecmascript/js_finalization_registry.h"
75 #include "ecmascript/js_function.h"
76 #include "ecmascript/js_generator_object.h"
77 #include "ecmascript/js_hclass.h"
78 #include "ecmascript/js_intl.h"
79 #include "ecmascript/js_locale.h"
80 #include "ecmascript/js_map.h"
81 #include "ecmascript/js_map_iterator.h"
82 #include "ecmascript/js_number_format.h"
83 #include "ecmascript/js_object-inl.h"
84 #include "ecmascript/js_plural_rules.h"
85 #include "ecmascript/js_primitive_ref.h"
86 #include "ecmascript/js_promise.h"
87 #include "ecmascript/js_realm.h"
88 #include "ecmascript/js_regexp.h"
89 #include "ecmascript/js_regexp_iterator.h"
90 #include "ecmascript/js_relative_time_format.h"
91 #include "ecmascript/js_segmenter.h"
92 #include "ecmascript/js_segments.h"
93 #include "ecmascript/js_segment_iterator.h"
94 #include "ecmascript/js_set.h"
95 #include "ecmascript/js_displaynames.h"
96 #include "ecmascript/js_list_format.h"
97 #include "ecmascript/js_set_iterator.h"
98 #include "ecmascript/js_string_iterator.h"
99 #include "ecmascript/js_typed_array.h"
100 #include "ecmascript/js_weak_container.h"
101 #include "ecmascript/js_weak_ref.h"
102 #include "ecmascript/marker_cell.h"
103 #include "ecmascript/js_typed_array.h"
104 #include "ecmascript/jspandafile/class_info_extractor.h"
105 #include "ecmascript/jspandafile/class_literal.h"
106 #include "ecmascript/jspandafile/program_object.h"
107 #include "ecmascript/module/js_module_record.h"
108 #include "ecmascript/napi/include/jsnapi.h"
109 #include "ecmascript/object_factory.h"
110 #include "ecmascript/tests/test_helper.h"
111 #include "ecmascript/dfx/hprof/heap_profiler.h"
112 #include "ecmascript/global_env.h"
113 #include "ecmascript/require/js_cjs_module.h"
114 #include "ecmascript/require/js_cjs_require.h"
115 #include "ecmascript/require/js_cjs_exports.h"
116 #include "ecmascript/module/js_module_source_text.h"
117 #include "ecmascript/module/js_shared_module.h"
118 #include "ecmascript/shared_objects/js_shared_array.h"
119 #include "ecmascript/shared_objects/js_sendable_arraybuffer.h"
120 #include "ecmascript/shared_objects/js_shared_array_iterator.h"
121 #include "ecmascript/shared_objects/js_shared_map.h"
122 #include "ecmascript/shared_objects/js_shared_map_iterator.h"
123 #include "ecmascript/shared_objects/js_shared_set.h"
124 #include "ecmascript/shared_objects/js_shared_set_iterator.h"
125 #include "ecmascript/shared_objects/js_shared_typed_array.h"
126 #include "ecmascript/tagged_hash_table.h"
127 #include "gtest/gtest.h"
128 #include <cstddef>
129 #include <fstream>
130 #include <string>
131 #include <unordered_map>
132 #include <utility>
133 #include "cJSON.h"
134 
135 
136 namespace panda::test {
137 using namespace panda::ecmascript;
138 using ArrayVisitor = const std::function<bool(const cJSON *, int)>;
139 class JSMetadataTest : public testing::Test {
140 public:
SetUp()141     void SetUp() override
142     {
143         GTEST_LOG_(INFO) << "JSMetadataTest Setup";
144     }
145 
TearDown()146     void TearDown() override
147     {
148         GTEST_LOG_(INFO) << "JSMetadataTest TearDown";
149     }
150 };
151 
152 class JSMetadataTestHelper {
153 public:
JSMetadataTestHelper()154     explicit JSMetadataTestHelper()
155     {
156         // { typeName: [all fields' name of this type in the same order as declared in .h files + typeName] }
157         // typeName: Type name in JSType Enum
158         fieldNameTable_ = {
159             {JSType::INVALID, {"INVALID"}},
160             {JSType::HCLASS, {
161                 "BitField", "BitField1", "Proto", "Layout", "Transitions", "Parent", "ProtoChangeMarker",
162                 "ProtoChangeDetails", "EnumCache", "DependentInfos",
163                 "ProfilerType", "HCLASS"}},
164             {JSType::ACCESSOR_DATA, {"Getter", "Setter", "ACCESSOR_DATA"}},
165             {JSType::AOT_LITERAL_INFO, {"AOT_LITERAL_INFO"}},
166             {JSType::ASYNC_GENERATOR_REQUEST, {"Completion", "Capability", "ASYNC_GENERATOR_REQUEST"}},
167             {JSType::ASYNC_ITERATOR_RECORD, {"Iterator", "NextMethod", "ASYNC_ITERATOR_RECORD"}},
168             {JSType::BIGINT, {"BIGINT"}},
169             {JSType::BYTE_ARRAY, {"BYTE_ARRAY"}},
170             {JSType::CELL_RECORD, {"WeakRefTarget", "HeldValue", "CELL_RECORD"}},
171             {JSType::CLASS_INFO_EXTRACTOR, {
172                 "NonStaticKeys", "NonStaticProperties", "NonStaticElements", "StaticKeys",
173                 "StaticProperties", "StaticElements",
174                 "ConstructorMethod", "CLASS_INFO_EXTRACTOR"}},
175             {JSType::CLASS_LITERAL, {"Array", "CLASS_LITERAL"}},
176             {JSType::COMPLETION_RECORD, {"Value", "COMPLETION_RECORD"}},
177             {JSType::CONSTANT_POOL, {"CONSTANT_POOL"}},
178             {JSType::COW_MUTANT_TAGGED_ARRAY, {"COW_MUTANT_TAGGED_ARRAY"}},
179             {JSType::COW_TAGGED_ARRAY, {"COW_TAGGED_ARRAY"}},
180             {JSType::EXTRA_PROFILE_TYPE_INFO, {"ReceiverObject", "HolderObject", "EXTRA_PROFILE_TYPE_INFO"}},
181             {JSType::FUNCTION_TEMPLATE, {"Method", "Module", "RawProfileTypeInfo", "FUNCTION_TEMPLATE"}},
182             {JSType::GLOBAL_ENV, {"GLOBAL_ENV"}},
183             {JSType::IMPORTENTRY_RECORD, {"ImportName", "LocalName", "ModuleRequestIndex", "IMPORTENTRY_RECORD"}},
184             {JSType::INDIRECT_EXPORTENTRY_RECORD, {"ExportName", "ImportName",
185                                                    "ModuleRequestIndex", "INDIRECT_EXPORTENTRY_RECORD"}},
186             {JSType::INTERNAL_ACCESSOR, {"Getter", "Setter", "INTERNAL_ACCESSOR"}},
187             {JSType::JS_AGGREGATE_ERROR, {"Properties", "Elements", "JS_AGGREGATE_ERROR"}},
188             {JSType::JS_API_ARRAYLIST_ITERATOR, {"IteratedArrayList", "JS_API_ARRAYLIST_ITERATOR"}},
189             {JSType::JS_API_ARRAY_LIST, {"Length", "JS_API_ARRAY_LIST"}},
190             {JSType::JS_API_BITVECTOR, {"NativePointer", "JS_API_BITVECTOR"}},
191             {JSType::JS_API_BITVECTOR_ITERATOR, {"IteratedBitVector", "JS_API_BITVECTOR_ITERATOR"}},
192             {JSType::JS_API_DEQUE, {"JS_API_DEQUE"}},
193             {JSType::JS_API_DEQUE_ITERATOR, {"IteratedDeque", "JS_API_DEQUE_ITERATOR"}},
194             {JSType::JS_API_HASHMAP_ITERATOR, {"IteratedHashMap", "TaggedQueue",
195                                                "CurrentNodeResult", "JS_API_HASHMAP_ITERATOR"}},
196             {JSType::JS_API_HASHSET_ITERATOR, {"IteratedHashSet", "TaggedQueue",
197                                                "CurrentNodeResult", "JS_API_HASHSET_ITERATOR"}},
198             {JSType::JS_API_HASH_MAP, {"Table", "JS_API_HASH_MAP"}},
199             {JSType::JS_API_HASH_SET, {"Table", "JS_API_HASH_SET"}},
200             {JSType::JS_API_LIGHT_WEIGHT_MAP, {"Hashes", "Keys", "Values", "JS_API_LIGHT_WEIGHT_MAP"}},
201             {JSType::JS_API_LIGHT_WEIGHT_MAP_ITERATOR, {"IteratedLightWeightMap", "JS_API_LIGHT_WEIGHT_MAP_ITERATOR"}},
202             {JSType::JS_API_LIGHT_WEIGHT_SET, {"Hashes", "Values", "JS_API_LIGHT_WEIGHT_SET"}},
203             {JSType::JS_API_LIGHT_WEIGHT_SET_ITERATOR, {"IteratedLightWeightSet", "JS_API_LIGHT_WEIGHT_SET_ITERATOR"}},
204             {JSType::JS_API_LINKED_LIST, {"DoubleList", "JS_API_LINKED_LIST"}},
205             {JSType::JS_API_LINKED_LIST_ITERATOR, {"IteratedLinkedList", "JS_API_LINKED_LIST_ITERATOR"}},
206             {JSType::JS_API_LIST, {"SingleList", "JS_API_LIST"}},
207             {JSType::JS_API_LIST_ITERATOR, {"IteratedList", "JS_API_LIST_ITERATOR"}},
208             {JSType::JS_API_PLAIN_ARRAY, {"Keys", "Values", "JS_API_PLAIN_ARRAY"}},
209             {JSType::JS_API_FAST_BUFFER, {"FastBufferData", "JS_API_FAST_BUFFER"}},
210             {JSType::JS_API_PLAIN_ARRAY_ITERATOR, {"IteratedPlainArray", "JS_API_PLAIN_ARRAY_ITERATOR"}},
211             {JSType::JS_API_QUEUE, {"Length", "JS_API_QUEUE"}},
212             {JSType::JS_API_QUEUE_ITERATOR, {"IteratedQueue", "JS_API_QUEUE_ITERATOR"}},
213             {JSType::JS_API_STACK, {"JS_API_STACK"}},
214             {JSType::JS_API_STACK_ITERATOR, {"IteratedStack", "JS_API_STACK_ITERATOR"}},
215             {JSType::JS_API_TREEMAP_ITERATOR, {"IteratedMap", "Entries", "JS_API_TREEMAP_ITERATOR"}},
216             {JSType::JS_API_TREESET_ITERATOR, {"IteratedSet", "Entries", "JS_API_TREESET_ITERATOR"}},
217             {JSType::JS_API_TREE_MAP, {"TreeMap", "JS_API_TREE_MAP"}},
218             {JSType::JS_API_TREE_SET, {"TreeSet", "JS_API_TREE_SET"}},
219             {JSType::JS_API_VECTOR, {"JS_API_VECTOR"}},
220             {JSType::JS_API_VECTOR_ITERATOR, {"IteratedVector", "JS_API_VECTOR_ITERATOR"}},
221             {JSType::JS_ARGUMENTS, {"JS_ARGUMENTS"}},
222             {JSType::JS_ARRAY, {"Length", "TrackInfo", "JS_ARRAY"}},
223             {JSType::JS_ARRAY_BUFFER, {"ArrayBufferData", "JS_ARRAY_BUFFER"}},
224             {JSType::JS_ARRAY_ITERATOR, {"IteratedArray", "JS_ARRAY_ITERATOR"}},
225             {JSType::JS_ASYNCITERATOR, {"Properties", "Elements", "JS_ASYNCITERATOR"}},
226             {JSType::JS_ASYNC_AWAIT_STATUS_FUNCTION, {"AsyncContext", "JS_ASYNC_AWAIT_STATUS_FUNCTION"}},
227             {JSType::JS_ASYNC_FROM_SYNC_ITERATOR, {"SyncIteratorRecord", "JS_ASYNC_FROM_SYNC_ITERATOR"}},
228             {JSType::JS_ASYNC_FROM_SYNC_ITER_UNWARP_FUNCTION, {"Done", "JS_ASYNC_FROM_SYNC_ITER_UNWARP_FUNCTION"}},
229             {JSType::JS_ASYNC_FUNCTION, {"JS_ASYNC_FUNCTION"}},
230             {JSType::JS_ASYNC_FUNC_OBJECT, {"Promise", "JS_ASYNC_FUNC_OBJECT"}},
231             {JSType::JS_ASYNC_GENERATOR_FUNCTION, {"JS_ASYNC_GENERATOR_FUNCTION"}},
232             {JSType::JS_ASYNC_GENERATOR_OBJECT, {"GeneratorContext", "AsyncGeneratorQueue", "GeneratorBrand",
233                                                  "ResumeResult", "JS_ASYNC_GENERATOR_OBJECT"}},
234             {JSType::JS_ASYNC_GENERATOR_RESUME_NEXT_RETURN_PROCESSOR_RST_FTN, {
235                 "AsyncGeneratorObject", "JS_ASYNC_GENERATOR_RESUME_NEXT_RETURN_PROCESSOR_RST_FTN"}},
236             {JSType::JS_ASYNC_MODULE_FULFILLED_FUNCTION, {"JS_ASYNC_MODULE_FULFILLED_FUNCTION"}},
237             {JSType::JS_ASYNC_MODULE_REJECTED_FUNCTION, {"JS_ASYNC_MODULE_REJECTED_FUNCTION"}},
238             {JSType::JS_BIGINT64_ARRAY, {"ViewedArrayBufferOrByteArray", "TypedArrayName", "JS_BIGINT64_ARRAY"}},
239             {JSType::JS_BIGUINT64_ARRAY, {"ViewedArrayBufferOrByteArray", "TypedArrayName", "JS_BIGUINT64_ARRAY"}},
240             {JSType::JS_BOUND_FUNCTION, {"BoundTarget", "BoundThis", "BoundArguments", "JS_BOUND_FUNCTION"}},
241             {JSType::JS_CJS_EXPORTS, {"Exports", "JS_CJS_EXPORTS"}},
242             {JSType::JS_CJS_MODULE, {"Id", "Path", "Exports", "Filename", "JS_CJS_MODULE"}},
243             {JSType::JS_CJS_REQUIRE, {"Cache", "Parent", "JS_CJS_REQUIRE"}},
244             {JSType::JS_COLLATOR, {"IcuFiled", "Locale", "Collation", "BoundCompare", "JS_COLLATOR"}},
245             {JSType::JS_DATA_VIEW, {"DataView", "ViewedArrayBuffer", "JS_DATA_VIEW"}},
246             {JSType::JS_DATE, {"TimeValue", "LocalOffset", "JS_DATE"}},
247             {JSType::JS_DATE_TIME_FORMAT, {"Locale", "Calendar", "NumberingSystem", "TimeZone", "LocaleIcu",
248                                            "SimpleDateTimeFormatIcu", "Iso8601",
249                                            "BoundFormat", "JS_DATE_TIME_FORMAT"}},
250             {JSType::JS_DISPLAYNAMES, {"Locale", "IcuLDN", "JS_DISPLAYNAMES"}},
251             {JSType::JS_ERROR, {"Properties", "Elements", "JS_ERROR"}},
252             {JSType::JS_EVAL_ERROR, {"Properties", "Elements", "JS_EVAL_ERROR"}},
253             {JSType::JS_FINALIZATION_REGISTRY, {"CleanupCallback", "NoUnregister",
254                                                 "MaybeUnregister", "Next", "Prev", "JS_FINALIZATION_REGISTRY"}},
255             {JSType::JS_FLOAT32_ARRAY, {"ViewedArrayBufferOrByteArray", "TypedArrayName", "JS_FLOAT32_ARRAY"}},
256             {JSType::JS_FLOAT64_ARRAY, {"ViewedArrayBufferOrByteArray", "TypedArrayName", "JS_FLOAT64_ARRAY"}},
257             {JSType::JS_FORIN_ITERATOR, {"Object", "CachedHClass", "Keys", "JS_FORIN_ITERATOR"}},
258             {JSType::JS_FUNCTION, {"ProtoOrHClass", "LexicalEnv", "MachineCode", "BaselineCode", "RawProfileTypeInfo",
259                                    "HomeObject", "Module", "JS_FUNCTION"}},
260             {JSType::JS_FUNCTION_BASE, {"Method", "JS_FUNCTION_BASE"}},
261             {JSType::JS_GENERATOR_CONTEXT, {"RegsArray", "Method", "This", "Acc",
262                                             "GeneratorObject", "LexicalEnv", "JS_GENERATOR_CONTEXT"}},
263             {JSType::JS_GENERATOR_FUNCTION, {"JS_GENERATOR_FUNCTION"}},
264             {JSType::JS_GENERATOR_OBJECT, {"GeneratorContext", "ResumeResult", "JS_GENERATOR_OBJECT"}},
265             {JSType::JS_GLOBAL_OBJECT, {"JS_GLOBAL_OBJECT"}},
266             {JSType::JS_INT16_ARRAY, {"ViewedArrayBufferOrByteArray", "TypedArrayName", "JS_INT16_ARRAY"}},
267             {JSType::JS_INT32_ARRAY, {"ViewedArrayBufferOrByteArray", "TypedArrayName", "JS_INT32_ARRAY"}},
268             {JSType::JS_INT8_ARRAY, {"ViewedArrayBufferOrByteArray", "TypedArrayName", "JS_INT8_ARRAY"}},
269             {JSType::JS_INTL, {"FallbackSymbol", "JS_INTL"}},
270             {JSType::JS_INTL_BOUND_FUNCTION, {"NumberFormat", "DateTimeFormat",
271                                               "Collator", "JS_INTL_BOUND_FUNCTION"}},
272             {JSType::JS_ITERATOR, {"Properties", "Elements", "JS_ITERATOR"}},
273             {JSType::JS_LIST_FORMAT, {"Locale", "IcuLF", "JS_LIST_FORMAT"}},
274             {JSType::JS_LOCALE, {"IcuField", "JS_LOCALE"}},
275             {JSType::JS_MAP, {"LinkedMap", "JS_MAP"}},
276             {JSType::JS_MAP_ITERATOR, {"IteratorMap", "JS_MAP_ITERATOR"}},
277             {JSType::JS_MODULE_NAMESPACE, {"Module", "Exports", "DeregisterProcession", "JS_MODULE_NAMESPACE"}},
278             {JSType::JS_NATIVE_POINTER, {"BindingSize", "JS_NATIVE_POINTER"}},
279             {JSType::JS_NUMBER_FORMAT, {"Locale", "NumberingSystem", "Currency", "Unit", "MinimumIntegerDigits",
280                                               "MinimumFractionDigits", "MaximumFractionDigits",
281                                               "MinimumSignificantDigits", "MaximumSignificantDigits",
282                                               "UseGrouping", "BoundFormat", "IcuField", "JS_NUMBER_FORMAT"}},
283             {JSType::JS_OBJECT, {"Properties", "Elements", "JS_OBJECT"}},
284             {JSType::JS_OOM_ERROR, {"Properties", "Elements", "JS_OOM_ERROR"}},
285             {JSType::JS_PLURAL_RULES, {"Locale", "MinimumIntegerDigits",
286                                        "MinimumFractionDigits", "MaximumFractionDigits",
287                                        "MinimumSignificantDigits", "MaximumSignificantDigits",
288                                        "IcuPR", "IcuNF", "JS_PLURAL_RULES"}},
289             {JSType::JS_PRIMITIVE_REF, {"Value", "JS_PRIMITIVE_REF"}},
290             {JSType::JS_PROMISE, {"PromiseResult", "PromiseFulfillReactions", "PromiseRejectReactions", "JS_PROMISE"}},
291             {JSType::JS_PROMISE_ALL_RESOLVE_ELEMENT_FUNCTION, {"Index", "Values", "Capabilities", "RemainingElements",
292                                                                "AlreadyCalled",
293                                                                "JS_PROMISE_ALL_RESOLVE_ELEMENT_FUNCTION"}},
294             {JSType::JS_PROMISE_ALL_SETTLED_ELEMENT_FUNCTION, {"AlreadyCalled", "Values", "Capability",
295                                                                "RemainingElements",
296                                                                "JS_PROMISE_ALL_SETTLED_ELEMENT_FUNCTION"}},
297             {JSType::JS_PROMISE_ANY_REJECT_ELEMENT_FUNCTION, {"Errors", "Capability", "RemainingElements",
298                                                               "AlreadyCalled",
299                                                               "JS_PROMISE_ANY_REJECT_ELEMENT_FUNCTION"}},
300             {JSType::JS_PROMISE_EXECUTOR_FUNCTION, {"Capability", "JS_PROMISE_EXECUTOR_FUNCTION"}},
301             {JSType::JS_PROMISE_FINALLY_FUNCTION, {"Constructor", "OnFinally", "JS_PROMISE_FINALLY_FUNCTION"}},
302             {JSType::JS_PROMISE_REACTIONS_FUNCTION, {"Promise", "AlreadyResolved", "JS_PROMISE_REACTIONS_FUNCTION"}},
303             {JSType::JS_PROMISE_VALUE_THUNK_OR_THROWER_FUNCTION, {"Result",
304                                                                   "JS_PROMISE_VALUE_THUNK_OR_THROWER_FUNCTION"}},
305             {JSType::JS_PROXY, {"Target", "Handler", "Method", "PrivateField", "JS_PROXY"}},
306             {JSType::JS_PROXY_REVOC_FUNCTION, {"RevocableProxy", "JS_PROXY_REVOC_FUNCTION"}},
307             {JSType::JS_RANGE_ERROR, {"Properties", "Elements", "JS_RANGE_ERROR"}},
308             {JSType::JS_REALM, {"Value", "GlobalEnv", "JS_REALM"}},
309             {JSType::JS_REFERENCE_ERROR, {"Properties", "Elements", "JS_REFERENCE_ERROR"}},
310             {JSType::JS_REG_EXP, {"ByteCodeBuffer", "OriginalSource", "OriginalFlags", "GroupName", "JS_REG_EXP"}},
311             {JSType::JS_REG_EXP_ITERATOR, {"IteratingRegExp", "IteratedString", "JS_REG_EXP_ITERATOR"}},
312             {JSType::JS_RELATIVE_TIME_FORMAT, {"Locale", "NumberingSystem", "IcuField", "JS_RELATIVE_TIME_FORMAT"}},
313             {JSType::JS_SEGMENTER, {"Locale", "IcuField", "JS_SEGMENTER"}},
314             {JSType::JS_SEGMENTS, {"IcuField", "SegmentsString", "UnicodeString", "JS_SEGMENTS"}},
315             {JSType::JS_SEGMENT_ITERATOR, {"IcuField", "IteratedString", "UnicodeString", "JS_SEGMENT_ITERATOR"}},
316             {JSType::JS_SENDABLE_ARRAY_BUFFER, {"ArrayBufferData", "JS_SENDABLE_ARRAY_BUFFER"}},
317             {JSType::JS_SET, {"LinkedSet", "JS_SET"}},
318             {JSType::JS_SET_ITERATOR, {"IteratorSet", "JS_SET_ITERATOR"}},
319             {JSType::JS_SHARED_ARRAY, {"TrackInfo", "JS_SHARED_ARRAY"}},
320             {JSType::JS_SHARED_ARRAY_BUFFER, {"ArrayBufferData", "JS_SHARED_ARRAY_BUFFER"}},
321             {JSType::JS_SHARED_ARRAY_ITERATOR, {"IteratedArray", "JS_SHARED_ARRAY_ITERATOR"}},
322             {JSType::JS_SHARED_ASYNC_FUNCTION, {"JS_SHARED_ASYNC_FUNCTION"}},
323             {JSType::JS_SHARED_BIGINT64_ARRAY, {"JS_SHARED_BIGINT64_ARRAY"}},
324             {JSType::JS_SHARED_BIGUINT64_ARRAY, {"JS_SHARED_BIGUINT64_ARRAY"}},
325             {JSType::JS_SHARED_FLOAT32_ARRAY, {"JS_SHARED_FLOAT32_ARRAY"}},
326             {JSType::JS_SHARED_FLOAT64_ARRAY, {"JS_SHARED_FLOAT64_ARRAY"}},
327             {JSType::JS_SHARED_FUNCTION, {"JS_SHARED_FUNCTION"}},
328             {JSType::JS_SHARED_INT16_ARRAY, {"JS_SHARED_INT16_ARRAY"}},
329             {JSType::JS_SHARED_INT32_ARRAY, {"JS_SHARED_INT32_ARRAY"}},
330             {JSType::JS_SHARED_INT8_ARRAY, {"JS_SHARED_INT8_ARRAY"}},
331             {JSType::JS_SHARED_MAP, {"LinkedMap", "JS_SHARED_MAP"}},
332             {JSType::JS_SHARED_MAP_ITERATOR, {"IteratorMap", "JS_SHARED_MAP_ITERATOR"}},
333             {JSType::JS_SHARED_OBJECT, {"JS_SHARED_OBJECT"}},
334             {JSType::JS_SHARED_SET, {"LinkedSet", "JS_SHARED_SET"}},
335             {JSType::JS_SHARED_SET_ITERATOR, {"IteratorSet", "JS_SHARED_SET_ITERATOR"}},
336             {JSType::JS_SHARED_TYPED_ARRAY, {"JS_SHARED_TYPED_ARRAY"}},
337             {JSType::JS_SHARED_UINT16_ARRAY, {"JS_SHARED_UINT16_ARRAY"}},
338             {JSType::JS_SHARED_UINT32_ARRAY, {"JS_SHARED_UINT32_ARRAY"}},
339             {JSType::JS_SHARED_UINT8_ARRAY, {"JS_SHARED_UINT8_ARRAY"}},
340             {JSType::JS_SHARED_UINT8_CLAMPED_ARRAY, {"JS_SHARED_UINT8_CLAMPED_ARRAY"}},
341             {JSType::JS_STRING_ITERATOR, {"IteratedString", "JS_STRING_ITERATOR"}},
342             {JSType::JS_SYNTAX_ERROR, {"Properties", "Elements", "JS_SYNTAX_ERROR"}},
343             {JSType::JS_TERMINATION_ERROR, {"Properties", "Elements", "JS_TERMINATION_ERROR"}},
344             {JSType::JS_TYPED_ARRAY, {"ViewedArrayBufferOrByteArray", "TypedArrayName", "JS_TYPED_ARRAY"}},
345             {JSType::JS_TYPE_ERROR, {"Properties", "Elements", "JS_TYPE_ERROR"}},
346             {JSType::JS_UINT16_ARRAY, {"ViewedArrayBufferOrByteArray", "TypedArrayName", "JS_UINT16_ARRAY"}},
347             {JSType::JS_UINT32_ARRAY, {"ViewedArrayBufferOrByteArray", "TypedArrayName", "JS_UINT32_ARRAY"}},
348             {JSType::JS_UINT8_ARRAY, {"ViewedArrayBufferOrByteArray", "TypedArrayName", "JS_UINT8_ARRAY"}},
349             {JSType::JS_UINT8_CLAMPED_ARRAY, {"ViewedArrayBufferOrByteArray",
350                                               "TypedArrayName", "JS_UINT8_CLAMPED_ARRAY"}},
351             {JSType::JS_URI_ERROR, {"Properties", "Elements", "JS_URI_ERROR"}},
352             {JSType::JS_WEAK_MAP, {"LinkedMap", "JS_WEAK_MAP"}},
353             {JSType::JS_WEAK_REF, {"WeakObject", "JS_WEAK_REF"}},
354             {JSType::JS_WEAK_SET, {"LinkedSet", "JS_WEAK_SET"}},
355             {JSType::LEXICAL_ENV, {"LEXICAL_ENV"}},
356             {JSType::LINE_STRING, {"LINE_STRING"}},
357             {JSType::LINKED_NODE, {"Next", "LINKED_NODE"}},
358             {JSType::LOCAL_EXPORTENTRY_RECORD, {"ExportName", "LocalName", "LOCAL_EXPORTENTRY_RECORD"}},
359             {JSType::MACHINE_CODE_OBJECT, {"MACHINE_CODE_OBJECT"}},
360             {JSType::MARKER_CELL, {"MARKER_CELL"}},
361             {JSType::METHOD, {"ConstantPool", "METHOD"}},
362             {JSType::MICRO_JOB_QUEUE, {"PromiseJobQueue", "ScriptJobQueue", "MICRO_JOB_QUEUE"}},
363             {JSType::MODULE_RECORD, {"MODULE_RECORD"}},
364             {JSType::MUTANT_TAGGED_ARRAY, {"MUTANT_TAGGED_ARRAY"}},
365             {JSType::NATIVE_MODULE_FAILURE_INFO, {"ArkNativeModuleFailureInfo", "NATIVE_MODULE_FAILURE_INFO"}},
366             {JSType::PENDING_JOB, {"Job", "Arguments", "PENDING_JOB"}},
367             {JSType::PROFILE_TYPE_INFO, {"PROFILE_TYPE_INFO"}},
368             {JSType::PROFILE_TYPE_INFO_CELL_0, {"Value", "MachineCode", "Handle", "PROFILE_TYPE_INFO_CELL_0"}},
369             {JSType::PROFILE_TYPE_INFO_CELL_1, {"Value", "MachineCode", "Handle", "PROFILE_TYPE_INFO_CELL_1"}},
370             {JSType::PROFILE_TYPE_INFO_CELL_N, {"Value", "MachineCode", "Handle", "PROFILE_TYPE_INFO_CELL_N"}},
371             {JSType::PROGRAM, {"MainFunction", "PROGRAM"}},
372             {JSType::PROMISE_CAPABILITY, {"Promise", "Resolve", "Reject", "PROMISE_CAPABILITY"}},
373             {JSType::PROMISE_ITERATOR_RECORD, {"Iterator", "PROMISE_ITERATOR_RECORD"}},
374             {JSType::PROMISE_REACTIONS, {"PromiseCapability", "Handler", "PROMISE_REACTIONS"}},
375             {JSType::PROMISE_RECORD, {"Value", "PROMISE_RECORD"}},
376             {JSType::PROPERTY_BOX, {"Value", "PROPERTY_BOX"}},
377             {JSType::PROTOTYPE_HANDLER, {"HandlerInfo", "ProtoCell", "Holder",
378                                          "AccessorJSFunction", "PROTOTYPE_HANDLER"}},
379             {JSType::PROTOTYPE_INFO, {"ChangeListener", "PROTOTYPE_INFO"}},
380             {JSType::ENUM_CACHE, {"ENUM_CACHE"}},
381             {JSType::PROTO_CHANGE_MARKER, {"PROTO_CHANGE_MARKER"}},
382             {JSType::RB_TREENODE, {"Left", "Right", "IsRed", "RB_TREENODE"}},
383             {JSType::RESOLVEDBINDING_RECORD, {"Module", "BindingName", "RESOLVEDBINDING_RECORD"}},
384             {JSType::RESOLVEDINDEXBINDING_RECORD, {"Module", "Index", "BitField", "RESOLVEDINDEXBINDING_RECORD"}},
385             {JSType::RESOLVEDRECORDBINDING_RECORD, {"ModuleRecord", "BindingName", "RESOLVEDRECORDBINDING_RECORD"}},
386             {JSType::RESOLVEDRECORDINDEXBINDING_RECORD, {"ModuleRecord",
387                                                          "AbcFileName", "RESOLVEDRECORDINDEXBINDING_RECORD"}},
388             {JSType::RESOLVING_FUNCTIONS_RECORD, {"ResolveFunction", "RejectFunction", "RESOLVING_FUNCTIONS_RECORD"}},
389             {JSType::SENDABLE_ENV, {"SENDABLE_ENV"}},
390             {JSType::SFUNCTION_ENV, {"SFUNCTION_ENV"}},
391             {JSType::JS_XREF_OBJECT, {"JS_XREF_OBJECT"}},
392             {JSType::SLICED_STRING, {"Parent", "SLICED_STRING"}},
393             {JSType::SOURCE_TEXT_MODULE_RECORD, {"Environment", "Namespace", "ModuleRequests", "RequestedModules",
394                                                  "ImportEntries", "LocalExportEntries",
395                                                  "IndirectExportEntries", "StarExportEntries",
396                                                  "NameDictionary", "CycleRoot", "TopLevelCapability",
397                                                  "AsyncParentModules", "SendableEnv", "Exception",
398                                                  "SOURCE_TEXT_MODULE_RECORD"}},
399             {JSType::STAR_EXPORTENTRY_RECORD, {"ModuleRequest", "STAR_EXPORTENTRY_RECORD"}},
400             {JSType::STORE_TS_HANDLER, {"HandlerInfo", "ProtoCell", "Holder", "STORE_TS_HANDLER"}},
401             {JSType::SYMBOL, {"Description", "SYMBOL"}},
402             {JSType::TAGGED_ARRAY, {"Length", "Data", "TAGGED_ARRAY"}},
403             {JSType::TAGGED_DICTIONARY, {"TAGGED_DICTIONARY"}},
404             {JSType::TEMPLATE_MAP, {"TEMPLATE_MAP"}},
405             {JSType::TRACK_INFO, {"CachedHClass", "CachedFunc", "TRACK_INFO"}},
406             {JSType::TRANSITION_HANDLER, {"HandlerInfo", "TransitionHClass", "TRANSITION_HANDLER"}},
407             {JSType::TRANS_WITH_PROTO_HANDLER, {"HandlerInfo", "TransitionHClass",
408                                                 "ProtoCell", "TRANS_WITH_PROTO_HANDLER"}},
409             {JSType::TREE_STRING, {"First", "Second", "TREE_STRING"}},
410             {JSType::COMPOSITE_BASE_CLASS, {"COMPOSITE_BASE_CLASS"}},
411             {JSType::FREE_OBJECT_WITH_ONE_FIELD, {"FREE_OBJECT_WITH_ONE_FIELD"}},
412             {JSType::FREE_OBJECT_WITH_NONE_FIELD, {"FREE_OBJECT_WITH_NONE_FIELD"}},
413             {JSType::FREE_OBJECT_WITH_TWO_FIELD, {"FREE_OBJECT_WITH_TWO_FIELD"}},
414             {JSType::VTABLE, {"VTABLE"}}
415         };
416         // { typeName: [all fields' start offset of this type in the same order as declared in .h files + endOffset] }
417         // endOffset: LAST_OFFSET - (start offset of the first field of this type)
418         fieldOffsetTable_ = {
419             {JSType::HCLASS, {
420                 JSHClass::BIT_FIELD_OFFSET, JSHClass::BIT_FIELD1_OFFSET, JSHClass::PROTOTYPE_OFFSET,
421                 JSHClass::LAYOUT_OFFSET, JSHClass::TRANSTIONS_OFFSET, JSHClass::PARENT_OFFSET,
422                 JSHClass::PROTO_CHANGE_MARKER_OFFSET, JSHClass::PROTO_CHANGE_DETAILS_OFFSET,
423                 JSHClass::ENUM_CACHE_OFFSET,
424                 JSHClass::DEPENDENT_INFOS_OFFSET, JSHClass::PROFILE_TYPE_OFFSET,
425                 JSHClass::LAST_OFFSET - JSHClass::BIT_FIELD_OFFSET}},
426             {JSType::ACCESSOR_DATA, {AccessorData::GETTER_OFFSET, AccessorData::SETTER_OFFSET,
427                                      AccessorData::SIZE - AccessorData::GETTER_OFFSET}},
428             {JSType::AOT_LITERAL_INFO, {TaggedArray::LAST_OFFSET - TaggedArray::LENGTH_OFFSET}},
429             {JSType::ASYNC_GENERATOR_REQUEST, {
430                 AsyncGeneratorRequest::COMPLETION_OFFSET,
431                 AsyncGeneratorRequest::CAPABILITY_OFFSET,
432                 AsyncGeneratorRequest::SIZE - AsyncGeneratorRequest::COMPLETION_OFFSET}},
433             {JSType::ASYNC_ITERATOR_RECORD, {AsyncIteratorRecord::ITERATOR_OFFSET,
434                                              AsyncIteratorRecord::NEXTMETHOD_OFFSET,
435                                              AsyncIteratorRecord::SIZE - AsyncIteratorRecord::ITERATOR_OFFSET}},
436             {JSType::BIGINT, {BigInt::LAST_OFFSET - BigInt::LENGTH_OFFSET}},
437             {JSType::BYTE_ARRAY, {ByteArray::LAST_OFFSET - ByteArray::ARRAY_LENGTH_OFFSET}},
438             {JSType::CELL_RECORD, {CellRecord::WEAKREF_TARGET_OFFSET,
439                                    CellRecord::HELD_VALUE_OFFSET,
440                                    CellRecord::SIZE - CellRecord::WEAKREF_TARGET_OFFSET}},
441             {JSType::CLASS_INFO_EXTRACTOR, {
442                 ClassInfoExtractor::PROTOTYPE_HCLASS_OFFSET,
443                 ClassInfoExtractor::NON_STATIC_PROPERTIES_OFFSET,
444                 ClassInfoExtractor::NON_STATIC_ELEMENTS_OFFSET,
445                 ClassInfoExtractor::CONSTRUCTOR_HCLASS_OFFSET,
446                 ClassInfoExtractor::STATIC_PROPERTIES_OFFSET,
447                 ClassInfoExtractor::STATIC_ELEMENTS_OFFSET,
448                 ClassInfoExtractor::CONSTRUCTOR_METHOD_OFFSET,
449                 ClassInfoExtractor::SIZE - ClassInfoExtractor::PROTOTYPE_HCLASS_OFFSET}},
450             {JSType::CLASS_LITERAL, {ClassLiteral::ARRAY_OFFSET,
451                                      ClassLiteral::SIZE - ClassLiteral::ARRAY_OFFSET}},
452             {JSType::COMPLETION_RECORD, {CompletionRecord::VALUE_OFFSET,
453                                          CompletionRecord::SIZE - CompletionRecord::VALUE_OFFSET}},
454             {JSType::CONSTANT_POOL, {0}},
455             {JSType::COW_MUTANT_TAGGED_ARRAY, {0}},
456             {JSType::COW_TAGGED_ARRAY, {0}},
457             {JSType::EXTRA_PROFILE_TYPE_INFO, {
458                 ExtraProfileTypeInfo::RECEIVER_OBJECT_OFFSET,
459                 ExtraProfileTypeInfo::HOLDER_OBJECT_OFFSET,
460                 ExtraProfileTypeInfo::LAST_OFFSET - ExtraProfileTypeInfo::RECEIVER_OBJECT_OFFSET}},
461             {JSType::FUNCTION_TEMPLATE, {FunctionTemplate::METHOD_OFFSET,
462                                          FunctionTemplate::MODULE_OFFSET,
463                                          FunctionTemplate::RAW_PROFILE_TYPE_INFO_OFFSET,
464                                          FunctionTemplate::SIZE - FunctionTemplate::METHOD_OFFSET}},
465             {JSType::GLOBAL_ENV, {GlobalEnv::SIZE - GlobalEnv::HEADER_SIZE}},
466             {JSType::IMPORTENTRY_RECORD, {ImportEntry::IMPORT_ENTRY_OFFSET,
467                                           ImportEntry::LOCAL_NAME_OFFSET,
468                                           ImportEntry::MODULE_REQUEST_INDEX_OFFSET,
469                                           ImportEntry::SIZE - ImportEntry::IMPORT_ENTRY_OFFSET}},
470             {JSType::INDIRECT_EXPORTENTRY_RECORD, {
471                 IndirectExportEntry::INDIRECT_EXPORT_ENTRY_OFFSET,
472                 IndirectExportEntry::IMPORT_NAME_OFFSET,
473                 IndirectExportEntry::MODULE_REQUEST_INDEX_OFFSET,
474                 IndirectExportEntry::SIZE - IndirectExportEntry::INDIRECT_EXPORT_ENTRY_OFFSET}},
475             {JSType::INTERNAL_ACCESSOR, {InternalAccessor::GETTER_OFFSET,
476                                          InternalAccessor::SETTER_OFFSET,
477                                          InternalAccessor::SIZE - InternalAccessor::GETTER_OFFSET}},
478             {JSType::JS_AGGREGATE_ERROR, {JSObject::PROPERTIES_OFFSET,
479                                           JSObject::ELEMENTS_OFFSET,
480                                           JSObject::SIZE - JSObject::PROPERTIES_OFFSET}},
481             {JSType::JS_API_ARRAYLIST_ITERATOR, {
482                 JSAPIArrayListIterator::ITERATED_ARRAYLIST_OFFSET,
483                 JSAPIArrayListIterator::SIZE - JSAPIArrayListIterator::ITERATED_ARRAYLIST_OFFSET}},
484             {JSType::JS_API_ARRAY_LIST, {JSAPIArrayList::LENGTH_OFFSET,
485                                          JSAPIArrayList::SIZE - JSAPIArrayList::LENGTH_OFFSET}},
486             {JSType::JS_API_BITVECTOR, {JSAPIBitVector::NATIVE_POINTER_OFFSET,
487                                         JSAPIBitVector::LAST_OFFSET - JSAPIBitVector::NATIVE_POINTER_OFFSET}},
488             {JSType::JS_API_BITVECTOR_ITERATOR, {
489                 JSAPIBitVectorIterator::ITERATED_BITVECTOR_OFFSET,
490                 JSAPIBitVectorIterator::SIZE - JSAPIBitVectorIterator::ITERATED_BITVECTOR_OFFSET}},
491             {JSType::JS_API_DEQUE, {JSAPIDeque::ENDL_OFFSET - JSAPIDeque::FIRST_OFFSET}},
492             {JSType::JS_API_DEQUE_ITERATOR, {JSAPIDequeIterator::ITERATED_DEQUE_OFFSET,
493                                              JSAPIDequeIterator::SIZE - JSAPIDequeIterator::ITERATED_DEQUE_OFFSET}},
494             {JSType::JS_API_HASHMAP_ITERATOR, {
495                 JSAPIHashMapIterator::ITERATED_HASHMAP_OFFSET,
496                 JSAPIHashMapIterator::TAGGED_QUEUE_OFFSET,
497                 JSAPIHashMapIterator::CURRENT_NODE_RESULT,
498                 JSAPIHashMapIterator::LAST_OFFSET - JSAPIHashMapIterator::ITERATED_HASHMAP_OFFSET}},
499             {JSType::JS_API_HASHSET_ITERATOR, {
500                 JSAPIHashSetIterator::ITERATED_HASHSET_OFFSET,
501                 JSAPIHashSetIterator::TAGGED_QUEUE_OFFSET,
502                 JSAPIHashSetIterator::CURRENT_NODE_RESULT,
503                 JSAPIHashSetIterator::SIZE - JSAPIHashSetIterator::ITERATED_HASHSET_OFFSET}},
504             {JSType::JS_API_HASH_MAP, {JSAPIHashMap::HASHMAP_TABLE_INDEX,
505                                        JSAPIHashMap::SIZE - JSAPIHashMap::HASHMAP_TABLE_INDEX}},
506             {JSType::JS_API_HASH_SET, {JSAPIHashSet::HASHSET_TABLE_INDEX,
507                                        JSAPIHashSet::SIZE - JSAPIHashSet::HASHSET_TABLE_INDEX}},
508             {JSType::JS_API_LIGHT_WEIGHT_MAP, {
509                 JSAPILightWeightMap::LWP_HASHES_OFFSET,
510                 JSAPILightWeightMap::LWP_KEYS_OFFSET,
511                 JSAPILightWeightMap::LWP_VALUES_OFFSET,
512                 JSAPILightWeightMap::SIZE - JSAPILightWeightMap::LWP_HASHES_OFFSET}},
513             {JSType::JS_API_LIGHT_WEIGHT_MAP_ITERATOR, {
514                 JSAPILightWeightMapIterator::ITERATED_LIGHT_WEIGHT_MAP_OFFSET,
515                 JSAPILightWeightMapIterator::LAST_OFFSET - JSAPILightWeightMapIterator::ITERATED_LIGHT_WEIGHT_MAP_OFFSET}},
516             {JSType::JS_API_LIGHT_WEIGHT_SET, {
517                 JSAPILightWeightSet::HASHES_OFFSET,
518                 JSAPILightWeightSet::VALUES_OFFSET,
519                 JSAPILightWeightSet::SIZE - JSAPILightWeightSet::HASHES_OFFSET}},
520             {JSType::JS_API_LIGHT_WEIGHT_SET_ITERATOR, {
521                 JSAPILightWeightSetIterator::ITERATED_LIGHT_WEIGHT_SET_OFFSET,
522                 JSAPILightWeightSetIterator::LAST_OFFSET - JSAPILightWeightSetIterator::ITERATED_LIGHT_WEIGHT_SET_OFFSET}},
523             {JSType::JS_API_LINKED_LIST, {JSAPILinkedList::DOUBLE_LIST_OFFSET,
524                                           JSAPILinkedList::SIZE - JSAPILinkedList::DOUBLE_LIST_OFFSET}},
525             {JSType::JS_API_LINKED_LIST_ITERATOR, {
526                 JSAPILinkedListIterator::ITERATED_LINKED_LIST_OFFSET,
527                 JSAPILinkedListIterator::LAST_OFFSET - JSAPILinkedListIterator::ITERATED_LINKED_LIST_OFFSET}},
528             {JSType::JS_API_LIST, {JSAPIList::SINGLY_LIST_OFFSET,
529                                    JSAPIList::SIZE - JSAPIList::SINGLY_LIST_OFFSET}},
530             {JSType::JS_API_LIST_ITERATOR, {
531                 JSAPIListIterator::ITERATED_LIST_OFFSET,
532                 JSAPIListIterator::LAST_OFFSET - JSAPIListIterator::ITERATED_LIST_OFFSET}},
533             {JSType::JS_API_PLAIN_ARRAY, {JSAPIPlainArray::KEYS_OFFSET,
534                                           JSAPIPlainArray::VALUES_OFFSET,
535                                           JSAPIPlainArray::SIZE - JSAPIPlainArray::KEYS_OFFSET}},
536             {JSType::JS_API_FAST_BUFFER, {JSAPIFastBuffer::TYPEDARRAY_OFFSET}},
537             {JSType::JS_API_PLAIN_ARRAY_ITERATOR, {
538                 JSAPIPlainArrayIterator::ITERATED_PLAIN_ARRAY_OFFSET,
539                 JSAPIPlainArrayIterator::LAST_OFFSET - JSAPIPlainArrayIterator::ITERATED_PLAIN_ARRAY_OFFSET}},
540             {JSType::JS_API_QUEUE, {JSAPIQueue::LENGTH_OFFSET,
541                                     JSAPIQueue::LAST_OFFSET - JSAPIQueue::LENGTH_OFFSET}},
542             {JSType::JS_API_QUEUE_ITERATOR, {
543                 JSAPIQueueIterator::ITERATED_QUEUE_OFFSET,
544                 JSAPIQueueIterator::SIZE - JSAPIQueueIterator::ITERATED_QUEUE_OFFSET}},
545             {JSType::JS_API_STACK, {JSAPIStack::SIZE - JSAPIStack::TOP_OFFSET}},
546             {JSType::JS_API_STACK_ITERATOR, {
547                 JSAPIStackIterator::ITERATED_STACK_OFFSET,
548                 JSAPIStackIterator::SIZE - JSAPIStackIterator::ITERATED_STACK_OFFSET}},
549             {JSType::JS_API_TREEMAP_ITERATOR, {
550                 JSAPITreeMapIterator::ITERATED_MAP_OFFSET,
551                 JSAPITreeMapIterator::ITERATED_ENTRIES_OFFSET,
552                 JSAPITreeMapIterator::LAST_OFFSET - JSAPITreeMapIterator::ITERATED_MAP_OFFSET}},
553             {JSType::JS_API_TREESET_ITERATOR, {
554                 JSAPITreeSetIterator::ITERATED_SET_OFFSET,
555                 JSAPITreeSetIterator::ITERATED_ENTRIES_OFFSET,
556                 JSAPITreeSetIterator::LAST_OFFSET - JSAPITreeSetIterator::ITERATED_SET_OFFSET}},
557             {JSType::JS_API_TREE_MAP, {JSAPITreeMap::TREE_MAP_OFFSET,
558                                        JSAPITreeMap::SIZE - JSAPITreeMap::TREE_MAP_OFFSET}},
559             {JSType::JS_API_TREE_SET, {JSAPITreeSet::TREE_SET_OFFSET,
560                                        JSAPITreeSet::SIZE - JSAPITreeSet::TREE_SET_OFFSET}},
561             {JSType::JS_API_VECTOR, {JSAPIVector::SIZE - JSAPIVector::ELEMENT_COUNT_OFFSET}},
562             {JSType::JS_API_VECTOR_ITERATOR, {
563                 JSAPIVectorIterator::ITERATED_VECTOR_OFFSET,
564                 JSAPIVectorIterator::SIZE - JSAPIVectorIterator::ITERATED_VECTOR_OFFSET}},
565             {JSType::JS_ARGUMENTS, {0}},
566             {JSType::JS_ARRAY, {JSArray::LENGTH_OFFSET,
567                                 JSArray::TRACK_INFO_OFFSET,
568                                 JSArray::SIZE - JSArray::LENGTH_OFFSET}},
569             {JSType::JS_ARRAY_BUFFER, {JSArrayBuffer::DATA_OFFSET,
570                                        JSArrayBuffer::LAST_OFFSET - JSArrayBuffer::DATA_OFFSET}},
571             {JSType::JS_ARRAY_ITERATOR, {JSArrayIterator::ITERATED_ARRAY_OFFSET,
572                                          JSArrayIterator::LAST_OFFSET - JSArrayIterator::ITERATED_ARRAY_OFFSET}},
573             {JSType::JS_ASYNCITERATOR, {JSObject::PROPERTIES_OFFSET,
574                                         JSObject::ELEMENTS_OFFSET,
575                                         JSObject::SIZE - JSObject::PROPERTIES_OFFSET}},
576             {JSType::JS_ASYNC_AWAIT_STATUS_FUNCTION, {
577                 JSAsyncAwaitStatusFunction::ASYNC_CONTEXT_OFFSET,
578                 JSAsyncAwaitStatusFunction::SIZE - JSAsyncAwaitStatusFunction::ASYNC_CONTEXT_OFFSET}},
579             {JSType::JS_ASYNC_FROM_SYNC_ITERATOR, {
580                 JSAsyncFromSyncIterator::SYNC_ITERATOR_RECORD,
581                 JSAsyncFromSyncIterator::SIZE - JSAsyncFromSyncIterator::SYNC_ITERATOR_RECORD}},
582             {JSType::JS_ASYNC_FROM_SYNC_ITER_UNWARP_FUNCTION, {
583                 JSAsyncFromSyncIterUnwarpFunction::DONE_OFFSET,
584                 JSAsyncFromSyncIterUnwarpFunction::SIZE - JSAsyncFromSyncIterUnwarpFunction::DONE_OFFSET}},
585             {JSType::JS_ASYNC_FUNCTION, {JSAsyncFunction::SIZE - JSAsyncFunction::SIZE}},
586             {JSType::JS_ASYNC_FUNC_OBJECT, {JSAsyncFuncObject::GENERATOR_PROMISE_OFFSET,
587                                             JSAsyncFuncObject::SIZE - JSAsyncFuncObject::GENERATOR_PROMISE_OFFSET}},
588             {JSType::JS_ASYNC_GENERATOR_FUNCTION, {JSAsyncGeneratorFunction::SIZE - JSAsyncGeneratorFunction::SIZE}},
589             {JSType::JS_ASYNC_GENERATOR_OBJECT, {
590                 JSAsyncGeneratorObject::GENERATOR_CONTEXT_OFFSET,
591                 JSAsyncGeneratorObject::ASYNC_GENERATOR_QUEUE_OFFSET,
592                 JSAsyncGeneratorObject::GENERATOR_OFFSET,
593                 JSAsyncGeneratorObject::GENERATOR_RESUME_RESULT_OFFSET,
594                 JSAsyncGeneratorObject::SIZE - JSAsyncGeneratorObject::GENERATOR_CONTEXT_OFFSET}},
595             {JSType::JS_ASYNC_GENERATOR_RESUME_NEXT_RETURN_PROCESSOR_RST_FTN, {
596                 JSAsyncGeneratorResNextRetProRstFtn::ASYNC_GENERATOR_OBJECT_OFFSET,
597                 JSAsyncGeneratorResNextRetProRstFtn::SIZE - JSAsyncGeneratorResNextRetProRstFtn::ASYNC_GENERATOR_OBJECT_OFFSET}},
598             {JSType::JS_ASYNC_MODULE_FULFILLED_FUNCTION, {
599                 JSAsyncModuleFulfilledFunction::SIZE - JSAsyncModuleFulfilledFunction::SIZE}},
600             {JSType::JS_ASYNC_MODULE_REJECTED_FUNCTION, {
601                 JSAsyncModuleRejectedFunction::SIZE - JSAsyncModuleRejectedFunction::SIZE}},
602             {JSType::JS_BIGINT64_ARRAY, {JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET,
603                                          JSTypedArray::TYPED_ARRAY_NAME_OFFSET,
604                                          JSTypedArray::SIZE - JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET}},
605             {JSType::JS_BIGUINT64_ARRAY, {JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET,
606                                           JSTypedArray::TYPED_ARRAY_NAME_OFFSET,
607                                           JSTypedArray::SIZE - JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET}},
608             {JSType::JS_BOUND_FUNCTION, {JSBoundFunction::BOUND_TARGET_OFFSET,
609                                          JSBoundFunction::BOUND_THIS_OFFSET,
610                                          JSBoundFunction::BOUND_ARGUMENTS_OFFSET,
611                                          JSBoundFunction::SIZE - JSBoundFunction::BOUND_TARGET_OFFSET}},
612             {JSType::JS_CJS_EXPORTS, {CjsExports::JS_CJS_EXPORTS_OFFSET,
613                                       CjsExports::SIZE - CjsExports::JS_CJS_EXPORTS_OFFSET}},
614             {JSType::JS_CJS_MODULE, {CjsModule::JS_CJS_MODULE_OFFSET,
615                                      CjsModule::ID_OFFSET,
616                                      CjsModule::PATH_OFFSET,
617                                      CjsModule::EXPORTS_OFFSET,
618                                      CjsModule::SIZE - CjsModule::JS_CJS_MODULE_OFFSET}},
619             {JSType::JS_CJS_REQUIRE, {CjsRequire::JS_CJS_REQUIRE_OFFSET,
620                                       CjsRequire::CACHE_OFFSET,
621                                       CjsRequire::SIZE - CjsRequire::JS_CJS_REQUIRE_OFFSET}},
622             {JSType::JS_COLLATOR, {JSCollator::ICU_FIELD_OFFSET,
623                                    JSCollator::LOCALE_OFFSET,
624                                    JSCollator::COLLATION_OFFSET,
625                                    JSCollator::BOUND_COMPARE_OFFSET,
626                                    JSCollator::SIZE - JSCollator::ICU_FIELD_OFFSET}},
627             {JSType::JS_DATA_VIEW, {JSDataView::DATA_VIEW_OFFSET,
628                                     JSDataView::VIEW_ARRAY_BUFFER_OFFSET,
629                                     JSDataView::LAST_OFFSET - JSDataView::DATA_VIEW_OFFSET}},
630             {JSType::JS_DATE, {JSDate::TIME_VALUE_OFFSET,
631                                JSDate::LOCAL_TIME_OFFSET,
632                                JSDate::SIZE - JSDate::TIME_VALUE_OFFSET}},
633             {JSType::JS_DATE_TIME_FORMAT, {JSDateTimeFormat::LOCALE_OFFSET,
634                                            JSDateTimeFormat::CALENDAR_OFFSET,
635                                            JSDateTimeFormat::NUMBER_STRING_SYSTEM_OFFSET,
636                                            JSDateTimeFormat::TIME_ZONE_OFFSET,
637                                            JSDateTimeFormat::LOCALE_ICU_OFFSET,
638                                            JSDateTimeFormat::SIMPLE_DATE_TIME_FORMAT_ICU_OFFSET,
639                                            JSDateTimeFormat::ISO8601_OFFSET,
640                                            JSDateTimeFormat::BOUND_FORMAT_OFFSET,
641                                            JSDateTimeFormat::SIZE - JSDateTimeFormat::LOCALE_OFFSET}},
642             {JSType::JS_DISPLAYNAMES, {JSDisplayNames::LOCALE_OFFSET,
643                                        JSDisplayNames::ICU_LOCALE_DISPPLAY_NAMES,
644                                        JSDisplayNames::SIZE - JSDisplayNames::LOCALE_OFFSET}},
645             {JSType::JS_ERROR, {JSObject::PROPERTIES_OFFSET,
646                                 JSObject::ELEMENTS_OFFSET,
647                                 JSObject::SIZE - JSObject::PROPERTIES_OFFSET}},
648             {JSType::JS_EVAL_ERROR, {JSObject::PROPERTIES_OFFSET,
649                                      JSObject::ELEMENTS_OFFSET,
650                                      JSObject::SIZE - JSObject::PROPERTIES_OFFSET}},
651             {JSType::JS_FINALIZATION_REGISTRY, {
652                 JSFinalizationRegistry::CLEANUP_CALLBACK_OFFSET,
653                 JSFinalizationRegistry::NO_UNREGISTER_OFFSET,
654                 JSFinalizationRegistry::MAYBE_UNREGISTER_OFFSET,
655                 JSFinalizationRegistry::NEXT_OFFSET,
656                 JSFinalizationRegistry::PREV_OFFSET,
657                 JSFinalizationRegistry::SIZE - JSFinalizationRegistry::CLEANUP_CALLBACK_OFFSET}},
658             {JSType::JS_FLOAT32_ARRAY, {JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET,
659                                         JSTypedArray::TYPED_ARRAY_NAME_OFFSET,
660                                         JSTypedArray::SIZE - JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET}},
661             {JSType::JS_FLOAT64_ARRAY, {JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET,
662                                         JSTypedArray::TYPED_ARRAY_NAME_OFFSET,
663                                         JSTypedArray::SIZE - JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET}},
664             {JSType::JS_FORIN_ITERATOR, {JSForInIterator::OBJECT_OFFSET,
665                                          JSForInIterator::CACHED_HCLASS_OFFSET,
666                                          JSForInIterator::KEYS_OFFSET,
667                                          JSForInIterator::LAST_OFFSET - JSForInIterator::OBJECT_OFFSET}},
668             {JSType::JS_FUNCTION, {JSFunction::PROTO_OR_DYNCLASS_OFFSET,
669                                    JSFunction::LEXICAL_ENV_OFFSET,
670                                    JSFunction::MACHINECODE_OFFSET,
671                                    JSFunction::BASELINECODE_OFFSET,
672                                    JSFunction::RAW_PROFILE_TYPE_INFO_OFFSET,
673                                    JSFunction::HOME_OBJECT_OFFSET,
674                                    JSFunction::ECMA_MODULE_OFFSET,
675                                    JSFunction::LAST_OFFSET - JSFunction::PROTO_OR_DYNCLASS_OFFSET}},
676             {JSType::JS_FUNCTION_BASE, {JSFunctionBase::METHOD_OFFSET,
677                                         JSFunctionBase::LAST_OFFSET - JSFunctionBase::METHOD_OFFSET}},
678             {JSType::JS_GENERATOR_CONTEXT, {
679                 GeneratorContext::GENERATOR_REGS_ARRAY_OFFSET,
680                 GeneratorContext::GENERATOR_METHOD_OFFSET,
681                 GeneratorContext::GENERATOR_THIS_OFFSET,
682                 GeneratorContext::GENERATOR_ACC_OFFSET,
683                 GeneratorContext::GENERATOR_GENERATOR_OBJECT_OFFSET,
684                 GeneratorContext::GENERATOR_LEXICALENV_OFFSET,
685                 GeneratorContext::LAST_OFFSET - GeneratorContext::GENERATOR_REGS_ARRAY_OFFSET}},
686             {JSType::JS_GENERATOR_FUNCTION, {JSGeneratorFunction::SIZE - JSGeneratorFunction::SIZE}},
687             {JSType::JS_GENERATOR_OBJECT, {
688                 JSGeneratorObject::GENERATOR_CONTEXT_OFFSET,
689                 JSGeneratorObject::GENERATOR_RESUME_RESULT_OFFSET,
690                 JSGeneratorObject::SIZE - JSGeneratorObject::GENERATOR_CONTEXT_OFFSET}},
691             {JSType::JS_GLOBAL_OBJECT, {JSGlobalObject::SIZE - JSGlobalObject::SIZE}},
692             {JSType::JS_INT16_ARRAY, {JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET,
693                                       JSTypedArray::TYPED_ARRAY_NAME_OFFSET,
694                                       JSTypedArray::SIZE - JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET}},
695             {JSType::JS_INT32_ARRAY, {JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET,
696                                       JSTypedArray::TYPED_ARRAY_NAME_OFFSET,
697                                       JSTypedArray::SIZE - JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET}},
698             {JSType::JS_INT8_ARRAY, {JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET,
699                                      JSTypedArray::TYPED_ARRAY_NAME_OFFSET,
700                                      JSTypedArray::SIZE - JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET}},
701             {JSType::JS_INTL, {JSIntl::FALLBACK_SYMBOL,
702                                JSIntl::SIZE - JSIntl::FALLBACK_SYMBOL}},
703             {JSType::JS_INTL_BOUND_FUNCTION, {JSIntlBoundFunction::NUMBER_FORMAT_OFFSET,
704                                               JSIntlBoundFunction::DATETIME_FORMAT_OFFSET,
705                                               JSIntlBoundFunction::COLLATOR_OFFSET,
706                                               JSIntlBoundFunction::SIZE - JSIntlBoundFunction::NUMBER_FORMAT_OFFSET}},
707             {JSType::JS_ITERATOR, {JSObject::PROPERTIES_OFFSET,
708                                    JSObject::ELEMENTS_OFFSET,
709                                    JSObject::SIZE - JSObject::PROPERTIES_OFFSET}},
710             {JSType::JS_LIST_FORMAT, {JSListFormat::LOCALE_OFFSET,
711                                       JSListFormat::ICU_LIST_FORMAT,
712                                       JSListFormat::SIZE - JSListFormat::LOCALE_OFFSET}},
713             {JSType::JS_LOCALE, {JSLocale::ICU_FIELD_OFFSET,
714                                  JSLocale::SIZE - JSLocale::ICU_FIELD_OFFSET}},
715             {JSType::JS_MAP, {JSMap::LINKED_MAP_OFFSET,
716                               JSMap::SIZE - JSMap::LINKED_MAP_OFFSET}},
717             {JSType::JS_MAP_ITERATOR, {JSMapIterator::ITERATED_MAP_OFFSET,
718                                        JSMapIterator::LAST_OFFSET - JSMapIterator::ITERATED_MAP_OFFSET}},
719             {JSType::JS_MODULE_NAMESPACE, {ModuleNamespace::MODULE_OFFSET,
720                                            ModuleNamespace::EXPORTS_OFFSET,
721                                            ModuleNamespace::DEREGISTER_PROCESSION_OFFSET,
722                                            ModuleNamespace::SIZE - ModuleNamespace::MODULE_OFFSET}},
723             {JSType::JS_NATIVE_POINTER, {JSNativePointer::DATA_SIZE_OFFSET,
724                                          JSNativePointer::LAST_OFFSET - JSNativePointer::POINTER_OFFSET}},
725             {JSType::JS_NUMBER_FORMAT, {JSNumberFormat::LOCALE_OFFSET,
726                                         JSNumberFormat::NUMBER_STRING_SYSTEM_OFFSET,
727                                         JSNumberFormat::CURRENCY_OFFSET,
728                                         JSNumberFormat::UNIT_OFFSET,
729                                         JSNumberFormat::MINIMUM_INTEGER_DIGITS_OFFSET,
730                                         JSNumberFormat::MINIMUM_FRACTION_DIGITS_OFFSET,
731                                         JSNumberFormat::MAXIMUM_FRACTION_DIGITS_OFFSET,
732                                         JSNumberFormat::MINIMUM_SIGNIFICANT_DIGITS_OFFSET,
733                                         JSNumberFormat::MAXIMUM_SIGNIFICANT_DIGITS_OFFSET,
734                                         JSNumberFormat::USER_GROUPING_OFFSET,
735                                         JSNumberFormat::BOUND_FORMAT_OFFSET,
736                                         JSNumberFormat::ICU_FIELD_OFFSET,
737                                         JSNumberFormat::SIZE - JSNumberFormat::LOCALE_OFFSET}},
738             {JSType::JS_OBJECT, {JSObject::PROPERTIES_OFFSET,
739                                  JSObject::ELEMENTS_OFFSET,
740                                  JSObject::SIZE - JSObject::PROPERTIES_OFFSET}},
741             {JSType::JS_OOM_ERROR, {JSObject::PROPERTIES_OFFSET,
742                                     JSObject::ELEMENTS_OFFSET,
743                                     JSObject::SIZE - JSObject::PROPERTIES_OFFSET}},
744             {JSType::JS_PLURAL_RULES, {JSPluralRules::LOCALE_OFFSET,
745                                        JSPluralRules::MINIMUM_INTEGER_DIGITS_OFFSET,
746                                        JSPluralRules::MINIMUM_FRACTION_DIGITS_OFFSET,
747                                        JSPluralRules::MAXIMUM_FRACTION_DIGITS_OFFSET,
748                                        JSPluralRules::MININUM_SIGNIFICANT_DIGITS_OFFSET,
749                                        JSPluralRules::MAXINUM_SIGNIFICANT_DIGITS_OFFSET,
750                                        JSPluralRules::ICU_PLURAL_RULES_OFFSET,
751                                        JSPluralRules::ICU_NUMBER_FORMAT_OFFSET,
752                                        JSPluralRules::SIZE - JSPluralRules::LOCALE_OFFSET}},
753             {JSType::JS_PRIMITIVE_REF, {JSPrimitiveRef::VALUE_OFFSET,
754                                         JSPrimitiveRef::SIZE - JSPrimitiveRef::VALUE_OFFSET}},
755             {JSType::JS_PROMISE, {JSPromise::PROMISE_RESULT_OFFSET,
756                                   JSPromise::PROMISE_FULFILL_REACTIONS_OFFSET,
757                                   JSPromise::PROMISE_REJECT_REACTIONS_OFFSET,
758                                   JSPromise::SIZE - JSPromise::PROMISE_RESULT_OFFSET}},
759             {JSType::JS_PROMISE_ALL_RESOLVE_ELEMENT_FUNCTION, {
760                 JSPromiseAllResolveElementFunction::INDEX_OFFSET,
761                 JSPromiseAllResolveElementFunction::VALUES_OFFSET,
762                 JSPromiseAllResolveElementFunction::CAPABILITIES_OFFSET,
763                 JSPromiseAllResolveElementFunction::REMAINING_ELEMENTS_OFFSET,
764                 JSPromiseAllResolveElementFunction::ALREADY_CALLED_OFFSET,
765                 JSPromiseAllResolveElementFunction::SIZE - JSPromiseAllResolveElementFunction::INDEX_OFFSET}},
766             {JSType::JS_PROMISE_ALL_SETTLED_ELEMENT_FUNCTION, {
767                 JSPromiseAllSettledElementFunction::ALREADY_CALLED_OFFSET,
768                 JSPromiseAllSettledElementFunction::VALUES_OFFSET,
769                 JSPromiseAllSettledElementFunction::CAPABILITY_OFFSET,
770                 JSPromiseAllSettledElementFunction::REMAINING_ELEMENTS_OFFSET,
771                 JSPromiseAllSettledElementFunction::SIZE - JSPromiseAllSettledElementFunction::ALREADY_CALLED_OFFSET}},
772             {JSType::JS_PROMISE_ANY_REJECT_ELEMENT_FUNCTION, {
773                 JSPromiseAnyRejectElementFunction::ERRORS_OFFSET,
774                 JSPromiseAnyRejectElementFunction::CAPABILITY_OFFSET,
775                 JSPromiseAnyRejectElementFunction::REMAINING_ELEMENTS_OFFSET,
776                 JSPromiseAnyRejectElementFunction::ALREADY_CALLED_OFFSET,
777                 JSPromiseAnyRejectElementFunction::SIZE - JSPromiseAnyRejectElementFunction::ERRORS_OFFSET}},
778             {JSType::JS_PROMISE_EXECUTOR_FUNCTION, {
779                 JSPromiseExecutorFunction::CAPABILITY_OFFSET,
780                 JSPromiseExecutorFunction::SIZE - JSPromiseExecutorFunction::CAPABILITY_OFFSET}},
781             {JSType::JS_PROMISE_FINALLY_FUNCTION, {
782                 JSPromiseFinallyFunction::CONSTRUCTOR_OFFSET,
783                 JSPromiseFinallyFunction::ONFINALLY_OFFSET,
784                 JSPromiseFinallyFunction::SIZE - JSPromiseFinallyFunction::CONSTRUCTOR_OFFSET}},
785             {JSType::JS_PROMISE_REACTIONS_FUNCTION, {
786                 JSPromiseReactionsFunction::PROMISE_OFFSET,
787                 JSPromiseReactionsFunction::ALREADY_RESOLVED_OFFSET,
788                 JSPromiseReactionsFunction::SIZE - JSPromiseReactionsFunction::PROMISE_OFFSET}},
789             {JSType::JS_PROMISE_VALUE_THUNK_OR_THROWER_FUNCTION, {
790                 JSPromiseValueThunkOrThrowerFunction::RESULT_OFFSET,
791                 JSPromiseValueThunkOrThrowerFunction::SIZE - JSPromiseValueThunkOrThrowerFunction::RESULT_OFFSET}},
792             {JSType::JS_PROXY, {JSProxy::TARGET_OFFSET, JSProxy::HANDLER_OFFSET, JSProxy::METHOD_OFFSET,
793                                 JSProxy::PRIVATE_FIELD_OFFSET, JSProxy::SIZE - JSProxy::TARGET_OFFSET}},
794             {JSType::JS_PROXY_REVOC_FUNCTION, {
795                 JSProxyRevocFunction::REVOCABLE_PROXY_OFFSET,
796                 JSProxyRevocFunction::SIZE - JSProxyRevocFunction::REVOCABLE_PROXY_OFFSET}},
797             {JSType::JS_RANGE_ERROR, {JSObject::PROPERTIES_OFFSET, JSObject::ELEMENTS_OFFSET,
798                                       JSObject::SIZE - JSObject::PROPERTIES_OFFSET}},
799             {JSType::JS_REALM, {JSRealm::VALUE_OFFSET, JSRealm::GLOBAL_ENV_OFFSET,
800                                 JSRealm::SIZE - JSRealm::VALUE_OFFSET}},
801             {JSType::JS_REFERENCE_ERROR, {JSObject::PROPERTIES_OFFSET, JSObject::ELEMENTS_OFFSET,
802                                           JSObject::SIZE - JSObject::PROPERTIES_OFFSET}},
803             {JSType::JS_REG_EXP, {JSRegExp::REGEXP_BYTE_CODE_OFFSET, JSRegExp::ORIGINAL_SOURCE_OFFSET,
804                                   JSRegExp::ORIGINAL_FLAGS_OFFSET, JSRegExp::GROUP_NAME_OFFSET,
805                                   JSRegExp::SIZE - JSRegExp::REGEXP_BYTE_CODE_OFFSET}},
806             {JSType::JS_REG_EXP_ITERATOR, {
807                 JSRegExpIterator::ITERATING_REGEXP_OFFSET,
808                 JSRegExpIterator::ITERATED_STRING_OFFSET,
809                 JSRegExpIterator::SIZE - JSRegExpIterator::ITERATING_REGEXP_OFFSET}},
810             {JSType::JS_RELATIVE_TIME_FORMAT, {
811                 JSRelativeTimeFormat::LOCALE_OFFSET,
812                 JSRelativeTimeFormat::NUMBERING_SYSTEM_OFFSET,
813                 JSRelativeTimeFormat::ICU_FIELD_OFFSET,
814                 JSRelativeTimeFormat::SIZE - JSRelativeTimeFormat::LOCALE_OFFSET}},
815             {JSType::JS_SEGMENTER, {JSSegmenter::LOCALE_OFFSET,
816                                     JSSegmenter::ICU_FIELD_OFFSET,
817                                     JSSegmenter::SIZE - JSSegmenter::LOCALE_OFFSET}},
818             {JSType::JS_SEGMENTS, {JSSegments::ICU_FIELD_OFFSET, JSSegments::SEGMENTS_STRING_OFFSET,
819                                    JSSegments::UNICODE_STRING_OFFSET,
820                                    JSSegments::SIZE - JSSegments::ICU_FIELD_OFFSET}},
821             {JSType::JS_SEGMENT_ITERATOR, {JSSegmentIterator::ICU_FIELD_OFFSET,
822                                            JSSegmentIterator::SEGMENTS_STRING_OFFSET,
823                                            JSSegmentIterator::UNICODE_STRING_OFFSET,
824                                            JSSegmentIterator::SIZE - JSSegmentIterator::ICU_FIELD_OFFSET}},
825             {JSType::JS_SENDABLE_ARRAY_BUFFER, {
826                 JSSendableArrayBuffer::DATA_OFFSET,
827                 JSSendableArrayBuffer::LAST_OFFSET - JSSendableArrayBuffer::DATA_OFFSET}},
828             {JSType::JS_SET, {JSSet::LINKED_SET_OFFSET, JSSet::SIZE - JSSet::LINKED_SET_OFFSET}},
829             {JSType::JS_SET_ITERATOR, {JSSetIterator::ITERATED_SET_OFFSET,
830                                        JSSetIterator::LAST_OFFSET - JSSetIterator::ITERATED_SET_OFFSET}},
831             {JSType::JS_SHARED_ARRAY, {JSSharedArray::TRACK_INFO_OFFSET,
832                                        JSSharedArray::SIZE - JSSharedArray::LENGTH_OFFSET}},
833             {JSType::JS_SHARED_ARRAY_BUFFER, {JSArrayBuffer::DATA_OFFSET,
834                                               JSArrayBuffer::LAST_OFFSET - JSArrayBuffer::DATA_OFFSET}},
835             {JSType::JS_SHARED_ARRAY_ITERATOR, {
836                 JSSharedArrayIterator::ITERATED_ARRAY_OFFSET,
837                 JSSharedArrayIterator::LAST_OFFSET - JSSharedArrayIterator::ITERATED_ARRAY_OFFSET}},
838             {JSType::JS_SHARED_ASYNC_FUNCTION, {JSAsyncFunction::SIZE - JSAsyncFunction::SIZE}},
839             {JSType::JS_SHARED_BIGINT64_ARRAY, {
840                 JSSharedTypedArray::SIZE - JSSharedTypedArray::MOD_RECORD_OFFSET}},
841             {JSType::JS_SHARED_BIGUINT64_ARRAY, {
842                 JSSharedTypedArray::SIZE - JSSharedTypedArray::MOD_RECORD_OFFSET}},
843             {JSType::JS_SHARED_FLOAT32_ARRAY, {
844                 JSSharedTypedArray::SIZE - JSSharedTypedArray::MOD_RECORD_OFFSET}},
845             {JSType::JS_SHARED_FLOAT64_ARRAY, {
846                 JSSharedTypedArray::SIZE - JSSharedTypedArray::MOD_RECORD_OFFSET}},
847             {JSType::JS_SHARED_FUNCTION, {JSSharedFunction::SIZE - JSSharedFunction::SIZE}},
848             {JSType::JS_SHARED_INT16_ARRAY, {
849                 JSSharedTypedArray::SIZE - JSSharedTypedArray::MOD_RECORD_OFFSET}},
850             {JSType::JS_SHARED_INT32_ARRAY, {
851                 JSSharedTypedArray::SIZE - JSSharedTypedArray::MOD_RECORD_OFFSET}},
852             {JSType::JS_SHARED_INT8_ARRAY, {
853                 JSSharedTypedArray::SIZE - JSSharedTypedArray::MOD_RECORD_OFFSET}},
854             {JSType::JS_SHARED_MAP, {JSSharedMap::LINKED_MAP_OFFSET,
855                                      JSSharedMap::SIZE - JSSharedMap::LINKED_MAP_OFFSET}},
856             {JSType::JS_SHARED_MAP_ITERATOR, {
857                 JSSharedMapIterator::ITERATED_MAP_OFFSET,
858                 JSSharedMapIterator::LAST_OFFSET - JSSharedMapIterator::ITERATED_MAP_OFFSET}},
859             {JSType::JS_SHARED_OBJECT, {JSSharedObject::SIZE - JSSharedObject::SIZE}},
860             {JSType::JS_SHARED_SET, {JSSharedSet::LINKED_SET_OFFSET,
861                                      JSSharedSet::SIZE - JSSharedSet::LINKED_SET_OFFSET}},
862             {JSType::JS_SHARED_SET_ITERATOR, {
863                 JSSharedSetIterator::ITERATED_SET_OFFSET,
864                 JSSharedSetIterator::LAST_OFFSET - JSSharedSetIterator::ITERATED_SET_OFFSET}},
865             {JSType::JS_SHARED_TYPED_ARRAY, {
866                 JSSharedTypedArray::SIZE - JSSharedTypedArray::MOD_RECORD_OFFSET}},
867             {JSType::JS_SHARED_UINT16_ARRAY, {
868                 JSSharedTypedArray::SIZE - JSSharedTypedArray::MOD_RECORD_OFFSET}},
869             {JSType::JS_SHARED_UINT32_ARRAY, {
870                 JSSharedTypedArray::SIZE - JSSharedTypedArray::MOD_RECORD_OFFSET}},
871             {JSType::JS_SHARED_UINT8_ARRAY, {
872                 JSSharedTypedArray::SIZE - JSSharedTypedArray::MOD_RECORD_OFFSET}},
873             {JSType::JS_SHARED_UINT8_CLAMPED_ARRAY, {
874                 JSSharedTypedArray::SIZE - JSSharedTypedArray::MOD_RECORD_OFFSET}},
875             {JSType::JS_STRING_ITERATOR, {
876                 JSStringIterator::ITERATED_STRING_OFFSET,
877                 JSStringIterator::SIZE - JSStringIterator::ITERATED_STRING_OFFSET}},
878             {JSType::JS_SYNTAX_ERROR, {JSObject::PROPERTIES_OFFSET, JSObject::ELEMENTS_OFFSET,
879                                        JSObject::SIZE - JSObject::PROPERTIES_OFFSET}},
880             {JSType::JS_TERMINATION_ERROR, {JSObject::PROPERTIES_OFFSET, JSObject::ELEMENTS_OFFSET,
881                                             JSObject::SIZE - JSObject::PROPERTIES_OFFSET}},
882             {JSType::JS_TYPED_ARRAY, {JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET, JSTypedArray::TYPED_ARRAY_NAME_OFFSET,
883                                       JSTypedArray::SIZE - JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET}},
884             {JSType::JS_TYPE_ERROR, {JSObject::PROPERTIES_OFFSET, JSObject::ELEMENTS_OFFSET,
885                                      JSObject::SIZE - JSObject::PROPERTIES_OFFSET}},
886             {JSType::JS_UINT16_ARRAY, {
887                 JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET, JSTypedArray::TYPED_ARRAY_NAME_OFFSET,
888                 JSTypedArray::SIZE - JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET}},
889             {JSType::JS_UINT32_ARRAY, {
890                 JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET, JSTypedArray::TYPED_ARRAY_NAME_OFFSET,
891                 JSTypedArray::SIZE - JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET}},
892             {JSType::JS_UINT8_ARRAY, {
893                 JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET, JSTypedArray::TYPED_ARRAY_NAME_OFFSET,
894                 JSTypedArray::SIZE - JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET}},
895             {JSType::JS_UINT8_CLAMPED_ARRAY, {
896                 JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET,
897                 JSTypedArray::TYPED_ARRAY_NAME_OFFSET,
898                 JSTypedArray::SIZE - JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET}},
899             {JSType::JS_URI_ERROR, {JSObject::PROPERTIES_OFFSET, JSObject::ELEMENTS_OFFSET,
900                                     JSObject::SIZE - JSObject::PROPERTIES_OFFSET}},
901             {JSType::JS_WEAK_MAP, {
902                 JSWeakMap::LINKED_MAP_OFFSET, JSWeakMap::SIZE - JSWeakMap::LINKED_MAP_OFFSET}},
903             {JSType::JS_WEAK_REF, {
904                 JSWeakRef::WEAK_OBJECT_OFFSET, JSWeakRef::SIZE - JSWeakRef::WEAK_OBJECT_OFFSET}},
905             {JSType::JS_WEAK_SET, {
906                 JSWeakSet::LINKED_SET_OFFSET, JSWeakSet::SIZE - JSWeakSet::LINKED_SET_OFFSET}},
907             {JSType::LEXICAL_ENV, {TaggedArray::SIZE - TaggedArray::SIZE}},
908             {JSType::LINE_STRING, {LineString::SIZE - LineString::SIZE}},
909             {JSType::LINKED_NODE, {LinkedNode::NEXT_OFFSET, LinkedNode::LAST_OFFSET - LinkedNode::NEXT_OFFSET}},
910             {JSType::LOCAL_EXPORTENTRY_RECORD, {
911                 LocalExportEntry::LOCAL_EXPORT_ENTRY_OFFSET,
912                 LocalExportEntry::LOCAL_NAME_OFFSET,
913                 LocalExportEntry::SIZE - LocalExportEntry::LOCAL_EXPORT_ENTRY_OFFSET}},
914             {JSType::MACHINE_CODE_OBJECT, {MachineCode::LAST_OFFSET - MachineCode::INS_SIZE_OFFSET}},
915             {JSType::MARKER_CELL, {MarkerCell::SIZE - MarkerCell::BIT_FIELD_OFFSET}},
916             {JSType::METHOD, {Method::CONSTANT_POOL_OFFSET, Method::LAST_OFFSET - Method::CONSTANT_POOL_OFFSET}},
917             {JSType::MICRO_JOB_QUEUE, {job::MicroJobQueue::PROMISE_JOB_QUEUE_OFFSET,
918                                        job::MicroJobQueue::SCRIPT_JOB_QUEUE_OFFSET,
919                                        job::MicroJobQueue::SIZE - job::MicroJobQueue::PROMISE_JOB_QUEUE_OFFSET}},
920             {JSType::MODULE_RECORD, {ModuleRecord::SIZE - ModuleRecord::SIZE}},
921             {JSType::MUTANT_TAGGED_ARRAY, {MutantTaggedArray::SIZE - MutantTaggedArray::SIZE}},
922             {JSType::NATIVE_MODULE_FAILURE_INFO, {
923                 NativeModuleFailureInfo::ARK_NATIVE_MODULE_FAILURE_INFO_OFFSET,
924                 NativeModuleFailureInfo::SIZE - NativeModuleFailureInfo::ARK_NATIVE_MODULE_FAILURE_INFO_OFFSET}},
925             {JSType::PENDING_JOB, {job::PendingJob::JOB_OFFSET,
926                                    job::PendingJob::ARGUMENT_OFFSET,
927                                    job::PendingJob::SIZE - job::PendingJob::ARGUMENT_OFFSET}},
928             {JSType::PROFILE_TYPE_INFO, {ProfileTypeInfo::SIZE - ProfileTypeInfo::SIZE}},
929             {JSType::PROFILE_TYPE_INFO_CELL_0, {
930                 ProfileTypeInfoCell::VALUE_OFFSET,
931                 ProfileTypeInfoCell::MACHINE_CODE_OFFSET,
932                 ProfileTypeInfoCell::HANDLE_OFFSET,
933                 ProfileTypeInfoCell::LAST_OFFSET - ProfileTypeInfoCell::VALUE_OFFSET}},
934             {JSType::PROFILE_TYPE_INFO_CELL_1, {
935                 ProfileTypeInfoCell::VALUE_OFFSET,
936                 ProfileTypeInfoCell::MACHINE_CODE_OFFSET,
937                 ProfileTypeInfoCell::HANDLE_OFFSET,
938                 ProfileTypeInfoCell::LAST_OFFSET - ProfileTypeInfoCell::VALUE_OFFSET}},
939             {JSType::PROFILE_TYPE_INFO_CELL_N, {
940                 ProfileTypeInfoCell::VALUE_OFFSET,
941                 ProfileTypeInfoCell::MACHINE_CODE_OFFSET,
942                 ProfileTypeInfoCell::HANDLE_OFFSET,
943                 ProfileTypeInfoCell::LAST_OFFSET - ProfileTypeInfoCell::VALUE_OFFSET}},
944             {JSType::PROGRAM, {Program::MAIN_FUNCTION_OFFSET, Program::SIZE - Program::MAIN_FUNCTION_OFFSET}},
945             {JSType::PROMISE_CAPABILITY, {PromiseCapability::PROMISE_OFFSET, PromiseCapability::RESOLVE_OFFSET,
946                                           PromiseCapability::REJECT_OFFSET,
947                                           PromiseCapability::SIZE - PromiseCapability::PROMISE_OFFSET}},
948             {JSType::PROMISE_ITERATOR_RECORD, {PromiseIteratorRecord::ITERATOR_OFFSET,
949                                                PromiseIteratorRecord::SIZE - PromiseIteratorRecord::ITERATOR_OFFSET}},
950             {JSType::PROMISE_REACTIONS, {PromiseReaction::PROMISE_CAPABILITY_OFFSET,
951                                          PromiseReaction::HANDLER_OFFSET,
952                                          PromiseReaction::SIZE - PromiseReaction::PROMISE_CAPABILITY_OFFSET}},
953             {JSType::PROMISE_RECORD, {PromiseRecord::VALUE_OFFSET,
954                                       PromiseRecord::SIZE - PromiseRecord::VALUE_OFFSET}},
955             {JSType::PROPERTY_BOX, {PropertyBox::VALUE_OFFSET,
956                                     PropertyBox::SIZE - PropertyBox::VALUE_OFFSET}},
957             {JSType::PROTOTYPE_HANDLER, {PrototypeHandler::HANDLER_INFO_OFFSET,
958                                          PrototypeHandler::PROTO_CELL_OFFSET,
959                                          PrototypeHandler::HOLDER_OFFSET,
960                                          PrototypeHandler::ACCESSOR_JSFUNCTION_OFFSET,
961                                          PrototypeHandler::SIZE - PrototypeHandler::HANDLER_INFO_OFFSET}},
962             {JSType::PROTOTYPE_INFO, {ProtoChangeDetails::CHANGE_LISTENER_OFFSET,
963                                       ProtoChangeDetails::SIZE - ProtoChangeDetails::CHANGE_LISTENER_OFFSET}},
964             {JSType::PROTO_CHANGE_MARKER, {ProtoChangeMarker::SIZE - ProtoChangeMarker::BIT_FIELD_OFFSET}},
965             {JSType::RB_TREENODE, {RBTreeNode::LEFT_OFFSET, RBTreeNode::RIGHT_OFFSET, RBTreeNode::ISRED_OFFSET,
966                                    RBTreeNode::SIZE - RBTreeNode::LEFT_OFFSET}},
967             {JSType::RESOLVEDBINDING_RECORD, {ResolvedBinding::MODULE_OFFSET, ResolvedBinding::BINDING_NAME_OFFSET,
968                                               ResolvedBinding::SIZE - ResolvedBinding::MODULE_OFFSET}},
969             {JSType::RESOLVEDINDEXBINDING_RECORD, {
970                 ResolvedIndexBinding::MODULE_OFFSET,
971                 ResolvedIndexBinding::INDEX_OFFSET,
972                 ResolvedIndexBinding::BIT_FIELD_OFFSET,
973                 ResolvedIndexBinding::SIZE - ResolvedIndexBinding::MODULE_OFFSET}},
974             {JSType::RESOLVEDRECORDBINDING_RECORD, {
975                 ResolvedRecordBinding::MODULE_RECORD_OFFSET,
976                 ResolvedRecordBinding::BINDING_NAME_OFFSET,
977                 ResolvedRecordBinding::SIZE - ResolvedRecordBinding::MODULE_RECORD_OFFSET}},
978             {JSType::RESOLVEDRECORDINDEXBINDING_RECORD, {
979                 ResolvedRecordIndexBinding::MODULE_RECORD_INDEX_OFFSET,
980                 ResolvedRecordIndexBinding::ABC_FILE_NAME,
981                 ResolvedRecordIndexBinding::SIZE - ResolvedRecordIndexBinding::MODULE_RECORD_INDEX_OFFSET}},
982             {JSType::RESOLVING_FUNCTIONS_RECORD, {
983                 ResolvingFunctionsRecord::RESOLVE_FUNCTION_OFFSET,
984                 ResolvingFunctionsRecord::REJECT_FUNCTION_OFFSET,
985                 ResolvingFunctionsRecord::SIZE - ResolvingFunctionsRecord::RESOLVE_FUNCTION_OFFSET}},
986             {JSType::SENDABLE_ENV, {TaggedArray::SIZE - TaggedArray::SIZE}},
987             {JSType::SFUNCTION_ENV, {TaggedArray::SIZE - TaggedArray::SIZE}},
988             {JSType::JS_XREF_OBJECT, {JSObject::SIZE - JSObject::SIZE}},
989             {JSType::SLICED_STRING, {SlicedString::PARENT_OFFSET, SlicedString::SIZE - SlicedString::PARENT_OFFSET}},
990             {JSType::SOURCE_TEXT_MODULE_RECORD, {
991                 SourceTextModule::SOURCE_TEXT_MODULE_OFFSET,
992                 SourceTextModule::NAMESPACE_OFFSET,
993                 SourceTextModule::MODULE_REQUESTS_OFFSET,
994                 SourceTextModule::REQUESTED_MODULES_OFFSET,
995                 SourceTextModule::IMPORT_ENTRIES_OFFSET,
996                 SourceTextModule::LOCAL_EXPORT_ENTTRIES_OFFSET,
997                 SourceTextModule::INDIRECT_EXPORT_ENTTRIES_OFFSET,
998                 SourceTextModule::START_EXPORT_ENTTRIES_OFFSET,
999                 SourceTextModule::NAME_DICTIONARY_OFFSET,
1000                 SourceTextModule::CYCLE_ROOT_OFFSET,
1001                 SourceTextModule::TOP_LEVEL_CAPABILITY_OFFSET,
1002                 SourceTextModule::ASYNC_PARENT_MODULES_OFFSET,
1003                 SourceTextModule::SENDABLE_ENV_OFFSET,
1004                 SourceTextModule::EXCEPTION_OFFSET,
1005                 SourceTextModule::SIZE - SourceTextModule::SOURCE_TEXT_MODULE_OFFSET}},
1006             {JSType::STAR_EXPORTENTRY_RECORD, {StarExportEntry::STAR_EXPORT_ENTRY_OFFSET,
1007                                                StarExportEntry::SIZE - StarExportEntry::STAR_EXPORT_ENTRY_OFFSET}},
1008             {JSType::STORE_TS_HANDLER, {StoreAOTHandler::HANDLER_INFO_OFFSET,
1009                                         StoreAOTHandler::PROTO_CELL_OFFSET,
1010                                         StoreAOTHandler::HOLDER_OFFSET,
1011                                         StoreAOTHandler::SIZE - StoreAOTHandler::HANDLER_INFO_OFFSET}},
1012             {JSType::SYMBOL, {JSSymbol::DESCRIPTION_OFFSET,
1013                               JSSymbol::SIZE - JSSymbol::DESCRIPTION_OFFSET}},
1014             {JSType::TAGGED_ARRAY, {TaggedArray::LENGTH_OFFSET, TaggedArray::DATA_OFFSET,
1015                                     TaggedArray::SIZE - TaggedArray::SIZE}},
1016             {JSType::TAGGED_DICTIONARY, {TaggedArray::LAST_OFFSET - TaggedArray::LENGTH_OFFSET}},
1017             {JSType::TEMPLATE_MAP, {TaggedArray::LAST_OFFSET - TaggedArray::LENGTH_OFFSET}},
1018             {JSType::TRACK_INFO, {TrackInfo::CACHED_HCLASS_OFFSET, TrackInfo::CACHED_FUNC_OFFSET,
1019                                   TrackInfo::LAST_OFFSET - TrackInfo::CACHED_HCLASS_OFFSET}},
1020             {JSType::TRANSITION_HANDLER, {TransitionHandler::HANDLER_INFO_OFFSET,
1021                                           TransitionHandler::TRANSITION_HCLASS_OFFSET,
1022                                           TransitionHandler::SIZE - TransitionHandler::HANDLER_INFO_OFFSET}},
1023             {JSType::TRANS_WITH_PROTO_HANDLER, {
1024                 TransWithProtoHandler::HANDLER_INFO_OFFSET,
1025                 TransWithProtoHandler::TRANSITION_HCLASS_OFFSET,
1026                 TransWithProtoHandler::PROTO_CELL_OFFSET,
1027                 TransWithProtoHandler::SIZE - TransWithProtoHandler::HANDLER_INFO_OFFSET}},
1028             {JSType::TREE_STRING, {TreeString::FIRST_OFFSET, TreeString::SECOND_OFFSET,
1029                                    TreeString::SIZE - TreeString::FIRST_OFFSET}},
1030             {JSType::VTABLE, {TaggedArray::LAST_OFFSET - TaggedArray::LENGTH_OFFSET}}
1031         };
1032         // { typeName: [all parents of this type]}
1033         parentsTable_ = {
1034             {JSType::HCLASS, {"TAGGED_OBJECT"}},
1035             {JSType::ACCESSOR_DATA, {"RECORD"}},
1036             {JSType::AOT_LITERAL_INFO, {"TAGGED_OBJECT"}},
1037             {JSType::ASYNC_GENERATOR_REQUEST, {"RECORD"}},
1038             {JSType::ASYNC_ITERATOR_RECORD, {"RECORD"}},
1039             {JSType::BIGINT, {"TAGGED_OBJECT"}},
1040             {JSType::BYTE_ARRAY, {"TAGGED_OBJECT"}},
1041             {JSType::CELL_RECORD, {"RECORD"}},
1042             {JSType::CLASS_INFO_EXTRACTOR, {"TAGGED_OBJECT"}},
1043             {JSType::CLASS_LITERAL, {"TAGGED_OBJECT"}},
1044             {JSType::COMPLETION_RECORD, {"RECORD"}},
1045             {JSType::CONSTANT_POOL, {"TAGGED_ARRAY"}},
1046             {JSType::COW_MUTANT_TAGGED_ARRAY, {"MUTANT_TAGGED_ARRAY"}},
1047             {JSType::COW_TAGGED_ARRAY, {"TAGGED_ARRAY"}},
1048             {JSType::EXTRA_PROFILE_TYPE_INFO, {"TAGGED_OBJECT"}},
1049             {JSType::FUNCTION_TEMPLATE, {"TAGGED_OBJECT"}},
1050             {JSType::GLOBAL_ENV, {"TAGGED_ARRAY"}},
1051             {JSType::IMPORTENTRY_RECORD, {"RECORD"}},
1052             {JSType::INDIRECT_EXPORTENTRY_RECORD, {"RECORD"}},
1053             {JSType::INTERNAL_ACCESSOR, {"RECORD"}},
1054             {JSType::JS_AGGREGATE_ERROR, {"ECMA_OBJECT"}},
1055             {JSType::JS_API_ARRAYLIST_ITERATOR, {"JS_OBJECT"}},
1056             {JSType::JS_API_ARRAY_LIST, {"JS_OBJECT"}},
1057             {JSType::JS_API_BITVECTOR, {"JS_OBJECT"}},
1058             {JSType::JS_API_BITVECTOR_ITERATOR, {"JS_OBJECT"}},
1059             {JSType::JS_API_DEQUE, {"JS_OBJECT"}},
1060             {JSType::JS_API_DEQUE_ITERATOR, {"JS_OBJECT"}},
1061             {JSType::JS_API_HASHMAP_ITERATOR, {"JS_OBJECT"}},
1062             {JSType::JS_API_HASHSET_ITERATOR, {"JS_OBJECT"}},
1063             {JSType::JS_API_HASH_MAP, {"JS_OBJECT"}},
1064             {JSType::JS_API_HASH_SET, {"JS_OBJECT"}},
1065             {JSType::JS_API_LIGHT_WEIGHT_MAP, {"JS_OBJECT"}},
1066             {JSType::JS_API_LIGHT_WEIGHT_MAP_ITERATOR, {"JS_OBJECT"}},
1067             {JSType::JS_API_LIGHT_WEIGHT_SET, {"JS_OBJECT"}},
1068             {JSType::JS_API_LIGHT_WEIGHT_SET_ITERATOR, {"JS_OBJECT"}},
1069             {JSType::JS_API_LINKED_LIST, {"JS_OBJECT"}},
1070             {JSType::JS_API_LINKED_LIST_ITERATOR, {"JS_OBJECT"}},
1071             {JSType::JS_API_LIST, {"JS_OBJECT"}},
1072             {JSType::JS_API_LIST_ITERATOR, {"JS_OBJECT"}},
1073             {JSType::JS_API_PLAIN_ARRAY, {"JS_OBJECT"}},
1074             {JSType::JS_API_FAST_BUFFER, {"JS_OBJECT"}},
1075             {JSType::JS_API_PLAIN_ARRAY_ITERATOR, {"JS_OBJECT"}},
1076             {JSType::JS_API_QUEUE, {"JS_OBJECT"}},
1077             {JSType::JS_API_QUEUE_ITERATOR, {"JS_OBJECT"}},
1078             {JSType::JS_API_STACK, {"JS_OBJECT"}},
1079             {JSType::JS_API_STACK_ITERATOR, {"JS_OBJECT"}},
1080             {JSType::JS_API_TREEMAP_ITERATOR, {"JS_OBJECT"}},
1081             {JSType::JS_API_TREESET_ITERATOR, {"JS_OBJECT"}},
1082             {JSType::JS_API_TREE_MAP, {"JS_OBJECT"}},
1083             {JSType::JS_API_TREE_SET, {"JS_OBJECT"}},
1084             {JSType::JS_API_VECTOR, {"JS_OBJECT"}},
1085             {JSType::JS_API_VECTOR_ITERATOR, {"JS_OBJECT"}},
1086             {JSType::JS_ARGUMENTS, {"JS_OBJECT"}},
1087             {JSType::JS_ARRAY, {"JS_OBJECT"}},
1088             {JSType::JS_ARRAY_BUFFER, {"JS_OBJECT"}},
1089             {JSType::JS_ARRAY_ITERATOR, {"JS_OBJECT"}},
1090             {JSType::JS_ASYNCITERATOR, {"ECMA_OBJECT"}},
1091             {JSType::JS_ASYNC_AWAIT_STATUS_FUNCTION, {"JS_FUNCTION"}},
1092             {JSType::JS_ASYNC_FROM_SYNC_ITERATOR, {"JS_OBJECT"}},
1093             {JSType::JS_ASYNC_FROM_SYNC_ITER_UNWARP_FUNCTION, {"JS_FUNCTION"}},
1094             {JSType::JS_ASYNC_FUNCTION, {"JS_FUNCTION"}},
1095             {JSType::JS_ASYNC_FUNC_OBJECT, {"JS_GENERATOR_OBJECT"}},
1096             {JSType::JS_ASYNC_GENERATOR_FUNCTION, {"JS_FUNCTION"}},
1097             {JSType::JS_ASYNC_GENERATOR_OBJECT, {"JS_OBJECT"}},
1098             {JSType::JS_ASYNC_GENERATOR_RESUME_NEXT_RETURN_PROCESSOR_RST_FTN, {"JS_FUNCTION"}},
1099             {JSType::JS_ASYNC_MODULE_FULFILLED_FUNCTION, {"JS_FUNCTION"}},
1100             {JSType::JS_ASYNC_MODULE_REJECTED_FUNCTION, {"JS_FUNCTION"}},
1101             {JSType::JS_BIGINT64_ARRAY, {"JS_OBJECT"}},
1102             {JSType::JS_BIGUINT64_ARRAY, {"JS_OBJECT"}},
1103             {JSType::JS_BOUND_FUNCTION, {"JS_FUNCTION"}},
1104             {JSType::JS_CJS_EXPORTS, {"JS_OBJECT"}},
1105             {JSType::JS_CJS_MODULE, {"JS_OBJECT"}},
1106             {JSType::JS_CJS_REQUIRE, {"JS_OBJECT"}},
1107             {JSType::JS_COLLATOR, {"JS_OBJECT"}},
1108             {JSType::JS_DATA_VIEW, {"JS_OBJECT"}},
1109             {JSType::JS_DATE, {"JS_OBJECT"}},
1110             {JSType::JS_DATE_TIME_FORMAT, {"JS_OBJECT"}},
1111             {JSType::JS_DISPLAYNAMES, {"JS_OBJECT"}},
1112             {JSType::JS_ERROR, {"ECMA_OBJECT"}},
1113             {JSType::JS_EVAL_ERROR, {"ECMA_OBJECT"}},
1114             {JSType::JS_FINALIZATION_REGISTRY, {"JS_OBJECT"}},
1115             {JSType::JS_FLOAT32_ARRAY, {"JS_OBJECT"}},
1116             {JSType::JS_FLOAT64_ARRAY, {"JS_OBJECT"}},
1117             {JSType::JS_FORIN_ITERATOR, {"JS_OBJECT"}},
1118             {JSType::JS_FUNCTION, {"JS_FUNCTION_BASE"}},
1119             {JSType::JS_FUNCTION_BASE, {"JS_OBJECT"}},
1120             {JSType::JS_GENERATOR_CONTEXT, {"TAGGED_OBJECT"}},
1121             {JSType::JS_GENERATOR_FUNCTION, {"JS_FUNCTION"}},
1122             {JSType::JS_GENERATOR_OBJECT, {"JS_OBJECT"}},
1123             {JSType::JS_GLOBAL_OBJECT, {"JS_OBJECT"}},
1124             {JSType::JS_INT16_ARRAY, {"JS_OBJECT"}},
1125             {JSType::JS_INT32_ARRAY, {"JS_OBJECT"}},
1126             {JSType::JS_INT8_ARRAY, {"JS_OBJECT"}},
1127             {JSType::JS_INTL, {"JS_OBJECT"}},
1128             {JSType::JS_INTL_BOUND_FUNCTION, {"JS_FUNCTION"}},
1129             {JSType::JS_ITERATOR, {"ECMA_OBJECT"}},
1130             {JSType::JS_LIST_FORMAT, {"JS_OBJECT"}},
1131             {JSType::JS_LOCALE, {"JS_OBJECT"}},
1132             {JSType::JS_MAP, {"JS_OBJECT"}},
1133             {JSType::JS_MAP_ITERATOR, {"JS_OBJECT"}},
1134             {JSType::JS_MODULE_NAMESPACE, {"JS_OBJECT"}},
1135             {JSType::JS_NATIVE_POINTER, {"TAGGED_OBJECT"}},
1136             {JSType::JS_NUMBER_FORMAT, {"JS_OBJECT"}},
1137             {JSType::JS_OBJECT, {"ECMA_OBJECT"}},
1138             {JSType::JS_OOM_ERROR, {"ECMA_OBJECT"}},
1139             {JSType::JS_PLURAL_RULES, {"JS_OBJECT"}},
1140             {JSType::JS_PRIMITIVE_REF, {"JS_OBJECT"}},
1141             {JSType::JS_PROMISE, {"JS_OBJECT"}},
1142             {JSType::JS_PROMISE_ALL_RESOLVE_ELEMENT_FUNCTION, {"JS_FUNCTION"}},
1143             {JSType::JS_PROMISE_ALL_SETTLED_ELEMENT_FUNCTION, {"JS_FUNCTION"}},
1144             {JSType::JS_PROMISE_ANY_REJECT_ELEMENT_FUNCTION, {"JS_FUNCTION"}},
1145             {JSType::JS_PROMISE_EXECUTOR_FUNCTION, {"JS_FUNCTION"}},
1146             {JSType::JS_PROMISE_FINALLY_FUNCTION, {"JS_FUNCTION"}},
1147             {JSType::JS_PROMISE_REACTIONS_FUNCTION, {"JS_FUNCTION"}},
1148             {JSType::JS_PROMISE_VALUE_THUNK_OR_THROWER_FUNCTION, {"JS_FUNCTION"}},
1149             {JSType::JS_PROXY, {"ECMA_OBJECT"}},
1150             {JSType::JS_PROXY_REVOC_FUNCTION, {"JS_FUNCTION"}},
1151             {JSType::JS_RANGE_ERROR, {"ECMA_OBJECT"}},
1152             {JSType::JS_REALM, {"JS_OBJECT"}},
1153             {JSType::JS_REFERENCE_ERROR, {"ECMA_OBJECT"}},
1154             {JSType::JS_REG_EXP, {"JS_OBJECT"}},
1155             {JSType::JS_REG_EXP_ITERATOR, {"JS_OBJECT"}},
1156             {JSType::JS_RELATIVE_TIME_FORMAT, {"JS_OBJECT"}},
1157             {JSType::JS_SEGMENTER, {"JS_OBJECT"}},
1158             {JSType::JS_SEGMENTS, {"JS_OBJECT"}},
1159             {JSType::JS_SEGMENT_ITERATOR, {"JS_OBJECT"}},
1160             {JSType::JS_SENDABLE_ARRAY_BUFFER, {"JS_OBJECT"}},
1161             {JSType::JS_SET, {"JS_OBJECT"}},
1162             {JSType::JS_SET_ITERATOR, {"JS_OBJECT"}},
1163             {JSType::JS_SHARED_ARRAY, {"JS_OBJECT"}},
1164             {JSType::JS_SHARED_ARRAY_BUFFER, {"JS_OBJECT"}},
1165             {JSType::JS_SHARED_ARRAY_ITERATOR, {"JS_OBJECT"}},
1166             {JSType::JS_SHARED_ASYNC_FUNCTION, {"JS_FUNCTION"}},
1167             {JSType::JS_SHARED_BIGINT64_ARRAY, {"JS_TYPED_ARRAY"}},
1168             {JSType::JS_SHARED_BIGUINT64_ARRAY, {"JS_TYPED_ARRAY"}},
1169             {JSType::JS_SHARED_FLOAT32_ARRAY, {"JS_TYPED_ARRAY"}},
1170             {JSType::JS_SHARED_FLOAT64_ARRAY, {"JS_TYPED_ARRAY"}},
1171             {JSType::JS_SHARED_FUNCTION, {"JS_FUNCTION"}},
1172             {JSType::JS_SHARED_INT16_ARRAY, {"JS_TYPED_ARRAY"}},
1173             {JSType::JS_SHARED_INT32_ARRAY, {"JS_TYPED_ARRAY"}},
1174             {JSType::JS_SHARED_INT8_ARRAY, {"JS_TYPED_ARRAY"}},
1175             {JSType::JS_SHARED_MAP, {"JS_OBJECT"}},
1176             {JSType::JS_SHARED_MAP_ITERATOR, {"JS_OBJECT"}},
1177             {JSType::JS_SHARED_OBJECT, {"JS_OBJECT"}},
1178             {JSType::JS_SHARED_SET, {"JS_OBJECT"}},
1179             {JSType::JS_SHARED_SET_ITERATOR, {"JS_OBJECT"}},
1180             {JSType::JS_SHARED_TYPED_ARRAY, {"JS_TYPED_ARRAY"}},
1181             {JSType::JS_SHARED_UINT16_ARRAY, {"JS_TYPED_ARRAY"}},
1182             {JSType::JS_SHARED_UINT32_ARRAY, {"JS_TYPED_ARRAY"}},
1183             {JSType::JS_SHARED_UINT8_ARRAY, {"JS_TYPED_ARRAY"}},
1184             {JSType::JS_SHARED_UINT8_CLAMPED_ARRAY, {"JS_TYPED_ARRAY"}},
1185             {JSType::JS_STRING_ITERATOR, {"JS_OBJECT"}},
1186             {JSType::JS_SYNTAX_ERROR, {"ECMA_OBJECT"}},
1187             {JSType::JS_TERMINATION_ERROR, {"ECMA_OBJECT"}},
1188             {JSType::JS_TYPED_ARRAY, {"JS_OBJECT"}},
1189             {JSType::JS_TYPE_ERROR, {"ECMA_OBJECT"}},
1190             {JSType::JS_UINT16_ARRAY, {"JS_OBJECT"}},
1191             {JSType::JS_UINT32_ARRAY, {"JS_OBJECT"}},
1192             {JSType::JS_UINT8_ARRAY, {"JS_OBJECT"}},
1193             {JSType::JS_UINT8_CLAMPED_ARRAY, {"JS_OBJECT"}},
1194             {JSType::JS_URI_ERROR, {"ECMA_OBJECT"}},
1195             {JSType::JS_WEAK_MAP, {"JS_OBJECT"}},
1196             {JSType::JS_WEAK_REF, {"JS_OBJECT"}},
1197             {JSType::JS_WEAK_SET, {"JS_OBJECT"}},
1198             {JSType::LEXICAL_ENV, {"TAGGED_ARRAY"}},
1199             {JSType::LINE_STRING, {"ECMA_STRING"}},
1200             {JSType::LINKED_NODE, {"TAGGED_NODE"}},
1201             {JSType::LOCAL_EXPORTENTRY_RECORD, {"RECORD"}},
1202             {JSType::MACHINE_CODE_OBJECT, {"TAGGED_OBJECT"}},
1203             {JSType::MARKER_CELL, {"TAGGED_OBJECT"}},
1204             {JSType::METHOD, {"TAGGED_OBJECT"}},
1205             {JSType::MICRO_JOB_QUEUE, {"RECORD"}},
1206             {JSType::MODULE_RECORD, {"RECORD"}},
1207             {JSType::MUTANT_TAGGED_ARRAY, {"TAGGED_ARRAY"}},
1208             {JSType::NATIVE_MODULE_FAILURE_INFO, {"JS_OBJECT"}},
1209             {JSType::PENDING_JOB, {"RECORD"}},
1210             {JSType::PROFILE_TYPE_INFO, {"TAGGED_ARRAY"}},
1211             {JSType::PROFILE_TYPE_INFO_CELL_0, {"TAGGED_OBJECT"}},
1212             {JSType::PROFILE_TYPE_INFO_CELL_1, {"TAGGED_OBJECT"}},
1213             {JSType::PROFILE_TYPE_INFO_CELL_N, {"TAGGED_OBJECT"}},
1214             {JSType::PROGRAM, {"ECMA_OBJECT"}},
1215             {JSType::PROMISE_CAPABILITY, {"RECORD"}},
1216             {JSType::PROMISE_ITERATOR_RECORD, {"RECORD"}},
1217             {JSType::PROMISE_REACTIONS, {"RECORD"}},
1218             {JSType::PROMISE_RECORD, {"RECORD"}},
1219             {JSType::PROPERTY_BOX, {"TAGGED_OBJECT"}},
1220             {JSType::PROTOTYPE_HANDLER, {"TAGGED_OBJECT"}},
1221             {JSType::PROTOTYPE_INFO, {"TAGGED_OBJECT"}},
1222             {JSType::PROTO_CHANGE_MARKER, {"TAGGED_OBJECT"}},
1223             {JSType::RB_TREENODE, {"TAGGED_NODE"}},
1224             {JSType::RESOLVEDBINDING_RECORD, {"RECORD"}},
1225             {JSType::RESOLVEDINDEXBINDING_RECORD, {"RECORD"}},
1226             {JSType::RESOLVEDRECORDBINDING_RECORD, {"RECORD"}},
1227             {JSType::RESOLVEDRECORDINDEXBINDING_RECORD, {"RECORD"}},
1228             {JSType::RESOLVING_FUNCTIONS_RECORD, {"RECORD"}},
1229             {JSType::SENDABLE_ENV, {"TAGGED_ARRAY"}},
1230             {JSType::SFUNCTION_ENV, {"TAGGED_ARRAY"}},
1231             {JSType::JS_XREF_OBJECT, {"JS_OBJECT"}},
1232             {JSType::SLICED_STRING, {"ECMA_STRING"}},
1233             {JSType::SOURCE_TEXT_MODULE_RECORD, {"MODULE_RECORD"}},
1234             {JSType::STAR_EXPORTENTRY_RECORD, {"RECORD"}},
1235             {JSType::STORE_TS_HANDLER, {"TAGGED_OBJECT"}},
1236             {JSType::SYMBOL, {"TAGGED_OBJECT"}},
1237             {JSType::TAGGED_ARRAY, {"TAGGED_OBJECT"}},
1238             {JSType::TAGGED_DICTIONARY, {"TAGGED_ARRAY"}},
1239             {JSType::TEMPLATE_MAP, {"TAGGED_OBJECT"}},
1240             {JSType::TRACK_INFO, {"TAGGED_OBJECT"}},
1241             {JSType::TRANSITION_HANDLER, {"TAGGED_OBJECT"}},
1242             {JSType::TRANS_WITH_PROTO_HANDLER, {"TAGGED_OBJECT"}},
1243             {JSType::TREE_STRING, {"ECMA_STRING"}},
1244             {JSType::VTABLE, {"TAGGED_OBJECT"}}
1245         };
1246         // { typeName: [size of all fields' in the same order as declared in .h files]}
1247         fieldSizeTable_ = {
1248             {JSType::HCLASS, {JSHClass::BIT_FIELD1_OFFSET - JSHClass::BIT_FIELD_OFFSET,
1249                               JSHClass::PROTOTYPE_OFFSET - JSHClass::BIT_FIELD1_OFFSET,
1250                               JSHClass::LAYOUT_OFFSET - JSHClass::PROTOTYPE_OFFSET,
1251                               JSHClass::TRANSTIONS_OFFSET - JSHClass::LAYOUT_OFFSET,
1252                               JSHClass::PARENT_OFFSET - JSHClass::TRANSTIONS_OFFSET,
1253                               JSHClass::PROTO_CHANGE_MARKER_OFFSET - JSHClass::PARENT_OFFSET,
1254                               JSHClass::PROTO_CHANGE_DETAILS_OFFSET - JSHClass::PROTO_CHANGE_MARKER_OFFSET,
1255                               JSHClass::ENUM_CACHE_OFFSET - JSHClass::PROTO_CHANGE_DETAILS_OFFSET,
1256                               JSHClass::DEPENDENT_INFOS_OFFSET - JSHClass::ENUM_CACHE_OFFSET,
1257                               JSHClass::PROFILE_TYPE_OFFSET - JSHClass::DEPENDENT_INFOS_OFFSET,
1258                               JSHClass::LAST_OFFSET - JSHClass::PROFILE_TYPE_OFFSET}},
1259             {JSType::ACCESSOR_DATA, {AccessorData::SETTER_OFFSET - AccessorData::GETTER_OFFSET,
1260                                      AccessorData::SIZE - AccessorData::SETTER_OFFSET}},
1261             {JSType::AOT_LITERAL_INFO, {}},
1262             {JSType::ASYNC_GENERATOR_REQUEST, {
1263                 AsyncGeneratorRequest::CAPABILITY_OFFSET - AsyncGeneratorRequest::COMPLETION_OFFSET,
1264                 AsyncGeneratorRequest::SIZE - AsyncGeneratorRequest::CAPABILITY_OFFSET}},
1265             {JSType::ASYNC_ITERATOR_RECORD, {
1266                 AsyncIteratorRecord::NEXTMETHOD_OFFSET - AsyncIteratorRecord::ITERATOR_OFFSET,
1267                 AsyncIteratorRecord::BIT_FIELD_OFFSET - AsyncIteratorRecord::NEXTMETHOD_OFFSET}},
1268             {JSType::BIGINT, {}},
1269             {JSType::BYTE_ARRAY, {}},
1270             {JSType::CELL_RECORD, {CellRecord::HELD_VALUE_OFFSET - CellRecord::WEAKREF_TARGET_OFFSET,
1271                                    CellRecord::SIZE - CellRecord::HELD_VALUE_OFFSET}},
1272             {JSType::CLASS_INFO_EXTRACTOR, {
1273                 ClassInfoExtractor::NON_STATIC_PROPERTIES_OFFSET - ClassInfoExtractor::PROTOTYPE_HCLASS_OFFSET,
1274                 ClassInfoExtractor::NON_STATIC_ELEMENTS_OFFSET - ClassInfoExtractor::NON_STATIC_PROPERTIES_OFFSET,
1275                 ClassInfoExtractor::CONSTRUCTOR_HCLASS_OFFSET - ClassInfoExtractor::NON_STATIC_ELEMENTS_OFFSET,
1276                 ClassInfoExtractor::STATIC_PROPERTIES_OFFSET - ClassInfoExtractor::CONSTRUCTOR_HCLASS_OFFSET,
1277                 ClassInfoExtractor::STATIC_ELEMENTS_OFFSET - ClassInfoExtractor::STATIC_PROPERTIES_OFFSET,
1278                 ClassInfoExtractor::CONSTRUCTOR_METHOD_OFFSET - ClassInfoExtractor::STATIC_ELEMENTS_OFFSET,
1279                 ClassInfoExtractor::BIT_FIELD_OFFSET - ClassInfoExtractor::CONSTRUCTOR_METHOD_OFFSET}},
1280             {JSType::CLASS_LITERAL, {ClassLiteral::IS_AOT_USED_OFFSET - ClassLiteral::ARRAY_OFFSET}},
1281             {JSType::COMPLETION_RECORD, {CompletionRecord::BIT_FIELD_OFFSET - CompletionRecord::VALUE_OFFSET}},
1282             {JSType::CONSTANT_POOL, {}},
1283             {JSType::COW_MUTANT_TAGGED_ARRAY, {}},
1284             {JSType::COW_TAGGED_ARRAY, {}},
1285             {JSType::EXTRA_PROFILE_TYPE_INFO, {
1286                 ExtraProfileTypeInfo::HOLDER_OBJECT_OFFSET - ExtraProfileTypeInfo::RECEIVER_OBJECT_OFFSET,
1287                 ExtraProfileTypeInfo::LAST_OFFSET - ExtraProfileTypeInfo::HOLDER_OBJECT_OFFSET}},
1288             {JSType::FUNCTION_TEMPLATE, {
1289                 FunctionTemplate::MODULE_OFFSET - FunctionTemplate::METHOD_OFFSET,
1290                 FunctionTemplate::RAW_PROFILE_TYPE_INFO_OFFSET - FunctionTemplate::MODULE_OFFSET,
1291                 FunctionTemplate::LENGTH_OFFSET - FunctionTemplate::RAW_PROFILE_TYPE_INFO_OFFSET}},
1292             {JSType::GLOBAL_ENV, {}},
1293             {JSType::IMPORTENTRY_RECORD, {
1294                 ImportEntry::LOCAL_NAME_OFFSET - ImportEntry::IMPORT_ENTRY_OFFSET,
1295                 ImportEntry::MODULE_REQUEST_INDEX_OFFSET - ImportEntry::LOCAL_NAME_OFFSET,
1296                 ImportEntry::SIZE - ImportEntry::IMPORT_ENTRY_OFFSET}},
1297             {JSType::INDIRECT_EXPORTENTRY_RECORD, {
1298                 IndirectExportEntry::IMPORT_NAME_OFFSET - IndirectExportEntry::INDIRECT_EXPORT_ENTRY_OFFSET,
1299                 IndirectExportEntry::MODULE_REQUEST_INDEX_OFFSET - IndirectExportEntry::IMPORT_NAME_OFFSET,
1300                 IndirectExportEntry::SIZE - IndirectExportEntry::INDIRECT_EXPORT_ENTRY_OFFSET}},
1301             {JSType::INTERNAL_ACCESSOR, {
1302                 InternalAccessor::SETTER_OFFSET - InternalAccessor::GETTER_OFFSET,
1303                 InternalAccessor::SIZE - InternalAccessor::SETTER_OFFSET}},
1304             {JSType::JS_AGGREGATE_ERROR, {
1305                 JSObject::ELEMENTS_OFFSET - JSObject::PROPERTIES_OFFSET,
1306                 JSObject::SIZE - JSObject::ELEMENTS_OFFSET}},
1307             {JSType::JS_API_ARRAYLIST_ITERATOR, {
1308                 JSAPIArrayListIterator::NEXT_INDEX_OFFSET - JSAPIArrayListIterator::ITERATED_ARRAYLIST_OFFSET}},
1309             {JSType::JS_API_ARRAY_LIST, {JSAPIArrayList::SIZE - JSAPIArrayList::LENGTH_OFFSET}},
1310             {JSType::JS_API_BITVECTOR, {JSAPIBitVector::LENGTH_OFFSET - JSAPIBitVector::NATIVE_POINTER_OFFSET}},
1311             {JSType::JS_API_BITVECTOR_ITERATOR, {
1312                 JSAPIBitVectorIterator::NEXT_INDEX_OFFSET - JSAPIBitVectorIterator::ITERATED_BITVECTOR_OFFSET}},
1313             {JSType::JS_API_DEQUE, {}},
1314             {JSType::JS_API_DEQUE_ITERATOR, {
1315                 JSAPIDequeIterator::NEXT_INDEX_OFFSET - JSAPIDequeIterator::ITERATED_DEQUE_OFFSET}},
1316             {JSType::JS_API_HASHMAP_ITERATOR, {
1317                 JSAPIHashMapIterator::TAGGED_QUEUE_OFFSET - JSAPIHashMapIterator::ITERATED_HASHMAP_OFFSET,
1318                 JSAPIHashMapIterator::CURRENT_NODE_RESULT - JSAPIHashMapIterator::TAGGED_QUEUE_OFFSET,
1319                 JSAPIHashMapIterator::NEXT_INDEX_OFFSET - JSAPIHashMapIterator::CURRENT_NODE_RESULT
1320             }},
1321             {JSType::JS_API_HASHSET_ITERATOR, {
1322                 JSAPIHashSetIterator::TAGGED_QUEUE_OFFSET - JSAPIHashSetIterator::ITERATED_HASHSET_OFFSET,
1323                 JSAPIHashSetIterator::CURRENT_NODE_RESULT - JSAPIHashSetIterator::TAGGED_QUEUE_OFFSET,
1324                 JSAPIHashSetIterator::NEXT_INDEX_OFFSET - JSAPIHashSetIterator::CURRENT_NODE_RESULT}},
1325             {JSType::JS_API_HASH_MAP, {JSAPIHashMap::HASHMAP_SIZE_OFFSET- JSAPIHashMap::HASHMAP_TABLE_INDEX}},
1326             {JSType::JS_API_HASH_SET, {JSAPIHashSet::HASHSET_SIZE_OFFSET- JSAPIHashSet::HASHSET_TABLE_INDEX}},
1327             {JSType::JS_API_LIGHT_WEIGHT_MAP, {
1328                 JSAPILightWeightMap::LWP_KEYS_OFFSET - JSAPILightWeightMap::LWP_HASHES_OFFSET,
1329                 JSAPILightWeightMap::LWP_VALUES_OFFSET - JSAPILightWeightMap::LWP_KEYS_OFFSET,
1330                 JSAPILightWeightMap::LWP_LENGTH_OFFSET - JSAPILightWeightMap::LWP_VALUES_OFFSET}},
1331             {JSType::JS_API_LIGHT_WEIGHT_MAP_ITERATOR, {
1332                 JSAPILightWeightMapIterator::NEXT_INDEX_OFFSET - JSAPILightWeightMapIterator::ITERATED_LIGHT_WEIGHT_MAP_OFFSET}},
1333             {JSType::JS_API_LIGHT_WEIGHT_SET, {
1334                 JSAPILightWeightSet::VALUES_OFFSET - JSAPILightWeightSet::HASHES_OFFSET,
1335                 JSAPILightWeightSet::LENGTH_OFFSET - JSAPILightWeightSet::VALUES_OFFSET}},
1336             {JSType::JS_API_LIGHT_WEIGHT_SET_ITERATOR, {
1337                 JSAPILightWeightSetIterator::NEXT_INDEX_OFFSET - JSAPILightWeightSetIterator::ITERATED_LIGHT_WEIGHT_SET_OFFSET}},
1338             {JSType::JS_API_LINKED_LIST, {JSAPILinkedList::SIZE - JSAPILinkedList::DOUBLE_LIST_OFFSET}},
1339             {JSType::JS_API_LINKED_LIST_ITERATOR, {
1340                 JSAPILinkedListIterator::DATA_INDEX_OFFSET - JSAPILinkedListIterator::ITERATED_LINKED_LIST_OFFSET}},
1341             {JSType::JS_API_LIST, {JSAPIList::BIT_FIELD_OFFSET - JSAPIList::SINGLY_LIST_OFFSET}},
1342             {JSType::JS_API_LIST_ITERATOR, {
1343                 JSAPIListIterator::DATA_INDEX_OFFSET - JSAPIListIterator::ITERATED_LIST_OFFSET}},
1344             {JSType::JS_API_PLAIN_ARRAY, {JSAPIPlainArray::VALUES_OFFSET - JSAPIPlainArray::KEYS_OFFSET,
1345                                           JSAPIPlainArray::LENGTH_OFFSET - JSAPIPlainArray::VALUES_OFFSET}},
1346             {JSType::JS_API_FAST_BUFFER, {JSAPIFastBuffer::BUFFER_LENGTH_OFFSET - JSAPIFastBuffer::TYPEDARRAY_OFFSET}},
1347             {JSType::JS_API_PLAIN_ARRAY_ITERATOR, {
1348                 JSAPIPlainArrayIterator::NEXT_INDEX_OFFSET - JSAPIPlainArrayIterator::ITERATED_PLAIN_ARRAY_OFFSET}},
1349             {JSType::JS_API_QUEUE, {JSAPIQueue::FRONT_OFFSET - JSAPIQueue::LENGTH_OFFSET}},
1350             {JSType::JS_API_QUEUE_ITERATOR, {
1351                 JSAPIQueueIterator::NEXT_INDEX_OFFSET - JSAPIQueueIterator::ITERATED_QUEUE_OFFSET}},
1352             {JSType::JS_API_STACK, {}},
1353             {JSType::JS_API_STACK_ITERATOR, {
1354                 JSAPIStackIterator::NEXT_INDEX_OFFSET - JSAPIStackIterator::ITERATED_STACK_OFFSET}},
1355             {JSType::JS_API_TREEMAP_ITERATOR, {
1356                 JSAPITreeMapIterator::ITERATED_ENTRIES_OFFSET - JSAPITreeMapIterator::ITERATED_MAP_OFFSET,
1357                 JSAPITreeMapIterator::NEXT_INDEX_OFFSET - JSAPITreeMapIterator::ITERATED_ENTRIES_OFFSET}},
1358             {JSType::JS_API_TREESET_ITERATOR, {
1359                 JSAPITreeSetIterator::ITERATED_ENTRIES_OFFSET - JSAPITreeSetIterator::ITERATED_SET_OFFSET,
1360                 JSAPITreeSetIterator::NEXT_INDEX_OFFSET - JSAPITreeSetIterator::ITERATED_ENTRIES_OFFSET}},
1361             {JSType::JS_API_TREE_MAP, {JSAPITreeMap::SIZE - JSAPITreeMap::TREE_MAP_OFFSET}},
1362             {JSType::JS_API_TREE_SET, {JSAPITreeSet::SIZE - JSAPITreeSet::TREE_SET_OFFSET}},
1363             {JSType::JS_API_VECTOR, {}},
1364             {JSType::JS_API_VECTOR_ITERATOR, {
1365                 JSAPIVectorIterator::NEXT_INDEX_OFFSET - JSAPIVectorIterator::ITERATED_VECTOR_OFFSET}},
1366             {JSType::JS_ARGUMENTS, {}},
1367             {JSType::JS_ARRAY, {JSArray::TRACE_INDEX_OFFSET - JSArray::LENGTH_OFFSET,
1368                                 JSArray::SIZE - JSArray::TRACK_INFO_OFFSET}},
1369             {JSType::JS_ARRAY_BUFFER, {JSArrayBuffer::BYTE_LENGTH_OFFSET - JSArrayBuffer::DATA_OFFSET}},
1370             {JSType::JS_ARRAY_ITERATOR, {
1371                 JSArrayIterator::NEXT_INDEX_OFFSET - JSArrayIterator::ITERATED_ARRAY_OFFSET}},
1372             {JSType::JS_ASYNCITERATOR, {JSObject::ELEMENTS_OFFSET - JSObject::PROPERTIES_OFFSET,
1373                                         JSObject::SIZE - JSObject::ELEMENTS_OFFSET}},
1374             {JSType::JS_ASYNC_AWAIT_STATUS_FUNCTION, {
1375                 JSAsyncAwaitStatusFunction::SIZE - JSAsyncAwaitStatusFunction::ASYNC_CONTEXT_OFFSET}},
1376             {JSType::JS_ASYNC_FROM_SYNC_ITERATOR, {
1377                 JSAsyncFromSyncIterator::SIZE - JSAsyncFromSyncIterator::SYNC_ITERATOR_RECORD}},
1378             {JSType::JS_ASYNC_FROM_SYNC_ITER_UNWARP_FUNCTION, {
1379                 JSAsyncFromSyncIterUnwarpFunction::SIZE - JSAsyncFromSyncIterUnwarpFunction::DONE_OFFSET}},
1380             {JSType::JS_ASYNC_FUNCTION, {}},
1381             {JSType::JS_ASYNC_FUNC_OBJECT, {
1382                 JSAsyncFuncObject::SIZE - JSAsyncFuncObject::GENERATOR_PROMISE_OFFSET}},
1383             {JSType::JS_ASYNC_GENERATOR_FUNCTION, {}},
1384             {JSType::JS_ASYNC_GENERATOR_OBJECT, {
1385                 JSAsyncGeneratorObject::ASYNC_GENERATOR_QUEUE_OFFSET - JSAsyncGeneratorObject::GENERATOR_CONTEXT_OFFSET,
1386                 JSAsyncGeneratorObject::GENERATOR_OFFSET - JSAsyncGeneratorObject::ASYNC_GENERATOR_QUEUE_OFFSET,
1387                 JSAsyncGeneratorObject::GENERATOR_RESUME_RESULT_OFFSET - JSAsyncGeneratorObject::GENERATOR_OFFSET,
1388                 JSAsyncGeneratorObject::BIT_FIELD_OFFSET - JSAsyncGeneratorObject::GENERATOR_RESUME_RESULT_OFFSET}},
1389             {JSType::JS_ASYNC_GENERATOR_RESUME_NEXT_RETURN_PROCESSOR_RST_FTN, {
1390                 JSAsyncGeneratorResNextRetProRstFtn::SIZE - JSAsyncGeneratorResNextRetProRstFtn::ASYNC_GENERATOR_OBJECT_OFFSET}},
1391             {JSType::JS_ASYNC_MODULE_FULFILLED_FUNCTION, {}},
1392             {JSType::JS_ASYNC_MODULE_REJECTED_FUNCTION, {}},
1393             {JSType::JS_BIGINT64_ARRAY, {
1394                 JSTypedArray::TYPED_ARRAY_NAME_OFFSET - JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET,
1395                 JSTypedArray::BYTE_LENGTH_OFFSET - JSTypedArray::TYPED_ARRAY_NAME_OFFSET}},
1396             {JSType::JS_BIGUINT64_ARRAY, {
1397                 JSTypedArray::TYPED_ARRAY_NAME_OFFSET - JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET,
1398                 JSTypedArray::BYTE_LENGTH_OFFSET - JSTypedArray::TYPED_ARRAY_NAME_OFFSET}},
1399             {JSType::JS_BOUND_FUNCTION, {
1400                 JSBoundFunction::BOUND_THIS_OFFSET - JSBoundFunction::BOUND_TARGET_OFFSET,
1401                 JSBoundFunction::BOUND_ARGUMENTS_OFFSET - JSBoundFunction::BOUND_THIS_OFFSET,
1402                 JSBoundFunction::SIZE - JSBoundFunction::BOUND_ARGUMENTS_OFFSET}},
1403             {JSType::JS_CJS_EXPORTS, {CjsExports::SIZE - CjsExports::JS_CJS_EXPORTS_OFFSET}},
1404             {JSType::JS_CJS_MODULE, {CjsModule::ID_OFFSET - CjsModule::JS_CJS_MODULE_OFFSET,
1405                                      CjsModule::PATH_OFFSET - CjsModule::ID_OFFSET,
1406                                      CjsModule::EXPORTS_OFFSET - CjsModule::PATH_OFFSET,
1407                                      CjsModule::BIT_FIELD_OFFSET - CjsModule::EXPORTS_OFFSET}},
1408             {JSType::JS_CJS_REQUIRE, {CjsRequire::CACHE_OFFSET - CjsRequire::JS_CJS_REQUIRE_OFFSET,
1409                                       CjsRequire::SIZE - CjsRequire::CACHE_OFFSET}},
1410             {JSType::JS_COLLATOR, {JSCollator::LOCALE_OFFSET - JSCollator::ICU_FIELD_OFFSET,
1411                                    JSCollator::COLLATION_OFFSET - JSCollator::LOCALE_OFFSET,
1412                                    JSCollator::BOUND_COMPARE_OFFSET - JSCollator::COLLATION_OFFSET,
1413                                    JSCollator::BIT_FIELD_OFFSET - JSCollator::BOUND_COMPARE_OFFSET}},
1414             {JSType::JS_DATA_VIEW, {JSDataView::VIEW_ARRAY_BUFFER_OFFSET - JSDataView::DATA_VIEW_OFFSET,
1415                                     JSDataView::BYTE_LENGTH_OFFSET - JSDataView::VIEW_ARRAY_BUFFER_OFFSET}},
1416             {JSType::JS_DATE, {JSDate::LOCAL_TIME_OFFSET - JSDate::TIME_VALUE_OFFSET,
1417                                JSDate::SIZE - JSDate::LOCAL_TIME_OFFSET}},
1418             {JSType::JS_DATE_TIME_FORMAT, {
1419                 JSDateTimeFormat::CALENDAR_OFFSET - JSDateTimeFormat::LOCALE_OFFSET,
1420                 JSDateTimeFormat::NUMBER_STRING_SYSTEM_OFFSET - JSDateTimeFormat::CALENDAR_OFFSET,
1421                 JSDateTimeFormat::TIME_ZONE_OFFSET - JSDateTimeFormat::NUMBER_STRING_SYSTEM_OFFSET,
1422                 JSDateTimeFormat::LOCALE_ICU_OFFSET - JSDateTimeFormat::TIME_ZONE_OFFSET,
1423                 JSDateTimeFormat::SIMPLE_DATE_TIME_FORMAT_ICU_OFFSET - JSDateTimeFormat::LOCALE_ICU_OFFSET,
1424                 JSDateTimeFormat::ISO8601_OFFSET - JSDateTimeFormat::SIMPLE_DATE_TIME_FORMAT_ICU_OFFSET,
1425                 JSDateTimeFormat::BOUND_FORMAT_OFFSET - JSDateTimeFormat::ISO8601_OFFSET,
1426                 JSDateTimeFormat::BIT_FIELD_OFFSET - JSDateTimeFormat::BOUND_FORMAT_OFFSET}},
1427             {JSType::JS_DISPLAYNAMES, {JSDisplayNames::ICU_LOCALE_DISPPLAY_NAMES - JSDisplayNames::LOCALE_OFFSET,
1428                                        JSDisplayNames::BIT_FIELD_OFFSET - JSDisplayNames::ICU_LOCALE_DISPPLAY_NAMES}},
1429             {JSType::JS_ERROR, {JSObject::ELEMENTS_OFFSET - JSObject::PROPERTIES_OFFSET,
1430                                 JSObject::SIZE - JSObject::ELEMENTS_OFFSET}},
1431             {JSType::JS_EVAL_ERROR, {JSObject::ELEMENTS_OFFSET - JSObject::PROPERTIES_OFFSET,
1432                                      JSObject::SIZE - JSObject::ELEMENTS_OFFSET}},
1433             {JSType::JS_FINALIZATION_REGISTRY, {
1434                 JSFinalizationRegistry::NO_UNREGISTER_OFFSET - JSFinalizationRegistry::CLEANUP_CALLBACK_OFFSET,
1435                 JSFinalizationRegistry::MAYBE_UNREGISTER_OFFSET - JSFinalizationRegistry::NO_UNREGISTER_OFFSET,
1436                 JSFinalizationRegistry::NEXT_OFFSET - JSFinalizationRegistry::MAYBE_UNREGISTER_OFFSET,
1437                 JSFinalizationRegistry::PREV_OFFSET - JSFinalizationRegistry::NEXT_OFFSET,
1438                 JSFinalizationRegistry::SIZE - JSFinalizationRegistry::PREV_OFFSET}},
1439             {JSType::JS_FLOAT32_ARRAY, {
1440                 JSTypedArray::TYPED_ARRAY_NAME_OFFSET - JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET,
1441                 JSTypedArray::BYTE_LENGTH_OFFSET - JSTypedArray::TYPED_ARRAY_NAME_OFFSET}},
1442             {JSType::JS_FLOAT64_ARRAY, {
1443                 JSTypedArray::TYPED_ARRAY_NAME_OFFSET - JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET,
1444                 JSTypedArray::BYTE_LENGTH_OFFSET - JSTypedArray::TYPED_ARRAY_NAME_OFFSET}},
1445             {JSType::JS_FORIN_ITERATOR, {
1446                 JSForInIterator::CACHED_HCLASS_OFFSET - JSForInIterator::OBJECT_OFFSET,
1447                 JSForInIterator::KEYS_OFFSET - JSForInIterator::CACHED_HCLASS_OFFSET,
1448                 JSForInIterator::CACHE_KIND_OFFSET - JSForInIterator::KEYS_OFFSET}},
1449             {JSType::JS_FUNCTION, {
1450                 JSFunction::LEXICAL_ENV_OFFSET - JSFunction::PROTO_OR_DYNCLASS_OFFSET,
1451                 JSFunction::MACHINECODE_OFFSET - JSFunction::LEXICAL_ENV_OFFSET,
1452                 JSFunction::BASELINECODE_OFFSET - JSFunction::MACHINECODE_OFFSET,
1453                 JSFunction::RAW_PROFILE_TYPE_INFO_OFFSET - JSFunction::BASELINECODE_OFFSET,
1454                 JSFunction::HOME_OBJECT_OFFSET - JSFunction::RAW_PROFILE_TYPE_INFO_OFFSET,
1455                 JSFunction::ECMA_MODULE_OFFSET - JSFunction::HOME_OBJECT_OFFSET,
1456                 JSFunction::WORK_NODE_POINTER_OFFSET - JSFunction::ECMA_MODULE_OFFSET}},
1457             {JSType::JS_FUNCTION_BASE, {JSFunctionBase::CODE_ENTRY_OFFSET - JSFunctionBase::METHOD_OFFSET}},
1458             {JSType::JS_GENERATOR_CONTEXT, {
1459                 GeneratorContext::GENERATOR_METHOD_OFFSET - GeneratorContext::GENERATOR_REGS_ARRAY_OFFSET,
1460                 GeneratorContext::GENERATOR_THIS_OFFSET - GeneratorContext::GENERATOR_METHOD_OFFSET,
1461                 GeneratorContext::GENERATOR_ACC_OFFSET - GeneratorContext::GENERATOR_THIS_OFFSET,
1462                 GeneratorContext::GENERATOR_GENERATOR_OBJECT_OFFSET - GeneratorContext::GENERATOR_ACC_OFFSET,
1463                 GeneratorContext::GENERATOR_LEXICALENV_OFFSET - GeneratorContext::GENERATOR_GENERATOR_OBJECT_OFFSET,
1464                 GeneratorContext::GENERATOR_NREGS_OFFSET - GeneratorContext::GENERATOR_LEXICALENV_OFFSET}},
1465             {JSType::JS_GENERATOR_FUNCTION, {}},
1466             {JSType::JS_GENERATOR_OBJECT, {
1467                 JSGeneratorObject::GENERATOR_RESUME_RESULT_OFFSET - JSGeneratorObject::GENERATOR_CONTEXT_OFFSET,
1468                 JSGeneratorObject::TASK_INFO_OFFSET - JSGeneratorObject::GENERATOR_RESUME_RESULT_OFFSET}},
1469             {JSType::JS_GLOBAL_OBJECT, {}},
1470             {JSType::JS_INT16_ARRAY, {
1471                 JSTypedArray::TYPED_ARRAY_NAME_OFFSET - JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET,
1472                 JSTypedArray::BYTE_LENGTH_OFFSET - JSTypedArray::TYPED_ARRAY_NAME_OFFSET}},
1473             {JSType::JS_INT32_ARRAY, {
1474                 JSTypedArray::TYPED_ARRAY_NAME_OFFSET - JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET,
1475                 JSTypedArray::BYTE_LENGTH_OFFSET - JSTypedArray::TYPED_ARRAY_NAME_OFFSET}},
1476             {JSType::JS_INT8_ARRAY, {
1477                 JSTypedArray::TYPED_ARRAY_NAME_OFFSET - JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET,
1478                 JSTypedArray::BYTE_LENGTH_OFFSET - JSTypedArray::TYPED_ARRAY_NAME_OFFSET}},
1479             {JSType::JS_INTL, {JSIntl::SIZE - JSIntl::FALLBACK_SYMBOL}},
1480             {JSType::JS_INTL_BOUND_FUNCTION, {
1481                 JSIntlBoundFunction::DATETIME_FORMAT_OFFSET - JSIntlBoundFunction::NUMBER_FORMAT_OFFSET,
1482                 JSIntlBoundFunction::COLLATOR_OFFSET - JSIntlBoundFunction::DATETIME_FORMAT_OFFSET,
1483                 JSIntlBoundFunction::SIZE - JSIntlBoundFunction::COLLATOR_OFFSET}},
1484             {JSType::JS_ITERATOR, {JSObject::ELEMENTS_OFFSET - JSObject::PROPERTIES_OFFSET,
1485                                    JSObject::SIZE - JSObject::ELEMENTS_OFFSET}},
1486             {JSType::JS_LIST_FORMAT, {JSListFormat::ICU_LIST_FORMAT - JSListFormat::LOCALE_OFFSET,
1487                                       JSListFormat::BIT_FIELD_OFFSET - JSListFormat::ICU_LIST_FORMAT}},
1488             {JSType::JS_LOCALE, {JSLocale::SIZE - JSLocale::ICU_FIELD_OFFSET}},
1489             {JSType::JS_MAP, {JSMap::SIZE - JSMap::LINKED_MAP_OFFSET}},
1490             {JSType::JS_MAP_ITERATOR, {JSMapIterator::NEXT_INDEX_OFFSET - JSMapIterator::ITERATED_MAP_OFFSET}},
1491             {JSType::JS_MODULE_NAMESPACE, {
1492                 ModuleNamespace::EXPORTS_OFFSET - ModuleNamespace::MODULE_OFFSET,
1493                 ModuleNamespace::DEREGISTER_PROCESSION_OFFSET - ModuleNamespace::EXPORTS_OFFSET,
1494                 ModuleNamespace::SIZE - ModuleNamespace::DEREGISTER_PROCESSION_OFFSET}},
1495             {JSType::JS_NATIVE_POINTER, {
1496                 JSNativePointer::FLAG_OFFSET- JSNativePointer::DATA_SIZE_OFFSET}},
1497             {JSType::JS_NUMBER_FORMAT, {
1498                 JSNumberFormat::NUMBER_STRING_SYSTEM_OFFSET - JSNumberFormat::LOCALE_OFFSET,
1499                 JSNumberFormat::CURRENCY_OFFSET - JSNumberFormat::NUMBER_STRING_SYSTEM_OFFSET,
1500                 JSNumberFormat::UNIT_OFFSET - JSNumberFormat::CURRENCY_OFFSET,
1501                 JSNumberFormat::MINIMUM_INTEGER_DIGITS_OFFSET - JSNumberFormat::UNIT_OFFSET,
1502                 JSNumberFormat::MINIMUM_FRACTION_DIGITS_OFFSET - JSNumberFormat::MINIMUM_INTEGER_DIGITS_OFFSET,
1503                 JSNumberFormat::MAXIMUM_FRACTION_DIGITS_OFFSET - JSNumberFormat::MINIMUM_FRACTION_DIGITS_OFFSET,
1504                 JSNumberFormat::MINIMUM_SIGNIFICANT_DIGITS_OFFSET - JSNumberFormat::MAXIMUM_FRACTION_DIGITS_OFFSET,
1505                 JSNumberFormat::MAXIMUM_SIGNIFICANT_DIGITS_OFFSET - JSNumberFormat::MINIMUM_SIGNIFICANT_DIGITS_OFFSET,
1506                 JSNumberFormat::USER_GROUPING_OFFSET - JSNumberFormat::MAXIMUM_SIGNIFICANT_DIGITS_OFFSET,
1507                 JSNumberFormat::BOUND_FORMAT_OFFSET - JSNumberFormat::USER_GROUPING_OFFSET,
1508                 JSNumberFormat::ICU_FIELD_OFFSET - JSNumberFormat::BOUND_FORMAT_OFFSET,
1509                 JSNumberFormat::BIT_FIELD_OFFSET - JSNumberFormat::ICU_FIELD_OFFSET}},
1510             {JSType::JS_OBJECT, {
1511                 JSObject::ELEMENTS_OFFSET - JSObject::PROPERTIES_OFFSET,
1512                 JSObject::SIZE - JSObject::ELEMENTS_OFFSET}},
1513             {JSType::JS_OOM_ERROR, {
1514                 JSObject::ELEMENTS_OFFSET - JSObject::PROPERTIES_OFFSET,
1515                 JSObject::SIZE - JSObject::ELEMENTS_OFFSET}},
1516             {JSType::JS_PLURAL_RULES, {
1517                 JSPluralRules::MINIMUM_INTEGER_DIGITS_OFFSET - JSPluralRules::LOCALE_OFFSET,
1518                 JSPluralRules::MINIMUM_FRACTION_DIGITS_OFFSET - JSPluralRules::MINIMUM_INTEGER_DIGITS_OFFSET,
1519                 JSPluralRules::MAXIMUM_FRACTION_DIGITS_OFFSET - JSPluralRules::MINIMUM_FRACTION_DIGITS_OFFSET,
1520                 JSPluralRules::MININUM_SIGNIFICANT_DIGITS_OFFSET - JSPluralRules::MAXIMUM_FRACTION_DIGITS_OFFSET,
1521                 JSPluralRules::MAXINUM_SIGNIFICANT_DIGITS_OFFSET - JSPluralRules::MININUM_SIGNIFICANT_DIGITS_OFFSET,
1522                 JSPluralRules::ICU_PLURAL_RULES_OFFSET - JSPluralRules::MAXINUM_SIGNIFICANT_DIGITS_OFFSET,
1523                 JSPluralRules::ICU_NUMBER_FORMAT_OFFSET - JSPluralRules::ICU_PLURAL_RULES_OFFSET,
1524                 JSPluralRules::BIT_FIELD_OFFSET - JSPluralRules::ICU_NUMBER_FORMAT_OFFSET}},
1525             {JSType::JS_PRIMITIVE_REF, {JSPrimitiveRef::SIZE - JSPrimitiveRef::VALUE_OFFSET}},
1526             {JSType::JS_PROMISE, {
1527                 JSPromise::PROMISE_FULFILL_REACTIONS_OFFSET - JSPromise::PROMISE_RESULT_OFFSET,
1528                 JSPromise::PROMISE_REJECT_REACTIONS_OFFSET - JSPromise::PROMISE_FULFILL_REACTIONS_OFFSET,
1529                 JSPromise::BIT_FIELD_OFFSET - JSPromise::PROMISE_REJECT_REACTIONS_OFFSET}},
1530             {JSType::JS_PROMISE_ALL_RESOLVE_ELEMENT_FUNCTION, {
1531                 JSPromiseAllResolveElementFunction::VALUES_OFFSET - JSPromiseAllResolveElementFunction::INDEX_OFFSET,
1532                 JSPromiseAllResolveElementFunction::CAPABILITIES_OFFSET - JSPromiseAllResolveElementFunction::VALUES_OFFSET,
1533                 JSPromiseAllResolveElementFunction::REMAINING_ELEMENTS_OFFSET - JSPromiseAllResolveElementFunction::CAPABILITIES_OFFSET,
1534                 JSPromiseAllResolveElementFunction::ALREADY_CALLED_OFFSET - JSPromiseAllResolveElementFunction::REMAINING_ELEMENTS_OFFSET,
1535                 JSPromiseAllResolveElementFunction::SIZE - JSPromiseAllResolveElementFunction::ALREADY_CALLED_OFFSET}},
1536             {JSType::JS_PROMISE_ALL_SETTLED_ELEMENT_FUNCTION, {
1537                 JSPromiseAllSettledElementFunction::VALUES_OFFSET - JSPromiseAllSettledElementFunction::ALREADY_CALLED_OFFSET,
1538                 JSPromiseAllSettledElementFunction::CAPABILITY_OFFSET - JSPromiseAllSettledElementFunction::VALUES_OFFSET,
1539                 JSPromiseAllSettledElementFunction::REMAINING_ELEMENTS_OFFSET - JSPromiseAllSettledElementFunction::CAPABILITY_OFFSET,
1540                 JSPromiseAllSettledElementFunction::INDEX_OFFSET - JSPromiseAllSettledElementFunction::REMAINING_ELEMENTS_OFFSET}},
1541             {JSType::JS_PROMISE_ANY_REJECT_ELEMENT_FUNCTION, {
1542                 JSPromiseAnyRejectElementFunction::CAPABILITY_OFFSET - JSPromiseAnyRejectElementFunction::ERRORS_OFFSET,
1543                 JSPromiseAnyRejectElementFunction::REMAINING_ELEMENTS_OFFSET - JSPromiseAnyRejectElementFunction::CAPABILITY_OFFSET,
1544                 JSPromiseAnyRejectElementFunction::ALREADY_CALLED_OFFSET - JSPromiseAnyRejectElementFunction::REMAINING_ELEMENTS_OFFSET,
1545                 JSPromiseAnyRejectElementFunction::INDEX_OFFSET - JSPromiseAnyRejectElementFunction::ALREADY_CALLED_OFFSET}},
1546             {JSType::JS_PROMISE_EXECUTOR_FUNCTION, {
1547                 JSPromiseExecutorFunction::SIZE - JSPromiseExecutorFunction::CAPABILITY_OFFSET}},
1548             {JSType::JS_PROMISE_FINALLY_FUNCTION, {
1549                 JSPromiseFinallyFunction::ONFINALLY_OFFSET - JSPromiseFinallyFunction::CONSTRUCTOR_OFFSET,
1550                 JSPromiseFinallyFunction::SIZE - JSPromiseFinallyFunction::ONFINALLY_OFFSET}},
1551             {JSType::JS_PROMISE_REACTIONS_FUNCTION, {
1552                 JSPromiseReactionsFunction::ALREADY_RESOLVED_OFFSET - JSPromiseReactionsFunction::PROMISE_OFFSET,
1553                 JSPromiseReactionsFunction::SIZE - JSPromiseReactionsFunction::ALREADY_RESOLVED_OFFSET}},
1554             {JSType::JS_PROMISE_VALUE_THUNK_OR_THROWER_FUNCTION, {
1555                 JSPromiseValueThunkOrThrowerFunction::SIZE - JSPromiseValueThunkOrThrowerFunction::RESULT_OFFSET}},
1556             {JSType::JS_PROXY, {JSProxy::HANDLER_OFFSET - JSProxy::TARGET_OFFSET,
1557                                 JSProxy::METHOD_OFFSET - JSProxy::HANDLER_OFFSET,
1558                                 JSProxy::PRIVATE_FIELD_OFFSET - JSProxy::METHOD_OFFSET,
1559                                 JSProxy::BIT_FIELD_OFFSET - JSProxy::PRIVATE_FIELD_OFFSET}},
1560             {JSType::JS_PROXY_REVOC_FUNCTION, {
1561                 JSProxyRevocFunction::SIZE - JSProxyRevocFunction::REVOCABLE_PROXY_OFFSET}},
1562             {JSType::JS_RANGE_ERROR, {JSObject::ELEMENTS_OFFSET - JSObject::PROPERTIES_OFFSET,
1563                                       JSObject::SIZE - JSObject::ELEMENTS_OFFSET}},
1564             {JSType::JS_REALM, {JSRealm::GLOBAL_ENV_OFFSET - JSRealm::VALUE_OFFSET,
1565                                 JSRealm::SIZE - JSRealm::GLOBAL_ENV_OFFSET}},
1566             {JSType::JS_REFERENCE_ERROR, {JSObject::ELEMENTS_OFFSET - JSObject::PROPERTIES_OFFSET,
1567                                           JSObject::SIZE - JSObject::ELEMENTS_OFFSET}},
1568             {JSType::JS_REG_EXP, {JSRegExp::ORIGINAL_SOURCE_OFFSET - JSRegExp::REGEXP_BYTE_CODE_OFFSET,
1569                                  JSRegExp::ORIGINAL_FLAGS_OFFSET - JSRegExp::ORIGINAL_SOURCE_OFFSET,
1570                                  JSRegExp::GROUP_NAME_OFFSET - JSRegExp::ORIGINAL_FLAGS_OFFSET,
1571                                  JSRegExp::LENGTH_OFFSET - JSRegExp::GROUP_NAME_OFFSET}},
1572             {JSType::JS_REG_EXP_ITERATOR, {
1573                 JSRegExpIterator::ITERATED_STRING_OFFSET - JSRegExpIterator::ITERATING_REGEXP_OFFSET,
1574                 JSRegExpIterator::BIT_FIELD_OFFSET - JSRegExpIterator::ITERATED_STRING_OFFSET}},
1575             {JSType::JS_RELATIVE_TIME_FORMAT, {
1576                 JSRelativeTimeFormat::NUMBERING_SYSTEM_OFFSET - JSRelativeTimeFormat::LOCALE_OFFSET,
1577                 JSRelativeTimeFormat::ICU_FIELD_OFFSET - JSRelativeTimeFormat::NUMBERING_SYSTEM_OFFSET,
1578                 JSRelativeTimeFormat::BIT_FIELD_OFFSET - JSRelativeTimeFormat::ICU_FIELD_OFFSET}},
1579             {JSType::JS_SEGMENTER, {JSSegmenter::ICU_FIELD_OFFSET - JSSegmenter::LOCALE_OFFSET,
1580                                     JSSegmenter::BIT_FIELD_OFFSET - JSSegmenter::ICU_FIELD_OFFSET}},
1581             {JSType::JS_SEGMENTS, {JSSegments::SEGMENTS_STRING_OFFSET - JSSegments::ICU_FIELD_OFFSET,
1582                                    JSSegments::UNICODE_STRING_OFFSET - JSSegments::SEGMENTS_STRING_OFFSET,
1583                                    JSSegments::BIT_FIELD_OFFSET - JSSegments::UNICODE_STRING_OFFSET}},
1584             {JSType::JS_SEGMENT_ITERATOR, {
1585                 JSSegmentIterator::SEGMENTS_STRING_OFFSET - JSSegmentIterator::ICU_FIELD_OFFSET,
1586                 JSSegmentIterator::UNICODE_STRING_OFFSET - JSSegmentIterator::SEGMENTS_STRING_OFFSET,
1587                 JSSegmentIterator::BIT_FIELD_OFFSET - JSSegmentIterator::UNICODE_STRING_OFFSET}},
1588             {JSType::JS_SENDABLE_ARRAY_BUFFER, {
1589                 JSSendableArrayBuffer::BYTE_LENGTH_OFFSET- JSSendableArrayBuffer::DATA_OFFSET}},
1590             {JSType::JS_SET, {JSSet::SIZE - JSSet::LINKED_SET_OFFSET}},
1591             {JSType::JS_SET_ITERATOR, {
1592                 JSSetIterator::NEXT_INDEX_OFFSET - JSSetIterator::ITERATED_SET_OFFSET}},
1593             {JSType::JS_SHARED_ARRAY, {
1594                 JSSharedArray::MOD_RECORD_OFFSET - JSSharedArray::TRACK_INFO_OFFSET}},
1595             {JSType::JS_SHARED_ARRAY_BUFFER, {
1596                 JSArrayBuffer::BYTE_LENGTH_OFFSET - JSArrayBuffer::DATA_OFFSET}},
1597             {JSType::JS_SHARED_ARRAY_ITERATOR, {
1598                 JSSharedArrayIterator::NEXT_INDEX_OFFSET - JSSharedArrayIterator::ITERATED_ARRAY_OFFSET}},
1599             {JSType::JS_SHARED_ASYNC_FUNCTION, {}},
1600             {JSType::JS_SHARED_BIGINT64_ARRAY, {}},
1601             {JSType::JS_SHARED_BIGUINT64_ARRAY, {}},
1602             {JSType::JS_SHARED_FLOAT32_ARRAY, {}},
1603             {JSType::JS_SHARED_FLOAT64_ARRAY, {}},
1604             {JSType::JS_SHARED_FUNCTION, {}},
1605             {JSType::JS_SHARED_INT16_ARRAY, {}},
1606             {JSType::JS_SHARED_INT32_ARRAY, {}},
1607             {JSType::JS_SHARED_INT8_ARRAY, {}},
1608             {JSType::JS_SHARED_MAP, {
1609                 JSSharedMap::MOD_RECORD_OFFSET - JSSharedMap::LINKED_MAP_OFFSET}},
1610             {JSType::JS_SHARED_MAP_ITERATOR, {
1611                 JSSharedMapIterator::NEXT_INDEX_OFFSET - JSSharedMapIterator::ITERATED_MAP_OFFSET}},
1612             {JSType::JS_SHARED_OBJECT, {}},
1613             {JSType::JS_SHARED_SET, {
1614                 JSSharedSet::MOD_RECORD_OFFSET - JSSharedSet::LINKED_SET_OFFSET}},
1615             {JSType::JS_SHARED_SET_ITERATOR, {
1616                 JSSharedSetIterator::NEXT_INDEX_OFFSET - JSSharedSetIterator::ITERATED_SET_OFFSET}},
1617             {JSType::JS_SHARED_TYPED_ARRAY, {}},
1618             {JSType::JS_SHARED_UINT16_ARRAY, {}},
1619             {JSType::JS_SHARED_UINT32_ARRAY, {}},
1620             {JSType::JS_SHARED_UINT8_ARRAY, {}},
1621             {JSType::JS_SHARED_UINT8_CLAMPED_ARRAY, {}},
1622             {JSType::JS_STRING_ITERATOR, {
1623                 JSStringIterator::STRING_ITERATOR_NEXT_INDEX_OFFSET - JSStringIterator::ITERATED_STRING_OFFSET}},
1624             {JSType::JS_SYNTAX_ERROR, {
1625                 JSObject::ELEMENTS_OFFSET - JSObject::PROPERTIES_OFFSET, JSObject::SIZE - JSObject::ELEMENTS_OFFSET}},
1626             {JSType::JS_TERMINATION_ERROR, {
1627                 JSObject::ELEMENTS_OFFSET - JSObject::PROPERTIES_OFFSET, JSObject::SIZE - JSObject::ELEMENTS_OFFSET}},
1628             {JSType::JS_TYPED_ARRAY, {
1629                 JSTypedArray::TYPED_ARRAY_NAME_OFFSET - JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET,
1630                 JSTypedArray::BYTE_LENGTH_OFFSET - JSTypedArray::TYPED_ARRAY_NAME_OFFSET}},
1631             {JSType::JS_TYPE_ERROR, {
1632                 JSObject::ELEMENTS_OFFSET - JSObject::PROPERTIES_OFFSET, JSObject::SIZE - JSObject::ELEMENTS_OFFSET}},
1633             {JSType::JS_UINT16_ARRAY, {
1634                 JSTypedArray::TYPED_ARRAY_NAME_OFFSET - JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET,
1635                 JSTypedArray::BYTE_LENGTH_OFFSET - JSTypedArray::TYPED_ARRAY_NAME_OFFSET}},
1636             {JSType::JS_UINT32_ARRAY, {
1637                 JSTypedArray::TYPED_ARRAY_NAME_OFFSET - JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET,
1638                 JSTypedArray::BYTE_LENGTH_OFFSET - JSTypedArray::TYPED_ARRAY_NAME_OFFSET}},
1639             {JSType::JS_UINT8_ARRAY, {
1640                 JSTypedArray::TYPED_ARRAY_NAME_OFFSET - JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET,
1641                 JSTypedArray::BYTE_LENGTH_OFFSET - JSTypedArray::TYPED_ARRAY_NAME_OFFSET}},
1642             {JSType::JS_UINT8_CLAMPED_ARRAY, {
1643                 JSTypedArray::TYPED_ARRAY_NAME_OFFSET - JSTypedArray::VIEWED_ARRAY_BUFFER_OFFSET,
1644                 JSTypedArray::BYTE_LENGTH_OFFSET - JSTypedArray::TYPED_ARRAY_NAME_OFFSET}},
1645             {JSType::JS_URI_ERROR, {
1646                 JSObject::ELEMENTS_OFFSET - JSObject::PROPERTIES_OFFSET,
1647                 JSObject::SIZE - JSObject::ELEMENTS_OFFSET}},
1648             {JSType::JS_WEAK_MAP, {JSWeakMap::SIZE - JSWeakMap::LINKED_MAP_OFFSET}},
1649             {JSType::JS_WEAK_REF, {JSWeakRef::SIZE - JSWeakRef::WEAK_OBJECT_OFFSET}},
1650             {JSType::JS_WEAK_SET, {JSWeakSet::SIZE - JSWeakSet::LINKED_SET_OFFSET}},
1651             {JSType::LEXICAL_ENV, {}},
1652             {JSType::LINE_STRING, {}},
1653             {JSType::LINKED_NODE, {LinkedNode::SIZE - LinkedNode::NEXT_OFFSET}},
1654             {JSType::LOCAL_EXPORTENTRY_RECORD, {
1655                 LocalExportEntry::LOCAL_NAME_OFFSET - LocalExportEntry::LOCAL_EXPORT_ENTRY_OFFSET,
1656                 LocalExportEntry::LOCAL_INDEX_OFFSET - LocalExportEntry::LOCAL_NAME_OFFSET}},
1657             {JSType::MACHINE_CODE_OBJECT, {}},
1658             {JSType::MARKER_CELL, {}},
1659             {JSType::METHOD, {Method::CALL_FIELD_OFFSET - Method::CONSTANT_POOL_OFFSET}},
1660             {JSType::MICRO_JOB_QUEUE, {
1661                 job::MicroJobQueue::SCRIPT_JOB_QUEUE_OFFSET - job::MicroJobQueue::PROMISE_JOB_QUEUE_OFFSET,
1662                 job::MicroJobQueue::SIZE - job::MicroJobQueue::SCRIPT_JOB_QUEUE_OFFSET}},
1663             {JSType::MODULE_RECORD, {}},
1664             {JSType::MUTANT_TAGGED_ARRAY, {}},
1665             {JSType::NATIVE_MODULE_FAILURE_INFO, {
1666                 NativeModuleFailureInfo::SIZE - NativeModuleFailureInfo::ARK_NATIVE_MODULE_FAILURE_INFO_OFFSET}},
1667             {JSType::PENDING_JOB, {job::PendingJob::ARGUMENT_OFFSET - job::PendingJob::JOB_OFFSET,
1668                                    job::PendingJob::SIZE - job::PendingJob::ARGUMENT_OFFSET}},
1669             {JSType::PROFILE_TYPE_INFO, {}},
1670             {JSType::PROFILE_TYPE_INFO_CELL_0, {
1671                 ProfileTypeInfoCell::MACHINE_CODE_OFFSET - ProfileTypeInfoCell::VALUE_OFFSET,
1672                 ProfileTypeInfoCell::HANDLE_OFFSET - ProfileTypeInfoCell::MACHINE_CODE_OFFSET,
1673                 ProfileTypeInfoCell::LAST_OFFSET - ProfileTypeInfoCell::HANDLE_OFFSET}},
1674             {JSType::PROFILE_TYPE_INFO_CELL_1, {
1675                 ProfileTypeInfoCell::MACHINE_CODE_OFFSET - ProfileTypeInfoCell::VALUE_OFFSET,
1676                 ProfileTypeInfoCell::HANDLE_OFFSET - ProfileTypeInfoCell::MACHINE_CODE_OFFSET,
1677                 ProfileTypeInfoCell::LAST_OFFSET - ProfileTypeInfoCell::HANDLE_OFFSET}},
1678             {JSType::PROFILE_TYPE_INFO_CELL_N, {
1679                 ProfileTypeInfoCell::MACHINE_CODE_OFFSET - ProfileTypeInfoCell::VALUE_OFFSET,
1680                 ProfileTypeInfoCell::HANDLE_OFFSET - ProfileTypeInfoCell::MACHINE_CODE_OFFSET,
1681                 ProfileTypeInfoCell::LAST_OFFSET - ProfileTypeInfoCell::HANDLE_OFFSET}},
1682             {JSType::PROGRAM, {Program::SIZE - Program::MAIN_FUNCTION_OFFSET}},
1683             {JSType::PROMISE_CAPABILITY, {
1684                 PromiseCapability::RESOLVE_OFFSET - PromiseCapability::PROMISE_OFFSET,
1685                 PromiseCapability::REJECT_OFFSET - PromiseCapability::RESOLVE_OFFSET,
1686                 PromiseCapability::SIZE - PromiseCapability::REJECT_OFFSET}},
1687             {JSType::PROMISE_ITERATOR_RECORD, {
1688                 PromiseIteratorRecord::BIT_FIELD_OFFSET - PromiseIteratorRecord::ITERATOR_OFFSET}},
1689             {JSType::PROMISE_REACTIONS, {
1690                 PromiseReaction::HANDLER_OFFSET - PromiseReaction::PROMISE_CAPABILITY_OFFSET,
1691                 PromiseReaction::BIT_FIELD_OFFSET - PromiseReaction::HANDLER_OFFSET}},
1692             {JSType::PROMISE_RECORD, {PromiseRecord::SIZE - PromiseRecord::VALUE_OFFSET}},
1693             {JSType::PROPERTY_BOX, {PropertyBox::SIZE - PropertyBox::VALUE_OFFSET}},
1694             {JSType::PROTOTYPE_HANDLER, {
1695                 PrototypeHandler::PROTO_CELL_OFFSET - PrototypeHandler::HANDLER_INFO_OFFSET,
1696                 PrototypeHandler::HOLDER_OFFSET - PrototypeHandler::PROTO_CELL_OFFSET,
1697                 PrototypeHandler::ACCESSOR_JSFUNCTION_OFFSET - PrototypeHandler::HOLDER_OFFSET,
1698                 PrototypeHandler::ACCESSOR_METHOD_ID_OFFSET - PrototypeHandler::PrototypeHandler::ACCESSOR_JSFUNCTION_OFFSET}},
1699             {JSType::PROTOTYPE_INFO, {
1700                 ProtoChangeDetails::REGISTER_INDEX_OFFSET - ProtoChangeDetails::CHANGE_LISTENER_OFFSET}},
1701             {JSType::PROTO_CHANGE_MARKER, {}},
1702             {JSType::RB_TREENODE, {
1703                 RBTreeNode::RIGHT_OFFSET - RBTreeNode::LEFT_OFFSET,
1704                 RBTreeNode::ISRED_OFFSET - RBTreeNode::RIGHT_OFFSET,
1705                 RBTreeNode::COUNT_OFFSET - RBTreeNode::ISRED_OFFSET}},
1706             {JSType::RESOLVEDBINDING_RECORD, {
1707                 ResolvedBinding::BINDING_NAME_OFFSET - ResolvedBinding::MODULE_OFFSET,
1708                 ResolvedBinding::SIZE - ResolvedBinding::BINDING_NAME_OFFSET}},
1709             {JSType::RESOLVEDINDEXBINDING_RECORD, {
1710                 ResolvedIndexBinding::INDEX_OFFSET - ResolvedIndexBinding::MODULE_OFFSET,
1711                 ResolvedIndexBinding::BIT_FIELD_OFFSET - ResolvedIndexBinding::INDEX_OFFSET,
1712                 ResolvedIndexBinding::END_OFFSET - ResolvedIndexBinding::BIT_FIELD_OFFSET}},
1713             {JSType::RESOLVEDRECORDBINDING_RECORD, {
1714                 ResolvedRecordBinding::BINDING_NAME_OFFSET - ResolvedRecordBinding::MODULE_RECORD_OFFSET,
1715                 ResolvedRecordBinding::SIZE - ResolvedRecordBinding::BINDING_NAME_OFFSET}},
1716             {JSType::RESOLVEDRECORDINDEXBINDING_RECORD, {
1717                 ResolvedRecordIndexBinding::ABC_FILE_NAME - ResolvedRecordIndexBinding::MODULE_RECORD_INDEX_OFFSET,
1718                 ResolvedRecordIndexBinding::INDEX_OFFSET - ResolvedRecordIndexBinding::ABC_FILE_NAME}},
1719             {JSType::RESOLVING_FUNCTIONS_RECORD, {
1720                 ResolvingFunctionsRecord::REJECT_FUNCTION_OFFSET - ResolvingFunctionsRecord::RESOLVE_FUNCTION_OFFSET,
1721                 ResolvingFunctionsRecord::SIZE - ResolvingFunctionsRecord::REJECT_FUNCTION_OFFSET}},
1722             {JSType::SENDABLE_ENV, {}},
1723             {JSType::SFUNCTION_ENV, {}},
1724             {JSType::JS_XREF_OBJECT, {}},
1725             {JSType::SLICED_STRING, {SlicedString::STARTINDEX_AND_FLAGS_OFFSET - SlicedString::PARENT_OFFSET}},
1726             {JSType::SOURCE_TEXT_MODULE_RECORD, {
1727                 SourceTextModule::NAMESPACE_OFFSET - SourceTextModule::SOURCE_TEXT_MODULE_OFFSET,
1728                 SourceTextModule::MODULE_REQUESTS_OFFSET - SourceTextModule::NAMESPACE_OFFSET,
1729                 SourceTextModule::REQUESTED_MODULES_OFFSET - SourceTextModule::MODULE_REQUESTS_OFFSET,
1730                 SourceTextModule::IMPORT_ENTRIES_OFFSET - SourceTextModule::REQUESTED_MODULES_OFFSET,
1731                 SourceTextModule::LOCAL_EXPORT_ENTTRIES_OFFSET - SourceTextModule::IMPORT_ENTRIES_OFFSET,
1732                 SourceTextModule::INDIRECT_EXPORT_ENTTRIES_OFFSET - SourceTextModule::LOCAL_EXPORT_ENTTRIES_OFFSET,
1733                 SourceTextModule::START_EXPORT_ENTTRIES_OFFSET - SourceTextModule::INDIRECT_EXPORT_ENTTRIES_OFFSET,
1734                 SourceTextModule::NAME_DICTIONARY_OFFSET - SourceTextModule::START_EXPORT_ENTTRIES_OFFSET,
1735                 SourceTextModule::CYCLE_ROOT_OFFSET - SourceTextModule::NAME_DICTIONARY_OFFSET,
1736                 SourceTextModule::TOP_LEVEL_CAPABILITY_OFFSET - SourceTextModule::CYCLE_ROOT_OFFSET,
1737                 SourceTextModule::ASYNC_PARENT_MODULES_OFFSET - SourceTextModule::TOP_LEVEL_CAPABILITY_OFFSET,
1738                 SourceTextModule::SENDABLE_ENV_OFFSET - SourceTextModule::ASYNC_PARENT_MODULES_OFFSET,
1739                 SourceTextModule::EXCEPTION_OFFSET - SourceTextModule::SENDABLE_ENV_OFFSET,
1740                 SourceTextModule::DFS_ANCESTOR_INDEX_OFFSET - SourceTextModule::EXCEPTION_OFFSET}},
1741             {JSType::STAR_EXPORTENTRY_RECORD, {StarExportEntry::SIZE - StarExportEntry::STAR_EXPORT_ENTRY_OFFSET}},
1742             {JSType::STORE_TS_HANDLER, {StoreAOTHandler::PROTO_CELL_OFFSET - StoreAOTHandler::HANDLER_INFO_OFFSET,
1743                                         StoreAOTHandler::HOLDER_OFFSET - StoreAOTHandler::PROTO_CELL_OFFSET,
1744                                         StoreAOTHandler::SIZE - StoreAOTHandler::HOLDER_OFFSET}},
1745             {JSType::SYMBOL, {JSSymbol::HASHFIELD_OFFSET - JSSymbol::DESCRIPTION_OFFSET}},
1746             {JSType::TAGGED_ARRAY, {
1747                 TaggedArray::EXTRA_LENGTH_OFFSET - TaggedArray::LENGTH_OFFSET, TaggedArray::LENGTH_OFFSET}},
1748             {JSType::TAGGED_DICTIONARY, {}},
1749             {JSType::TEMPLATE_MAP, {}},
1750             {JSType::TRACK_INFO, {
1751                 TrackInfo::CACHED_FUNC_OFFSET - TrackInfo::CACHED_HCLASS_OFFSET,
1752                 TrackInfo::BIT_FIELD_OFFSET - TrackInfo::CACHED_FUNC_OFFSET}},
1753             {JSType::TRANSITION_HANDLER, {
1754                 TransitionHandler::TRANSITION_HCLASS_OFFSET - TransitionHandler::HANDLER_INFO_OFFSET,
1755                 TransitionHandler::SIZE - TransitionHandler::TRANSITION_HCLASS_OFFSET}},
1756             {JSType::TRANS_WITH_PROTO_HANDLER, {
1757                 TransWithProtoHandler::TRANSITION_HCLASS_OFFSET - TransWithProtoHandler::HANDLER_INFO_OFFSET,
1758                 TransWithProtoHandler::PROTO_CELL_OFFSET - TransWithProtoHandler::TRANSITION_HCLASS_OFFSET,
1759                 TransWithProtoHandler::SIZE - TransWithProtoHandler::PROTO_CELL_OFFSET}},
1760             {JSType::TREE_STRING, {TreeString::SECOND_OFFSET - TreeString::FIRST_OFFSET,
1761                                    TreeString::SIZE - TreeString::SECOND_OFFSET}},
1762             {JSType::VTABLE, {}}
1763         };
1764     }
1765 
1766     ~JSMetadataTestHelper() = default;
1767 
1768     enum MetadataStatus {
1769         UNINITIALIZED = 0,
1770         INITIALIZED
1771     };
1772 
1773     struct Metadata {
1774         std::string name {};
1775         std::unordered_map<std::string, std::pair<int, int>> offsets {};
1776         int endOffset {};
1777         std::vector<std::string> parents {};
1778         int status {MetadataStatus::UNINITIALIZED};
1779     };
1780 
ReadAndParseTypeEnums(const std::string & filePath,CVector<std::string> & typeEnums)1781     void ReadAndParseTypeEnums(const std::string &filePath, CVector<std::string> &typeEnums)
1782     {
1783         std::ifstream jsonFile(filePath);
1784         if (!jsonFile.is_open()) {
1785             std::cout << "Fail to open type enums file: " << filePath << std::endl;
1786             return;
1787         }
1788         std::stringstream buffer;
1789         buffer << jsonFile.rdbuf();
1790         auto json = cJSON_ParseWithOpts(buffer.str().c_str(), nullptr, true);
1791         if (!json) {
1792             std::cout << "Fail to parse type enums cJSON" << std::endl;
1793             jsonFile.close();
1794             return;
1795         }
1796         jsonFile.close();
1797         cJSON *typeEnumsJson = cJSON_GetObjectItem(json, "type_enum");
1798         if (typeEnumsJson == nullptr) {
1799             std::cout << "Fail to get item \"type_enums\" from cJSON" << std::endl;
1800         }
1801         auto typeEnumsVisitor = [&typeEnums](const cJSON *item, int index) -> bool {
1802             typeEnums.push_back(item->string);
1803             return true;
1804         };
1805         if (!VisitArrayItems(typeEnumsJson, typeEnumsVisitor)) {
1806             std::cout << "Fail to get type enums: " << filePath << std::endl;
1807             return;
1808         }
1809     }
1810 
ReadAndParseMetadataJson(const std::string & filePath,Metadata & metadata)1811     void ReadAndParseMetadataJson(const std::string &filePath, Metadata &metadata)
1812     {
1813         // Open specific metadata json file and using cJSON to parse
1814         std::ifstream jsonFile(filePath);
1815         if (!jsonFile.is_open()) {
1816             std::cout << "Fail to open metadata file: " << filePath << std::endl;
1817             return;
1818         }
1819         std::stringstream buffer;
1820         buffer << jsonFile.rdbuf();
1821         auto json = cJSON_ParseWithOpts(buffer.str().c_str(), nullptr, true);
1822         if (!json) {
1823             std::cout << "Fail to read metadata file: " << filePath << std::endl;
1824             jsonFile.close();
1825             return;
1826         }
1827         jsonFile.close();
1828         // Get "name" from json and set it to metadata.name
1829         if (!GetStringFromJson(json, "name", metadata.name)) {
1830             std::cout << "Fail to read name: " << filePath << std::endl;
1831             return;
1832         }
1833         // Get "end_offset" from json and set it to metadata.endoffset
1834         if (!GetIntFromJson(json, "end_offset", metadata.endOffset)) {
1835             std::cout << "Fail to read endOffset: " << filePath << std::endl;
1836             return;
1837         }
1838         // Get "offsets" and "parents" arrays from json
1839         cJSON *offsets {};
1840         cJSON *parents {};
1841         if (!GetArrayFromJson(json, "offsets", &offsets)) {
1842             std::cout << "Fail to read offsets array: " << filePath << std::endl;
1843             return;
1844         }
1845         if (!GetArrayFromJson(json, "parents", &parents)) {
1846             std::cout << "Fail to read parents array: " << filePath << std::endl;
1847             return;
1848         }
1849         // Iterate over those two arrays and set items to metadata
1850         auto parentVisitor = [&filePath, &metadata](const cJSON *item, int index) -> bool {
1851             if (!cJSON_IsString(item)) {
1852                 std::cout << "Fail to visit parent: " << filePath << ", parents index: " << index << std::endl;
1853                 return false;
1854             }
1855             metadata.parents.emplace_back(item->valuestring);
1856             return true;
1857         };
1858         auto offsetVisitor = [&filePath, &metadata, this](const cJSON *item, int index) -> bool {
1859             std::string key {};
1860             int offset {};
1861             int size {};
1862             if (!GetStringFromJson(item, "name", key)) {
1863                 std::cout << "Fail to visit name: " << filePath << ", offsets index " << index << std::endl;
1864                 return false;
1865             }
1866             if (!GetIntFromJson(item, "offset", offset)) {
1867                 std::cout << "Fail to visit offset: " << filePath << ", offsets index " << index << std::endl;
1868                 return false;
1869             }
1870             if (!GetIntFromJson(item, "size", size)) {
1871                 std::cout << "Fail to visit size: " << filePath << ", offsets index " << index << std::endl;
1872                 return false;
1873             }
1874             metadata.offsets[key] = std::make_pair(offset, size);
1875             return true;
1876         };
1877         if (!VisitArrayItems(offsets, offsetVisitor)) {
1878             std::cout << "Fail to get offsets: " << filePath << std::endl;
1879             return;
1880         }
1881         if (!VisitArrayItems(parents, parentVisitor)) {
1882             std::cout << "Fail to get parents: " << filePath << std::endl;
1883             return;
1884         }
1885         // Set metadata status to INITIALIZED
1886         metadata.status = MetadataStatus::INITIALIZED;
1887     }
1888 
Test(JSType type,Metadata & metadata)1889     bool Test(JSType type, Metadata &metadata)
1890     {
1891         auto fieldNames = GetFieldNamesByType(type);
1892         auto fieldOffsets = GetFieldOffsetsByType(type);
1893         auto sizeTable = GetFieldSizesByType(type);
1894         // Fields count should be the same as offsets'
1895         if (fieldNames.size() != fieldOffsets.size()) {
1896             std::cout << "Type fields' number inconsistent with offsets' number" << std::endl;
1897             return false;
1898         }
1899         // check each [name, offset] pair
1900         int index = 0;
1901         for (; index < fieldNames.size(); index++) {
1902             if (index == fieldNames.size() - 1) {
1903                 // Check typename and endOffset, stored at the last index of each array
1904                 if (!CheckTypeNameAndEndOffset(metadata.name, fieldNames[index],
1905                                                metadata.endOffset, fieldOffsets[index])) {
1906                     return false;
1907                 }
1908             } else {
1909                 // Check individual fields
1910                 if (!CheckField(fieldNames[index], fieldOffsets[index], metadata, fieldOffsets[0], sizeTable[index])) {
1911                     return false;
1912                 }
1913             }
1914         }
1915         // If any field left in metadata that has not been checked, return false
1916         if (!CheckLeftoverFieldInMetadata(metadata)) {
1917             return false;
1918         }
1919         // Check if parent array is the same
1920         if (!CheckParents(type, metadata)) {
1921             return false;
1922         }
1923 
1924         return true;
1925     }
1926 
TestForTypeEnums(const CVector<std::string> typeEnums)1927     bool TestForTypeEnums(const CVector<std::string> typeEnums)
1928     {
1929         uint8_t type = 0;
1930         for (auto typeName : typeEnums) {
1931             CString typeDesc = JSHClass::GetJSTypeDesc(static_cast<JSType>(type));
1932             if (typeDesc.empty()) {
1933                 std::cout << "JSType " << int(type) << " got "
1934                           << typeName << ", missed in JSTYPE_DECL" << std::endl;
1935                 return false;
1936             }
1937             if (typeName != typeDesc.c_str()) {
1938                 std::cout << "JSType " << int(type) << " expected "
1939                           << typeDesc << ", but got "
1940                           << typeName << std::endl;
1941                 return false;
1942             }
1943             ++type;
1944         }
1945         return true;
1946     }
1947 
TestForDictionaryLayout(const std::string & filePath)1948     bool TestForDictionaryLayout(const std::string &filePath)
1949     {
1950         std::ifstream jsonFile(filePath);
1951         if (!jsonFile.is_open()) {
1952             std::cout << "Fail to open metadata file: " << filePath << std::endl;
1953             return false;
1954         }
1955         std::stringstream buffer;
1956         buffer << jsonFile.rdbuf();
1957         auto json = cJSON_ParseWithOpts(buffer.str().c_str(), nullptr, true);
1958         if (!json) {
1959             std::cout << "Fail to read metadata file: " << filePath << std::endl;
1960             jsonFile.close();
1961             return false;
1962         }
1963         jsonFile.close();
1964 
1965         int value;
1966         if (!GetIntFromJson(json, "key_index", value)) {
1967             std::cout << "Fail to get key_index: " << filePath << std::endl;
1968             return false;
1969         }
1970         if (value != NameDictionary::ENTRY_KEY_INDEX) {
1971             std::cout << "Dictionary layout key_index inconsistent: " << value << " ";
1972             std::cout << NameDictionary::ENTRY_KEY_INDEX << std::endl;
1973             return false;
1974         }
1975         if (!GetIntFromJson(json, "value_index", value)) {
1976             std::cout << "Fail to get value_index: " << filePath << std::endl;
1977             return false;
1978         }
1979         if (value != NameDictionary::ENTRY_VALUE_INDEX) {
1980             std::cout << "Dictionary layout value_index inconsistent: " << value << " ";
1981             std::cout << NameDictionary::ENTRY_VALUE_INDEX << std::endl;
1982             return false;
1983         }
1984         if (!GetIntFromJson(json, "detail_index", value)) {
1985             std::cout << "Fail to get detail_index: " << filePath << std::endl;
1986             return false;
1987         }
1988         if (value != NameDictionary::ENTRY_DETAILS_INDEX) {
1989             std::cout << "Dictionary layout detail_index inconsistent: " << value << " ";
1990             std::cout << NameDictionary::ENTRY_DETAILS_INDEX << std::endl;
1991             return false;
1992         }
1993         if (!GetIntFromJson(json, "entry_size", value)) {
1994             std::cout << "Fail to get entry_size: " << filePath << std::endl;
1995             return false;
1996         }
1997         if (value != NameDictionary::ENTRY_SIZE) {
1998             std::cout << "Dictionary layout entry_size inconsistent: " << value << " ";
1999             std::cout << NameDictionary::ENTRY_SIZE << std::endl;
2000             return false;
2001         }
2002         if (!GetIntFromJson(json, "header_size", value)) {
2003             std::cout << "Fail to get header_size: " << filePath << std::endl;
2004             return false;
2005         }
2006         if (value != NameDictionary::TABLE_HEADER_SIZE) {
2007             std::cout << "Dictionary layout header_size inconsistent: " << value << " ";
2008             std::cout << NameDictionary::TABLE_HEADER_SIZE << std::endl;
2009             return false;
2010         }
2011         return true;
2012     }
2013 
TestForTypeRange(std::string & filePath)2014     bool TestForTypeRange(std::string &filePath)
2015     {
2016         std::ifstream jsonFile(filePath);
2017         if (!jsonFile.is_open()) {
2018             std::cout << "Fail to open metadata file: " << filePath << std::endl;
2019             return false;
2020         }
2021         std::stringstream buffer;
2022         buffer << jsonFile.rdbuf();
2023         auto json = cJSON_ParseWithOpts(buffer.str().c_str(), nullptr, true);
2024         if (!json) {
2025             std::cout << "Fail to read metadata file: " << filePath << std::endl;
2026             jsonFile.close();
2027             return false;
2028         }
2029         jsonFile.close();
2030 
2031         std::string value;
2032         if (!GetStringFromJson(json, "string_first", value)) {
2033             std::cout << "Fail to read string_first: " << filePath << std::endl;
2034             return false;
2035         }
2036         if (value != "LINE_STRING") {
2037             std::cout << "string_first inconsistent" << std::endl;
2038             return false;
2039         }
2040         if (!GetStringFromJson(json, "string_last", value)) {
2041             std::cout << "Fail to read string_last: " << filePath << std::endl;
2042             return false;
2043         }
2044         if (value != "TREE_STRING") {
2045             std::cout << "string_last inconsistent" << std::endl;
2046             return false;
2047         }
2048         if (!GetStringFromJson(json, "js_object_first", value)) {
2049             std::cout << "Fail to read js_object_first: " << filePath << std::endl;
2050             return false;
2051         }
2052         if (value != "JS_OBJECT") {
2053             std::cout << "js_object_first inconsistent" << std::endl;
2054             return false;
2055         }
2056         if (!GetStringFromJson(json, "js_object_last", value)) {
2057             std::cout << "Fail to read js_object_last: " << filePath << std::endl;
2058             return false;
2059         }
2060         if (value != "JS_GLOBAL_OBJECT") {
2061             std::cout << "js_object_last inconsistent" << std::endl;
2062             return false;
2063         }
2064         return true;
2065     }
2066 
2067     static std::unordered_map<JSType, std::vector<std::string>> fieldNameTable_;
2068     static std::unordered_map<JSType, std::vector<size_t>> fieldOffsetTable_;
2069     static std::unordered_map<JSType, std::vector<std::string>> parentsTable_;
2070     static std::unordered_map<JSType, std::vector<size_t>> fieldSizeTable_;
2071 private:
GetFieldNamesByType(JSType type)2072     std::vector<std::string> GetFieldNamesByType(JSType type)
2073     {
2074         return HasTypeInFieldNameTable(type) ? fieldNameTable_.at(type) : std::vector<std::string>();
2075     }
2076 
GetFieldOffsetsByType(JSType type)2077     std::vector<size_t> GetFieldOffsetsByType(JSType type)
2078     {
2079         return HasTypeInFieldOffsetTable(type) ? fieldOffsetTable_.at(type) : std::vector<size_t>();
2080     }
2081 
GetParentsByType(JSType type)2082     std::vector<std::string> GetParentsByType(JSType type)
2083     {
2084         return HasTypeInParentsTable(type) ? parentsTable_.at(type) : std::vector<std::string>();
2085     }
2086 
GetFieldSizesByType(JSType type)2087     std::vector<size_t> GetFieldSizesByType(JSType type)
2088     {
2089         return HasTypeInFieldSizesTable(type) ? fieldSizeTable_.at(type) : std::vector<size_t>();
2090     }
2091 
HasTypeInFieldNameTable(JSType type)2092     bool HasTypeInFieldNameTable(JSType type)
2093     {
2094         return !fieldNameTable_.empty() && fieldNameTable_.find(type) != fieldNameTable_.end();
2095     }
2096 
HasTypeInFieldOffsetTable(JSType type)2097     bool HasTypeInFieldOffsetTable(JSType type)
2098     {
2099         return !fieldOffsetTable_.empty() && fieldOffsetTable_.find(type) != fieldOffsetTable_.end();
2100     }
2101 
HasTypeInFieldSizesTable(JSType type)2102     bool HasTypeInFieldSizesTable(JSType type)
2103     {
2104         return !fieldSizeTable_.empty() && fieldSizeTable_.find(type) != fieldSizeTable_.end();
2105     }
2106 
HasTypeInParentsTable(JSType type)2107     bool HasTypeInParentsTable(JSType type)
2108     {
2109         return !parentsTable_.empty() && parentsTable_.find(type) != parentsTable_.end();
2110     }
2111 
CheckTypeNameAndEndOffset(std::string & metaName,std::string & typeName,int metaEndOffset,int endOffset)2112     bool CheckTypeNameAndEndOffset(std::string &metaName, std::string &typeName, int metaEndOffset, int endOffset)
2113     {
2114         if (metaName != typeName || metaEndOffset != endOffset) {
2115             std::cout << "Type name or endOffset inconsistent" << std::endl;
2116             std::cout << "[" << metaName << "   " << metaEndOffset << "] [";
2117             std::cout << typeName << "   " << endOffset << "]" << std::endl;
2118             return false;
2119         }
2120         return true;
2121     }
2122 
CheckField(std::string & fieldName,int fieldOffset,Metadata & metadata,int offsetAlign,int size)2123     bool CheckField(std::string &fieldName, int fieldOffset, Metadata &metadata, int offsetAlign, int size)
2124     {
2125         if (metadata.offsets.find(fieldName) == metadata.offsets.end()) {
2126             // a field is defined in the code but not in metadata, ignored for now
2127             std::cout << "Type  " << metadata.name << " Field " << fieldName;
2128             std::cout << " is not defined in metadata" << std::endl;
2129             return true;
2130         }
2131         offsetAlign = metadata.name == "JS_NATIVE_POINTER" ? JSNativePointer::POINTER_OFFSET :
2132                       metadata.name == "JS_SHARED_ARRAY" ? JSSharedArray::LENGTH_OFFSET : offsetAlign;
2133         if ((fieldOffset - offsetAlign) != metadata.offsets[fieldName].first) {
2134             std::cout << "Type  " << metadata.name << " Field " << fieldName << " offset inconsistent" << std::endl;
2135             std::cout << "Metadata: " << metadata.offsets[fieldName].first;
2136             std::cout << ", Class definition: " << fieldOffset << std::endl;
2137             return false;
2138         }
2139         if (size != metadata.offsets[fieldName].second) {
2140             std::cout << "Type  " << metadata.name << " Field " << fieldName << " size inconsistent" << std::endl;
2141             std::cout << "Metadata: " << metadata.offsets[fieldName].second;
2142             std::cout << ", Class definition: " << size << std::endl;
2143             return false;
2144         }
2145         // remove fieldName in metadata that has been checked
2146         metadata.offsets.erase(fieldName);
2147         return true;
2148     }
2149 
CheckLeftoverFieldInMetadata(Metadata & metadata)2150     bool CheckLeftoverFieldInMetadata(Metadata &metadata)
2151     {
2152         if (!metadata.offsets.empty()) {
2153             std::cout << "Following fields of Type " << metadata.name;
2154             std::cout << ", defined in metadata has not been checked: " << std::endl;
2155             DumpFieldsInMetadata(metadata);
2156             return false;
2157         }
2158         return true;
2159     }
2160 
CheckParents(JSType type,Metadata & metadata)2161     bool CheckParents(JSType type, Metadata &metadata)
2162     {
2163         auto parents = GetParentsByType(type);
2164         if (parents.size() != metadata.parents.size()) {
2165             std::cout << "Type  " << metadata.name << " parents inconsistent" << std::endl;
2166             return false;
2167         }
2168         int index = 0;
2169         for (; index < parents.size(); index++) {
2170             if (parents.at(index) != metadata.parents.at(index)) {
2171                 std::cout << "Type  " << metadata.name << " parents inconsistent" << std::endl;
2172                 return false;
2173             }
2174         }
2175         return true;
2176     }
2177 
DumpFieldsInMetadata(Metadata & metadata)2178     void DumpFieldsInMetadata(Metadata &metadata)
2179     {
2180         for (const auto &field : metadata.offsets) {
2181             std::cout << "Field: " << field.first << " Offset: ";
2182             std::cout << field.second.first << " Size: " << field.second.second << std::endl;
2183         }
2184     }
2185 
GetStringFromJson(const cJSON * json,const char * key,std::string & value)2186     bool GetStringFromJson(const cJSON *json, const char *key, std::string &value)
2187     {
2188         auto item = cJSON_GetObjectItem(json, key);
2189         if (!item || !cJSON_IsString(item)) {
2190             return false;
2191         }
2192         value = item->valuestring;
2193         return true;
2194     }
2195 
GetIntFromJson(const cJSON * json,const char * key,int & value)2196     bool GetIntFromJson(const cJSON *json, const char *key, int &value)
2197     {
2198         auto item = cJSON_GetObjectItem(json, key);
2199         if (!item || !cJSON_IsNumber(item)) {
2200             return false;
2201         }
2202         value = static_cast<int>(item->valuedouble);
2203         return true;
2204     }
2205 
GetArrayFromJson(const cJSON * json,const char * key,cJSON ** value)2206     bool GetArrayFromJson(const cJSON *json, const char *key, cJSON **value)
2207     {
2208         auto item = cJSON_GetObjectItem(json, key);
2209         if (!item || !cJSON_IsArray(item)) {
2210             return false;
2211         }
2212         *value = item;
2213         return true;
2214     }
2215 
VisitArrayItems(const cJSON * json,ArrayVisitor & visitor)2216     bool VisitArrayItems(const cJSON *json, ArrayVisitor &visitor)
2217     {
2218         int size = cJSON_GetArraySize(json);
2219         if (size < 0) {
2220             return false;
2221         }
2222         for (int index = 0; index < size; index++) {
2223             cJSON *item = cJSON_GetArrayItem(json, index);
2224             if (!visitor(item, index)) {
2225                 return false;
2226             }
2227         }
2228         return true;
2229     }
2230 };
2231 
2232 std::unordered_map<JSType, std::vector<std::string>> JSMetadataTestHelper::fieldNameTable_ {};
2233 std::unordered_map<JSType, std::vector<size_t>> JSMetadataTestHelper::fieldOffsetTable_ {};
2234 std::unordered_map<JSType, std::vector<std::string>> JSMetadataTestHelper::parentsTable_ {};
2235 std::unordered_map<JSType, std::vector<size_t>> JSMetadataTestHelper::fieldSizeTable_ {};
2236 
HWTEST_F_L0(JSMetadataTest,TestTypeEnumOrder)2237 HWTEST_F_L0(JSMetadataTest, TestTypeEnumOrder)
2238 {
2239     JSMetadataTestHelper tester {};
2240     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"type_enums.json";
2241     CVector<std::string> typeEnums {};
2242 
2243     tester.ReadAndParseTypeEnums(metadataFilePath, typeEnums);
2244     ASSERT_EQ(typeEnums.size(), static_cast<size_t>(JSType::TYPE_LAST) + 1);
2245     ASSERT_TRUE(tester.TestForTypeEnums(typeEnums));
2246 }
2247 
HWTEST_F_L0(JSMetadataTest,TestHClassMetadata)2248 HWTEST_F_L0(JSMetadataTest, TestHClassMetadata)
2249 {
2250     JSMetadataTestHelper tester {};
2251     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"hclass.json";
2252     JSMetadataTestHelper::Metadata metadata {};
2253 
2254     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2255     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2256     ASSERT_TRUE(tester.Test(JSType::HCLASS, metadata));
2257 }
2258 
HWTEST_F_L0(JSMetadataTest,TestAccessorDataMetadata)2259 HWTEST_F_L0(JSMetadataTest, TestAccessorDataMetadata)
2260 {
2261     JSMetadataTestHelper tester {};
2262     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"accessor_data.json";
2263     JSMetadataTestHelper::Metadata metadata {};
2264 
2265     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2266     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2267     ASSERT_TRUE(tester.Test(JSType::ACCESSOR_DATA, metadata));
2268 }
2269 
HWTEST_F_L0(JSMetadataTest,TestAotLiteralInfoMetadata)2270 HWTEST_F_L0(JSMetadataTest, TestAotLiteralInfoMetadata)
2271 {
2272     JSMetadataTestHelper tester {};
2273     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"aot_literal_info.json";
2274     JSMetadataTestHelper::Metadata metadata {};
2275 
2276     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2277     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2278     ASSERT_TRUE(tester.Test(JSType::AOT_LITERAL_INFO, metadata));
2279 }
2280 
HWTEST_F_L0(JSMetadataTest,TestAsyncGeneratorRequestMetadata)2281 HWTEST_F_L0(JSMetadataTest, TestAsyncGeneratorRequestMetadata)
2282 {
2283     JSMetadataTestHelper tester {};
2284     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"async_generator_request.json";
2285     JSMetadataTestHelper::Metadata metadata {};
2286 
2287     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2288     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2289     ASSERT_TRUE(tester.Test(JSType::ASYNC_GENERATOR_REQUEST, metadata));
2290 }
2291 
HWTEST_F_L0(JSMetadataTest,TestAsyncIteratorRecordMetadata)2292 HWTEST_F_L0(JSMetadataTest, TestAsyncIteratorRecordMetadata)
2293 {
2294     JSMetadataTestHelper tester {};
2295     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"async_iterator_record.json";
2296     JSMetadataTestHelper::Metadata metadata {};
2297 
2298     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2299     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2300     ASSERT_TRUE(tester.Test(JSType::ASYNC_ITERATOR_RECORD, metadata));
2301 }
2302 
HWTEST_F_L0(JSMetadataTest,TestBigintMetadata)2303 HWTEST_F_L0(JSMetadataTest, TestBigintMetadata)
2304 {
2305     JSMetadataTestHelper tester {};
2306     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"bigint.json";
2307     JSMetadataTestHelper::Metadata metadata {};
2308 
2309     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2310     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2311     ASSERT_TRUE(tester.Test(JSType::BIGINT, metadata));
2312 }
2313 
HWTEST_F_L0(JSMetadataTest,TestByteArrayMetadata)2314 HWTEST_F_L0(JSMetadataTest, TestByteArrayMetadata)
2315 {
2316     JSMetadataTestHelper tester {};
2317     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"byte_array.json";
2318     JSMetadataTestHelper::Metadata metadata {};
2319 
2320     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2321     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2322     ASSERT_TRUE(tester.Test(JSType::BYTE_ARRAY, metadata));
2323 }
2324 
HWTEST_F_L0(JSMetadataTest,TestCellRecordMetadata)2325 HWTEST_F_L0(JSMetadataTest, TestCellRecordMetadata)
2326 {
2327     JSMetadataTestHelper tester {};
2328     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"cell_record.json";
2329     JSMetadataTestHelper::Metadata metadata {};
2330 
2331     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2332     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2333     ASSERT_TRUE(tester.Test(JSType::CELL_RECORD, metadata));
2334 }
2335 
HWTEST_F_L0(JSMetadataTest,TestClassInfoExtractorMetadata)2336 HWTEST_F_L0(JSMetadataTest, TestClassInfoExtractorMetadata)
2337 {
2338     JSMetadataTestHelper tester {};
2339     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"class_info_extractor.json";
2340     JSMetadataTestHelper::Metadata metadata {};
2341 
2342     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2343     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2344     ASSERT_TRUE(tester.Test(JSType::CLASS_INFO_EXTRACTOR, metadata));
2345 }
2346 
HWTEST_F_L0(JSMetadataTest,TestClassLiteralMetadata)2347 HWTEST_F_L0(JSMetadataTest, TestClassLiteralMetadata)
2348 {
2349     JSMetadataTestHelper tester {};
2350     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"class_literal.json";
2351     JSMetadataTestHelper::Metadata metadata {};
2352 
2353     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2354     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2355     ASSERT_TRUE(tester.Test(JSType::CLASS_LITERAL, metadata));
2356 }
2357 
HWTEST_F_L0(JSMetadataTest,TestCompletionRecordMetadata)2358 HWTEST_F_L0(JSMetadataTest, TestCompletionRecordMetadata)
2359 {
2360     JSMetadataTestHelper tester {};
2361     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"completion_record.json";
2362     JSMetadataTestHelper::Metadata metadata {};
2363 
2364     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2365     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2366     ASSERT_TRUE(tester.Test(JSType::COMPLETION_RECORD, metadata));
2367 }
2368 
HWTEST_F_L0(JSMetadataTest,TestConstantPoolMetadata)2369 HWTEST_F_L0(JSMetadataTest, TestConstantPoolMetadata)
2370 {
2371     JSMetadataTestHelper tester {};
2372     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"constant_pool.json";
2373     JSMetadataTestHelper::Metadata metadata {};
2374 
2375     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2376     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2377     ASSERT_TRUE(tester.Test(JSType::CONSTANT_POOL, metadata));
2378 }
2379 
HWTEST_F_L0(JSMetadataTest,TestCowMutantTaggedArrayMetadata)2380 HWTEST_F_L0(JSMetadataTest, TestCowMutantTaggedArrayMetadata)
2381 {
2382     JSMetadataTestHelper tester {};
2383     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"cow_mutant_tagged_array.json";
2384     JSMetadataTestHelper::Metadata metadata {};
2385 
2386     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2387     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2388     ASSERT_TRUE(tester.Test(JSType::COW_MUTANT_TAGGED_ARRAY, metadata));
2389 }
2390 
HWTEST_F_L0(JSMetadataTest,TestCowTaggedArrayMetadata)2391 HWTEST_F_L0(JSMetadataTest, TestCowTaggedArrayMetadata)
2392 {
2393     JSMetadataTestHelper tester {};
2394     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"cow_tagged_array.json";
2395     JSMetadataTestHelper::Metadata metadata {};
2396 
2397     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2398     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2399     ASSERT_TRUE(tester.Test(JSType::COW_TAGGED_ARRAY, metadata));
2400 }
2401 
HWTEST_F_L0(JSMetadataTest,TestExtraProfileTypeInfoMetadata)2402 HWTEST_F_L0(JSMetadataTest, TestExtraProfileTypeInfoMetadata)
2403 {
2404     JSMetadataTestHelper tester {};
2405     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"extra_profile_type_info.json";
2406     JSMetadataTestHelper::Metadata metadata {};
2407 
2408     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2409     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2410     ASSERT_TRUE(tester.Test(JSType::EXTRA_PROFILE_TYPE_INFO, metadata));
2411 }
2412 
HWTEST_F_L0(JSMetadataTest,TestFunctionTemplateMetadata)2413 HWTEST_F_L0(JSMetadataTest, TestFunctionTemplateMetadata)
2414 {
2415     JSMetadataTestHelper tester {};
2416     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"function_template.json";
2417     JSMetadataTestHelper::Metadata metadata {};
2418 
2419     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2420     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2421     ASSERT_TRUE(tester.Test(JSType::FUNCTION_TEMPLATE, metadata));
2422 }
2423 
HWTEST_F_L0(JSMetadataTest,TestGlobalEnvMetadata)2424 HWTEST_F_L0(JSMetadataTest, TestGlobalEnvMetadata)
2425 {
2426     JSMetadataTestHelper tester {};
2427     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"global_env.json";
2428     JSMetadataTestHelper::Metadata metadata {};
2429 
2430     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2431     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2432     ASSERT_TRUE(tester.Test(JSType::GLOBAL_ENV, metadata));
2433 }
2434 
HWTEST_F_L0(JSMetadataTest,TestImportentryRecordMetadata)2435 HWTEST_F_L0(JSMetadataTest, TestImportentryRecordMetadata)
2436 {
2437     JSMetadataTestHelper tester {};
2438     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"importentry_record.json";
2439     JSMetadataTestHelper::Metadata metadata {};
2440 
2441     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2442     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2443     ASSERT_TRUE(tester.Test(JSType::IMPORTENTRY_RECORD, metadata));
2444 }
2445 
HWTEST_F_L0(JSMetadataTest,TestIndirectExportentryRecordMetadata)2446 HWTEST_F_L0(JSMetadataTest, TestIndirectExportentryRecordMetadata)
2447 {
2448     JSMetadataTestHelper tester {};
2449     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"indirect_exportentry_record.json";
2450     JSMetadataTestHelper::Metadata metadata {};
2451 
2452     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2453     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2454     ASSERT_TRUE(tester.Test(JSType::INDIRECT_EXPORTENTRY_RECORD, metadata));
2455 }
2456 
HWTEST_F_L0(JSMetadataTest,TestInternalAccessorMetadata)2457 HWTEST_F_L0(JSMetadataTest, TestInternalAccessorMetadata)
2458 {
2459     JSMetadataTestHelper tester {};
2460     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"internal_accessor.json";
2461     JSMetadataTestHelper::Metadata metadata {};
2462 
2463     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2464     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2465     ASSERT_TRUE(tester.Test(JSType::INTERNAL_ACCESSOR, metadata));
2466 }
2467 
HWTEST_F_L0(JSMetadataTest,TestJsAggregateErrorMetadata)2468 HWTEST_F_L0(JSMetadataTest, TestJsAggregateErrorMetadata)
2469 {
2470     JSMetadataTestHelper tester {};
2471     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_aggregate_error.json";
2472     JSMetadataTestHelper::Metadata metadata {};
2473 
2474     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2475     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2476     ASSERT_TRUE(tester.Test(JSType::JS_AGGREGATE_ERROR, metadata));
2477 }
2478 
HWTEST_F_L0(JSMetadataTest,TestJsApiArraylistIteratorMetadata)2479 HWTEST_F_L0(JSMetadataTest, TestJsApiArraylistIteratorMetadata)
2480 {
2481     JSMetadataTestHelper tester {};
2482     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_arraylist_iterator.json";
2483     JSMetadataTestHelper::Metadata metadata {};
2484 
2485     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2486     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2487     ASSERT_TRUE(tester.Test(JSType::JS_API_ARRAYLIST_ITERATOR, metadata));
2488 }
2489 
HWTEST_F_L0(JSMetadataTest,TestJsApiArrayListMetadata)2490 HWTEST_F_L0(JSMetadataTest, TestJsApiArrayListMetadata)
2491 {
2492     JSMetadataTestHelper tester {};
2493     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_array_list.json";
2494     JSMetadataTestHelper::Metadata metadata {};
2495 
2496     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2497     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2498     ASSERT_TRUE(tester.Test(JSType::JS_API_ARRAY_LIST, metadata));
2499 }
2500 
HWTEST_F_L0(JSMetadataTest,TestJsApiBitvectorMetadata)2501 HWTEST_F_L0(JSMetadataTest, TestJsApiBitvectorMetadata)
2502 {
2503     JSMetadataTestHelper tester {};
2504     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_bitvector.json";
2505     JSMetadataTestHelper::Metadata metadata {};
2506 
2507     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2508     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2509     ASSERT_TRUE(tester.Test(JSType::JS_API_BITVECTOR, metadata));
2510 }
2511 
HWTEST_F_L0(JSMetadataTest,TestJsApiBitvectorIteratorMetadata)2512 HWTEST_F_L0(JSMetadataTest, TestJsApiBitvectorIteratorMetadata)
2513 {
2514     JSMetadataTestHelper tester {};
2515     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_bitvector_iterator.json";
2516     JSMetadataTestHelper::Metadata metadata {};
2517 
2518     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2519     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2520     ASSERT_TRUE(tester.Test(JSType::JS_API_BITVECTOR_ITERATOR, metadata));
2521 }
2522 
HWTEST_F_L0(JSMetadataTest,TestJsApiDequeMetadata)2523 HWTEST_F_L0(JSMetadataTest, TestJsApiDequeMetadata)
2524 {
2525     JSMetadataTestHelper tester {};
2526     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_deque.json";
2527     JSMetadataTestHelper::Metadata metadata {};
2528 
2529     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2530     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2531     ASSERT_TRUE(tester.Test(JSType::JS_API_DEQUE, metadata));
2532 }
2533 
HWTEST_F_L0(JSMetadataTest,TestJsApiDequeIteratorMetadata)2534 HWTEST_F_L0(JSMetadataTest, TestJsApiDequeIteratorMetadata)
2535 {
2536     JSMetadataTestHelper tester {};
2537     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_deque_iterator.json";
2538     JSMetadataTestHelper::Metadata metadata {};
2539 
2540     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2541     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2542     ASSERT_TRUE(tester.Test(JSType::JS_API_DEQUE_ITERATOR, metadata));
2543 }
2544 
HWTEST_F_L0(JSMetadataTest,TestJsApiHashmapIteratorMetadata)2545 HWTEST_F_L0(JSMetadataTest, TestJsApiHashmapIteratorMetadata)
2546 {
2547     JSMetadataTestHelper tester {};
2548     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_hashmap_iterator.json";
2549     JSMetadataTestHelper::Metadata metadata {};
2550 
2551     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2552     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2553     ASSERT_TRUE(tester.Test(JSType::JS_API_HASHMAP_ITERATOR, metadata));
2554 }
2555 
HWTEST_F_L0(JSMetadataTest,TestJsApiHashsetIteratorMetadata)2556 HWTEST_F_L0(JSMetadataTest, TestJsApiHashsetIteratorMetadata)
2557 {
2558     JSMetadataTestHelper tester {};
2559     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_hashset_iterator.json";
2560     JSMetadataTestHelper::Metadata metadata {};
2561 
2562     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2563     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2564     ASSERT_TRUE(tester.Test(JSType::JS_API_HASHSET_ITERATOR, metadata));
2565 }
2566 
HWTEST_F_L0(JSMetadataTest,TestJsApiHashMapMetadata)2567 HWTEST_F_L0(JSMetadataTest, TestJsApiHashMapMetadata)
2568 {
2569     JSMetadataTestHelper tester {};
2570     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_hash_map.json";
2571     JSMetadataTestHelper::Metadata metadata {};
2572 
2573     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2574     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2575     ASSERT_TRUE(tester.Test(JSType::JS_API_HASH_MAP, metadata));
2576 }
2577 
HWTEST_F_L0(JSMetadataTest,TestJsApiHashSetMetadata)2578 HWTEST_F_L0(JSMetadataTest, TestJsApiHashSetMetadata)
2579 {
2580     JSMetadataTestHelper tester {};
2581     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_hash_set.json";
2582     JSMetadataTestHelper::Metadata metadata {};
2583 
2584     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2585     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2586     ASSERT_TRUE(tester.Test(JSType::JS_API_HASH_SET, metadata));
2587 }
2588 
HWTEST_F_L0(JSMetadataTest,TestJsApiLightWeightMapMetadata)2589 HWTEST_F_L0(JSMetadataTest, TestJsApiLightWeightMapMetadata)
2590 {
2591     JSMetadataTestHelper tester {};
2592     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_light_weight_map.json";
2593     JSMetadataTestHelper::Metadata metadata {};
2594 
2595     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2596     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2597     ASSERT_TRUE(tester.Test(JSType::JS_API_LIGHT_WEIGHT_MAP, metadata));
2598 }
2599 
HWTEST_F_L0(JSMetadataTest,TestJsApiLightWeightMapIteratorMetadata)2600 HWTEST_F_L0(JSMetadataTest, TestJsApiLightWeightMapIteratorMetadata)
2601 {
2602     JSMetadataTestHelper tester {};
2603     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_light_weight_map_iterator.json";
2604     JSMetadataTestHelper::Metadata metadata {};
2605 
2606     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2607     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2608     ASSERT_TRUE(tester.Test(JSType::JS_API_LIGHT_WEIGHT_MAP_ITERATOR, metadata));
2609 }
2610 
HWTEST_F_L0(JSMetadataTest,TestJsApiLightWeightSetMetadata)2611 HWTEST_F_L0(JSMetadataTest, TestJsApiLightWeightSetMetadata)
2612 {
2613     JSMetadataTestHelper tester {};
2614     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_light_weight_set.json";
2615     JSMetadataTestHelper::Metadata metadata {};
2616 
2617     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2618     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2619     ASSERT_TRUE(tester.Test(JSType::JS_API_LIGHT_WEIGHT_SET, metadata));
2620 }
2621 
HWTEST_F_L0(JSMetadataTest,TestJsApiLightWeightSetIteratorMetadata)2622 HWTEST_F_L0(JSMetadataTest, TestJsApiLightWeightSetIteratorMetadata)
2623 {
2624     JSMetadataTestHelper tester {};
2625     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_light_weight_set_iterator.json";
2626     JSMetadataTestHelper::Metadata metadata {};
2627 
2628     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2629     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2630     ASSERT_TRUE(tester.Test(JSType::JS_API_LIGHT_WEIGHT_SET_ITERATOR, metadata));
2631 }
2632 
HWTEST_F_L0(JSMetadataTest,TestJsApiLinkedListMetadata)2633 HWTEST_F_L0(JSMetadataTest, TestJsApiLinkedListMetadata)
2634 {
2635     JSMetadataTestHelper tester {};
2636     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_linked_list.json";
2637     JSMetadataTestHelper::Metadata metadata {};
2638 
2639     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2640     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2641     ASSERT_TRUE(tester.Test(JSType::JS_API_LINKED_LIST, metadata));
2642 }
2643 
HWTEST_F_L0(JSMetadataTest,TestJsApiLinkedListIteratorMetadata)2644 HWTEST_F_L0(JSMetadataTest, TestJsApiLinkedListIteratorMetadata)
2645 {
2646     JSMetadataTestHelper tester {};
2647     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_linked_list_iterator.json";
2648     JSMetadataTestHelper::Metadata metadata {};
2649 
2650     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2651     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2652     ASSERT_TRUE(tester.Test(JSType::JS_API_LINKED_LIST_ITERATOR, metadata));
2653 }
2654 
HWTEST_F_L0(JSMetadataTest,TestJsApiListMetadata)2655 HWTEST_F_L0(JSMetadataTest, TestJsApiListMetadata)
2656 {
2657     JSMetadataTestHelper tester {};
2658     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_list.json";
2659     JSMetadataTestHelper::Metadata metadata {};
2660 
2661     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2662     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2663     ASSERT_TRUE(tester.Test(JSType::JS_API_LIST, metadata));
2664 }
2665 
HWTEST_F_L0(JSMetadataTest,TestJsApiListIteratorMetadata)2666 HWTEST_F_L0(JSMetadataTest, TestJsApiListIteratorMetadata)
2667 {
2668     JSMetadataTestHelper tester {};
2669     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_list_iterator.json";
2670     JSMetadataTestHelper::Metadata metadata {};
2671 
2672     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2673     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2674     ASSERT_TRUE(tester.Test(JSType::JS_API_LIST_ITERATOR, metadata));
2675 }
2676 
HWTEST_F_L0(JSMetadataTest,TestJsApiPlainArrayMetadata)2677 HWTEST_F_L0(JSMetadataTest, TestJsApiPlainArrayMetadata)
2678 {
2679     JSMetadataTestHelper tester {};
2680     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_plain_array.json";
2681     JSMetadataTestHelper::Metadata metadata {};
2682 
2683     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2684     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2685     ASSERT_TRUE(tester.Test(JSType::JS_API_PLAIN_ARRAY, metadata));
2686 }
2687 
HWTEST_F_L0(JSMetadataTest,TestJsApiPlainArrayIteratorMetadata)2688 HWTEST_F_L0(JSMetadataTest, TestJsApiPlainArrayIteratorMetadata)
2689 {
2690     JSMetadataTestHelper tester {};
2691     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_plain_array_iterator.json";
2692     JSMetadataTestHelper::Metadata metadata {};
2693 
2694     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2695     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2696     ASSERT_TRUE(tester.Test(JSType::JS_API_PLAIN_ARRAY_ITERATOR, metadata));
2697 }
2698 
HWTEST_F_L0(JSMetadataTest,TestJsApiQueueMetadata)2699 HWTEST_F_L0(JSMetadataTest, TestJsApiQueueMetadata)
2700 {
2701     JSMetadataTestHelper tester {};
2702     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_queue.json";
2703     JSMetadataTestHelper::Metadata metadata {};
2704 
2705     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2706     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2707     ASSERT_TRUE(tester.Test(JSType::JS_API_QUEUE, metadata));
2708 }
2709 
HWTEST_F_L0(JSMetadataTest,TestJsApiQueueIteratorMetadata)2710 HWTEST_F_L0(JSMetadataTest, TestJsApiQueueIteratorMetadata)
2711 {
2712     JSMetadataTestHelper tester {};
2713     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_queue_iterator.json";
2714     JSMetadataTestHelper::Metadata metadata {};
2715 
2716     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2717     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2718     ASSERT_TRUE(tester.Test(JSType::JS_API_QUEUE_ITERATOR, metadata));
2719 }
2720 
HWTEST_F_L0(JSMetadataTest,TestJsApiStackMetadata)2721 HWTEST_F_L0(JSMetadataTest, TestJsApiStackMetadata)
2722 {
2723     JSMetadataTestHelper tester {};
2724     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_stack.json";
2725     JSMetadataTestHelper::Metadata metadata {};
2726 
2727     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2728     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2729     ASSERT_TRUE(tester.Test(JSType::JS_API_STACK, metadata));
2730 }
2731 
HWTEST_F_L0(JSMetadataTest,TestJsApiStackIteratorMetadata)2732 HWTEST_F_L0(JSMetadataTest, TestJsApiStackIteratorMetadata)
2733 {
2734     JSMetadataTestHelper tester {};
2735     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_stack_iterator.json";
2736     JSMetadataTestHelper::Metadata metadata {};
2737 
2738     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2739     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2740     ASSERT_TRUE(tester.Test(JSType::JS_API_STACK_ITERATOR, metadata));
2741 }
2742 
HWTEST_F_L0(JSMetadataTest,TestJsApiTreemapIteratorMetadata)2743 HWTEST_F_L0(JSMetadataTest, TestJsApiTreemapIteratorMetadata)
2744 {
2745     JSMetadataTestHelper tester {};
2746     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_treemap_iterator.json";
2747     JSMetadataTestHelper::Metadata metadata {};
2748 
2749     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2750     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2751     ASSERT_TRUE(tester.Test(JSType::JS_API_TREEMAP_ITERATOR, metadata));
2752 }
2753 
HWTEST_F_L0(JSMetadataTest,TestJsApiTreesetIteratorMetadata)2754 HWTEST_F_L0(JSMetadataTest, TestJsApiTreesetIteratorMetadata)
2755 {
2756     JSMetadataTestHelper tester {};
2757     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_treeset_iterator.json";
2758     JSMetadataTestHelper::Metadata metadata {};
2759 
2760     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2761     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2762     ASSERT_TRUE(tester.Test(JSType::JS_API_TREESET_ITERATOR, metadata));
2763 }
2764 
HWTEST_F_L0(JSMetadataTest,TestJsApiTreeMapMetadata)2765 HWTEST_F_L0(JSMetadataTest, TestJsApiTreeMapMetadata)
2766 {
2767     JSMetadataTestHelper tester {};
2768     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_tree_map.json";
2769     JSMetadataTestHelper::Metadata metadata {};
2770 
2771     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2772     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2773     ASSERT_TRUE(tester.Test(JSType::JS_API_TREE_MAP, metadata));
2774 }
2775 
HWTEST_F_L0(JSMetadataTest,TestJsApiTreeSetMetadata)2776 HWTEST_F_L0(JSMetadataTest, TestJsApiTreeSetMetadata)
2777 {
2778     JSMetadataTestHelper tester {};
2779     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_tree_set.json";
2780     JSMetadataTestHelper::Metadata metadata {};
2781 
2782     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2783     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2784     ASSERT_TRUE(tester.Test(JSType::JS_API_TREE_SET, metadata));
2785 }
2786 
HWTEST_F_L0(JSMetadataTest,TestJsApiVectorMetadata)2787 HWTEST_F_L0(JSMetadataTest, TestJsApiVectorMetadata)
2788 {
2789     JSMetadataTestHelper tester {};
2790     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_vector.json";
2791     JSMetadataTestHelper::Metadata metadata {};
2792 
2793     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2794     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2795     ASSERT_TRUE(tester.Test(JSType::JS_API_VECTOR, metadata));
2796 }
2797 
HWTEST_F_L0(JSMetadataTest,TestJsApiVectorIteratorMetadata)2798 HWTEST_F_L0(JSMetadataTest, TestJsApiVectorIteratorMetadata)
2799 {
2800     JSMetadataTestHelper tester {};
2801     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_api_vector_iterator.json";
2802     JSMetadataTestHelper::Metadata metadata {};
2803 
2804     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2805     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2806     ASSERT_TRUE(tester.Test(JSType::JS_API_VECTOR_ITERATOR, metadata));
2807 }
2808 
HWTEST_F_L0(JSMetadataTest,TestJsArgumentsMetadata)2809 HWTEST_F_L0(JSMetadataTest, TestJsArgumentsMetadata)
2810 {
2811     JSMetadataTestHelper tester {};
2812     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_arguments.json";
2813     JSMetadataTestHelper::Metadata metadata {};
2814 
2815     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2816     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2817     ASSERT_TRUE(tester.Test(JSType::JS_ARGUMENTS, metadata));
2818 }
2819 
HWTEST_F_L0(JSMetadataTest,TestJsArrayMetadata)2820 HWTEST_F_L0(JSMetadataTest, TestJsArrayMetadata)
2821 {
2822     JSMetadataTestHelper tester {};
2823     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_array.json";
2824     JSMetadataTestHelper::Metadata metadata {};
2825 
2826     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2827     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2828     ASSERT_TRUE(tester.Test(JSType::JS_ARRAY, metadata));
2829 }
2830 
HWTEST_F_L0(JSMetadataTest,TestJsArrayBufferMetadata)2831 HWTEST_F_L0(JSMetadataTest, TestJsArrayBufferMetadata)
2832 {
2833     JSMetadataTestHelper tester {};
2834     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_array_buffer.json";
2835     JSMetadataTestHelper::Metadata metadata {};
2836 
2837     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2838     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2839     ASSERT_TRUE(tester.Test(JSType::JS_ARRAY_BUFFER, metadata));
2840 }
2841 
HWTEST_F_L0(JSMetadataTest,TestJsArrayIteratorMetadata)2842 HWTEST_F_L0(JSMetadataTest, TestJsArrayIteratorMetadata)
2843 {
2844     JSMetadataTestHelper tester {};
2845     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_array_iterator.json";
2846     JSMetadataTestHelper::Metadata metadata {};
2847 
2848     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2849     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2850     ASSERT_TRUE(tester.Test(JSType::JS_ARRAY_ITERATOR, metadata));
2851 }
2852 
HWTEST_F_L0(JSMetadataTest,TestJsAsynciteratorMetadata)2853 HWTEST_F_L0(JSMetadataTest, TestJsAsynciteratorMetadata)
2854 {
2855     JSMetadataTestHelper tester {};
2856     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_asynciterator.json";
2857     JSMetadataTestHelper::Metadata metadata {};
2858 
2859     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2860     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2861     ASSERT_TRUE(tester.Test(JSType::JS_ASYNCITERATOR, metadata));
2862 }
2863 
HWTEST_F_L0(JSMetadataTest,TestJsAsyncAwaitStatusFunctionMetadata)2864 HWTEST_F_L0(JSMetadataTest, TestJsAsyncAwaitStatusFunctionMetadata)
2865 {
2866     JSMetadataTestHelper tester {};
2867     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_async_await_status_function.json";
2868     JSMetadataTestHelper::Metadata metadata {};
2869 
2870     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2871     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2872     ASSERT_TRUE(tester.Test(JSType::JS_ASYNC_AWAIT_STATUS_FUNCTION, metadata));
2873 }
2874 
HWTEST_F_L0(JSMetadataTest,TestJsAsyncFromSyncIteratorMetadata)2875 HWTEST_F_L0(JSMetadataTest, TestJsAsyncFromSyncIteratorMetadata)
2876 {
2877     JSMetadataTestHelper tester {};
2878     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_async_from_sync_iterator.json";
2879     JSMetadataTestHelper::Metadata metadata {};
2880 
2881     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2882     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2883     ASSERT_TRUE(tester.Test(JSType::JS_ASYNC_FROM_SYNC_ITERATOR, metadata));
2884 }
2885 
HWTEST_F_L0(JSMetadataTest,TestJsAsyncFromSyncIterUnwarpFunctionMetadata)2886 HWTEST_F_L0(JSMetadataTest, TestJsAsyncFromSyncIterUnwarpFunctionMetadata)
2887 {
2888     JSMetadataTestHelper tester {};
2889     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_async_from_sync_iter_unwarp_function.json";
2890     JSMetadataTestHelper::Metadata metadata {};
2891 
2892     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2893     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2894     ASSERT_TRUE(tester.Test(JSType::JS_ASYNC_FROM_SYNC_ITER_UNWARP_FUNCTION, metadata));
2895 }
2896 
HWTEST_F_L0(JSMetadataTest,TestJsAsyncFunctionMetadata)2897 HWTEST_F_L0(JSMetadataTest, TestJsAsyncFunctionMetadata)
2898 {
2899     JSMetadataTestHelper tester {};
2900     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_async_function.json";
2901     JSMetadataTestHelper::Metadata metadata {};
2902 
2903     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2904     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2905     ASSERT_TRUE(tester.Test(JSType::JS_ASYNC_FUNCTION, metadata));
2906 }
2907 
HWTEST_F_L0(JSMetadataTest,TestJsAsyncFuncObjectMetadata)2908 HWTEST_F_L0(JSMetadataTest, TestJsAsyncFuncObjectMetadata)
2909 {
2910     JSMetadataTestHelper tester {};
2911     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_async_func_object.json";
2912     JSMetadataTestHelper::Metadata metadata {};
2913 
2914     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2915     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2916     ASSERT_TRUE(tester.Test(JSType::JS_ASYNC_FUNC_OBJECT, metadata));
2917 }
2918 
HWTEST_F_L0(JSMetadataTest,TestJsAsyncGeneratorFunctionMetadata)2919 HWTEST_F_L0(JSMetadataTest, TestJsAsyncGeneratorFunctionMetadata)
2920 {
2921     JSMetadataTestHelper tester {};
2922     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_async_generator_function.json";
2923     JSMetadataTestHelper::Metadata metadata {};
2924 
2925     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2926     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2927     ASSERT_TRUE(tester.Test(JSType::JS_ASYNC_GENERATOR_FUNCTION, metadata));
2928 }
2929 
HWTEST_F_L0(JSMetadataTest,TestJsAsyncGeneratorObjectMetadata)2930 HWTEST_F_L0(JSMetadataTest, TestJsAsyncGeneratorObjectMetadata)
2931 {
2932     JSMetadataTestHelper tester {};
2933     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_async_generator_object.json";
2934     JSMetadataTestHelper::Metadata metadata {};
2935 
2936     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2937     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2938     ASSERT_TRUE(tester.Test(JSType::JS_ASYNC_GENERATOR_OBJECT, metadata));
2939 }
2940 
HWTEST_F_L0(JSMetadataTest,TestJsAsyncGeneratorResumeNextReturnProcessorRstFtnMetadata)2941 HWTEST_F_L0(JSMetadataTest, TestJsAsyncGeneratorResumeNextReturnProcessorRstFtnMetadata)
2942 {
2943     JSMetadataTestHelper tester {};
2944     std::string metadataFilePath =
2945         METADATA_SOURCE_FILE_DIR"js_async_generator_resume_next.json";
2946     JSMetadataTestHelper::Metadata metadata {};
2947 
2948     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2949     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2950     ASSERT_TRUE(tester.Test(JSType::JS_ASYNC_GENERATOR_RESUME_NEXT_RETURN_PROCESSOR_RST_FTN, metadata));
2951 }
2952 
HWTEST_F_L0(JSMetadataTest,TestJsAsyncModuleFulfilledFunctionMetadata)2953 HWTEST_F_L0(JSMetadataTest, TestJsAsyncModuleFulfilledFunctionMetadata)
2954 {
2955     JSMetadataTestHelper tester {};
2956     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_async_module_fulfilled_function.json";
2957     JSMetadataTestHelper::Metadata metadata {};
2958 
2959     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2960     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2961     ASSERT_TRUE(tester.Test(JSType::JS_ASYNC_MODULE_FULFILLED_FUNCTION, metadata));
2962 }
2963 
HWTEST_F_L0(JSMetadataTest,TestJsAsyncModuleRejectedFunctionMetadata)2964 HWTEST_F_L0(JSMetadataTest, TestJsAsyncModuleRejectedFunctionMetadata)
2965 {
2966     JSMetadataTestHelper tester {};
2967     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_async_module_rejected_function.json";
2968     JSMetadataTestHelper::Metadata metadata {};
2969 
2970     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2971     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2972     ASSERT_TRUE(tester.Test(JSType::JS_ASYNC_MODULE_REJECTED_FUNCTION, metadata));
2973 }
2974 
HWTEST_F_L0(JSMetadataTest,TestJsBigint64ArrayMetadata)2975 HWTEST_F_L0(JSMetadataTest, TestJsBigint64ArrayMetadata)
2976 {
2977     JSMetadataTestHelper tester {};
2978     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_bigint64_array.json";
2979     JSMetadataTestHelper::Metadata metadata {};
2980 
2981     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2982     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2983     ASSERT_TRUE(tester.Test(JSType::JS_BIGINT64_ARRAY, metadata));
2984 }
2985 
HWTEST_F_L0(JSMetadataTest,TestJsBiguint64ArrayMetadata)2986 HWTEST_F_L0(JSMetadataTest, TestJsBiguint64ArrayMetadata)
2987 {
2988     JSMetadataTestHelper tester {};
2989     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_biguint64_array.json";
2990     JSMetadataTestHelper::Metadata metadata {};
2991 
2992     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
2993     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
2994     ASSERT_TRUE(tester.Test(JSType::JS_BIGUINT64_ARRAY, metadata));
2995 }
2996 
HWTEST_F_L0(JSMetadataTest,TestJsBoundFunctionMetadata)2997 HWTEST_F_L0(JSMetadataTest, TestJsBoundFunctionMetadata)
2998 {
2999     JSMetadataTestHelper tester {};
3000     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_bound_function.json";
3001     JSMetadataTestHelper::Metadata metadata {};
3002 
3003     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3004     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3005     ASSERT_TRUE(tester.Test(JSType::JS_BOUND_FUNCTION, metadata));
3006 }
3007 
HWTEST_F_L0(JSMetadataTest,TestJsCjsExportsMetadata)3008 HWTEST_F_L0(JSMetadataTest, TestJsCjsExportsMetadata)
3009 {
3010     JSMetadataTestHelper tester {};
3011     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_cjs_exports.json";
3012     JSMetadataTestHelper::Metadata metadata {};
3013 
3014     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3015     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3016     ASSERT_TRUE(tester.Test(JSType::JS_CJS_EXPORTS, metadata));
3017 }
3018 
HWTEST_F_L0(JSMetadataTest,TestJsCjsModuleMetadata)3019 HWTEST_F_L0(JSMetadataTest, TestJsCjsModuleMetadata)
3020 {
3021     JSMetadataTestHelper tester {};
3022     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_cjs_module.json";
3023     JSMetadataTestHelper::Metadata metadata {};
3024 
3025     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3026     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3027     ASSERT_TRUE(tester.Test(JSType::JS_CJS_MODULE, metadata));
3028 }
3029 
HWTEST_F_L0(JSMetadataTest,TestJsCjsRequireMetadata)3030 HWTEST_F_L0(JSMetadataTest, TestJsCjsRequireMetadata)
3031 {
3032     JSMetadataTestHelper tester {};
3033     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_cjs_require.json";
3034     JSMetadataTestHelper::Metadata metadata {};
3035 
3036     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3037     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3038     ASSERT_TRUE(tester.Test(JSType::JS_CJS_REQUIRE, metadata));
3039 }
3040 
HWTEST_F_L0(JSMetadataTest,TestJsCollatorMetadata)3041 HWTEST_F_L0(JSMetadataTest, TestJsCollatorMetadata)
3042 {
3043     JSMetadataTestHelper tester {};
3044     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_collator.json";
3045     JSMetadataTestHelper::Metadata metadata {};
3046 
3047     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3048     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3049     ASSERT_TRUE(tester.Test(JSType::JS_COLLATOR, metadata));
3050 }
3051 
HWTEST_F_L0(JSMetadataTest,TestJsDataViewMetadata)3052 HWTEST_F_L0(JSMetadataTest, TestJsDataViewMetadata)
3053 {
3054     JSMetadataTestHelper tester {};
3055     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_data_view.json";
3056     JSMetadataTestHelper::Metadata metadata {};
3057 
3058     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3059     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3060     ASSERT_TRUE(tester.Test(JSType::JS_DATA_VIEW, metadata));
3061 }
3062 
HWTEST_F_L0(JSMetadataTest,TestJsDateMetadata)3063 HWTEST_F_L0(JSMetadataTest, TestJsDateMetadata)
3064 {
3065     JSMetadataTestHelper tester {};
3066     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_date.json";
3067     JSMetadataTestHelper::Metadata metadata {};
3068 
3069     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3070     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3071     ASSERT_TRUE(tester.Test(JSType::JS_DATE, metadata));
3072 }
3073 
HWTEST_F_L0(JSMetadataTest,TestJsDateTimeFormatMetadata)3074 HWTEST_F_L0(JSMetadataTest, TestJsDateTimeFormatMetadata)
3075 {
3076     JSMetadataTestHelper tester {};
3077     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_date_time_format.json";
3078     JSMetadataTestHelper::Metadata metadata {};
3079 
3080     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3081     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3082     ASSERT_TRUE(tester.Test(JSType::JS_DATE_TIME_FORMAT, metadata));
3083 }
3084 
HWTEST_F_L0(JSMetadataTest,TestJsDisplaynamesMetadata)3085 HWTEST_F_L0(JSMetadataTest, TestJsDisplaynamesMetadata)
3086 {
3087     JSMetadataTestHelper tester {};
3088     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_displaynames.json";
3089     JSMetadataTestHelper::Metadata metadata {};
3090 
3091     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3092     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3093     ASSERT_TRUE(tester.Test(JSType::JS_DISPLAYNAMES, metadata));
3094 }
3095 
HWTEST_F_L0(JSMetadataTest,TestJsErrorMetadata)3096 HWTEST_F_L0(JSMetadataTest, TestJsErrorMetadata)
3097 {
3098     JSMetadataTestHelper tester {};
3099     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_error.json";
3100     JSMetadataTestHelper::Metadata metadata {};
3101 
3102     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3103     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3104     ASSERT_TRUE(tester.Test(JSType::JS_ERROR, metadata));
3105 }
3106 
HWTEST_F_L0(JSMetadataTest,TestJsEvalErrorMetadata)3107 HWTEST_F_L0(JSMetadataTest, TestJsEvalErrorMetadata)
3108 {
3109     JSMetadataTestHelper tester {};
3110     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_eval_error.json";
3111     JSMetadataTestHelper::Metadata metadata {};
3112 
3113     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3114     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3115     ASSERT_TRUE(tester.Test(JSType::JS_EVAL_ERROR, metadata));
3116 }
3117 
HWTEST_F_L0(JSMetadataTest,TestJsFinalizationRegistryMetadata)3118 HWTEST_F_L0(JSMetadataTest, TestJsFinalizationRegistryMetadata)
3119 {
3120     JSMetadataTestHelper tester {};
3121     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_finalization_registry.json";
3122     JSMetadataTestHelper::Metadata metadata {};
3123 
3124     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3125     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3126     ASSERT_TRUE(tester.Test(JSType::JS_FINALIZATION_REGISTRY, metadata));
3127 }
3128 
HWTEST_F_L0(JSMetadataTest,TestJsFloat32ArrayMetadata)3129 HWTEST_F_L0(JSMetadataTest, TestJsFloat32ArrayMetadata)
3130 {
3131     JSMetadataTestHelper tester {};
3132     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_float32_array.json";
3133     JSMetadataTestHelper::Metadata metadata {};
3134 
3135     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3136     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3137     ASSERT_TRUE(tester.Test(JSType::JS_FLOAT32_ARRAY, metadata));
3138 }
3139 
HWTEST_F_L0(JSMetadataTest,TestJsFloat64ArrayMetadata)3140 HWTEST_F_L0(JSMetadataTest, TestJsFloat64ArrayMetadata)
3141 {
3142     JSMetadataTestHelper tester {};
3143     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_float64_array.json";
3144     JSMetadataTestHelper::Metadata metadata {};
3145 
3146     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3147     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3148     ASSERT_TRUE(tester.Test(JSType::JS_FLOAT64_ARRAY, metadata));
3149 }
3150 
HWTEST_F_L0(JSMetadataTest,TestJsForinIteratorMetadata)3151 HWTEST_F_L0(JSMetadataTest, TestJsForinIteratorMetadata)
3152 {
3153     JSMetadataTestHelper tester {};
3154     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_forin_iterator.json";
3155     JSMetadataTestHelper::Metadata metadata {};
3156 
3157     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3158     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3159     ASSERT_TRUE(tester.Test(JSType::JS_FORIN_ITERATOR, metadata));
3160 }
3161 
HWTEST_F_L0(JSMetadataTest,TestJsFunctionMetadata)3162 HWTEST_F_L0(JSMetadataTest, TestJsFunctionMetadata)
3163 {
3164 #if defined(PANDA_TARGET_AMD64) || defined(PANDA_TARGET_ARM64)
3165     JSMetadataTestHelper tester {};
3166     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_function.json";
3167     JSMetadataTestHelper::Metadata metadata {};
3168 
3169     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3170     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3171     ASSERT_TRUE(tester.Test(JSType::JS_FUNCTION, metadata));
3172 #endif
3173 }
3174 
HWTEST_F_L0(JSMetadataTest,TestJsFunctionBaseMetadata)3175 HWTEST_F_L0(JSMetadataTest, TestJsFunctionBaseMetadata)
3176 {
3177 #if defined(PANDA_TARGET_AMD64) || defined(PANDA_TARGET_ARM64)
3178     JSMetadataTestHelper tester {};
3179     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_function_base.json";
3180     JSMetadataTestHelper::Metadata metadata {};
3181 
3182     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3183     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3184     ASSERT_TRUE(tester.Test(JSType::JS_FUNCTION_BASE, metadata));
3185 #endif
3186 }
3187 
HWTEST_F_L0(JSMetadataTest,TestJsGeneratorContextMetadata)3188 HWTEST_F_L0(JSMetadataTest, TestJsGeneratorContextMetadata)
3189 {
3190     JSMetadataTestHelper tester {};
3191     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_generator_context.json";
3192     JSMetadataTestHelper::Metadata metadata {};
3193 
3194     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3195     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3196     ASSERT_TRUE(tester.Test(JSType::JS_GENERATOR_CONTEXT, metadata));
3197 }
3198 
HWTEST_F_L0(JSMetadataTest,TestJsGeneratorFunctionMetadata)3199 HWTEST_F_L0(JSMetadataTest, TestJsGeneratorFunctionMetadata)
3200 {
3201     JSMetadataTestHelper tester {};
3202     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_generator_function.json";
3203     JSMetadataTestHelper::Metadata metadata {};
3204 
3205     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3206     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3207     ASSERT_TRUE(tester.Test(JSType::JS_GENERATOR_FUNCTION, metadata));
3208 }
3209 
HWTEST_F_L0(JSMetadataTest,TestJsGeneratorObjectMetadata)3210 HWTEST_F_L0(JSMetadataTest, TestJsGeneratorObjectMetadata)
3211 {
3212 #if defined(PANDA_TARGET_AMD64) || defined(PANDA_TARGET_ARM64)
3213     JSMetadataTestHelper tester {};
3214     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_generator_object.json";
3215     JSMetadataTestHelper::Metadata metadata {};
3216 
3217     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3218     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3219     ASSERT_TRUE(tester.Test(JSType::JS_GENERATOR_OBJECT, metadata));
3220 #endif
3221 }
3222 
HWTEST_F_L0(JSMetadataTest,TestJsGlobalObjectMetadata)3223 HWTEST_F_L0(JSMetadataTest, TestJsGlobalObjectMetadata)
3224 {
3225     JSMetadataTestHelper tester {};
3226     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_global_object.json";
3227     JSMetadataTestHelper::Metadata metadata {};
3228 
3229     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3230     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3231     ASSERT_TRUE(tester.Test(JSType::JS_GLOBAL_OBJECT, metadata));
3232 }
3233 
HWTEST_F_L0(JSMetadataTest,TestJsInt16ArrayMetadata)3234 HWTEST_F_L0(JSMetadataTest, TestJsInt16ArrayMetadata)
3235 {
3236     JSMetadataTestHelper tester {};
3237     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_int16_array.json";
3238     JSMetadataTestHelper::Metadata metadata {};
3239 
3240     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3241     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3242     ASSERT_TRUE(tester.Test(JSType::JS_INT16_ARRAY, metadata));
3243 }
3244 
HWTEST_F_L0(JSMetadataTest,TestJsInt32ArrayMetadata)3245 HWTEST_F_L0(JSMetadataTest, TestJsInt32ArrayMetadata)
3246 {
3247     JSMetadataTestHelper tester {};
3248     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_int32_array.json";
3249     JSMetadataTestHelper::Metadata metadata {};
3250 
3251     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3252     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3253     ASSERT_TRUE(tester.Test(JSType::JS_INT32_ARRAY, metadata));
3254 }
3255 
HWTEST_F_L0(JSMetadataTest,TestJsInt8ArrayMetadata)3256 HWTEST_F_L0(JSMetadataTest, TestJsInt8ArrayMetadata)
3257 {
3258     JSMetadataTestHelper tester {};
3259     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_int8_array.json";
3260     JSMetadataTestHelper::Metadata metadata {};
3261 
3262     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3263     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3264     ASSERT_TRUE(tester.Test(JSType::JS_INT8_ARRAY, metadata));
3265 }
3266 
HWTEST_F_L0(JSMetadataTest,TestJsIntlMetadata)3267 HWTEST_F_L0(JSMetadataTest, TestJsIntlMetadata)
3268 {
3269     JSMetadataTestHelper tester {};
3270     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_intl.json";
3271     JSMetadataTestHelper::Metadata metadata {};
3272 
3273     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3274     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3275     ASSERT_TRUE(tester.Test(JSType::JS_INTL, metadata));
3276 }
3277 
HWTEST_F_L0(JSMetadataTest,TestJsIntlBoundFunctionMetadata)3278 HWTEST_F_L0(JSMetadataTest, TestJsIntlBoundFunctionMetadata)
3279 {
3280     JSMetadataTestHelper tester {};
3281     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_intl_bound_function.json";
3282     JSMetadataTestHelper::Metadata metadata {};
3283 
3284     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3285     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3286     ASSERT_TRUE(tester.Test(JSType::JS_INTL_BOUND_FUNCTION, metadata));
3287 }
3288 
HWTEST_F_L0(JSMetadataTest,TestJsIteratorMetadata)3289 HWTEST_F_L0(JSMetadataTest, TestJsIteratorMetadata)
3290 {
3291     JSMetadataTestHelper tester {};
3292     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_iterator.json";
3293     JSMetadataTestHelper::Metadata metadata {};
3294 
3295     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3296     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3297     ASSERT_TRUE(tester.Test(JSType::JS_ITERATOR, metadata));
3298 }
3299 
HWTEST_F_L0(JSMetadataTest,TestJsListFormatMetadata)3300 HWTEST_F_L0(JSMetadataTest, TestJsListFormatMetadata)
3301 {
3302     JSMetadataTestHelper tester {};
3303     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_list_format.json";
3304     JSMetadataTestHelper::Metadata metadata {};
3305 
3306     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3307     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3308     ASSERT_TRUE(tester.Test(JSType::JS_LIST_FORMAT, metadata));
3309 }
3310 
HWTEST_F_L0(JSMetadataTest,TestJsLocaleMetadata)3311 HWTEST_F_L0(JSMetadataTest, TestJsLocaleMetadata)
3312 {
3313     JSMetadataTestHelper tester {};
3314     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_locale.json";
3315     JSMetadataTestHelper::Metadata metadata {};
3316 
3317     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3318     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3319     ASSERT_TRUE(tester.Test(JSType::JS_LOCALE, metadata));
3320 }
3321 
HWTEST_F_L0(JSMetadataTest,TestJsMapMetadata)3322 HWTEST_F_L0(JSMetadataTest, TestJsMapMetadata)
3323 {
3324     JSMetadataTestHelper tester {};
3325     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_map.json";
3326     JSMetadataTestHelper::Metadata metadata {};
3327 
3328     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3329     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3330     ASSERT_TRUE(tester.Test(JSType::JS_MAP, metadata));
3331 }
3332 
HWTEST_F_L0(JSMetadataTest,TestJsMapIteratorMetadata)3333 HWTEST_F_L0(JSMetadataTest, TestJsMapIteratorMetadata)
3334 {
3335     JSMetadataTestHelper tester {};
3336     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_map_iterator.json";
3337     JSMetadataTestHelper::Metadata metadata {};
3338 
3339     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3340     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3341     ASSERT_TRUE(tester.Test(JSType::JS_MAP_ITERATOR, metadata));
3342 }
3343 
HWTEST_F_L0(JSMetadataTest,TestJsModuleNamespaceMetadata)3344 HWTEST_F_L0(JSMetadataTest, TestJsModuleNamespaceMetadata)
3345 {
3346     JSMetadataTestHelper tester {};
3347     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_module_namespace.json";
3348     JSMetadataTestHelper::Metadata metadata {};
3349 
3350     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3351     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3352     ASSERT_TRUE(tester.Test(JSType::JS_MODULE_NAMESPACE, metadata));
3353 }
3354 
HWTEST_F_L0(JSMetadataTest,TestJsNativePointerMetadata)3355 HWTEST_F_L0(JSMetadataTest, TestJsNativePointerMetadata)
3356 {
3357 #if defined(PANDA_TARGET_AMD64) || defined(PANDA_TARGET_ARM64)
3358     JSMetadataTestHelper tester {};
3359     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_native_pointer.json";
3360     JSMetadataTestHelper::Metadata metadata {};
3361 
3362     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3363     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3364     ASSERT_TRUE(tester.Test(JSType::JS_NATIVE_POINTER, metadata));
3365 #endif
3366 }
3367 
HWTEST_F_L0(JSMetadataTest,TestJsNumberFormatMetadata)3368 HWTEST_F_L0(JSMetadataTest, TestJsNumberFormatMetadata)
3369 {
3370     JSMetadataTestHelper tester {};
3371     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_number_format.json";
3372     JSMetadataTestHelper::Metadata metadata {};
3373 
3374     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3375     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3376     ASSERT_TRUE(tester.Test(JSType::JS_NUMBER_FORMAT, metadata));
3377 }
3378 
HWTEST_F_L0(JSMetadataTest,TestJsObjectMetadata)3379 HWTEST_F_L0(JSMetadataTest, TestJsObjectMetadata)
3380 {
3381     JSMetadataTestHelper tester {};
3382     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_object.json";
3383     JSMetadataTestHelper::Metadata metadata {};
3384 
3385     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3386     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3387     ASSERT_TRUE(tester.Test(JSType::JS_OBJECT, metadata));
3388 }
3389 
HWTEST_F_L0(JSMetadataTest,TestJsOomErrorMetadata)3390 HWTEST_F_L0(JSMetadataTest, TestJsOomErrorMetadata)
3391 {
3392     JSMetadataTestHelper tester {};
3393     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_oom_error.json";
3394     JSMetadataTestHelper::Metadata metadata {};
3395 
3396     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3397     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3398     ASSERT_TRUE(tester.Test(JSType::JS_OOM_ERROR, metadata));
3399 }
3400 
HWTEST_F_L0(JSMetadataTest,TestJsPluralRulesMetadata)3401 HWTEST_F_L0(JSMetadataTest, TestJsPluralRulesMetadata)
3402 {
3403     JSMetadataTestHelper tester {};
3404     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_plural_rules.json";
3405     JSMetadataTestHelper::Metadata metadata {};
3406 
3407     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3408     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3409     ASSERT_TRUE(tester.Test(JSType::JS_PLURAL_RULES, metadata));
3410 }
3411 
HWTEST_F_L0(JSMetadataTest,TestJsPrimitiveRefMetadata)3412 HWTEST_F_L0(JSMetadataTest, TestJsPrimitiveRefMetadata)
3413 {
3414     JSMetadataTestHelper tester {};
3415     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_primitive_ref.json";
3416     JSMetadataTestHelper::Metadata metadata {};
3417 
3418     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3419     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3420     ASSERT_TRUE(tester.Test(JSType::JS_PRIMITIVE_REF, metadata));
3421 }
3422 
HWTEST_F_L0(JSMetadataTest,TestJsPromiseMetadata)3423 HWTEST_F_L0(JSMetadataTest, TestJsPromiseMetadata)
3424 {
3425     JSMetadataTestHelper tester {};
3426     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_promise.json";
3427     JSMetadataTestHelper::Metadata metadata {};
3428 
3429     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3430     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3431     ASSERT_TRUE(tester.Test(JSType::JS_PROMISE, metadata));
3432 }
3433 
HWTEST_F_L0(JSMetadataTest,TestJsPromiseAllResolveElementFunctionMetadata)3434 HWTEST_F_L0(JSMetadataTest, TestJsPromiseAllResolveElementFunctionMetadata)
3435 {
3436     JSMetadataTestHelper tester {};
3437     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_promise_all_resolve_element_function.json";
3438     JSMetadataTestHelper::Metadata metadata {};
3439 
3440     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3441     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3442     ASSERT_TRUE(tester.Test(JSType::JS_PROMISE_ALL_RESOLVE_ELEMENT_FUNCTION, metadata));
3443 }
3444 
HWTEST_F_L0(JSMetadataTest,TestJsPromiseAllSettledElementFunctionMetadata)3445 HWTEST_F_L0(JSMetadataTest, TestJsPromiseAllSettledElementFunctionMetadata)
3446 {
3447     JSMetadataTestHelper tester {};
3448     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_promise_all_settled_element_function.json";
3449     JSMetadataTestHelper::Metadata metadata {};
3450 
3451     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3452     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3453     ASSERT_TRUE(tester.Test(JSType::JS_PROMISE_ALL_SETTLED_ELEMENT_FUNCTION, metadata));
3454 }
3455 
HWTEST_F_L0(JSMetadataTest,TestJsPromiseAnyRejectElementFunctionMetadata)3456 HWTEST_F_L0(JSMetadataTest, TestJsPromiseAnyRejectElementFunctionMetadata)
3457 {
3458     JSMetadataTestHelper tester {};
3459     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_promise_any_reject_element_function.json";
3460     JSMetadataTestHelper::Metadata metadata {};
3461 
3462     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3463     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3464     ASSERT_TRUE(tester.Test(JSType::JS_PROMISE_ANY_REJECT_ELEMENT_FUNCTION, metadata));
3465 }
3466 
HWTEST_F_L0(JSMetadataTest,TestJsPromiseExecutorFunctionMetadata)3467 HWTEST_F_L0(JSMetadataTest, TestJsPromiseExecutorFunctionMetadata)
3468 {
3469     JSMetadataTestHelper tester {};
3470     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_promise_executor_function.json";
3471     JSMetadataTestHelper::Metadata metadata {};
3472 
3473     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3474     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3475     ASSERT_TRUE(tester.Test(JSType::JS_PROMISE_EXECUTOR_FUNCTION, metadata));
3476 }
3477 
HWTEST_F_L0(JSMetadataTest,TestJsPromiseFinallyFunctionMetadata)3478 HWTEST_F_L0(JSMetadataTest, TestJsPromiseFinallyFunctionMetadata)
3479 {
3480     JSMetadataTestHelper tester {};
3481     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_promise_finally_function.json";
3482     JSMetadataTestHelper::Metadata metadata {};
3483 
3484     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3485     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3486     ASSERT_TRUE(tester.Test(JSType::JS_PROMISE_FINALLY_FUNCTION, metadata));
3487 }
3488 
HWTEST_F_L0(JSMetadataTest,TestJsPromiseReactionsFunctionMetadata)3489 HWTEST_F_L0(JSMetadataTest, TestJsPromiseReactionsFunctionMetadata)
3490 {
3491     JSMetadataTestHelper tester {};
3492     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_promise_reactions_function.json";
3493     JSMetadataTestHelper::Metadata metadata {};
3494 
3495     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3496     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3497     ASSERT_TRUE(tester.Test(JSType::JS_PROMISE_REACTIONS_FUNCTION, metadata));
3498 }
3499 
HWTEST_F_L0(JSMetadataTest,TestJsPromiseValueThunkOrThrowerFunctionMetadata)3500 HWTEST_F_L0(JSMetadataTest, TestJsPromiseValueThunkOrThrowerFunctionMetadata)
3501 {
3502     JSMetadataTestHelper tester {};
3503     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_promise_value_thunk_or_thrower_function.json";
3504     JSMetadataTestHelper::Metadata metadata {};
3505 
3506     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3507     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3508     ASSERT_TRUE(tester.Test(JSType::JS_PROMISE_VALUE_THUNK_OR_THROWER_FUNCTION, metadata));
3509 }
3510 
HWTEST_F_L0(JSMetadataTest,TestJsProxyMetadata)3511 HWTEST_F_L0(JSMetadataTest, TestJsProxyMetadata)
3512 {
3513     JSMetadataTestHelper tester {};
3514     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_proxy.json";
3515     JSMetadataTestHelper::Metadata metadata {};
3516 
3517     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3518     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3519     ASSERT_TRUE(tester.Test(JSType::JS_PROXY, metadata));
3520 }
3521 
HWTEST_F_L0(JSMetadataTest,TestJsProxyRevocFunctionMetadata)3522 HWTEST_F_L0(JSMetadataTest, TestJsProxyRevocFunctionMetadata)
3523 {
3524     JSMetadataTestHelper tester {};
3525     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_proxy_revoc_function.json";
3526     JSMetadataTestHelper::Metadata metadata {};
3527 
3528     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3529     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3530     ASSERT_TRUE(tester.Test(JSType::JS_PROXY_REVOC_FUNCTION, metadata));
3531 }
3532 
HWTEST_F_L0(JSMetadataTest,TestJsRangeErrorMetadata)3533 HWTEST_F_L0(JSMetadataTest, TestJsRangeErrorMetadata)
3534 {
3535     JSMetadataTestHelper tester {};
3536     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_range_error.json";
3537     JSMetadataTestHelper::Metadata metadata {};
3538 
3539     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3540     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3541     ASSERT_TRUE(tester.Test(JSType::JS_RANGE_ERROR, metadata));
3542 }
3543 
HWTEST_F_L0(JSMetadataTest,TestJsRealmMetadata)3544 HWTEST_F_L0(JSMetadataTest, TestJsRealmMetadata)
3545 {
3546     JSMetadataTestHelper tester {};
3547     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_realm.json";
3548     JSMetadataTestHelper::Metadata metadata {};
3549 
3550     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3551     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3552     ASSERT_TRUE(tester.Test(JSType::JS_REALM, metadata));
3553 }
3554 
HWTEST_F_L0(JSMetadataTest,TestJsReferenceErrorMetadata)3555 HWTEST_F_L0(JSMetadataTest, TestJsReferenceErrorMetadata)
3556 {
3557     JSMetadataTestHelper tester {};
3558     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_reference_error.json";
3559     JSMetadataTestHelper::Metadata metadata {};
3560 
3561     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3562     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3563     ASSERT_TRUE(tester.Test(JSType::JS_REFERENCE_ERROR, metadata));
3564 }
3565 
HWTEST_F_L0(JSMetadataTest,TestJsRegExpMetadata)3566 HWTEST_F_L0(JSMetadataTest, TestJsRegExpMetadata)
3567 {
3568     JSMetadataTestHelper tester {};
3569     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_reg_exp.json";
3570     JSMetadataTestHelper::Metadata metadata {};
3571 
3572     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3573     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3574     ASSERT_TRUE(tester.Test(JSType::JS_REG_EXP, metadata));
3575 }
3576 
HWTEST_F_L0(JSMetadataTest,TestJsRegExpIteratorMetadata)3577 HWTEST_F_L0(JSMetadataTest, TestJsRegExpIteratorMetadata)
3578 {
3579     JSMetadataTestHelper tester {};
3580     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_reg_exp_iterator.json";
3581     JSMetadataTestHelper::Metadata metadata {};
3582 
3583     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3584     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3585     ASSERT_TRUE(tester.Test(JSType::JS_REG_EXP_ITERATOR, metadata));
3586 }
3587 
HWTEST_F_L0(JSMetadataTest,TestJsRelativeTimeFormatMetadata)3588 HWTEST_F_L0(JSMetadataTest, TestJsRelativeTimeFormatMetadata)
3589 {
3590     JSMetadataTestHelper tester {};
3591     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_relative_time_format.json";
3592     JSMetadataTestHelper::Metadata metadata {};
3593 
3594     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3595     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3596     ASSERT_TRUE(tester.Test(JSType::JS_RELATIVE_TIME_FORMAT, metadata));
3597 }
3598 
HWTEST_F_L0(JSMetadataTest,TestJsSegmenterMetadata)3599 HWTEST_F_L0(JSMetadataTest, TestJsSegmenterMetadata)
3600 {
3601     JSMetadataTestHelper tester {};
3602     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_segmenter.json";
3603     JSMetadataTestHelper::Metadata metadata {};
3604 
3605     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3606     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3607     ASSERT_TRUE(tester.Test(JSType::JS_SEGMENTER, metadata));
3608 }
3609 
HWTEST_F_L0(JSMetadataTest,TestJsSegmentsMetadata)3610 HWTEST_F_L0(JSMetadataTest, TestJsSegmentsMetadata)
3611 {
3612     JSMetadataTestHelper tester {};
3613     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_segments.json";
3614     JSMetadataTestHelper::Metadata metadata {};
3615 
3616     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3617     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3618     ASSERT_TRUE(tester.Test(JSType::JS_SEGMENTS, metadata));
3619 }
3620 
HWTEST_F_L0(JSMetadataTest,TestJsSegmentIteratorMetadata)3621 HWTEST_F_L0(JSMetadataTest, TestJsSegmentIteratorMetadata)
3622 {
3623     JSMetadataTestHelper tester {};
3624     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_segment_iterator.json";
3625     JSMetadataTestHelper::Metadata metadata {};
3626 
3627     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3628     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3629     ASSERT_TRUE(tester.Test(JSType::JS_SEGMENT_ITERATOR, metadata));
3630 }
3631 
HWTEST_F_L0(JSMetadataTest,TestJsSendableArrayBufferMetadata)3632 HWTEST_F_L0(JSMetadataTest, TestJsSendableArrayBufferMetadata)
3633 {
3634     JSMetadataTestHelper tester {};
3635     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_sendable_array_buffer.json";
3636     JSMetadataTestHelper::Metadata metadata {};
3637 
3638     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3639     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3640     ASSERT_TRUE(tester.Test(JSType::JS_SENDABLE_ARRAY_BUFFER, metadata));
3641 }
3642 
HWTEST_F_L0(JSMetadataTest,TestJsSetMetadata)3643 HWTEST_F_L0(JSMetadataTest, TestJsSetMetadata)
3644 {
3645     JSMetadataTestHelper tester {};
3646     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_set.json";
3647     JSMetadataTestHelper::Metadata metadata {};
3648 
3649     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3650     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3651     ASSERT_TRUE(tester.Test(JSType::JS_SET, metadata));
3652 }
3653 
HWTEST_F_L0(JSMetadataTest,TestJsSetIteratorMetadata)3654 HWTEST_F_L0(JSMetadataTest, TestJsSetIteratorMetadata)
3655 {
3656     JSMetadataTestHelper tester {};
3657     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_set_iterator.json";
3658     JSMetadataTestHelper::Metadata metadata {};
3659 
3660     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3661     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3662     ASSERT_TRUE(tester.Test(JSType::JS_SET_ITERATOR, metadata));
3663 }
3664 
HWTEST_F_L0(JSMetadataTest,TestJsSharedArrayMetadata)3665 HWTEST_F_L0(JSMetadataTest, TestJsSharedArrayMetadata)
3666 {
3667     JSMetadataTestHelper tester {};
3668     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_shared_array.json";
3669     JSMetadataTestHelper::Metadata metadata {};
3670 
3671     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3672     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3673     ASSERT_TRUE(tester.Test(JSType::JS_SHARED_ARRAY, metadata));
3674 }
3675 
HWTEST_F_L0(JSMetadataTest,TestJsSharedArrayBufferMetadata)3676 HWTEST_F_L0(JSMetadataTest, TestJsSharedArrayBufferMetadata)
3677 {
3678     JSMetadataTestHelper tester {};
3679     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_shared_array_buffer.json";
3680     JSMetadataTestHelper::Metadata metadata {};
3681 
3682     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3683     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3684     ASSERT_TRUE(tester.Test(JSType::JS_SHARED_ARRAY_BUFFER, metadata));
3685 }
3686 
HWTEST_F_L0(JSMetadataTest,TestJsSharedArrayIteratorMetadata)3687 HWTEST_F_L0(JSMetadataTest, TestJsSharedArrayIteratorMetadata)
3688 {
3689     JSMetadataTestHelper tester {};
3690     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_shared_array_iterator.json";
3691     JSMetadataTestHelper::Metadata metadata {};
3692 
3693     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3694     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3695     ASSERT_TRUE(tester.Test(JSType::JS_SHARED_ARRAY_ITERATOR, metadata));
3696 }
3697 
HWTEST_F_L0(JSMetadataTest,TestJsSharedAsyncFunctionMetadata)3698 HWTEST_F_L0(JSMetadataTest, TestJsSharedAsyncFunctionMetadata)
3699 {
3700     JSMetadataTestHelper tester {};
3701     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_shared_async_function.json";
3702     JSMetadataTestHelper::Metadata metadata {};
3703 
3704     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3705     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3706     ASSERT_TRUE(tester.Test(JSType::JS_SHARED_ASYNC_FUNCTION, metadata));
3707 }
3708 
HWTEST_F_L0(JSMetadataTest,TestJsSharedBigint64ArrayMetadata)3709 HWTEST_F_L0(JSMetadataTest, TestJsSharedBigint64ArrayMetadata)
3710 {
3711     JSMetadataTestHelper tester {};
3712     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_shared_bigint64_array.json";
3713     JSMetadataTestHelper::Metadata metadata {};
3714 
3715     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3716     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3717     ASSERT_TRUE(tester.Test(JSType::JS_SHARED_BIGINT64_ARRAY, metadata));
3718 }
3719 
HWTEST_F_L0(JSMetadataTest,TestJsSharedBiguint64ArrayMetadata)3720 HWTEST_F_L0(JSMetadataTest, TestJsSharedBiguint64ArrayMetadata)
3721 {
3722     JSMetadataTestHelper tester {};
3723     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_shared_biguint64_array.json";
3724     JSMetadataTestHelper::Metadata metadata {};
3725 
3726     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3727     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3728     ASSERT_TRUE(tester.Test(JSType::JS_SHARED_BIGUINT64_ARRAY, metadata));
3729 }
3730 
HWTEST_F_L0(JSMetadataTest,TestJsSharedFloat32ArrayMetadata)3731 HWTEST_F_L0(JSMetadataTest, TestJsSharedFloat32ArrayMetadata)
3732 {
3733     JSMetadataTestHelper tester {};
3734     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_shared_float32_array.json";
3735     JSMetadataTestHelper::Metadata metadata {};
3736 
3737     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3738     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3739     ASSERT_TRUE(tester.Test(JSType::JS_SHARED_FLOAT32_ARRAY, metadata));
3740 }
3741 
HWTEST_F_L0(JSMetadataTest,TestJsSharedFloat64ArrayMetadata)3742 HWTEST_F_L0(JSMetadataTest, TestJsSharedFloat64ArrayMetadata)
3743 {
3744     JSMetadataTestHelper tester {};
3745     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_shared_float64_array.json";
3746     JSMetadataTestHelper::Metadata metadata {};
3747 
3748     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3749     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3750     ASSERT_TRUE(tester.Test(JSType::JS_SHARED_FLOAT64_ARRAY, metadata));
3751 }
3752 
HWTEST_F_L0(JSMetadataTest,TestJsSharedFunctionMetadata)3753 HWTEST_F_L0(JSMetadataTest, TestJsSharedFunctionMetadata)
3754 {
3755     JSMetadataTestHelper tester {};
3756     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_shared_function.json";
3757     JSMetadataTestHelper::Metadata metadata {};
3758 
3759     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3760     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3761     ASSERT_TRUE(tester.Test(JSType::JS_SHARED_FUNCTION, metadata));
3762 }
3763 
HWTEST_F_L0(JSMetadataTest,TestJsSharedInt16ArrayMetadata)3764 HWTEST_F_L0(JSMetadataTest, TestJsSharedInt16ArrayMetadata)
3765 {
3766     JSMetadataTestHelper tester {};
3767     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_shared_int16_array.json";
3768     JSMetadataTestHelper::Metadata metadata {};
3769 
3770     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3771     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3772     ASSERT_TRUE(tester.Test(JSType::JS_SHARED_INT16_ARRAY, metadata));
3773 }
3774 
HWTEST_F_L0(JSMetadataTest,TestJsSharedInt32ArrayMetadata)3775 HWTEST_F_L0(JSMetadataTest, TestJsSharedInt32ArrayMetadata)
3776 {
3777     JSMetadataTestHelper tester {};
3778     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_shared_int32_array.json";
3779     JSMetadataTestHelper::Metadata metadata {};
3780 
3781     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3782     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3783     ASSERT_TRUE(tester.Test(JSType::JS_SHARED_INT32_ARRAY, metadata));
3784 }
3785 
HWTEST_F_L0(JSMetadataTest,TestJsSharedInt8ArrayMetadata)3786 HWTEST_F_L0(JSMetadataTest, TestJsSharedInt8ArrayMetadata)
3787 {
3788     JSMetadataTestHelper tester {};
3789     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_shared_int8_array.json";
3790     JSMetadataTestHelper::Metadata metadata {};
3791 
3792     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3793     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3794     ASSERT_TRUE(tester.Test(JSType::JS_SHARED_INT8_ARRAY, metadata));
3795 }
3796 
HWTEST_F_L0(JSMetadataTest,TestJsSharedMapMetadata)3797 HWTEST_F_L0(JSMetadataTest, TestJsSharedMapMetadata)
3798 {
3799     JSMetadataTestHelper tester {};
3800     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_shared_map.json";
3801     JSMetadataTestHelper::Metadata metadata {};
3802 
3803     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3804     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3805     ASSERT_TRUE(tester.Test(JSType::JS_SHARED_MAP, metadata));
3806 }
3807 
HWTEST_F_L0(JSMetadataTest,TestJsSharedMapIteratorMetadata)3808 HWTEST_F_L0(JSMetadataTest, TestJsSharedMapIteratorMetadata)
3809 {
3810     JSMetadataTestHelper tester {};
3811     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_shared_map_iterator.json";
3812     JSMetadataTestHelper::Metadata metadata {};
3813 
3814     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3815     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3816     ASSERT_TRUE(tester.Test(JSType::JS_SHARED_MAP_ITERATOR, metadata));
3817 }
3818 
HWTEST_F_L0(JSMetadataTest,TestJsSharedObjectMetadata)3819 HWTEST_F_L0(JSMetadataTest, TestJsSharedObjectMetadata)
3820 {
3821     JSMetadataTestHelper tester {};
3822     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_shared_object.json";
3823     JSMetadataTestHelper::Metadata metadata {};
3824 
3825     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3826     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3827     ASSERT_TRUE(tester.Test(JSType::JS_SHARED_OBJECT, metadata));
3828 }
3829 
HWTEST_F_L0(JSMetadataTest,TestJsSharedSetMetadata)3830 HWTEST_F_L0(JSMetadataTest, TestJsSharedSetMetadata)
3831 {
3832     JSMetadataTestHelper tester {};
3833     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_shared_set.json";
3834     JSMetadataTestHelper::Metadata metadata {};
3835 
3836     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3837     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3838     ASSERT_TRUE(tester.Test(JSType::JS_SHARED_SET, metadata));
3839 }
3840 
HWTEST_F_L0(JSMetadataTest,TestJsSharedSetIteratorMetadata)3841 HWTEST_F_L0(JSMetadataTest, TestJsSharedSetIteratorMetadata)
3842 {
3843     JSMetadataTestHelper tester {};
3844     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_shared_set_iterator.json";
3845     JSMetadataTestHelper::Metadata metadata {};
3846 
3847     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3848     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3849     ASSERT_TRUE(tester.Test(JSType::JS_SHARED_SET_ITERATOR, metadata));
3850 }
3851 
HWTEST_F_L0(JSMetadataTest,TestJsSharedTypedArrayMetadata)3852 HWTEST_F_L0(JSMetadataTest, TestJsSharedTypedArrayMetadata)
3853 {
3854     JSMetadataTestHelper tester {};
3855     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_shared_typed_array.json";
3856     JSMetadataTestHelper::Metadata metadata {};
3857 
3858     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3859     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3860     ASSERT_TRUE(tester.Test(JSType::JS_SHARED_TYPED_ARRAY, metadata));
3861 }
3862 
HWTEST_F_L0(JSMetadataTest,TestJsSharedUint16ArrayMetadata)3863 HWTEST_F_L0(JSMetadataTest, TestJsSharedUint16ArrayMetadata)
3864 {
3865     JSMetadataTestHelper tester {};
3866     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_shared_uint16_array.json";
3867     JSMetadataTestHelper::Metadata metadata {};
3868 
3869     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3870     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3871     ASSERT_TRUE(tester.Test(JSType::JS_SHARED_UINT16_ARRAY, metadata));
3872 }
3873 
HWTEST_F_L0(JSMetadataTest,TestJsSharedUint32ArrayMetadata)3874 HWTEST_F_L0(JSMetadataTest, TestJsSharedUint32ArrayMetadata)
3875 {
3876     JSMetadataTestHelper tester {};
3877     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_shared_uint32_array.json";
3878     JSMetadataTestHelper::Metadata metadata {};
3879 
3880     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3881     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3882     ASSERT_TRUE(tester.Test(JSType::JS_SHARED_UINT32_ARRAY, metadata));
3883 }
3884 
HWTEST_F_L0(JSMetadataTest,TestJsSharedUint8ArrayMetadata)3885 HWTEST_F_L0(JSMetadataTest, TestJsSharedUint8ArrayMetadata)
3886 {
3887     JSMetadataTestHelper tester {};
3888     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_shared_uint8_array.json";
3889     JSMetadataTestHelper::Metadata metadata {};
3890 
3891     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3892     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3893     ASSERT_TRUE(tester.Test(JSType::JS_SHARED_UINT8_ARRAY, metadata));
3894 }
3895 
HWTEST_F_L0(JSMetadataTest,TestJsSharedUint8ClampedArrayMetadata)3896 HWTEST_F_L0(JSMetadataTest, TestJsSharedUint8ClampedArrayMetadata)
3897 {
3898     JSMetadataTestHelper tester {};
3899     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_shared_uint8_clamped_array.json";
3900     JSMetadataTestHelper::Metadata metadata {};
3901 
3902     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3903     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3904     ASSERT_TRUE(tester.Test(JSType::JS_SHARED_UINT8_CLAMPED_ARRAY, metadata));
3905 }
3906 
HWTEST_F_L0(JSMetadataTest,TestJsStringIteratorMetadata)3907 HWTEST_F_L0(JSMetadataTest, TestJsStringIteratorMetadata)
3908 {
3909     JSMetadataTestHelper tester {};
3910     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_string_iterator.json";
3911     JSMetadataTestHelper::Metadata metadata {};
3912 
3913     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3914     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3915     ASSERT_TRUE(tester.Test(JSType::JS_STRING_ITERATOR, metadata));
3916 }
3917 
HWTEST_F_L0(JSMetadataTest,TestJsSyntaxErrorMetadata)3918 HWTEST_F_L0(JSMetadataTest, TestJsSyntaxErrorMetadata)
3919 {
3920     JSMetadataTestHelper tester {};
3921     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_syntax_error.json";
3922     JSMetadataTestHelper::Metadata metadata {};
3923 
3924     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3925     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3926     ASSERT_TRUE(tester.Test(JSType::JS_SYNTAX_ERROR, metadata));
3927 }
3928 
HWTEST_F_L0(JSMetadataTest,TestJsTerminationErrorMetadata)3929 HWTEST_F_L0(JSMetadataTest, TestJsTerminationErrorMetadata)
3930 {
3931     JSMetadataTestHelper tester {};
3932     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_termination_error.json";
3933     JSMetadataTestHelper::Metadata metadata {};
3934 
3935     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3936     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3937     ASSERT_TRUE(tester.Test(JSType::JS_TERMINATION_ERROR, metadata));
3938 }
3939 
HWTEST_F_L0(JSMetadataTest,TestJsTypedArrayMetadata)3940 HWTEST_F_L0(JSMetadataTest, TestJsTypedArrayMetadata)
3941 {
3942     JSMetadataTestHelper tester {};
3943     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_typed_array.json";
3944     JSMetadataTestHelper::Metadata metadata {};
3945 
3946     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3947     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3948     ASSERT_TRUE(tester.Test(JSType::JS_TYPED_ARRAY, metadata));
3949 }
3950 
HWTEST_F_L0(JSMetadataTest,TestJsTypeErrorMetadata)3951 HWTEST_F_L0(JSMetadataTest, TestJsTypeErrorMetadata)
3952 {
3953     JSMetadataTestHelper tester {};
3954     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_type_error.json";
3955     JSMetadataTestHelper::Metadata metadata {};
3956 
3957     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3958     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3959     ASSERT_TRUE(tester.Test(JSType::JS_TYPE_ERROR, metadata));
3960 }
3961 
HWTEST_F_L0(JSMetadataTest,TestJsUint16ArrayMetadata)3962 HWTEST_F_L0(JSMetadataTest, TestJsUint16ArrayMetadata)
3963 {
3964     JSMetadataTestHelper tester {};
3965     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_uint16_array.json";
3966     JSMetadataTestHelper::Metadata metadata {};
3967 
3968     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3969     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3970     ASSERT_TRUE(tester.Test(JSType::JS_UINT16_ARRAY, metadata));
3971 }
3972 
HWTEST_F_L0(JSMetadataTest,TestJsUint32ArrayMetadata)3973 HWTEST_F_L0(JSMetadataTest, TestJsUint32ArrayMetadata)
3974 {
3975     JSMetadataTestHelper tester {};
3976     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_uint32_array.json";
3977     JSMetadataTestHelper::Metadata metadata {};
3978 
3979     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3980     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3981     ASSERT_TRUE(tester.Test(JSType::JS_UINT32_ARRAY, metadata));
3982 }
3983 
HWTEST_F_L0(JSMetadataTest,TestJsUint8ArrayMetadata)3984 HWTEST_F_L0(JSMetadataTest, TestJsUint8ArrayMetadata)
3985 {
3986     JSMetadataTestHelper tester {};
3987     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_uint8_array.json";
3988     JSMetadataTestHelper::Metadata metadata {};
3989 
3990     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
3991     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
3992     ASSERT_TRUE(tester.Test(JSType::JS_UINT8_ARRAY, metadata));
3993 }
3994 
HWTEST_F_L0(JSMetadataTest,TestJsUint8ClampedArrayMetadata)3995 HWTEST_F_L0(JSMetadataTest, TestJsUint8ClampedArrayMetadata)
3996 {
3997     JSMetadataTestHelper tester {};
3998     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_uint8_clamped_array.json";
3999     JSMetadataTestHelper::Metadata metadata {};
4000 
4001     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4002     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4003     ASSERT_TRUE(tester.Test(JSType::JS_UINT8_CLAMPED_ARRAY, metadata));
4004 }
4005 
HWTEST_F_L0(JSMetadataTest,TestJsUriErrorMetadata)4006 HWTEST_F_L0(JSMetadataTest, TestJsUriErrorMetadata)
4007 {
4008     JSMetadataTestHelper tester {};
4009     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_uri_error.json";
4010     JSMetadataTestHelper::Metadata metadata {};
4011 
4012     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4013     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4014     ASSERT_TRUE(tester.Test(JSType::JS_URI_ERROR, metadata));
4015 }
4016 
HWTEST_F_L0(JSMetadataTest,TestJsWeakMapMetadata)4017 HWTEST_F_L0(JSMetadataTest, TestJsWeakMapMetadata)
4018 {
4019     JSMetadataTestHelper tester {};
4020     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_weak_map.json";
4021     JSMetadataTestHelper::Metadata metadata {};
4022 
4023     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4024     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4025     ASSERT_TRUE(tester.Test(JSType::JS_WEAK_MAP, metadata));
4026 }
4027 
HWTEST_F_L0(JSMetadataTest,TestJsWeakRefMetadata)4028 HWTEST_F_L0(JSMetadataTest, TestJsWeakRefMetadata)
4029 {
4030     JSMetadataTestHelper tester {};
4031     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_weak_ref.json";
4032     JSMetadataTestHelper::Metadata metadata {};
4033 
4034     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4035     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4036     ASSERT_TRUE(tester.Test(JSType::JS_WEAK_REF, metadata));
4037 }
4038 
HWTEST_F_L0(JSMetadataTest,TestJsWeakSetMetadata)4039 HWTEST_F_L0(JSMetadataTest, TestJsWeakSetMetadata)
4040 {
4041     JSMetadataTestHelper tester {};
4042     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"js_weak_set.json";
4043     JSMetadataTestHelper::Metadata metadata {};
4044 
4045     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4046     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4047     ASSERT_TRUE(tester.Test(JSType::JS_WEAK_SET, metadata));
4048 }
4049 
HWTEST_F_L0(JSMetadataTest,TestLexicalEnvMetadata)4050 HWTEST_F_L0(JSMetadataTest, TestLexicalEnvMetadata)
4051 {
4052     JSMetadataTestHelper tester {};
4053     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"lexical_env.json";
4054     JSMetadataTestHelper::Metadata metadata {};
4055 
4056     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4057     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4058     ASSERT_TRUE(tester.Test(JSType::LEXICAL_ENV, metadata));
4059 }
4060 
HWTEST_F_L0(JSMetadataTest,TestLineStringMetadata)4061 HWTEST_F_L0(JSMetadataTest, TestLineStringMetadata)
4062 {
4063     JSMetadataTestHelper tester {};
4064     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"line_string.json";
4065     JSMetadataTestHelper::Metadata metadata {};
4066 
4067     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4068     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4069     ASSERT_TRUE(tester.Test(JSType::LINE_STRING, metadata));
4070 }
4071 
HWTEST_F_L0(JSMetadataTest,TestLinkedNodeMetadata)4072 HWTEST_F_L0(JSMetadataTest, TestLinkedNodeMetadata)
4073 {
4074     JSMetadataTestHelper tester {};
4075     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"linked_node.json";
4076     JSMetadataTestHelper::Metadata metadata {};
4077 
4078     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4079     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4080     ASSERT_TRUE(tester.Test(JSType::LINKED_NODE, metadata));
4081 }
4082 
HWTEST_F_L0(JSMetadataTest,TestLocalExportentryRecordMetadata)4083 HWTEST_F_L0(JSMetadataTest, TestLocalExportentryRecordMetadata)
4084 {
4085     JSMetadataTestHelper tester {};
4086     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"local_exportentry_record.json";
4087     JSMetadataTestHelper::Metadata metadata {};
4088 
4089     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4090     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4091     ASSERT_TRUE(tester.Test(JSType::LOCAL_EXPORTENTRY_RECORD, metadata));
4092 }
4093 
HWTEST_F_L0(JSMetadataTest,TestMachineCodeObjectMetadata)4094 HWTEST_F_L0(JSMetadataTest, TestMachineCodeObjectMetadata)
4095 {
4096 #if defined(PANDA_TARGET_AMD64) || defined(PANDA_TARGET_ARM64)
4097     JSMetadataTestHelper tester {};
4098     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"machine_code_object.json";
4099     JSMetadataTestHelper::Metadata metadata {};
4100 
4101     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4102     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4103     ASSERT_TRUE(tester.Test(JSType::MACHINE_CODE_OBJECT, metadata));
4104 #endif
4105 }
4106 
HWTEST_F_L0(JSMetadataTest,TestMarkerCellMetadata)4107 HWTEST_F_L0(JSMetadataTest, TestMarkerCellMetadata)
4108 {
4109     JSMetadataTestHelper tester {};
4110     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"marker_cell.json";
4111     JSMetadataTestHelper::Metadata metadata {};
4112 
4113     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4114     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4115     ASSERT_TRUE(tester.Test(JSType::MARKER_CELL, metadata));
4116 }
4117 
HWTEST_F_L0(JSMetadataTest,TestMethodMetadata)4118 HWTEST_F_L0(JSMetadataTest, TestMethodMetadata)
4119 {
4120 #if defined(PANDA_TARGET_AMD64) || defined(PANDA_TARGET_ARM64)
4121     JSMetadataTestHelper tester {};
4122     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"method.json";
4123     JSMetadataTestHelper::Metadata metadata {};
4124 
4125     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4126     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4127     ASSERT_TRUE(tester.Test(JSType::METHOD, metadata));
4128 #endif
4129 }
4130 
HWTEST_F_L0(JSMetadataTest,TestMicroJobQueueMetadata)4131 HWTEST_F_L0(JSMetadataTest, TestMicroJobQueueMetadata)
4132 {
4133     JSMetadataTestHelper tester {};
4134     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"micro_job_queue.json";
4135     JSMetadataTestHelper::Metadata metadata {};
4136 
4137     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4138     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4139     ASSERT_TRUE(tester.Test(JSType::MICRO_JOB_QUEUE, metadata));
4140 }
4141 
HWTEST_F_L0(JSMetadataTest,TestModuleRecordMetadata)4142 HWTEST_F_L0(JSMetadataTest, TestModuleRecordMetadata)
4143 {
4144     JSMetadataTestHelper tester {};
4145     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"module_record.json";
4146     JSMetadataTestHelper::Metadata metadata {};
4147 
4148     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4149     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4150     ASSERT_TRUE(tester.Test(JSType::MODULE_RECORD, metadata));
4151 }
4152 
HWTEST_F_L0(JSMetadataTest,TestMutantTaggedArrayMetadata)4153 HWTEST_F_L0(JSMetadataTest, TestMutantTaggedArrayMetadata)
4154 {
4155     JSMetadataTestHelper tester {};
4156     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"mutant_tagged_array.json";
4157     JSMetadataTestHelper::Metadata metadata {};
4158 
4159     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4160     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4161     ASSERT_TRUE(tester.Test(JSType::MUTANT_TAGGED_ARRAY, metadata));
4162 }
4163 
HWTEST_F_L0(JSMetadataTest,TestNativeModuleFailureInfoMetadata)4164 HWTEST_F_L0(JSMetadataTest, TestNativeModuleFailureInfoMetadata)
4165 {
4166     JSMetadataTestHelper tester {};
4167     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"native_module_failure_info.json";
4168     JSMetadataTestHelper::Metadata metadata {};
4169 
4170     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4171     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4172     ASSERT_TRUE(tester.Test(JSType::NATIVE_MODULE_FAILURE_INFO, metadata));
4173 }
4174 
HWTEST_F_L0(JSMetadataTest,TestProfileTypeInfoMetadata)4175 HWTEST_F_L0(JSMetadataTest, TestProfileTypeInfoMetadata)
4176 {
4177     JSMetadataTestHelper tester {};
4178     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"profile_type_info.json";
4179     JSMetadataTestHelper::Metadata metadata {};
4180 
4181     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4182     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4183     ASSERT_TRUE(tester.Test(JSType::PROFILE_TYPE_INFO, metadata));
4184 }
4185 
HWTEST_F_L0(JSMetadataTest,TestProfileTypeInfoCell0Metadata)4186 HWTEST_F_L0(JSMetadataTest, TestProfileTypeInfoCell0Metadata)
4187 {
4188     JSMetadataTestHelper tester {};
4189     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"profile_type_info_cell_0.json";
4190     JSMetadataTestHelper::Metadata metadata {};
4191 
4192     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4193     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4194     ASSERT_TRUE(tester.Test(JSType::PROFILE_TYPE_INFO_CELL_0, metadata));
4195 }
4196 
HWTEST_F_L0(JSMetadataTest,TestProfileTypeInfoCell1Metadata)4197 HWTEST_F_L0(JSMetadataTest, TestProfileTypeInfoCell1Metadata)
4198 {
4199     JSMetadataTestHelper tester {};
4200     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"profile_type_info_cell_1.json";
4201     JSMetadataTestHelper::Metadata metadata {};
4202 
4203     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4204     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4205     ASSERT_TRUE(tester.Test(JSType::PROFILE_TYPE_INFO_CELL_1, metadata));
4206 }
4207 
HWTEST_F_L0(JSMetadataTest,TestProfileTypeInfoCellNMetadata)4208 HWTEST_F_L0(JSMetadataTest, TestProfileTypeInfoCellNMetadata)
4209 {
4210     JSMetadataTestHelper tester {};
4211     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"profile_type_info_cell_n.json";
4212     JSMetadataTestHelper::Metadata metadata {};
4213 
4214     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4215     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4216     ASSERT_TRUE(tester.Test(JSType::PROFILE_TYPE_INFO_CELL_N, metadata));
4217 }
4218 
HWTEST_F_L0(JSMetadataTest,TestProgramMetadata)4219 HWTEST_F_L0(JSMetadataTest, TestProgramMetadata)
4220 {
4221     JSMetadataTestHelper tester {};
4222     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"program.json";
4223     JSMetadataTestHelper::Metadata metadata {};
4224 
4225     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4226     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4227     ASSERT_TRUE(tester.Test(JSType::PROGRAM, metadata));
4228 }
4229 
HWTEST_F_L0(JSMetadataTest,TestPromiseCapabilityMetadata)4230 HWTEST_F_L0(JSMetadataTest, TestPromiseCapabilityMetadata)
4231 {
4232     JSMetadataTestHelper tester {};
4233     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"promise_capability.json";
4234     JSMetadataTestHelper::Metadata metadata {};
4235 
4236     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4237     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4238     ASSERT_TRUE(tester.Test(JSType::PROMISE_CAPABILITY, metadata));
4239 }
4240 
HWTEST_F_L0(JSMetadataTest,TestPromiseIteratorRecordMetadata)4241 HWTEST_F_L0(JSMetadataTest, TestPromiseIteratorRecordMetadata)
4242 {
4243     JSMetadataTestHelper tester {};
4244     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"promise_iterator_record.json";
4245     JSMetadataTestHelper::Metadata metadata {};
4246 
4247     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4248     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4249     ASSERT_TRUE(tester.Test(JSType::PROMISE_ITERATOR_RECORD, metadata));
4250 }
4251 
HWTEST_F_L0(JSMetadataTest,TestPromiseReactionsMetadata)4252 HWTEST_F_L0(JSMetadataTest, TestPromiseReactionsMetadata)
4253 {
4254     JSMetadataTestHelper tester {};
4255     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"promise_reactions.json";
4256     JSMetadataTestHelper::Metadata metadata {};
4257 
4258     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4259     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4260     ASSERT_TRUE(tester.Test(JSType::PROMISE_REACTIONS, metadata));
4261 }
4262 
HWTEST_F_L0(JSMetadataTest,TestPromiseRecordMetadata)4263 HWTEST_F_L0(JSMetadataTest, TestPromiseRecordMetadata)
4264 {
4265     JSMetadataTestHelper tester {};
4266     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"promise_record.json";
4267     JSMetadataTestHelper::Metadata metadata {};
4268 
4269     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4270     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4271     ASSERT_TRUE(tester.Test(JSType::PROMISE_RECORD, metadata));
4272 }
4273 
HWTEST_F_L0(JSMetadataTest,TestPropertyBoxMetadata)4274 HWTEST_F_L0(JSMetadataTest, TestPropertyBoxMetadata)
4275 {
4276     JSMetadataTestHelper tester {};
4277     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"property_box.json";
4278     JSMetadataTestHelper::Metadata metadata {};
4279 
4280     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4281     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4282     ASSERT_TRUE(tester.Test(JSType::PROPERTY_BOX, metadata));
4283 }
4284 
HWTEST_F_L0(JSMetadataTest,TestPrototypeHandlerMetadata)4285 HWTEST_F_L0(JSMetadataTest, TestPrototypeHandlerMetadata)
4286 {
4287     JSMetadataTestHelper tester {};
4288     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"prototype_handler.json";
4289     JSMetadataTestHelper::Metadata metadata {};
4290 
4291     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4292     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4293     ASSERT_TRUE(tester.Test(JSType::PROTOTYPE_HANDLER, metadata));
4294 }
4295 
HWTEST_F_L0(JSMetadataTest,TestPrototypeInfoMetadata)4296 HWTEST_F_L0(JSMetadataTest, TestPrototypeInfoMetadata)
4297 {
4298     JSMetadataTestHelper tester {};
4299     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"prototype_info.json";
4300     JSMetadataTestHelper::Metadata metadata {};
4301 
4302     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4303     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4304     ASSERT_TRUE(tester.Test(JSType::PROTOTYPE_INFO, metadata));
4305 }
4306 
HWTEST_F_L0(JSMetadataTest,TestProtoChangeMarkerMetadata)4307 HWTEST_F_L0(JSMetadataTest, TestProtoChangeMarkerMetadata)
4308 {
4309     JSMetadataTestHelper tester {};
4310     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"proto_change_marker.json";
4311     JSMetadataTestHelper::Metadata metadata {};
4312 
4313     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4314     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4315     ASSERT_TRUE(tester.Test(JSType::PROTO_CHANGE_MARKER, metadata));
4316 }
4317 
HWTEST_F_L0(JSMetadataTest,TestRbTreenodeMetadata)4318 HWTEST_F_L0(JSMetadataTest, TestRbTreenodeMetadata)
4319 {
4320     JSMetadataTestHelper tester {};
4321     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"rb_treenode.json";
4322     JSMetadataTestHelper::Metadata metadata {};
4323 
4324     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4325     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4326     ASSERT_TRUE(tester.Test(JSType::RB_TREENODE, metadata));
4327 }
4328 
HWTEST_F_L0(JSMetadataTest,TestResolvedbindingRecordMetadata)4329 HWTEST_F_L0(JSMetadataTest, TestResolvedbindingRecordMetadata)
4330 {
4331     JSMetadataTestHelper tester {};
4332     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"resolvedbinding_record.json";
4333     JSMetadataTestHelper::Metadata metadata {};
4334 
4335     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4336     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4337     ASSERT_TRUE(tester.Test(JSType::RESOLVEDBINDING_RECORD, metadata));
4338 }
4339 
HWTEST_F_L0(JSMetadataTest,TestResolvedindexbindingRecordMetadata)4340 HWTEST_F_L0(JSMetadataTest, TestResolvedindexbindingRecordMetadata)
4341 {
4342     JSMetadataTestHelper tester {};
4343     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"resolvedindexbinding_record.json";
4344     JSMetadataTestHelper::Metadata metadata {};
4345 
4346     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4347     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4348     ASSERT_TRUE(tester.Test(JSType::RESOLVEDINDEXBINDING_RECORD, metadata));
4349 }
4350 
HWTEST_F_L0(JSMetadataTest,TestResolvedrecordbindingRecordMetadata)4351 HWTEST_F_L0(JSMetadataTest, TestResolvedrecordbindingRecordMetadata)
4352 {
4353     JSMetadataTestHelper tester {};
4354     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"resolvedrecordbinding_record.json";
4355     JSMetadataTestHelper::Metadata metadata {};
4356 
4357     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4358     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4359     ASSERT_TRUE(tester.Test(JSType::RESOLVEDRECORDBINDING_RECORD, metadata));
4360 }
4361 
HWTEST_F_L0(JSMetadataTest,TestResolvedrecordindexbindingRecordMetadata)4362 HWTEST_F_L0(JSMetadataTest, TestResolvedrecordindexbindingRecordMetadata)
4363 {
4364     JSMetadataTestHelper tester {};
4365     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"resolvedrecordindexbinding_record.json";
4366     JSMetadataTestHelper::Metadata metadata {};
4367 
4368     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4369     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4370     ASSERT_TRUE(tester.Test(JSType::RESOLVEDRECORDINDEXBINDING_RECORD, metadata));
4371 }
4372 
HWTEST_F_L0(JSMetadataTest,TestResolvingFunctionsRecordMetadata)4373 HWTEST_F_L0(JSMetadataTest, TestResolvingFunctionsRecordMetadata)
4374 {
4375     JSMetadataTestHelper tester {};
4376     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"resolving_functions_record.json";
4377     JSMetadataTestHelper::Metadata metadata {};
4378 
4379     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4380     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4381     ASSERT_TRUE(tester.Test(JSType::RESOLVING_FUNCTIONS_RECORD, metadata));
4382 }
4383 
HWTEST_F_L0(JSMetadataTest,TestSendableEnvMetadata)4384 HWTEST_F_L0(JSMetadataTest, TestSendableEnvMetadata)
4385 {
4386     JSMetadataTestHelper tester {};
4387     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"sendable_env.json";
4388     JSMetadataTestHelper::Metadata metadata {};
4389 
4390     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4391     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4392     ASSERT_TRUE(tester.Test(JSType::SENDABLE_ENV, metadata));
4393 }
4394 
HWTEST_F_L0(JSMetadataTest,TestSFunctionEnvMetadata)4395 HWTEST_F_L0(JSMetadataTest, TestSFunctionEnvMetadata)
4396 {
4397     JSMetadataTestHelper tester {};
4398     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"sfunction_env.json";
4399     JSMetadataTestHelper::Metadata metadata {};
4400 
4401     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4402     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4403     ASSERT_TRUE(tester.Test(JSType::SFUNCTION_ENV, metadata));
4404 }
4405 
HWTEST_F_L0(JSMetadataTest,TestJsXrefObjectMetadata)4406 HWTEST_F_L0(JSMetadataTest, TestJsXrefObjectMetadata) {
4407     JSMetadataTestHelper tester{};
4408     std::string metadataFilePath =
4409         METADATA_SOURCE_FILE_DIR "js_xref_object.json";
4410     JSMetadataTestHelper::Metadata metadata{};
4411 
4412     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4413     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4414     ASSERT_TRUE(tester.Test(JSType::JS_XREF_OBJECT, metadata));
4415 }
4416 
HWTEST_F_L0(JSMetadataTest,TestSlicedStringMetadata)4417 HWTEST_F_L0(JSMetadataTest, TestSlicedStringMetadata)
4418 {
4419     JSMetadataTestHelper tester {};
4420     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"sliced_string.json";
4421     JSMetadataTestHelper::Metadata metadata {};
4422 
4423     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4424     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4425     ASSERT_TRUE(tester.Test(JSType::SLICED_STRING, metadata));
4426 }
4427 
HWTEST_F_L0(JSMetadataTest,TestSourceTextModuleRecordMetadata)4428 HWTEST_F_L0(JSMetadataTest, TestSourceTextModuleRecordMetadata)
4429 {
4430 #if defined(PANDA_TARGET_AMD64) || defined(PANDA_TARGET_ARM64)
4431     JSMetadataTestHelper tester {};
4432     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"source_text_module_record.json";
4433     JSMetadataTestHelper::Metadata metadata {};
4434 
4435     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4436     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4437     ASSERT_TRUE(tester.Test(JSType::SOURCE_TEXT_MODULE_RECORD, metadata));
4438 #endif
4439 }
4440 
HWTEST_F_L0(JSMetadataTest,TestStarExportentryRecordMetadata)4441 HWTEST_F_L0(JSMetadataTest, TestStarExportentryRecordMetadata)
4442 {
4443     JSMetadataTestHelper tester {};
4444     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"star_exportentry_record.json";
4445     JSMetadataTestHelper::Metadata metadata {};
4446 
4447     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4448     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4449     ASSERT_TRUE(tester.Test(JSType::STAR_EXPORTENTRY_RECORD, metadata));
4450 }
4451 
HWTEST_F_L0(JSMetadataTest,TestStoreAOTHandlerMetadata)4452 HWTEST_F_L0(JSMetadataTest, TestStoreAOTHandlerMetadata)
4453 {
4454     JSMetadataTestHelper tester {};
4455     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"store_ts_handler.json";
4456     JSMetadataTestHelper::Metadata metadata {};
4457 
4458     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4459     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4460     ASSERT_TRUE(tester.Test(JSType::STORE_TS_HANDLER, metadata));
4461 }
4462 
HWTEST_F_L0(JSMetadataTest,TestSymbolMetadata)4463 HWTEST_F_L0(JSMetadataTest, TestSymbolMetadata)
4464 {
4465     JSMetadataTestHelper tester {};
4466     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"symbol.json";
4467     JSMetadataTestHelper::Metadata metadata {};
4468 
4469     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4470     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4471     ASSERT_TRUE(tester.Test(JSType::SYMBOL, metadata));
4472 }
4473 
HWTEST_F_L0(JSMetadataTest,TestTaggedArrayMetadata)4474 HWTEST_F_L0(JSMetadataTest, TestTaggedArrayMetadata)
4475 {
4476     JSMetadataTestHelper tester {};
4477     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"tagged_array.json";
4478     JSMetadataTestHelper::Metadata metadata {};
4479 
4480     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4481     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4482     ASSERT_TRUE(tester.Test(JSType::TAGGED_ARRAY, metadata));
4483 }
4484 
HWTEST_F_L0(JSMetadataTest,TestTaggedDictionaryMetadata)4485 HWTEST_F_L0(JSMetadataTest, TestTaggedDictionaryMetadata)
4486 {
4487     JSMetadataTestHelper tester {};
4488     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"tagged_dictionary.json";
4489     JSMetadataTestHelper::Metadata metadata {};
4490 
4491     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4492     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4493     ASSERT_TRUE(tester.Test(JSType::TAGGED_DICTIONARY, metadata));
4494 }
4495 
HWTEST_F_L0(JSMetadataTest,TestTemplateMapMetadata)4496 HWTEST_F_L0(JSMetadataTest, TestTemplateMapMetadata)
4497 {
4498     JSMetadataTestHelper tester {};
4499     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"template_map.json";
4500     JSMetadataTestHelper::Metadata metadata {};
4501 
4502     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4503     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4504     ASSERT_TRUE(tester.Test(JSType::TEMPLATE_MAP, metadata));
4505 }
4506 
HWTEST_F_L0(JSMetadataTest,TestTrackInfoMetadata)4507 HWTEST_F_L0(JSMetadataTest, TestTrackInfoMetadata)
4508 {
4509     JSMetadataTestHelper tester {};
4510     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"track_info.json";
4511     JSMetadataTestHelper::Metadata metadata {};
4512 
4513     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4514     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4515     ASSERT_TRUE(tester.Test(JSType::TRACK_INFO, metadata));
4516 }
4517 
HWTEST_F_L0(JSMetadataTest,TestTransitionHandlerMetadata)4518 HWTEST_F_L0(JSMetadataTest, TestTransitionHandlerMetadata)
4519 {
4520     JSMetadataTestHelper tester {};
4521     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"transition_handler.json";
4522     JSMetadataTestHelper::Metadata metadata {};
4523 
4524     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4525     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4526     ASSERT_TRUE(tester.Test(JSType::TRANSITION_HANDLER, metadata));
4527 }
4528 
HWTEST_F_L0(JSMetadataTest,TestTransWithProtoHandlerMetadata)4529 HWTEST_F_L0(JSMetadataTest, TestTransWithProtoHandlerMetadata)
4530 {
4531     JSMetadataTestHelper tester {};
4532     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"trans_with_proto_handler.json";
4533     JSMetadataTestHelper::Metadata metadata {};
4534 
4535     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4536     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4537     ASSERT_TRUE(tester.Test(JSType::TRANS_WITH_PROTO_HANDLER, metadata));
4538 }
4539 
HWTEST_F_L0(JSMetadataTest,TestTreeStringMetadata)4540 HWTEST_F_L0(JSMetadataTest, TestTreeStringMetadata)
4541 {
4542     JSMetadataTestHelper tester {};
4543     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"tree_string.json";
4544     JSMetadataTestHelper::Metadata metadata {};
4545 
4546     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4547     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4548     ASSERT_TRUE(tester.Test(JSType::TREE_STRING, metadata));
4549 }
4550 
HWTEST_F_L0(JSMetadataTest,TestVtableMetadata)4551 HWTEST_F_L0(JSMetadataTest, TestVtableMetadata)
4552 {
4553     JSMetadataTestHelper tester {};
4554     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"vtable.json";
4555     JSMetadataTestHelper::Metadata metadata {};
4556 
4557     tester.ReadAndParseMetadataJson(metadataFilePath, metadata);
4558     ASSERT_TRUE(metadata.status == JSMetadataTestHelper::INITIALIZED);
4559     ASSERT_TRUE(tester.Test(JSType::VTABLE, metadata));
4560 }
4561 
HWTEST_F_L0(JSMetadataTest,TestDictionaryLayoutMetadata)4562 HWTEST_F_L0(JSMetadataTest, TestDictionaryLayoutMetadata)
4563 {
4564     JSMetadataTestHelper tester {};
4565     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"dictionary_layout.json";
4566     ASSERT_TRUE(tester.TestForDictionaryLayout(metadataFilePath));
4567 }
4568 
HWTEST_F_L0(JSMetadataTest,TestTypeRangeMetadata)4569 HWTEST_F_L0(JSMetadataTest, TestTypeRangeMetadata)
4570 {
4571     JSMetadataTestHelper tester {};
4572     std::string metadataFilePath = METADATA_SOURCE_FILE_DIR"type_range.json";
4573     ASSERT_TRUE(tester.TestForTypeRange(metadataFilePath));
4574 }
4575 }
4576