14514f5e3Sopenharmony_ci/* 24514f5e3Sopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License. 54514f5e3Sopenharmony_ci * You may obtain a copy of the License at 64514f5e3Sopenharmony_ci * 74514f5e3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 84514f5e3Sopenharmony_ci * 94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 104514f5e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and 134514f5e3Sopenharmony_ci * limitations under the License. 144514f5e3Sopenharmony_ci */ 154514f5e3Sopenharmony_ci 164514f5e3Sopenharmony_ci#ifndef ECMASCRIPT_MEM_OBJECT_XRAY_H 174514f5e3Sopenharmony_ci#define ECMASCRIPT_MEM_OBJECT_XRAY_H 184514f5e3Sopenharmony_ci 194514f5e3Sopenharmony_ci#include <cstdint> 204514f5e3Sopenharmony_ci 214514f5e3Sopenharmony_ci#include "ecmascript/byte_array.h" 224514f5e3Sopenharmony_ci#include "ecmascript/ecma_vm.h" 234514f5e3Sopenharmony_ci#include "ecmascript/js_async_from_sync_iterator.h" 244514f5e3Sopenharmony_ci#include "ecmascript/global_env.h" 254514f5e3Sopenharmony_ci#include "ecmascript/ic/ic_handler.h" 264514f5e3Sopenharmony_ci#include "ecmascript/ic/profile_type_info.h" 274514f5e3Sopenharmony_ci#include "ecmascript/ic/proto_change_details.h" 284514f5e3Sopenharmony_ci#include "ecmascript/jobs/micro_job_queue.h" 294514f5e3Sopenharmony_ci#include "ecmascript/jobs/pending_job.h" 304514f5e3Sopenharmony_ci#include "ecmascript/jspandafile/class_info_extractor.h" 314514f5e3Sopenharmony_ci#include "ecmascript/jspandafile/class_literal.h" 324514f5e3Sopenharmony_ci#include "ecmascript/jspandafile/program_object.h" 334514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_arraylist.h" 344514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_arraylist_iterator.h" 354514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_bitvector.h" 364514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_bitvector_iterator.h" 374514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_deque.h" 384514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_deque_iterator.h" 394514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_hashmap.h" 404514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_hashmap_iterator.h" 414514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_hashset.h" 424514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_hashset_iterator.h" 434514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_lightweightmap.h" 444514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_lightweightmap_iterator.h" 454514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_lightweightset.h" 464514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_lightweightset_iterator.h" 474514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_linked_list.h" 484514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_linked_list_iterator.h" 494514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_list.h" 504514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_list_iterator.h" 514514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_plain_array.h" 524514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_plain_array_iterator.h" 534514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_queue.h" 544514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_queue_iterator.h" 554514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_stack.h" 564514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_stack_iterator.h" 574514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_tree_map.h" 584514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_tree_map_iterator.h" 594514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_tree_set.h" 604514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_tree_set_iterator.h" 614514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_vector.h" 624514f5e3Sopenharmony_ci#include "ecmascript/js_api/js_api_vector_iterator.h" 634514f5e3Sopenharmony_ci#include "ecmascript/js_arguments.h" 644514f5e3Sopenharmony_ci#include "ecmascript/js_array.h" 654514f5e3Sopenharmony_ci#include "ecmascript/js_array_iterator.h" 664514f5e3Sopenharmony_ci#include "ecmascript/js_arraybuffer.h" 674514f5e3Sopenharmony_ci#include "ecmascript/js_async_function.h" 684514f5e3Sopenharmony_ci#include "ecmascript/js_async_generator_object.h" 694514f5e3Sopenharmony_ci#include "ecmascript/js_collator.h" 704514f5e3Sopenharmony_ci#include "ecmascript/js_dataview.h" 714514f5e3Sopenharmony_ci#include "ecmascript/js_date.h" 724514f5e3Sopenharmony_ci#include "ecmascript/js_date_time_format.h" 734514f5e3Sopenharmony_ci#include "ecmascript/js_for_in_iterator.h" 744514f5e3Sopenharmony_ci#include "ecmascript/js_finalization_registry.h" 754514f5e3Sopenharmony_ci#include "ecmascript/js_function.h" 764514f5e3Sopenharmony_ci#include "ecmascript/js_generator_object.h" 774514f5e3Sopenharmony_ci#include "ecmascript/js_hclass.h" 784514f5e3Sopenharmony_ci#include "ecmascript/js_intl.h" 794514f5e3Sopenharmony_ci#include "ecmascript/js_locale.h" 804514f5e3Sopenharmony_ci#include "ecmascript/js_map.h" 814514f5e3Sopenharmony_ci#include "ecmascript/js_map_iterator.h" 824514f5e3Sopenharmony_ci#include "ecmascript/js_number_format.h" 834514f5e3Sopenharmony_ci#include "ecmascript/js_object-inl.h" 844514f5e3Sopenharmony_ci#include "ecmascript/js_plural_rules.h" 854514f5e3Sopenharmony_ci#include "ecmascript/js_primitive_ref.h" 864514f5e3Sopenharmony_ci#include "ecmascript/js_promise.h" 874514f5e3Sopenharmony_ci#include "ecmascript/js_realm.h" 884514f5e3Sopenharmony_ci#include "ecmascript/js_regexp.h" 894514f5e3Sopenharmony_ci#include "ecmascript/js_regexp_iterator.h" 904514f5e3Sopenharmony_ci#include "ecmascript/js_relative_time_format.h" 914514f5e3Sopenharmony_ci#include "ecmascript/js_segmenter.h" 924514f5e3Sopenharmony_ci#include "ecmascript/js_segments.h" 934514f5e3Sopenharmony_ci#include "ecmascript/js_segment_iterator.h" 944514f5e3Sopenharmony_ci#include "ecmascript/js_set.h" 954514f5e3Sopenharmony_ci#include "ecmascript/js_displaynames.h" 964514f5e3Sopenharmony_ci#include "ecmascript/js_list_format.h" 974514f5e3Sopenharmony_ci#include "ecmascript/js_set_iterator.h" 984514f5e3Sopenharmony_ci#include "ecmascript/js_string_iterator.h" 994514f5e3Sopenharmony_ci#include "ecmascript/js_typed_array.h" 1004514f5e3Sopenharmony_ci#include "ecmascript/js_weak_container.h" 1014514f5e3Sopenharmony_ci#include "ecmascript/jspandafile/class_info_extractor.h" 1024514f5e3Sopenharmony_ci#include "ecmascript/jspandafile/program_object.h" 1034514f5e3Sopenharmony_ci#include "ecmascript/js_weak_ref.h" 1044514f5e3Sopenharmony_ci#include "ecmascript/marker_cell.h" 1054514f5e3Sopenharmony_ci#include "ecmascript/mem/machine_code.h" 1064514f5e3Sopenharmony_ci#include "ecmascript/mem/mem.h" 1074514f5e3Sopenharmony_ci#include "ecmascript/mem/slots.h" 1084514f5e3Sopenharmony_ci#include "ecmascript/module/js_module_namespace.h" 1094514f5e3Sopenharmony_ci#include "ecmascript/dfx/native_module_failure_info.h" 1104514f5e3Sopenharmony_ci#include "ecmascript/module/js_module_source_text.h" 1114514f5e3Sopenharmony_ci#include "ecmascript/module/js_shared_module.h" 1124514f5e3Sopenharmony_ci#include "ecmascript/shared_objects/js_shared_array.h" 1134514f5e3Sopenharmony_ci#include "ecmascript/shared_objects/js_sendable_arraybuffer.h" 1144514f5e3Sopenharmony_ci#include "ecmascript/shared_objects/js_shared_array_iterator.h" 1154514f5e3Sopenharmony_ci#include "ecmascript/shared_objects/js_shared_map.h" 1164514f5e3Sopenharmony_ci#include "ecmascript/shared_objects/js_shared_map_iterator.h" 1174514f5e3Sopenharmony_ci#include "ecmascript/shared_objects/js_shared_set.h" 1184514f5e3Sopenharmony_ci#include "ecmascript/shared_objects/js_shared_set_iterator.h" 1194514f5e3Sopenharmony_ci#include "ecmascript/shared_objects/js_shared_typed_array.h" 1204514f5e3Sopenharmony_ci#include "ecmascript/tagged_node.h" 1214514f5e3Sopenharmony_ci#include "ecmascript/require/js_cjs_module.h" 1224514f5e3Sopenharmony_ci#include "ecmascript/require/js_cjs_require.h" 1234514f5e3Sopenharmony_ci#include "ecmascript/require/js_cjs_exports.h" 1244514f5e3Sopenharmony_ci 1254514f5e3Sopenharmony_cinamespace panda::ecmascript { 1264514f5e3Sopenharmony_ciclass ObjectXRay { 1274514f5e3Sopenharmony_cipublic: 1284514f5e3Sopenharmony_ci ObjectXRay() = default; 1294514f5e3Sopenharmony_ci ~ObjectXRay() = default; 1304514f5e3Sopenharmony_ci 1314514f5e3Sopenharmony_ci static inline void VisitVMRoots(EcmaVM *vm, const RootVisitor &visitor, const RootRangeVisitor &rangeVisitor, 1324514f5e3Sopenharmony_ci const RootBaseAndDerivedVisitor &derivedVisitor, VMRootVisitType type) 1334514f5e3Sopenharmony_ci { 1344514f5e3Sopenharmony_ci vm->Iterate(visitor, rangeVisitor, type); 1354514f5e3Sopenharmony_ci vm->GetAssociatedJSThread()->Iterate(visitor, rangeVisitor, derivedVisitor); 1364514f5e3Sopenharmony_ci } 1374514f5e3Sopenharmony_ci 1384514f5e3Sopenharmony_ci static inline void VisitJitCodeMap(EcmaVM *vm, const JitCodeMapVisitor &updater) 1394514f5e3Sopenharmony_ci { 1404514f5e3Sopenharmony_ci vm->GetJSThread()->IterateJitCodeMap(updater); 1414514f5e3Sopenharmony_ci } 1424514f5e3Sopenharmony_ci 1434514f5e3Sopenharmony_ci template<VisitType visitType> 1444514f5e3Sopenharmony_ci static inline void VisitObjectBody(TaggedObject *object, JSHClass *klass, const EcmaObjectRangeVisitor &visitor) 1454514f5e3Sopenharmony_ci { 1464514f5e3Sopenharmony_ci // handle body 1474514f5e3Sopenharmony_ci JSType type = klass->GetObjectType(); 1484514f5e3Sopenharmony_ci switch (type) { 1494514f5e3Sopenharmony_ci case JSType::JS_OBJECT: 1504514f5e3Sopenharmony_ci case JSType::JS_ERROR: 1514514f5e3Sopenharmony_ci case JSType::JS_EVAL_ERROR: 1524514f5e3Sopenharmony_ci case JSType::JS_RANGE_ERROR: 1534514f5e3Sopenharmony_ci case JSType::JS_REFERENCE_ERROR: 1544514f5e3Sopenharmony_ci case JSType::JS_TYPE_ERROR: 1554514f5e3Sopenharmony_ci case JSType::JS_AGGREGATE_ERROR: 1564514f5e3Sopenharmony_ci case JSType::JS_URI_ERROR: 1574514f5e3Sopenharmony_ci case JSType::JS_SYNTAX_ERROR: 1584514f5e3Sopenharmony_ci case JSType::JS_OOM_ERROR: 1594514f5e3Sopenharmony_ci case JSType::JS_TERMINATION_ERROR: 1604514f5e3Sopenharmony_ci case JSType::JS_ASYNCITERATOR: 1614514f5e3Sopenharmony_ci case JSType::JS_ITERATOR: 1624514f5e3Sopenharmony_ci JSObject::Cast(object)->VisitRangeSlot<visitType>(visitor); 1634514f5e3Sopenharmony_ci break; 1644514f5e3Sopenharmony_ci case JSType::JS_SHARED_OBJECT: { 1654514f5e3Sopenharmony_ci auto jsSharedObject = JSSharedObject::Cast(object); 1664514f5e3Sopenharmony_ci jsSharedObject->VisitRangeSlot<visitType>(visitor); 1674514f5e3Sopenharmony_ci break; 1684514f5e3Sopenharmony_ci } 1694514f5e3Sopenharmony_ci case JSType::JS_ASYNC_FROM_SYNC_ITERATOR: 1704514f5e3Sopenharmony_ci JSAsyncFromSyncIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 1714514f5e3Sopenharmony_ci break; 1724514f5e3Sopenharmony_ci case JSType::JS_GLOBAL_OBJECT: 1734514f5e3Sopenharmony_ci JSGlobalObject::Cast(object)->VisitRangeSlot<visitType>(visitor); 1744514f5e3Sopenharmony_ci break; 1754514f5e3Sopenharmony_ci case JSType::JS_FUNCTION_BASE: { 1764514f5e3Sopenharmony_ci auto jsFunctionBase = JSFunctionBase::Cast(object); 1774514f5e3Sopenharmony_ci jsFunctionBase->VisitRangeSlot<visitType>(visitor); 1784514f5e3Sopenharmony_ci break; 1794514f5e3Sopenharmony_ci } 1804514f5e3Sopenharmony_ci case JSType::JS_FUNCTION: { 1814514f5e3Sopenharmony_ci auto jsFunction = JSFunction::Cast(object); 1824514f5e3Sopenharmony_ci jsFunction->VisitRangeSlot<visitType>(visitor); 1834514f5e3Sopenharmony_ci break; 1844514f5e3Sopenharmony_ci } 1854514f5e3Sopenharmony_ci case JSType::JS_SHARED_FUNCTION: { 1864514f5e3Sopenharmony_ci auto jsSharedFunction = JSSharedFunction::Cast(object); 1874514f5e3Sopenharmony_ci jsSharedFunction->VisitRangeSlot<visitType>(visitor); 1884514f5e3Sopenharmony_ci break; 1894514f5e3Sopenharmony_ci } 1904514f5e3Sopenharmony_ci case JSType::JS_GENERATOR_FUNCTION: { 1914514f5e3Sopenharmony_ci auto jsGeneratorFunction = JSGeneratorFunction::Cast(object); 1924514f5e3Sopenharmony_ci jsGeneratorFunction->VisitRangeSlot<visitType>(visitor); 1934514f5e3Sopenharmony_ci break; 1944514f5e3Sopenharmony_ci } 1954514f5e3Sopenharmony_ci case JSType::JS_ASYNC_GENERATOR_FUNCTION: { 1964514f5e3Sopenharmony_ci auto jsGeneratorFunction = JSAsyncGeneratorFunction::Cast(object); 1974514f5e3Sopenharmony_ci jsGeneratorFunction->VisitRangeSlot<visitType>(visitor); 1984514f5e3Sopenharmony_ci break; 1994514f5e3Sopenharmony_ci } 2004514f5e3Sopenharmony_ci case JSType::JS_PROXY_REVOC_FUNCTION: { 2014514f5e3Sopenharmony_ci auto jsProxyRevocFunction = JSProxyRevocFunction::Cast(object); 2024514f5e3Sopenharmony_ci jsProxyRevocFunction->VisitRangeSlot<visitType>(visitor); 2034514f5e3Sopenharmony_ci break; 2044514f5e3Sopenharmony_ci } 2054514f5e3Sopenharmony_ci case JSType::JS_PROMISE_REACTIONS_FUNCTION: { 2064514f5e3Sopenharmony_ci auto jsPromiseReactionsFunction = JSPromiseReactionsFunction::Cast(object); 2074514f5e3Sopenharmony_ci jsPromiseReactionsFunction->VisitRangeSlot<visitType>(visitor); 2084514f5e3Sopenharmony_ci break; 2094514f5e3Sopenharmony_ci } 2104514f5e3Sopenharmony_ci case JSType::JS_PROMISE_EXECUTOR_FUNCTION: { 2114514f5e3Sopenharmony_ci auto jsPromiseExecutorFunction = JSPromiseExecutorFunction::Cast(object); 2124514f5e3Sopenharmony_ci jsPromiseExecutorFunction->VisitRangeSlot<visitType>(visitor); 2134514f5e3Sopenharmony_ci break; 2144514f5e3Sopenharmony_ci } 2154514f5e3Sopenharmony_ci case JSType::JS_ASYNC_MODULE_FULFILLED_FUNCTION: { 2164514f5e3Sopenharmony_ci auto jsAsyncModuleFulfilledFunction = JSAsyncModuleFulfilledFunction::Cast(object); 2174514f5e3Sopenharmony_ci jsAsyncModuleFulfilledFunction->VisitRangeSlot<visitType>(visitor); 2184514f5e3Sopenharmony_ci break; 2194514f5e3Sopenharmony_ci } 2204514f5e3Sopenharmony_ci case JSType::JS_ASYNC_MODULE_REJECTED_FUNCTION: { 2214514f5e3Sopenharmony_ci auto jsAsyncModuleRejectedFunction = JSAsyncModuleRejectedFunction::Cast(object); 2224514f5e3Sopenharmony_ci jsAsyncModuleRejectedFunction->VisitRangeSlot<visitType>(visitor); 2234514f5e3Sopenharmony_ci break; 2244514f5e3Sopenharmony_ci } 2254514f5e3Sopenharmony_ci case JSType::JS_ASYNC_FROM_SYNC_ITER_UNWARP_FUNCTION: { 2264514f5e3Sopenharmony_ci auto jsAsyncFromSyncIterUnwarpFunction = JSAsyncFromSyncIterUnwarpFunction::Cast(object); 2274514f5e3Sopenharmony_ci jsAsyncFromSyncIterUnwarpFunction->VisitRangeSlot<visitType>(visitor); 2284514f5e3Sopenharmony_ci break; 2294514f5e3Sopenharmony_ci } 2304514f5e3Sopenharmony_ci case JSType::JS_PROMISE_ALL_RESOLVE_ELEMENT_FUNCTION: { 2314514f5e3Sopenharmony_ci auto jsPromiseAllResolveElementFunction = JSPromiseAllResolveElementFunction::Cast(object); 2324514f5e3Sopenharmony_ci jsPromiseAllResolveElementFunction->VisitRangeSlot<visitType>(visitor); 2334514f5e3Sopenharmony_ci break; 2344514f5e3Sopenharmony_ci } 2354514f5e3Sopenharmony_ci case JSType::JS_ASYNC_GENERATOR_RESUME_NEXT_RETURN_PROCESSOR_RST_FTN: { 2364514f5e3Sopenharmony_ci auto jsAsyGeneratorRseNextRtnProRstFtn = JSAsyncGeneratorResNextRetProRstFtn::Cast(object); 2374514f5e3Sopenharmony_ci jsAsyGeneratorRseNextRtnProRstFtn->VisitRangeSlot<visitType>(visitor); 2384514f5e3Sopenharmony_ci break; 2394514f5e3Sopenharmony_ci } 2404514f5e3Sopenharmony_ci case JSType::JS_PROMISE_ANY_REJECT_ELEMENT_FUNCTION: { 2414514f5e3Sopenharmony_ci auto jsPromiseAnyRejectElementFunction = JSPromiseAnyRejectElementFunction::Cast(object); 2424514f5e3Sopenharmony_ci jsPromiseAnyRejectElementFunction->VisitRangeSlot<visitType>(visitor); 2434514f5e3Sopenharmony_ci break; 2444514f5e3Sopenharmony_ci } 2454514f5e3Sopenharmony_ci case JSType::JS_PROMISE_ALL_SETTLED_ELEMENT_FUNCTION: { 2464514f5e3Sopenharmony_ci auto jsPromiseAllSettledElementFunction = JSPromiseAllSettledElementFunction::Cast(object); 2474514f5e3Sopenharmony_ci jsPromiseAllSettledElementFunction->VisitRangeSlot<visitType>(visitor); 2484514f5e3Sopenharmony_ci break; 2494514f5e3Sopenharmony_ci } 2504514f5e3Sopenharmony_ci case JSType::JS_PROMISE_FINALLY_FUNCTION: { 2514514f5e3Sopenharmony_ci auto jsPromiseFinallyFunction = JSPromiseFinallyFunction::Cast(object); 2524514f5e3Sopenharmony_ci jsPromiseFinallyFunction->VisitRangeSlot<visitType>(visitor); 2534514f5e3Sopenharmony_ci break; 2544514f5e3Sopenharmony_ci } 2554514f5e3Sopenharmony_ci case JSType::JS_PROMISE_VALUE_THUNK_OR_THROWER_FUNCTION: { 2564514f5e3Sopenharmony_ci auto jsPromiseValueThunkOrThrowerFunction = JSPromiseValueThunkOrThrowerFunction::Cast(object); 2574514f5e3Sopenharmony_ci jsPromiseValueThunkOrThrowerFunction->VisitRangeSlot<visitType>(visitor); 2584514f5e3Sopenharmony_ci break; 2594514f5e3Sopenharmony_ci } 2604514f5e3Sopenharmony_ci case JSType::JS_ASYNC_FUNCTION: 2614514f5e3Sopenharmony_ci case JSType::JS_SHARED_ASYNC_FUNCTION: { 2624514f5e3Sopenharmony_ci auto jsAsyncFunction = JSAsyncFunction::Cast(object); 2634514f5e3Sopenharmony_ci jsAsyncFunction->VisitRangeSlot<visitType>(visitor); 2644514f5e3Sopenharmony_ci break; 2654514f5e3Sopenharmony_ci } 2664514f5e3Sopenharmony_ci case JSType::JS_ASYNC_AWAIT_STATUS_FUNCTION: { 2674514f5e3Sopenharmony_ci auto jsAsyncAwaitStatusFunction = JSAsyncAwaitStatusFunction::Cast(object); 2684514f5e3Sopenharmony_ci jsAsyncAwaitStatusFunction->VisitRangeSlot<visitType>(visitor); 2694514f5e3Sopenharmony_ci break; 2704514f5e3Sopenharmony_ci } 2714514f5e3Sopenharmony_ci case JSType::JS_REG_EXP: 2724514f5e3Sopenharmony_ci JSRegExp::Cast(object)->VisitRangeSlot<visitType>(visitor); 2734514f5e3Sopenharmony_ci break; 2744514f5e3Sopenharmony_ci case JSType::JS_SET: 2754514f5e3Sopenharmony_ci JSSet::Cast(object)->VisitRangeSlot<visitType>(visitor); 2764514f5e3Sopenharmony_ci break; 2774514f5e3Sopenharmony_ci case JSType::JS_SHARED_SET: 2784514f5e3Sopenharmony_ci JSSharedSet::Cast(object)->VisitRangeSlot<visitType>(visitor); 2794514f5e3Sopenharmony_ci break; 2804514f5e3Sopenharmony_ci case JSType::JS_MAP: 2814514f5e3Sopenharmony_ci JSMap::Cast(object)->VisitRangeSlot<visitType>(visitor); 2824514f5e3Sopenharmony_ci break; 2834514f5e3Sopenharmony_ci case JSType::JS_SHARED_MAP: 2844514f5e3Sopenharmony_ci JSSharedMap::Cast(object)->VisitRangeSlot<visitType>(visitor); 2854514f5e3Sopenharmony_ci break; 2864514f5e3Sopenharmony_ci case JSType::JS_WEAK_MAP: 2874514f5e3Sopenharmony_ci JSWeakMap::Cast(object)->VisitRangeSlot<visitType>(visitor); 2884514f5e3Sopenharmony_ci break; 2894514f5e3Sopenharmony_ci case JSType::JS_WEAK_SET: 2904514f5e3Sopenharmony_ci JSWeakSet::Cast(object)->VisitRangeSlot<visitType>(visitor); 2914514f5e3Sopenharmony_ci break; 2924514f5e3Sopenharmony_ci case JSType::JS_WEAK_REF: 2934514f5e3Sopenharmony_ci JSWeakRef::Cast(object)->VisitRangeSlot<visitType>(visitor); 2944514f5e3Sopenharmony_ci break; 2954514f5e3Sopenharmony_ci case JSType::JS_FINALIZATION_REGISTRY: 2964514f5e3Sopenharmony_ci JSFinalizationRegistry::Cast(object)->VisitRangeSlot<visitType>(visitor); 2974514f5e3Sopenharmony_ci break; 2984514f5e3Sopenharmony_ci case JSType::CELL_RECORD: 2994514f5e3Sopenharmony_ci CellRecord::Cast(object)->VisitRangeSlot<visitType>(visitor); 3004514f5e3Sopenharmony_ci break; 3014514f5e3Sopenharmony_ci case JSType::JS_DATE: 3024514f5e3Sopenharmony_ci JSDate::Cast(object)->VisitRangeSlot<visitType>(visitor); 3034514f5e3Sopenharmony_ci break; 3044514f5e3Sopenharmony_ci case JSType::JS_FORIN_ITERATOR: 3054514f5e3Sopenharmony_ci JSForInIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 3064514f5e3Sopenharmony_ci break; 3074514f5e3Sopenharmony_ci case JSType::JS_MAP_ITERATOR: 3084514f5e3Sopenharmony_ci JSMapIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 3094514f5e3Sopenharmony_ci break; 3104514f5e3Sopenharmony_ci case JSType::JS_SHARED_MAP_ITERATOR: 3114514f5e3Sopenharmony_ci JSSharedMapIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 3124514f5e3Sopenharmony_ci break; 3134514f5e3Sopenharmony_ci case JSType::JS_SET_ITERATOR: 3144514f5e3Sopenharmony_ci JSSetIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 3154514f5e3Sopenharmony_ci break; 3164514f5e3Sopenharmony_ci case JSType::JS_SHARED_SET_ITERATOR: 3174514f5e3Sopenharmony_ci JSSharedSetIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 3184514f5e3Sopenharmony_ci break; 3194514f5e3Sopenharmony_ci case JSType::JS_REG_EXP_ITERATOR: 3204514f5e3Sopenharmony_ci JSRegExpIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 3214514f5e3Sopenharmony_ci break; 3224514f5e3Sopenharmony_ci case JSType::JS_ARRAY_ITERATOR: 3234514f5e3Sopenharmony_ci JSArrayIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 3244514f5e3Sopenharmony_ci break; 3254514f5e3Sopenharmony_ci case JSType::JS_SHARED_ARRAY_ITERATOR: 3264514f5e3Sopenharmony_ci JSSharedArrayIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 3274514f5e3Sopenharmony_ci break; 3284514f5e3Sopenharmony_ci case JSType::JS_STRING_ITERATOR: 3294514f5e3Sopenharmony_ci JSStringIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 3304514f5e3Sopenharmony_ci break; 3314514f5e3Sopenharmony_ci case JSType::JS_ARRAY_BUFFER: 3324514f5e3Sopenharmony_ci JSArrayBuffer::Cast(object)->VisitRangeSlot<visitType>(visitor); 3334514f5e3Sopenharmony_ci break; 3344514f5e3Sopenharmony_ci case JSType::JS_SENDABLE_ARRAY_BUFFER: 3354514f5e3Sopenharmony_ci JSSendableArrayBuffer::Cast(object)->VisitRangeSlot<visitType>(visitor); 3364514f5e3Sopenharmony_ci break; 3374514f5e3Sopenharmony_ci case JSType::JS_SHARED_ARRAY_BUFFER: 3384514f5e3Sopenharmony_ci JSArrayBuffer::Cast(object)->VisitRangeSlot<visitType>(visitor); 3394514f5e3Sopenharmony_ci break; 3404514f5e3Sopenharmony_ci case JSType::JS_PROMISE: 3414514f5e3Sopenharmony_ci JSPromise::Cast(object)->VisitRangeSlot<visitType>(visitor); 3424514f5e3Sopenharmony_ci break; 3434514f5e3Sopenharmony_ci case JSType::JS_DATA_VIEW: 3444514f5e3Sopenharmony_ci JSDataView::Cast(object)->VisitRangeSlot<visitType>(visitor); 3454514f5e3Sopenharmony_ci break; 3464514f5e3Sopenharmony_ci case JSType::JS_BOUND_FUNCTION: { 3474514f5e3Sopenharmony_ci auto jsBoundFunction = JSBoundFunction::Cast(object); 3484514f5e3Sopenharmony_ci jsBoundFunction->VisitRangeSlot<visitType>(visitor); 3494514f5e3Sopenharmony_ci break; 3504514f5e3Sopenharmony_ci } 3514514f5e3Sopenharmony_ci case JSType::JS_ARGUMENTS: 3524514f5e3Sopenharmony_ci JSArguments::Cast(object)->VisitRangeSlot<visitType>(visitor); 3534514f5e3Sopenharmony_ci break; 3544514f5e3Sopenharmony_ci case JSType::JS_GENERATOR_OBJECT: 3554514f5e3Sopenharmony_ci JSGeneratorObject::Cast(object)->VisitRangeSlot<visitType>(visitor); 3564514f5e3Sopenharmony_ci break; 3574514f5e3Sopenharmony_ci case JSType::JS_ASYNC_GENERATOR_OBJECT: 3584514f5e3Sopenharmony_ci JSAsyncGeneratorObject::Cast(object)->VisitRangeSlot<visitType>(visitor); 3594514f5e3Sopenharmony_ci break; 3604514f5e3Sopenharmony_ci case JSType::JS_ASYNC_FUNC_OBJECT: 3614514f5e3Sopenharmony_ci JSAsyncFuncObject::Cast(object)->VisitRangeSlot<visitType>(visitor); 3624514f5e3Sopenharmony_ci break; 3634514f5e3Sopenharmony_ci case JSType::JS_ARRAY: 3644514f5e3Sopenharmony_ci JSArray::Cast(object)->VisitRangeSlot<visitType>(visitor); 3654514f5e3Sopenharmony_ci break; 3664514f5e3Sopenharmony_ci case JSType::JS_SHARED_ARRAY: 3674514f5e3Sopenharmony_ci JSSharedArray::Cast(object)->VisitRangeSlot<visitType>(visitor); 3684514f5e3Sopenharmony_ci break; 3694514f5e3Sopenharmony_ci case JSType::JS_TYPED_ARRAY: 3704514f5e3Sopenharmony_ci case JSType::JS_INT8_ARRAY: 3714514f5e3Sopenharmony_ci case JSType::JS_UINT8_ARRAY: 3724514f5e3Sopenharmony_ci case JSType::JS_UINT8_CLAMPED_ARRAY: 3734514f5e3Sopenharmony_ci case JSType::JS_INT16_ARRAY: 3744514f5e3Sopenharmony_ci case JSType::JS_UINT16_ARRAY: 3754514f5e3Sopenharmony_ci case JSType::JS_INT32_ARRAY: 3764514f5e3Sopenharmony_ci case JSType::JS_UINT32_ARRAY: 3774514f5e3Sopenharmony_ci case JSType::JS_FLOAT32_ARRAY: 3784514f5e3Sopenharmony_ci case JSType::JS_FLOAT64_ARRAY: 3794514f5e3Sopenharmony_ci case JSType::JS_BIGINT64_ARRAY: 3804514f5e3Sopenharmony_ci case JSType::JS_BIGUINT64_ARRAY: 3814514f5e3Sopenharmony_ci JSTypedArray::Cast(object)->VisitRangeSlot<visitType>(visitor); 3824514f5e3Sopenharmony_ci break; 3834514f5e3Sopenharmony_ci case JSType::JS_SHARED_TYPED_ARRAY: 3844514f5e3Sopenharmony_ci case JSType::JS_SHARED_INT8_ARRAY: 3854514f5e3Sopenharmony_ci case JSType::JS_SHARED_UINT8_ARRAY: 3864514f5e3Sopenharmony_ci case JSType::JS_SHARED_UINT8_CLAMPED_ARRAY: 3874514f5e3Sopenharmony_ci case JSType::JS_SHARED_INT16_ARRAY: 3884514f5e3Sopenharmony_ci case JSType::JS_SHARED_UINT16_ARRAY: 3894514f5e3Sopenharmony_ci case JSType::JS_SHARED_INT32_ARRAY: 3904514f5e3Sopenharmony_ci case JSType::JS_SHARED_UINT32_ARRAY: 3914514f5e3Sopenharmony_ci case JSType::JS_SHARED_FLOAT32_ARRAY: 3924514f5e3Sopenharmony_ci case JSType::JS_SHARED_FLOAT64_ARRAY: 3934514f5e3Sopenharmony_ci case JSType::JS_SHARED_BIGINT64_ARRAY: 3944514f5e3Sopenharmony_ci case JSType::JS_SHARED_BIGUINT64_ARRAY: 3954514f5e3Sopenharmony_ci JSSharedTypedArray::Cast(object)->VisitRangeSlot<visitType>(visitor); 3964514f5e3Sopenharmony_ci break; 3974514f5e3Sopenharmony_ci case JSType::BYTE_ARRAY: 3984514f5e3Sopenharmony_ci if constexpr (visitType == VisitType::ALL_VISIT) { 3994514f5e3Sopenharmony_ci ByteArray::Cast(object)->VisitRangeSlot<visitType>(visitor); 4004514f5e3Sopenharmony_ci } 4014514f5e3Sopenharmony_ci break; 4024514f5e3Sopenharmony_ci case JSType::JS_PRIMITIVE_REF: 4034514f5e3Sopenharmony_ci JSPrimitiveRef::Cast(object)->VisitRangeSlot<visitType>(visitor); 4044514f5e3Sopenharmony_ci break; 4054514f5e3Sopenharmony_ci case JSType::JS_PROXY: { 4064514f5e3Sopenharmony_ci auto jsProxy = JSProxy::Cast(object); 4074514f5e3Sopenharmony_ci jsProxy->VisitRangeSlot<visitType>(visitor); 4084514f5e3Sopenharmony_ci break; 4094514f5e3Sopenharmony_ci } 4104514f5e3Sopenharmony_ci case JSType::HCLASS: 4114514f5e3Sopenharmony_ci // semi gc is not needed to visit hclass 4124514f5e3Sopenharmony_ci if constexpr (visitType != VisitType::SEMI_GC_VISIT) { 4134514f5e3Sopenharmony_ci JSHClass::Cast(object)->VisitRangeSlot<visitType>(visitor); 4144514f5e3Sopenharmony_ci } 4154514f5e3Sopenharmony_ci break; 4164514f5e3Sopenharmony_ci case JSType::LINE_STRING: 4174514f5e3Sopenharmony_ci if constexpr (visitType == VisitType::ALL_VISIT) { 4184514f5e3Sopenharmony_ci LineEcmaString::Cast(object)->VisitRangeSlot<visitType>(visitor); 4194514f5e3Sopenharmony_ci } 4204514f5e3Sopenharmony_ci break; 4214514f5e3Sopenharmony_ci case JSType::CONSTANT_STRING: 4224514f5e3Sopenharmony_ci if constexpr (visitType == VisitType::ALL_VISIT) { 4234514f5e3Sopenharmony_ci ConstantString::Cast(object)->VisitRangeSlot<visitType>(visitor); 4244514f5e3Sopenharmony_ci } 4254514f5e3Sopenharmony_ci break; 4264514f5e3Sopenharmony_ci case JSType::TREE_STRING: 4274514f5e3Sopenharmony_ci TreeEcmaString::Cast(object)->VisitRangeSlot<visitType>(visitor); 4284514f5e3Sopenharmony_ci break; 4294514f5e3Sopenharmony_ci case JSType::SLICED_STRING: 4304514f5e3Sopenharmony_ci SlicedString::Cast(object)->VisitRangeSlot<visitType>(visitor); 4314514f5e3Sopenharmony_ci break; 4324514f5e3Sopenharmony_ci case JSType::JS_NATIVE_POINTER: 4334514f5e3Sopenharmony_ci if constexpr ((visitType == VisitType::SNAPSHOT_VISIT) || (visitType == VisitType::ALL_VISIT)) { 4344514f5e3Sopenharmony_ci JSNativePointer::Cast(object)->VisitRangeSlot<visitType>(visitor); 4354514f5e3Sopenharmony_ci } 4364514f5e3Sopenharmony_ci break; 4374514f5e3Sopenharmony_ci case JSType::PROFILE_TYPE_INFO_CELL_0: 4384514f5e3Sopenharmony_ci case JSType::PROFILE_TYPE_INFO_CELL_1: 4394514f5e3Sopenharmony_ci case JSType::PROFILE_TYPE_INFO_CELL_N: 4404514f5e3Sopenharmony_ci ProfileTypeInfoCell::Cast(object)->VisitRangeSlot<visitType>(visitor); 4414514f5e3Sopenharmony_ci break; 4424514f5e3Sopenharmony_ci case JSType::FUNCTION_TEMPLATE: 4434514f5e3Sopenharmony_ci FunctionTemplate::Cast(object)->VisitRangeSlot<visitType>(visitor); 4444514f5e3Sopenharmony_ci break; 4454514f5e3Sopenharmony_ci case JSType::EXTRA_PROFILE_TYPE_INFO: 4464514f5e3Sopenharmony_ci ExtraProfileTypeInfo::Cast(object)->VisitRangeSlot<visitType>(visitor); 4474514f5e3Sopenharmony_ci break; 4484514f5e3Sopenharmony_ci case JSType::TAGGED_ARRAY: 4494514f5e3Sopenharmony_ci case JSType::TAGGED_DICTIONARY: 4504514f5e3Sopenharmony_ci case JSType::TEMPLATE_MAP: 4514514f5e3Sopenharmony_ci case JSType::LEXICAL_ENV: 4524514f5e3Sopenharmony_ci case JSType::SENDABLE_ENV: 4534514f5e3Sopenharmony_ci case JSType::AOT_LITERAL_INFO: 4544514f5e3Sopenharmony_ci case JSType::VTABLE: 4554514f5e3Sopenharmony_ci case JSType::COW_TAGGED_ARRAY: 4564514f5e3Sopenharmony_ci TaggedArray::Cast(object)->VisitRangeSlot<visitType>(visitor); 4574514f5e3Sopenharmony_ci break; 4584514f5e3Sopenharmony_ci case JSType::MUTANT_TAGGED_ARRAY: 4594514f5e3Sopenharmony_ci if constexpr (visitType == VisitType::ALL_VISIT) { 4604514f5e3Sopenharmony_ci MutantTaggedArray::Cast(object)->VisitRangeSlot<visitType>(visitor); 4614514f5e3Sopenharmony_ci } 4624514f5e3Sopenharmony_ci break; 4634514f5e3Sopenharmony_ci case JSType::COW_MUTANT_TAGGED_ARRAY: 4644514f5e3Sopenharmony_ci if constexpr (visitType == VisitType::ALL_VISIT) { 4654514f5e3Sopenharmony_ci COWMutantTaggedArray::Cast(object)->VisitRangeSlot<visitType>(visitor); 4664514f5e3Sopenharmony_ci } 4674514f5e3Sopenharmony_ci break; 4684514f5e3Sopenharmony_ci case JSType::CONSTANT_POOL: 4694514f5e3Sopenharmony_ci ConstantPool::Cast(object)->VisitRangeSlot<visitType>(visitor); 4704514f5e3Sopenharmony_ci break; 4714514f5e3Sopenharmony_ci case JSType::PROFILE_TYPE_INFO: 4724514f5e3Sopenharmony_ci ProfileTypeInfo::Cast(object)->VisitRangeSlot<visitType>(visitor); 4734514f5e3Sopenharmony_ci break; 4744514f5e3Sopenharmony_ci case JSType::GLOBAL_ENV: 4754514f5e3Sopenharmony_ci GlobalEnv::Cast(object)->VisitRangeSlot<visitType>(visitor); 4764514f5e3Sopenharmony_ci break; 4774514f5e3Sopenharmony_ci case JSType::ACCESSOR_DATA: 4784514f5e3Sopenharmony_ci AccessorData::Cast(object)->VisitRangeSlot<visitType>(visitor); 4794514f5e3Sopenharmony_ci break; 4804514f5e3Sopenharmony_ci case JSType::INTERNAL_ACCESSOR: 4814514f5e3Sopenharmony_ci if constexpr (visitType == VisitType::ALL_VISIT) { 4824514f5e3Sopenharmony_ci InternalAccessor::Cast(object)->VisitRangeSlot<visitType>(visitor); 4834514f5e3Sopenharmony_ci } 4844514f5e3Sopenharmony_ci break; 4854514f5e3Sopenharmony_ci case JSType::SYMBOL: 4864514f5e3Sopenharmony_ci JSSymbol::Cast(object)->VisitRangeSlot<visitType>(visitor); 4874514f5e3Sopenharmony_ci break; 4884514f5e3Sopenharmony_ci case JSType::JS_GENERATOR_CONTEXT: 4894514f5e3Sopenharmony_ci GeneratorContext::Cast(object)->VisitRangeSlot<visitType>(visitor); 4904514f5e3Sopenharmony_ci break; 4914514f5e3Sopenharmony_ci case JSType::PROTOTYPE_HANDLER: 4924514f5e3Sopenharmony_ci PrototypeHandler::Cast(object)->VisitRangeSlot<visitType>(visitor); 4934514f5e3Sopenharmony_ci break; 4944514f5e3Sopenharmony_ci case JSType::TRANSITION_HANDLER: 4954514f5e3Sopenharmony_ci TransitionHandler::Cast(object)->VisitRangeSlot<visitType>(visitor); 4964514f5e3Sopenharmony_ci break; 4974514f5e3Sopenharmony_ci case JSType::TRANS_WITH_PROTO_HANDLER: 4984514f5e3Sopenharmony_ci TransWithProtoHandler::Cast(object)->VisitRangeSlot<visitType>(visitor); 4994514f5e3Sopenharmony_ci break; 5004514f5e3Sopenharmony_ci case JSType::STORE_TS_HANDLER: 5014514f5e3Sopenharmony_ci StoreTSHandler::Cast(object)->VisitRangeSlot<visitType>(visitor); 5024514f5e3Sopenharmony_ci break; 5034514f5e3Sopenharmony_ci case JSType::PROPERTY_BOX: 5044514f5e3Sopenharmony_ci PropertyBox::Cast(object)->VisitRangeSlot<visitType>(visitor); 5054514f5e3Sopenharmony_ci break; 5064514f5e3Sopenharmony_ci case JSType::PROTO_CHANGE_MARKER: 5074514f5e3Sopenharmony_ci if constexpr (visitType == VisitType::ALL_VISIT) { 5084514f5e3Sopenharmony_ci ProtoChangeMarker::Cast(object)->VisitRangeSlot<visitType>(visitor); 5094514f5e3Sopenharmony_ci } 5104514f5e3Sopenharmony_ci break; 5114514f5e3Sopenharmony_ci case JSType::MARKER_CELL: 5124514f5e3Sopenharmony_ci if constexpr (visitType == VisitType::ALL_VISIT) { 5134514f5e3Sopenharmony_ci MarkerCell::Cast(object)->VisitRangeSlot<visitType>(visitor); 5144514f5e3Sopenharmony_ci } 5154514f5e3Sopenharmony_ci break; 5164514f5e3Sopenharmony_ci case JSType::TRACK_INFO: 5174514f5e3Sopenharmony_ci TrackInfo::Cast(object)->VisitRangeSlot<visitType>(visitor); 5184514f5e3Sopenharmony_ci break; 5194514f5e3Sopenharmony_ci case JSType::PROTOTYPE_INFO: 5204514f5e3Sopenharmony_ci ProtoChangeDetails::Cast(object)->VisitRangeSlot<visitType>(visitor); 5214514f5e3Sopenharmony_ci break; 5224514f5e3Sopenharmony_ci case JSType::PROMISE_CAPABILITY: 5234514f5e3Sopenharmony_ci PromiseCapability::Cast(object)->VisitRangeSlot<visitType>(visitor); 5244514f5e3Sopenharmony_ci break; 5254514f5e3Sopenharmony_ci case JSType::ASYNC_GENERATOR_REQUEST: 5264514f5e3Sopenharmony_ci AsyncGeneratorRequest::Cast(object)->VisitRangeSlot<visitType>(visitor); 5274514f5e3Sopenharmony_ci break; 5284514f5e3Sopenharmony_ci case JSType::ASYNC_ITERATOR_RECORD: 5294514f5e3Sopenharmony_ci AsyncIteratorRecord::Cast(object)->VisitRangeSlot<visitType>(visitor); 5304514f5e3Sopenharmony_ci break; 5314514f5e3Sopenharmony_ci case JSType::PROMISE_RECORD: 5324514f5e3Sopenharmony_ci PromiseRecord::Cast(object)->VisitRangeSlot<visitType>(visitor); 5334514f5e3Sopenharmony_ci break; 5344514f5e3Sopenharmony_ci case JSType::RESOLVING_FUNCTIONS_RECORD: 5354514f5e3Sopenharmony_ci ResolvingFunctionsRecord::Cast(object)->VisitRangeSlot<visitType>(visitor); 5364514f5e3Sopenharmony_ci break; 5374514f5e3Sopenharmony_ci case JSType::PROMISE_REACTIONS: 5384514f5e3Sopenharmony_ci PromiseReaction::Cast(object)->VisitRangeSlot<visitType>(visitor); 5394514f5e3Sopenharmony_ci break; 5404514f5e3Sopenharmony_ci case JSType::PROMISE_ITERATOR_RECORD: 5414514f5e3Sopenharmony_ci PromiseIteratorRecord::Cast(object)->VisitRangeSlot<visitType>(visitor); 5424514f5e3Sopenharmony_ci break; 5434514f5e3Sopenharmony_ci case JSType::MICRO_JOB_QUEUE: 5444514f5e3Sopenharmony_ci job::MicroJobQueue::Cast(object)->VisitRangeSlot<visitType>(visitor); 5454514f5e3Sopenharmony_ci break; 5464514f5e3Sopenharmony_ci case JSType::PENDING_JOB: 5474514f5e3Sopenharmony_ci job::PendingJob::Cast(object)->VisitRangeSlot<visitType>(visitor); 5484514f5e3Sopenharmony_ci break; 5494514f5e3Sopenharmony_ci case JSType::COMPLETION_RECORD: 5504514f5e3Sopenharmony_ci CompletionRecord::Cast(object)->VisitRangeSlot<visitType>(visitor); 5514514f5e3Sopenharmony_ci break; 5524514f5e3Sopenharmony_ci case JSType::PROGRAM: 5534514f5e3Sopenharmony_ci Program::Cast(object)->VisitRangeSlot<visitType>(visitor); 5544514f5e3Sopenharmony_ci break; 5554514f5e3Sopenharmony_ci case JSType::JS_INTL: 5564514f5e3Sopenharmony_ci JSIntl::Cast(object)->VisitRangeSlot<visitType>(visitor); 5574514f5e3Sopenharmony_ci break; 5584514f5e3Sopenharmony_ci case JSType::JS_NUMBER_FORMAT: 5594514f5e3Sopenharmony_ci JSNumberFormat::Cast(object)->VisitRangeSlot<visitType>(visitor); 5604514f5e3Sopenharmony_ci break; 5614514f5e3Sopenharmony_ci case JSType::JS_LOCALE: 5624514f5e3Sopenharmony_ci JSLocale::Cast(object)->VisitRangeSlot<visitType>(visitor); 5634514f5e3Sopenharmony_ci break; 5644514f5e3Sopenharmony_ci case JSType::JS_DATE_TIME_FORMAT: 5654514f5e3Sopenharmony_ci JSDateTimeFormat::Cast(object)->VisitRangeSlot<visitType>(visitor); 5664514f5e3Sopenharmony_ci break; 5674514f5e3Sopenharmony_ci case JSType::JS_RELATIVE_TIME_FORMAT: 5684514f5e3Sopenharmony_ci JSRelativeTimeFormat::Cast(object)->VisitRangeSlot<visitType>(visitor); 5694514f5e3Sopenharmony_ci break; 5704514f5e3Sopenharmony_ci case JSType::JS_INTL_BOUND_FUNCTION: { 5714514f5e3Sopenharmony_ci auto jsIntlBoundFunction = JSIntlBoundFunction::Cast(object); 5724514f5e3Sopenharmony_ci jsIntlBoundFunction->VisitRangeSlot<visitType>(visitor); 5734514f5e3Sopenharmony_ci break; 5744514f5e3Sopenharmony_ci } 5754514f5e3Sopenharmony_ci case JSType::JS_REALM: 5764514f5e3Sopenharmony_ci JSRealm::Cast(object)->VisitRangeSlot<visitType>(visitor); 5774514f5e3Sopenharmony_ci break; 5784514f5e3Sopenharmony_ci case JSType::JS_COLLATOR: 5794514f5e3Sopenharmony_ci JSCollator::Cast(object)->VisitRangeSlot<visitType>(visitor); 5804514f5e3Sopenharmony_ci break; 5814514f5e3Sopenharmony_ci case JSType::JS_PLURAL_RULES: 5824514f5e3Sopenharmony_ci JSPluralRules::Cast(object)->VisitRangeSlot<visitType>(visitor); 5834514f5e3Sopenharmony_ci break; 5844514f5e3Sopenharmony_ci case JSType::JS_DISPLAYNAMES: 5854514f5e3Sopenharmony_ci JSDisplayNames::Cast(object)->VisitRangeSlot<visitType>(visitor); 5864514f5e3Sopenharmony_ci break; 5874514f5e3Sopenharmony_ci case JSType::JS_SEGMENTER: 5884514f5e3Sopenharmony_ci JSSegmenter::Cast(object)->VisitRangeSlot<visitType>(visitor); 5894514f5e3Sopenharmony_ci break; 5904514f5e3Sopenharmony_ci case JSType::JS_SEGMENTS: 5914514f5e3Sopenharmony_ci JSSegments::Cast(object)->VisitRangeSlot<visitType>(visitor); 5924514f5e3Sopenharmony_ci break; 5934514f5e3Sopenharmony_ci case JSType::JS_SEGMENT_ITERATOR: 5944514f5e3Sopenharmony_ci JSSegmentIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 5954514f5e3Sopenharmony_ci break; 5964514f5e3Sopenharmony_ci case JSType::JS_LIST_FORMAT: 5974514f5e3Sopenharmony_ci JSListFormat::Cast(object)->VisitRangeSlot<visitType>(visitor); 5984514f5e3Sopenharmony_ci break; 5994514f5e3Sopenharmony_ci case JSType::MACHINE_CODE_OBJECT: 6004514f5e3Sopenharmony_ci MachineCode::Cast(object)->VisitRangeSlot<visitType>(visitor); 6014514f5e3Sopenharmony_ci break; 6024514f5e3Sopenharmony_ci case JSType::CLASS_INFO_EXTRACTOR: { 6034514f5e3Sopenharmony_ci auto classInfoExtractor = ClassInfoExtractor::Cast(object); 6044514f5e3Sopenharmony_ci classInfoExtractor->VisitRangeSlot<visitType>(visitor); 6054514f5e3Sopenharmony_ci break; 6064514f5e3Sopenharmony_ci } 6074514f5e3Sopenharmony_ci case JSType::JS_API_QUEUE: 6084514f5e3Sopenharmony_ci JSAPIQueue::Cast(object)->VisitRangeSlot<visitType>(visitor); 6094514f5e3Sopenharmony_ci break; 6104514f5e3Sopenharmony_ci case JSType::JS_API_QUEUE_ITERATOR: 6114514f5e3Sopenharmony_ci JSAPIQueueIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 6124514f5e3Sopenharmony_ci break; 6134514f5e3Sopenharmony_ci case JSType::JS_API_ARRAY_LIST: 6144514f5e3Sopenharmony_ci JSAPIArrayList::Cast(object)->VisitRangeSlot<visitType>(visitor); 6154514f5e3Sopenharmony_ci break; 6164514f5e3Sopenharmony_ci case JSType::JS_API_ARRAYLIST_ITERATOR: 6174514f5e3Sopenharmony_ci JSAPIArrayListIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 6184514f5e3Sopenharmony_ci break; 6194514f5e3Sopenharmony_ci case JSType::JS_API_LIGHT_WEIGHT_MAP: 6204514f5e3Sopenharmony_ci JSAPILightWeightMap::Cast(object)->VisitRangeSlot<visitType>(visitor); 6214514f5e3Sopenharmony_ci break; 6224514f5e3Sopenharmony_ci case JSType::JS_API_LIGHT_WEIGHT_MAP_ITERATOR: 6234514f5e3Sopenharmony_ci JSAPILightWeightMapIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 6244514f5e3Sopenharmony_ci break; 6254514f5e3Sopenharmony_ci case JSType::JS_API_LIGHT_WEIGHT_SET: 6264514f5e3Sopenharmony_ci JSAPILightWeightSet::Cast(object)->VisitRangeSlot<visitType>(visitor); 6274514f5e3Sopenharmony_ci break; 6284514f5e3Sopenharmony_ci case JSType::JS_API_LIGHT_WEIGHT_SET_ITERATOR: 6294514f5e3Sopenharmony_ci JSAPILightWeightSetIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 6304514f5e3Sopenharmony_ci break; 6314514f5e3Sopenharmony_ci case JSType::RB_TREENODE: 6324514f5e3Sopenharmony_ci RBTreeNode::Cast(object)->VisitRangeSlot<visitType>(visitor); 6334514f5e3Sopenharmony_ci break; 6344514f5e3Sopenharmony_ci case JSType::LINKED_NODE: 6354514f5e3Sopenharmony_ci LinkedNode::Cast(object)->VisitRangeSlot<visitType>(visitor); 6364514f5e3Sopenharmony_ci break; 6374514f5e3Sopenharmony_ci case JSType::JS_API_HASH_MAP: 6384514f5e3Sopenharmony_ci JSAPIHashMap::Cast(object)->VisitRangeSlot<visitType>(visitor); 6394514f5e3Sopenharmony_ci break; 6404514f5e3Sopenharmony_ci case JSType::JS_API_HASH_SET: 6414514f5e3Sopenharmony_ci JSAPIHashSet::Cast(object)->VisitRangeSlot<visitType>(visitor); 6424514f5e3Sopenharmony_ci break; 6434514f5e3Sopenharmony_ci case JSType::JS_API_HASHMAP_ITERATOR: 6444514f5e3Sopenharmony_ci JSAPIHashMapIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 6454514f5e3Sopenharmony_ci break; 6464514f5e3Sopenharmony_ci case JSType::JS_API_HASHSET_ITERATOR: 6474514f5e3Sopenharmony_ci JSAPIHashSetIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 6484514f5e3Sopenharmony_ci break; 6494514f5e3Sopenharmony_ci case JSType::JS_API_TREE_MAP: 6504514f5e3Sopenharmony_ci JSAPITreeMap::Cast(object)->VisitRangeSlot<visitType>(visitor); 6514514f5e3Sopenharmony_ci break; 6524514f5e3Sopenharmony_ci case JSType::JS_API_TREE_SET: 6534514f5e3Sopenharmony_ci JSAPITreeSet::Cast(object)->VisitRangeSlot<visitType>(visitor); 6544514f5e3Sopenharmony_ci break; 6554514f5e3Sopenharmony_ci case JSType::JS_API_TREEMAP_ITERATOR: 6564514f5e3Sopenharmony_ci JSAPITreeMapIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 6574514f5e3Sopenharmony_ci break; 6584514f5e3Sopenharmony_ci case JSType::JS_API_TREESET_ITERATOR: 6594514f5e3Sopenharmony_ci JSAPITreeSetIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 6604514f5e3Sopenharmony_ci break; 6614514f5e3Sopenharmony_ci case JSType::JS_API_PLAIN_ARRAY: 6624514f5e3Sopenharmony_ci JSAPIPlainArray::Cast(object)->VisitRangeSlot<visitType>(visitor); 6634514f5e3Sopenharmony_ci break; 6644514f5e3Sopenharmony_ci case JSType::JS_API_PLAIN_ARRAY_ITERATOR: 6654514f5e3Sopenharmony_ci JSAPIPlainArrayIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 6664514f5e3Sopenharmony_ci break; 6674514f5e3Sopenharmony_ci case JSType::JS_API_DEQUE: 6684514f5e3Sopenharmony_ci JSAPIDeque::Cast(object)->VisitRangeSlot<visitType>(visitor); 6694514f5e3Sopenharmony_ci break; 6704514f5e3Sopenharmony_ci case JSType::JS_API_DEQUE_ITERATOR: 6714514f5e3Sopenharmony_ci JSAPIDequeIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 6724514f5e3Sopenharmony_ci break; 6734514f5e3Sopenharmony_ci case JSType::JS_API_STACK: 6744514f5e3Sopenharmony_ci JSAPIStack::Cast(object)->VisitRangeSlot<visitType>(visitor); 6754514f5e3Sopenharmony_ci break; 6764514f5e3Sopenharmony_ci case JSType::JS_API_STACK_ITERATOR: 6774514f5e3Sopenharmony_ci JSAPIStackIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 6784514f5e3Sopenharmony_ci break; 6794514f5e3Sopenharmony_ci case JSType::JS_API_VECTOR: 6804514f5e3Sopenharmony_ci JSAPIVector::Cast(object)->VisitRangeSlot<visitType>(visitor); 6814514f5e3Sopenharmony_ci break; 6824514f5e3Sopenharmony_ci case JSType::JS_API_BITVECTOR: 6834514f5e3Sopenharmony_ci JSAPIBitVector::Cast(object)->VisitRangeSlot<visitType>(visitor); 6844514f5e3Sopenharmony_ci break; 6854514f5e3Sopenharmony_ci case JSType::JS_API_VECTOR_ITERATOR: 6864514f5e3Sopenharmony_ci JSAPIVectorIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 6874514f5e3Sopenharmony_ci break; 6884514f5e3Sopenharmony_ci case JSType::JS_API_BITVECTOR_ITERATOR: 6894514f5e3Sopenharmony_ci JSAPIBitVectorIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 6904514f5e3Sopenharmony_ci break; 6914514f5e3Sopenharmony_ci case JSType::JS_API_LIST: 6924514f5e3Sopenharmony_ci JSAPIList::Cast(object)->VisitRangeSlot<visitType>(visitor); 6934514f5e3Sopenharmony_ci break; 6944514f5e3Sopenharmony_ci case JSType::JS_API_LINKED_LIST: 6954514f5e3Sopenharmony_ci JSAPILinkedList::Cast(object)->VisitRangeSlot<visitType>(visitor); 6964514f5e3Sopenharmony_ci break; 6974514f5e3Sopenharmony_ci case JSType::JS_API_LIST_ITERATOR: 6984514f5e3Sopenharmony_ci JSAPIListIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 6994514f5e3Sopenharmony_ci break; 7004514f5e3Sopenharmony_ci case JSType::JS_API_LINKED_LIST_ITERATOR: 7014514f5e3Sopenharmony_ci JSAPILinkedListIterator::Cast(object)->VisitRangeSlot<visitType>(visitor); 7024514f5e3Sopenharmony_ci break; 7034514f5e3Sopenharmony_ci case JSType::BIGINT: 7044514f5e3Sopenharmony_ci if constexpr (visitType == VisitType::ALL_VISIT) { 7054514f5e3Sopenharmony_ci BigInt::Cast(object)->VisitRangeSlot<visitType>(visitor); 7064514f5e3Sopenharmony_ci } 7074514f5e3Sopenharmony_ci break; 7084514f5e3Sopenharmony_ci case JSType::SOURCE_TEXT_MODULE_RECORD: 7094514f5e3Sopenharmony_ci SourceTextModule::Cast(object)->VisitRangeSlot<visitType>(visitor); 7104514f5e3Sopenharmony_ci break; 7114514f5e3Sopenharmony_ci case JSType::IMPORTENTRY_RECORD: 7124514f5e3Sopenharmony_ci ImportEntry::Cast(object)->VisitRangeSlot<visitType>(visitor); 7134514f5e3Sopenharmony_ci break; 7144514f5e3Sopenharmony_ci case JSType::LOCAL_EXPORTENTRY_RECORD: 7154514f5e3Sopenharmony_ci LocalExportEntry::Cast(object)->VisitRangeSlot<visitType>(visitor); 7164514f5e3Sopenharmony_ci break; 7174514f5e3Sopenharmony_ci case JSType::INDIRECT_EXPORTENTRY_RECORD: 7184514f5e3Sopenharmony_ci IndirectExportEntry::Cast(object)->VisitRangeSlot<visitType>(visitor); 7194514f5e3Sopenharmony_ci break; 7204514f5e3Sopenharmony_ci case JSType::STAR_EXPORTENTRY_RECORD: 7214514f5e3Sopenharmony_ci StarExportEntry::Cast(object)->VisitRangeSlot<visitType>(visitor); 7224514f5e3Sopenharmony_ci break; 7234514f5e3Sopenharmony_ci case JSType::RESOLVEDBINDING_RECORD: 7244514f5e3Sopenharmony_ci ResolvedBinding::Cast(object)->VisitRangeSlot<visitType>(visitor); 7254514f5e3Sopenharmony_ci break; 7264514f5e3Sopenharmony_ci case JSType::RESOLVEDINDEXBINDING_RECORD: 7274514f5e3Sopenharmony_ci ResolvedIndexBinding::Cast(object)->VisitRangeSlot<visitType>(visitor); 7284514f5e3Sopenharmony_ci break; 7294514f5e3Sopenharmony_ci case JSType::RESOLVEDRECORDINDEXBINDING_RECORD: 7304514f5e3Sopenharmony_ci ResolvedRecordIndexBinding::Cast(object)->VisitRangeSlot<visitType>(visitor); 7314514f5e3Sopenharmony_ci break; 7324514f5e3Sopenharmony_ci case JSType::RESOLVEDRECORDBINDING_RECORD: 7334514f5e3Sopenharmony_ci ResolvedRecordBinding::Cast(object)->VisitRangeSlot<visitType>(visitor); 7344514f5e3Sopenharmony_ci break; 7354514f5e3Sopenharmony_ci case JSType::JS_MODULE_NAMESPACE: 7364514f5e3Sopenharmony_ci ModuleNamespace::Cast(object)->VisitRangeSlot<visitType>(visitor); 7374514f5e3Sopenharmony_ci break; 7384514f5e3Sopenharmony_ci case JSType::JS_CJS_EXPORTS: 7394514f5e3Sopenharmony_ci CjsExports::Cast(object)->VisitRangeSlot<visitType>(visitor); 7404514f5e3Sopenharmony_ci break; 7414514f5e3Sopenharmony_ci case JSType::JS_CJS_MODULE: 7424514f5e3Sopenharmony_ci CjsModule::Cast(object)->VisitRangeSlot<visitType>(visitor); 7434514f5e3Sopenharmony_ci break; 7444514f5e3Sopenharmony_ci case JSType::JS_CJS_REQUIRE: 7454514f5e3Sopenharmony_ci CjsRequire::Cast(object)->VisitRangeSlot<visitType>(visitor); 7464514f5e3Sopenharmony_ci break; 7474514f5e3Sopenharmony_ci case JSType::METHOD: 7484514f5e3Sopenharmony_ci Method::Cast(object)->VisitRangeSlot<visitType>(visitor); 7494514f5e3Sopenharmony_ci break; 7504514f5e3Sopenharmony_ci case JSType::CLASS_LITERAL: 7514514f5e3Sopenharmony_ci ClassLiteral::Cast(object)->VisitRangeSlot<visitType>(visitor); 7524514f5e3Sopenharmony_ci break; 7534514f5e3Sopenharmony_ci case JSType::NATIVE_MODULE_FAILURE_INFO: 7544514f5e3Sopenharmony_ci NativeModuleFailureInfo::Cast(object)->VisitRangeSlot<visitType>(visitor); 7554514f5e3Sopenharmony_ci break; 7564514f5e3Sopenharmony_ci default: 7574514f5e3Sopenharmony_ci LOG_ECMA(FATAL) << "this branch is unreachable, type: " << static_cast<size_t>(type); 7584514f5e3Sopenharmony_ci UNREACHABLE(); 7594514f5e3Sopenharmony_ci } 7604514f5e3Sopenharmony_ci } 7614514f5e3Sopenharmony_ci}; 7624514f5e3Sopenharmony_ci} // namespace panda::ecmascript 7634514f5e3Sopenharmony_ci 7644514f5e3Sopenharmony_ci#endif // ECMASCRIPT_MEM_OBJECT_XRAY_H 765