14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2021 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#include "ecmascript/snapshot/mem/snapshot_processor.h"
174514f5e3Sopenharmony_ci
184514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_ark_tools.h"
194514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_array.h"
204514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_arraybuffer.h"
214514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_async_function.h"
224514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_async_generator.h"
234514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_async_iterator.h"
244514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_atomics.h"
254514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_bigint.h"
264514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_boolean.h"
274514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_cjs_exports.h"
284514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_cjs_module.h"
294514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_cjs_require.h"
304514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_dataview.h"
314514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_date.h"
324514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_errors.h"
334514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_finalization_registry.h"
344514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_function.h"
354514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_generator.h"
364514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_global.h"
374514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_iterator.h"
384514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_json.h"
394514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_map.h"
404514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_math.h"
414514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_number.h"
424514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_object.h"
434514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_promise.h"
444514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_promise_handler.h"
454514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_promise_job.h"
464514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_proxy.h"
474514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_reflect.h"
484514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_regexp.h"
494514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_set.h"
504514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_sharedarraybuffer.h"
514514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_string_iterator.h"
524514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_symbol.h"
534514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_typedarray.h"
544514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_weak_map.h"
554514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_weak_ref.h"
564514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_weak_set.h"
574514f5e3Sopenharmony_ci#include "ecmascript/containers/containers_arraylist.h"
584514f5e3Sopenharmony_ci#include "ecmascript/containers/containers_deque.h"
594514f5e3Sopenharmony_ci#include "ecmascript/containers/containers_hashmap.h"
604514f5e3Sopenharmony_ci#include "ecmascript/containers/containers_hashset.h"
614514f5e3Sopenharmony_ci#include "ecmascript/containers/containers_lightweightmap.h"
624514f5e3Sopenharmony_ci#include "ecmascript/containers/containers_lightweightset.h"
634514f5e3Sopenharmony_ci#include "ecmascript/containers/containers_linked_list.h"
644514f5e3Sopenharmony_ci#include "ecmascript/containers/containers_list.h"
654514f5e3Sopenharmony_ci#include "ecmascript/containers/containers_plainarray.h"
664514f5e3Sopenharmony_ci#include "ecmascript/containers/containers_private.h"
674514f5e3Sopenharmony_ci#include "ecmascript/containers/containers_queue.h"
684514f5e3Sopenharmony_ci#include "ecmascript/containers/containers_stack.h"
694514f5e3Sopenharmony_ci#include "ecmascript/containers/containers_treemap.h"
704514f5e3Sopenharmony_ci#include "ecmascript/containers/containers_treeset.h"
714514f5e3Sopenharmony_ci#include "ecmascript/containers/containers_vector.h"
724514f5e3Sopenharmony_ci#include "ecmascript/containers/containers_bitvector.h"
734514f5e3Sopenharmony_ci#include "ecmascript/runtime.h"
744514f5e3Sopenharmony_ci#include "ecmascript/runtime_lock.h"
754514f5e3Sopenharmony_ci#ifdef ARK_SUPPORT_INTL
764514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_collator.h"
774514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_date_time_format.h"
784514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_displaynames.h"
794514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_intl.h"
804514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_list_format.h"
814514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_locale.h"
824514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_number_format.h"
834514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_plural_rules.h"
844514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_relative_time_format.h"
854514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_segmenter.h"
864514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_segments.h"
874514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_segment_iterator.h"
884514f5e3Sopenharmony_ci#endif
894514f5e3Sopenharmony_ci
904514f5e3Sopenharmony_cinamespace panda::ecmascript {
914514f5e3Sopenharmony_ciusing Number = builtins::BuiltinsNumber;
924514f5e3Sopenharmony_ciusing BuiltinsBigInt = builtins::BuiltinsBigInt;
934514f5e3Sopenharmony_ciusing Object = builtins::BuiltinsObject;
944514f5e3Sopenharmony_ciusing Date = builtins::BuiltinsDate;
954514f5e3Sopenharmony_ciusing Symbol = builtins::BuiltinsSymbol;
964514f5e3Sopenharmony_ciusing Boolean = builtins::BuiltinsBoolean;
974514f5e3Sopenharmony_ciusing BuiltinsMap = builtins::BuiltinsMap;
984514f5e3Sopenharmony_ciusing BuiltinsSet = builtins::BuiltinsSet;
994514f5e3Sopenharmony_ciusing BuiltinsWeakMap = builtins::BuiltinsWeakMap;
1004514f5e3Sopenharmony_ciusing BuiltinsWeakSet = builtins::BuiltinsWeakSet;
1014514f5e3Sopenharmony_ciusing BuiltinsWeakRef = builtins::BuiltinsWeakRef;
1024514f5e3Sopenharmony_ciusing BuiltinsFinalizationRegistry = builtins::BuiltinsFinalizationRegistry;
1034514f5e3Sopenharmony_ciusing BuiltinsArray = builtins::BuiltinsArray;
1044514f5e3Sopenharmony_ciusing BuiltinsTypedArray = builtins::BuiltinsTypedArray;
1054514f5e3Sopenharmony_ciusing BuiltinsIterator = builtins::BuiltinsIterator;
1064514f5e3Sopenharmony_ciusing BuiltinsAsyncIterator = builtins::BuiltinsAsyncIterator;
1074514f5e3Sopenharmony_ciusing Error = builtins::BuiltinsError;
1084514f5e3Sopenharmony_ciusing RangeError = builtins::BuiltinsRangeError;
1094514f5e3Sopenharmony_ciusing ReferenceError = builtins::BuiltinsReferenceError;
1104514f5e3Sopenharmony_ciusing TypeError = builtins::BuiltinsTypeError;
1114514f5e3Sopenharmony_ciusing AggregateError = builtins::BuiltinsAggregateError;
1124514f5e3Sopenharmony_ciusing URIError = builtins::BuiltinsURIError;
1134514f5e3Sopenharmony_ciusing SyntaxError = builtins::BuiltinsSyntaxError;
1144514f5e3Sopenharmony_ciusing EvalError = builtins::BuiltinsEvalError;
1154514f5e3Sopenharmony_ciusing OOMError = builtins::BuiltinsOOMError;
1164514f5e3Sopenharmony_ciusing ErrorType = base::ErrorType;
1174514f5e3Sopenharmony_ciusing Global = builtins::BuiltinsGlobal;
1184514f5e3Sopenharmony_ciusing BuiltinsString = builtins::BuiltinsString;
1194514f5e3Sopenharmony_ciusing StringIterator = builtins::BuiltinsStringIterator;
1204514f5e3Sopenharmony_ciusing RegExp = builtins::BuiltinsRegExp;
1214514f5e3Sopenharmony_ciusing Function = builtins::BuiltinsFunction;
1224514f5e3Sopenharmony_ciusing Math = builtins::BuiltinsMath;
1234514f5e3Sopenharmony_ciusing Atomics = builtins::BuiltinsAtomics;
1244514f5e3Sopenharmony_ciusing ArrayBuffer = builtins::BuiltinsArrayBuffer;
1254514f5e3Sopenharmony_ciusing SharedArrayBuffer = builtins::BuiltinsSharedArrayBuffer;
1264514f5e3Sopenharmony_ciusing Json = builtins::BuiltinsJson;
1274514f5e3Sopenharmony_ciusing Proxy = builtins::BuiltinsProxy;
1284514f5e3Sopenharmony_ciusing Reflect = builtins::BuiltinsReflect;
1294514f5e3Sopenharmony_ciusing AsyncFunction = builtins::BuiltinsAsyncFunction;
1304514f5e3Sopenharmony_ciusing GeneratorObject = builtins::BuiltinsGenerator;
1314514f5e3Sopenharmony_ciusing AsyncGeneratorObject = builtins::BuiltinsAsyncGenerator;
1324514f5e3Sopenharmony_ciusing Promise = builtins::BuiltinsPromise;
1334514f5e3Sopenharmony_ciusing BuiltinsPromiseHandler = builtins::BuiltinsPromiseHandler;
1344514f5e3Sopenharmony_ciusing BuiltinsPromiseJob = builtins::BuiltinsPromiseJob;
1354514f5e3Sopenharmony_ciusing BuiltinsCjsExports = builtins::BuiltinsCjsExports;
1364514f5e3Sopenharmony_ciusing BuiltinsCjsModule = builtins::BuiltinsCjsModule;
1374514f5e3Sopenharmony_ciusing BuiltinsCjsRequire = builtins::BuiltinsCjsRequire;
1384514f5e3Sopenharmony_ciusing ArkTools = builtins::BuiltinsArkTools;
1394514f5e3Sopenharmony_ciusing ErrorType = base::ErrorType;
1404514f5e3Sopenharmony_ciusing DataView = builtins::BuiltinsDataView;
1414514f5e3Sopenharmony_ciusing ArrayList = containers::ContainersArrayList;
1424514f5e3Sopenharmony_ciusing HashMap = containers::ContainersHashMap;
1434514f5e3Sopenharmony_ciusing HashSet = containers::ContainersHashSet;
1444514f5e3Sopenharmony_ciusing LightWeightMap = containers::ContainersLightWeightMap;
1454514f5e3Sopenharmony_ciusing LightWeightSet = containers::ContainersLightWeightSet;
1464514f5e3Sopenharmony_ciusing TreeMap = containers::ContainersTreeMap;
1474514f5e3Sopenharmony_ciusing TreeSet = containers::ContainersTreeSet;
1484514f5e3Sopenharmony_ciusing Vector = containers::ContainersVector;
1494514f5e3Sopenharmony_ciusing BitVector = containers::ContainersBitVector;
1504514f5e3Sopenharmony_ciusing Queue = containers::ContainersQueue;
1514514f5e3Sopenharmony_ciusing List = containers::ContainersList;
1524514f5e3Sopenharmony_ciusing LinkedList = containers::ContainersLinkedList;
1534514f5e3Sopenharmony_ciusing PlainArray = containers::ContainersPlainArray;
1544514f5e3Sopenharmony_ciusing Deque = containers::ContainersDeque;
1554514f5e3Sopenharmony_ciusing ContainerStack = panda::ecmascript::containers::ContainersStack;
1564514f5e3Sopenharmony_ciusing ContainersPrivate = containers::ContainersPrivate;
1574514f5e3Sopenharmony_ci#ifdef ARK_SUPPORT_INTL
1584514f5e3Sopenharmony_ciusing DisplayNames = builtins::BuiltinsDisplayNames;
1594514f5e3Sopenharmony_ciusing ListFormat = builtins::BuiltinsListFormat;
1604514f5e3Sopenharmony_ciusing Intl = builtins::BuiltinsIntl;
1614514f5e3Sopenharmony_ciusing Locale = builtins::BuiltinsLocale;
1624514f5e3Sopenharmony_ciusing DateTimeFormat = builtins::BuiltinsDateTimeFormat;
1634514f5e3Sopenharmony_ciusing NumberFormat = builtins::BuiltinsNumberFormat;
1644514f5e3Sopenharmony_ciusing RelativeTimeFormat = builtins::BuiltinsRelativeTimeFormat;
1654514f5e3Sopenharmony_ciusing Collator = builtins::BuiltinsCollator;
1664514f5e3Sopenharmony_ciusing PluralRules = builtins::BuiltinsPluralRules;
1674514f5e3Sopenharmony_ciusing Segmenter = builtins::BuiltinsSegmenter;
1684514f5e3Sopenharmony_ciusing Segments = builtins::BuiltinsSegments;
1694514f5e3Sopenharmony_ci#endif
1704514f5e3Sopenharmony_ci
1714514f5e3Sopenharmony_ci// NOLINTNEXTLINE(modernize-avoid-c-arrays)
1724514f5e3Sopenharmony_cistatic uintptr_t g_nativeTable[] = {
1734514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(nullptr),
1744514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsMap::Species),
1754514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(StringIterator::Next),
1764514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Function::FunctionPrototypeInvokeSelf),
1774514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Function::FunctionConstructor),
1784514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSFunction::AccessCallerArgumentsThrowTypeError),
1794514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Function::FunctionPrototypeApply),
1804514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Function::FunctionPrototypeBind),
1814514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Function::FunctionPrototypeCall),
1824514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Function::FunctionPrototypeToString),
1834514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::ObjectConstructor),
1844514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::FromEntries),
1854514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Error::ErrorConstructor),
1864514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Error::ToString),
1874514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RangeError::RangeErrorConstructor),
1884514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RangeError::ToString),
1894514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ReferenceError::ReferenceErrorConstructor),
1904514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ReferenceError::ToString),
1914514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TypeError::TypeErrorConstructor),
1924514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TypeError::ToString),
1934514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TypeError::ThrowTypeError),
1944514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(AggregateError::AggregateErrorConstructor),
1954514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(AggregateError::ToString),
1964514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(URIError::URIErrorConstructor),
1974514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(URIError::ToString),
1984514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(SyntaxError::SyntaxErrorConstructor),
1994514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(SyntaxError::ToString),
2004514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(EvalError::EvalErrorConstructor),
2014514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(EvalError::ToString),
2024514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(OOMError::OOMErrorConstructor),
2034514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(OOMError::ToString),
2044514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Number::NumberConstructor),
2054514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Number::ToExponential),
2064514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Number::ToFixed),
2074514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Number::ToLocaleString),
2084514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Number::ToPrecision),
2094514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Number::ToString),
2104514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Number::ValueOf),
2114514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Number::IsFinite),
2124514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Number::IsInteger),
2134514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Number::IsNaN),
2144514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Number::IsSafeInteger),
2154514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Number::ParseFloat),
2164514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Number::ParseInt),
2174514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Symbol::SymbolConstructor),
2184514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Symbol::For),
2194514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Symbol::KeyFor),
2204514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Symbol::DescriptionGetter),
2214514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Symbol::ToPrimitive),
2224514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Symbol::ToString),
2234514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Symbol::ValueOf),
2244514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Function::FunctionPrototypeHasInstance),
2254514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::DateConstructor),
2264514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::GetDate),
2274514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::GetDay),
2284514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::GetFullYear),
2294514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::GetHours),
2304514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::GetMilliseconds),
2314514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::GetMinutes),
2324514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::GetMonth),
2334514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::GetSeconds),
2344514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::GetTime),
2354514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::GetTimezoneOffset),
2364514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::GetUTCDate),
2374514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::GetUTCDay),
2384514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::GetUTCFullYear),
2394514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::GetUTCHours),
2404514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::GetUTCMilliseconds),
2414514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::GetUTCMinutes),
2424514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::GetUTCMonth),
2434514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::GetUTCSeconds),
2444514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::SetDate),
2454514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::SetFullYear),
2464514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::SetHours),
2474514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::SetMilliseconds),
2484514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::SetMinutes),
2494514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::SetMonth),
2504514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::SetSeconds),
2514514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::SetTime),
2524514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::SetUTCDate),
2534514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::SetUTCFullYear),
2544514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::SetUTCHours),
2554514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::SetUTCMilliseconds),
2564514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::SetUTCMinutes),
2574514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::SetUTCMonth),
2584514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::SetUTCSeconds),
2594514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::ToDateString),
2604514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::ToISOString),
2614514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::ToJSON),
2624514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::ToLocaleDateString),
2634514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::ToLocaleString),
2644514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::ToLocaleTimeString),
2654514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::ToString),
2664514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::ToTimeString),
2674514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::ToUTCString),
2684514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::ValueOf),
2694514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::ToPrimitive),
2704514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::Now),
2714514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::Parse),
2724514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Date::UTC),
2734514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::Assign),
2744514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::Create),
2754514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::DefineProperties),
2764514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::DefineProperty),
2774514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::Freeze),
2784514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::GetOwnPropertyDescriptor),
2794514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::GetOwnPropertyDescriptors),
2804514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::GetOwnPropertyNames),
2814514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::GetOwnPropertySymbols),
2824514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::GetPrototypeOf),
2834514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::Is),
2844514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::IsExtensible),
2854514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::IsFrozen),
2864514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::IsSealed),
2874514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::Keys),
2884514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::Values),
2894514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::PreventExtensions),
2904514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::Seal),
2914514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::SetPrototypeOf),
2924514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::HasOwnProperty),
2934514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::IsPrototypeOf),
2944514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::PropertyIsEnumerable),
2954514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::ToLocaleString),
2964514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::ToString),
2974514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::ValueOf),
2984514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::ProtoGetter),
2994514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::ProtoSetter),
3004514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::CreateRealm),
3014514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::Entries),
3024514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Object::HasOwn),
3034514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Boolean::BooleanConstructor),
3044514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Boolean::BooleanPrototypeToString),
3054514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Boolean::BooleanPrototypeValueOf),
3064514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RegExp::RegExpConstructor),
3074514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RegExp::Exec),
3084514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RegExp::Test),
3094514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RegExp::ToString),
3104514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RegExp::GetFlags),
3114514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RegExp::GetSource),
3124514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RegExp::GetGlobal),
3134514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RegExp::GetHasIndices),
3144514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RegExp::GetIgnoreCase),
3154514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RegExp::GetMultiline),
3164514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RegExp::GetDotAll),
3174514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RegExp::GetSticky),
3184514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RegExp::GetUnicode),
3194514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RegExp::Split),
3204514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RegExp::Search),
3214514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RegExp::Match),
3224514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RegExp::MatchAll),
3234514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RegExp::Replace),
3244514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsSet::SetConstructor),
3254514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsSet::Add),
3264514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsSet::Clear),
3274514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsSet::Delete),
3284514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsSet::Has),
3294514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsSet::ForEach),
3304514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsSet::Entries),
3314514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsSet::Values),
3324514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsSet::GetSize),
3334514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsSet::Species),
3344514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsMap::MapConstructor),
3354514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsMap::Set),
3364514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsMap::Clear),
3374514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsMap::Delete),
3384514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsMap::Has),
3394514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsMap::Get),
3404514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsMap::ForEach),
3414514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsMap::Keys),
3424514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsMap::Values),
3434514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsMap::Entries),
3444514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsMap::GetSize),
3454514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsWeakMap::WeakMapConstructor),
3464514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsWeakMap::Set),
3474514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsWeakMap::Delete),
3484514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsWeakMap::Has),
3494514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsWeakMap::Get),
3504514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsWeakSet::WeakSetConstructor),
3514514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsWeakSet::Add),
3524514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsWeakSet::Delete),
3534514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsWeakSet::Has),
3544514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsWeakRef::WeakRefConstructor),
3554514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsWeakRef::Deref),
3564514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsFinalizationRegistry::FinalizationRegistryConstructor),
3574514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsFinalizationRegistry::Register),
3584514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsFinalizationRegistry::Unregister),
3594514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::ArrayConstructor),
3604514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::Concat),
3614514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::CopyWithin),
3624514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::Entries),
3634514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::Every),
3644514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::Fill),
3654514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::Filter),
3664514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::Find),
3674514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::FindIndex),
3684514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::FindLast),
3694514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::FindLastIndex),
3704514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::ForEach),
3714514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::IndexOf),
3724514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::Join),
3734514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::Keys),
3744514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::LastIndexOf),
3754514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::Map),
3764514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::Pop),
3774514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::Push),
3784514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::Reduce),
3794514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::ReduceRight),
3804514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::Reverse),
3814514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::Shift),
3824514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::Slice),
3834514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::Some),
3844514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::Sort),
3854514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::Splice),
3864514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::ToLocaleString),
3874514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::ToString),
3884514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::Unshift),
3894514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::Values),
3904514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::From),
3914514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::IsArray),
3924514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::Of),
3934514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::Species),
3944514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::Includes),
3954514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::Flat),
3964514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::FlatMap),
3974514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::At),
3984514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::ToReversed),
3994514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::With),
4004514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::ToSorted),
4014514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsArray::ToSpliced),
4024514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::TypedArrayBaseConstructor),
4034514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::CopyWithin),
4044514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Entries),
4054514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Every),
4064514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Fill),
4074514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Filter),
4084514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Find),
4094514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::FindIndex),
4104514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::FindLast),
4114514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::FindLastIndex),
4124514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::ForEach),
4134514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::IndexOf),
4144514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Join),
4154514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Keys),
4164514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::LastIndexOf),
4174514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Map),
4184514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Reduce),
4194514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::ReduceRight),
4204514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Reverse),
4214514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Set),
4224514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Slice),
4234514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Some),
4244514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Sort),
4254514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::ToSorted),
4264514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Subarray),
4274514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::ToLocaleString),
4284514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Values),
4294514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::With),
4304514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::GetBuffer),
4314514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::GetByteLength),
4324514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::GetByteOffset),
4334514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::GetLength),
4344514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::ToStringTag),
4354514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::At),
4364514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::ToReversed),
4374514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::From),
4384514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Of),
4394514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Species),
4404514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Includes),
4414514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Int8ArrayConstructor),
4424514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Uint8ArrayConstructor),
4434514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Uint8ClampedArrayConstructor),
4444514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Int16ArrayConstructor),
4454514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Uint16ArrayConstructor),
4464514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Int32ArrayConstructor),
4474514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Uint32ArrayConstructor),
4484514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Float32ArrayConstructor),
4494514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::Float64ArrayConstructor),
4504514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::BigInt64ArrayConstructor),
4514514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsTypedArray::BigUint64ArrayConstructor),
4524514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::StringConstructor),
4534514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::At),
4544514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::CharAt),
4554514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::CharCodeAt),
4564514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::CodePointAt),
4574514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::IsWellFormed),
4584514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::ToWellFormed),
4594514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::Concat),
4604514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::EndsWith),
4614514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::Includes),
4624514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::IndexOf),
4634514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::LastIndexOf),
4644514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::LocaleCompare),
4654514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::Match),
4664514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::MatchAll),
4674514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::Normalize),
4684514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::PadEnd),
4694514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::PadStart),
4704514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::Repeat),
4714514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::Replace),
4724514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::ReplaceAll),
4734514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::Search),
4744514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::Slice),
4754514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::Split),
4764514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::StartsWith),
4774514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::Substring),
4784514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::SubStr),
4794514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::ToLocaleLowerCase),
4804514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::ToLocaleUpperCase),
4814514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::ToLowerCase),
4824514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::ToString),
4834514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::ToUpperCase),
4844514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::Trim),
4854514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::TrimStart),
4864514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::TrimEnd),
4874514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::TrimLeft),
4884514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::TrimRight),
4894514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::ValueOf),
4904514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::GetStringIterator),
4914514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::FromCharCode),
4924514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::FromCodePoint),
4934514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::Raw),
4944514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsString::GetLength),
4954514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayBuffer::ArrayBufferConstructor),
4964514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayBuffer::Slice),
4974514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayBuffer::IsView),
4984514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayBuffer::Species),
4994514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayBuffer::GetByteLength),
5004514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(SharedArrayBuffer::SharedArrayBufferConstructor),
5014514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(SharedArrayBuffer::IsSharedArrayBuffer),
5024514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(SharedArrayBuffer::Species),
5034514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(SharedArrayBuffer::GetByteLength),
5044514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(SharedArrayBuffer::Slice),
5054514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DataView::DataViewConstructor),
5064514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DataView::GetFloat32),
5074514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DataView::GetFloat64),
5084514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DataView::GetInt8),
5094514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DataView::GetInt16),
5104514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DataView::GetInt32),
5114514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DataView::GetUint8),
5124514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DataView::GetUint16),
5134514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DataView::GetUint32),
5144514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DataView::SetFloat32),
5154514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DataView::SetFloat64),
5164514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DataView::GetBigInt64),
5174514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DataView::GetBigUint64),
5184514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DataView::SetInt8),
5194514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DataView::SetInt16),
5204514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DataView::SetInt32),
5214514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DataView::SetUint8),
5224514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DataView::SetUint16),
5234514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DataView::SetUint32),
5244514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DataView::GetBuffer),
5254514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DataView::GetByteLength),
5264514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DataView::GetOffset),
5274514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DataView::SetBigInt64),
5284514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DataView::SetBigUint64),
5294514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Global::PrintEntrypoint),
5304514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Global::NotSupportEval),
5314514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Global::IsFinite),
5324514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Global::IsNaN),
5334514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Global::DecodeURI),
5344514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Global::DecodeURIComponent),
5354514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Global::EncodeURI),
5364514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Global::EncodeURIComponent),
5374514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Abs),
5384514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Acos),
5394514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Acosh),
5404514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Asin),
5414514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Asinh),
5424514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Atan),
5434514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Atanh),
5444514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Atan2),
5454514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Cbrt),
5464514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Ceil),
5474514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Clz32),
5484514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Cos),
5494514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Cosh),
5504514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Exp),
5514514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Expm1),
5524514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Floor),
5534514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Fround),
5544514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Hypot),
5554514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Imul),
5564514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Log),
5574514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Log1p),
5584514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Log10),
5594514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Log2),
5604514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Max),
5614514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Min),
5624514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Pow),
5634514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Random),
5644514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Round),
5654514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Sign),
5664514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Sin),
5674514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Sinh),
5684514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Sqrt),
5694514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Tan),
5704514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Tanh),
5714514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Math::Trunc),
5724514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Atomics::Wait),
5734514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Atomics::Exchange),
5744514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Atomics::CompareExchange),
5754514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Atomics::IsLockFree),
5764514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Atomics::Store),
5774514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Atomics::Load),
5784514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Atomics::Notify),
5794514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Atomics::Xor),
5804514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Atomics::Or),
5814514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Atomics::Sub),
5824514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Atomics::And),
5834514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Atomics::Add),
5844514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Json::Parse),
5854514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Json::Stringify),
5864514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsIterator::Next),
5874514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsIterator::Return),
5884514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsIterator::Throw),
5894514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsIterator::GetIteratorObj),
5904514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsAsyncIterator::Next),
5914514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsAsyncIterator::Return),
5924514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsAsyncIterator::Throw),
5934514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsAsyncIterator::GetAsyncIteratorObj),
5944514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSForInIterator::Next),
5954514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSRegExpIterator::Next),
5964514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSSetIterator::Next),
5974514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSMapIterator::Next),
5984514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSArrayIterator::Next),
5994514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Proxy::ProxyConstructor),
6004514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Proxy::Revocable),
6014514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Reflect::ReflectApply),
6024514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Reflect::ReflectConstruct),
6034514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Reflect::ReflectDefineProperty),
6044514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Reflect::ReflectDeleteProperty),
6054514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Reflect::ReflectGet),
6064514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Reflect::ReflectGetOwnPropertyDescriptor),
6074514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Reflect::ReflectGetPrototypeOf),
6084514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Reflect::ReflectHas),
6094514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Reflect::ReflectIsExtensible),
6104514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Reflect::ReflectOwnKeys),
6114514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Reflect::ReflectPreventExtensions),
6124514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Reflect::ReflectSet),
6134514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Reflect::ReflectSetPrototypeOf),
6144514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(AsyncFunction::AsyncFunctionConstructor),
6154514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(GeneratorObject::GeneratorPrototypeNext),
6164514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(GeneratorObject::GeneratorPrototypeReturn),
6174514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(GeneratorObject::GeneratorPrototypeThrow),
6184514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(GeneratorObject::GeneratorFunctionConstructor),
6194514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(AsyncGeneratorObject::AsyncGeneratorPrototypeNext),
6204514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(AsyncGeneratorObject::AsyncGeneratorPrototypeReturn),
6214514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(AsyncGeneratorObject::AsyncGeneratorPrototypeThrow),
6224514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(AsyncGeneratorObject::AsyncGeneratorFunctionConstructor),
6234514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Promise::PromiseConstructor),
6244514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Promise::All),
6254514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Promise::Race),
6264514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Promise::Resolve),
6274514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Promise::Reject),
6284514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Promise::Catch),
6294514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Promise::Then),
6304514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Promise::Finally),
6314514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Promise::Any),
6324514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Promise::AllSettled),
6334514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Promise::GetSpecies),
6344514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsPromiseJob::PromiseReactionJob),
6354514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsPromiseJob::PromiseResolveThenableJob),
6364514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsPromiseJob::DynamicImportJob),
6374514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsCjsExports::CjsExportsConstructor),
6384514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsCjsModule::CjsModuleConstructor),
6394514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsCjsModule::Compiler),
6404514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsCjsModule::Load),
6414514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsCjsModule::Require),
6424514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsCjsModule::GetExportsForCircularRequire),
6434514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsCjsModule::UpdateChildren),
6444514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsCjsModule::ResolveFilename),
6454514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsCjsRequire::CjsRequireConstructor),
6464514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsCjsRequire::Main),
6474514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsCjsRequire::Resolve),
6484514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArkTools::ObjectDump),
6494514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArkTools::CompareHClass),
6504514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArkTools::DumpHClass),
6514514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsBigInt::BigIntConstructor),
6524514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsBigInt::AsUintN),
6534514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsBigInt::AsIntN),
6544514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsBigInt::ToLocaleString),
6554514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsBigInt::ToString),
6564514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BuiltinsBigInt::ValueOf),
6574514f5e3Sopenharmony_ci#ifdef ARK_SUPPORT_INTL
6584514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DisplayNames::DisplayNamesConstructor),
6594514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DisplayNames::SupportedLocalesOf),
6604514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DisplayNames::Of),
6614514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DisplayNames::ResolvedOptions),
6624514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Intl::GetCanonicalLocales),
6634514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Locale::LocaleConstructor),
6644514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Locale::Maximize),
6654514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Locale::Minimize),
6664514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Locale::ToString),
6674514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Locale::GetBaseName),
6684514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Locale::GetCalendar),
6694514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Locale::GetCaseFirst),
6704514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Locale::GetCollation),
6714514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Locale::GetHourCycle),
6724514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Locale::GetNumeric),
6734514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Locale::GetNumberingSystem),
6744514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Locale::GetLanguage),
6754514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Locale::GetScript),
6764514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Locale::GetRegion),
6774514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DateTimeFormat::DateTimeFormatConstructor),
6784514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DateTimeFormat::SupportedLocalesOf),
6794514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DateTimeFormat::Format),
6804514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DateTimeFormat::FormatToParts),
6814514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DateTimeFormat::ResolvedOptions),
6824514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DateTimeFormat::FormatRange),
6834514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(DateTimeFormat::FormatRangeToParts),
6844514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(NumberFormat::NumberFormatConstructor),
6854514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(NumberFormat::SupportedLocalesOf),
6864514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(NumberFormat::Format),
6874514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(NumberFormat::FormatToParts),
6884514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(NumberFormat::ResolvedOptions),
6894514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RelativeTimeFormat::RelativeTimeFormatConstructor),
6904514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RelativeTimeFormat::SupportedLocalesOf),
6914514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RelativeTimeFormat::Format),
6924514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RelativeTimeFormat::FormatToParts),
6934514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(RelativeTimeFormat::ResolvedOptions),
6944514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Collator::CollatorConstructor),
6954514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Collator::SupportedLocalesOf),
6964514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Collator::Compare),
6974514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Collator::ResolvedOptions),
6984514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(PluralRules::PluralRulesConstructor),
6994514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(PluralRules::SupportedLocalesOf),
7004514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(PluralRules::Select),
7014514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(PluralRules::ResolvedOptions),
7024514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ListFormat::ListFormatConstructor),
7034514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ListFormat::SupportedLocalesOf),
7044514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ListFormat::Format),
7054514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ListFormat::FormatToParts),
7064514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ListFormat::ResolvedOptions),
7074514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Segmenter::SegmenterConstructor),
7084514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Segmenter::SupportedLocalesOf),
7094514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Segmenter::ResolvedOptions),
7104514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Segmenter::Segment),
7114514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Segments::Containing),
7124514f5e3Sopenharmony_ci#endif
7134514f5e3Sopenharmony_ci
7144514f5e3Sopenharmony_ci    // non ECMA standard jsapi containers.
7154514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ContainersPrivate::Load),
7164514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayList::ArrayListConstructor),
7174514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayList::Add),
7184514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayList::Insert),
7194514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayList::Clear),
7204514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayList::Clone),
7214514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayList::Has),
7224514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayList::GetCapacity),
7234514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayList::IncreaseCapacityTo),
7244514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayList::TrimToCurrentLength),
7254514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayList::GetIndexOf),
7264514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayList::IsEmpty),
7274514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayList::GetLastIndexOf),
7284514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayList::RemoveByIndex),
7294514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayList::Remove),
7304514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayList::RemoveByRange),
7314514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayList::ReplaceAllElements),
7324514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayList::SubArrayList),
7334514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayList::ConvertToArray),
7344514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayList::ForEach),
7354514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayList::GetIteratorObj),
7364514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayList::Get),
7374514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayList::Set),
7384514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ArrayList::GetSize),
7394514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSAPIArrayListIterator::Next),
7404514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(HashMap::HashMapConstructor),
7414514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(HashMap::HasKey),
7424514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(HashMap::HasValue),
7434514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(HashMap::Replace),
7444514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(HashMap::Keys),
7454514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(HashMap::Values),
7464514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(HashMap::Entries),
7474514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(HashMap::ForEach),
7484514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(HashMap::Set),
7494514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(HashMap::SetAll),
7504514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(HashMap::Remove),
7514514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(HashMap::Get),
7524514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(HashMap::Clear),
7534514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(HashMap::GetLength),
7544514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(HashMap::IsEmpty),
7554514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(HashSet::HashSetConstructor),
7564514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(HashSet::IsEmpty),
7574514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(HashSet::Has),
7584514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(HashSet::Add),
7594514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(HashSet::Remove),
7604514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(HashSet::Clear),
7614514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(HashSet::GetLength),
7624514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(HashSet::Values),
7634514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(HashSet::Entries),
7644514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSAPIHashMapIterator::Next),
7654514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSAPIHashSetIterator::Next),
7664514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightMap::HasAll),
7674514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightMap::HasKey),
7684514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightMap::HasValue),
7694514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightMap::IncreaseCapacityTo),
7704514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightMap::Entries),
7714514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightMap::Get),
7724514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightMap::GetIndexOfKey),
7734514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightMap::GetIndexOfValue),
7744514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightMap::IsEmpty),
7754514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightMap::GetKeyAt),
7764514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightMap::Keys),
7774514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightMap::SetAll),
7784514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightMap::Set),
7794514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightMap::Remove),
7804514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightMap::RemoveAt),
7814514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightMap::Clear),
7824514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightMap::SetValueAt),
7834514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightMap::ForEach),
7844514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightMap::ToString),
7854514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightMap::GetValueAt),
7864514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightMap::Values),
7874514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSAPILightWeightMapIterator::Next),
7884514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightSet::LightWeightSetConstructor),
7894514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightSet::Add),
7904514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightSet::AddAll),
7914514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightSet::IsEmpty),
7924514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightSet::GetValueAt),
7934514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightSet::HasAll),
7944514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightSet::Has),
7954514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightSet::HasHash),
7964514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightSet::Equal),
7974514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightSet::IncreaseCapacityTo),
7984514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightSet::GetIteratorObj),
7994514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightSet::Values),
8004514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightSet::Entries),
8014514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightSet::ForEach),
8024514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightSet::GetIndexOf),
8034514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightSet::Remove),
8044514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightSet::RemoveAt),
8054514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightSet::Clear),
8064514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightSet::ToString),
8074514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightSet::ToArray),
8084514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LightWeightSet::GetSize),
8094514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSAPILightWeightSetIterator::Next),
8104514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeMap::TreeMapConstructor),
8114514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeMap::Set),
8124514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeMap::Get),
8134514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeMap::Remove),
8144514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeMap::GetFirstKey),
8154514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeMap::GetLastKey),
8164514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeMap::GetLowerKey),
8174514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeMap::GetHigherKey),
8184514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeMap::HasKey),
8194514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeMap::HasValue),
8204514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeMap::SetAll),
8214514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeMap::Replace),
8224514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeMap::Keys),
8234514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeMap::Values),
8244514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeMap::Entries),
8254514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeMap::ForEach),
8264514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeMap::Clear),
8274514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeMap::IsEmpty),
8284514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeMap::GetLength),
8294514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeSet::TreeSetConstructor),
8304514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeSet::Add),
8314514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeSet::Has),
8324514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeSet::Remove),
8334514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeSet::GetFirstValue),
8344514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeSet::GetLastValue),
8354514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeSet::GetLowerValue),
8364514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeSet::GetHigherValue),
8374514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeSet::PopFirst),
8384514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeSet::PopLast),
8394514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeSet::IsEmpty),
8404514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeSet::Values),
8414514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeSet::Entries),
8424514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeSet::ForEach),
8434514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeSet::Clear),
8444514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(TreeSet::GetLength),
8454514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSAPITreeMapIterator::Next),
8464514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSAPITreeSetIterator::Next),
8474514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Deque::DequeConstructor),
8484514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Deque::InsertFront),
8494514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Deque::InsertEnd),
8504514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Deque::GetFirst),
8514514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Deque::GetLast),
8524514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Deque::Has),
8534514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Deque::PopFirst),
8544514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Deque::PopLast),
8554514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Deque::ForEach),
8564514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Deque::GetIteratorObj),
8574514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Deque::GetSize),
8584514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSAPIDequeIterator::Next),
8594514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::VectorConstructor),
8604514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::Add),
8614514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::Insert),
8624514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::SetLength),
8634514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::GetCapacity),
8644514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::IncreaseCapacityTo),
8654514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::Get),
8664514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::GetIndexOf),
8674514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::GetIndexFrom),
8684514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::IsEmpty),
8694514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::GetLastElement),
8704514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::GetLastIndexOf),
8714514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::GetLastIndexFrom),
8724514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::Remove),
8734514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::RemoveByIndex),
8744514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::RemoveByRange),
8754514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::Set),
8764514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::SubVector),
8774514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::ToString),
8784514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::GetSize),
8794514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::ForEach),
8804514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::ReplaceAllElements),
8814514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::TrimToCurrentLength),
8824514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::Clear),
8834514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::Clone),
8844514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::Has),
8854514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::GetFirstElement),
8864514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::CopyToArray),
8874514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::ConvertToArray),
8884514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::Sort),
8894514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Vector::GetIteratorObj),
8904514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSAPIVectorIterator::Next),
8914514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BitVector::BitVectorConstructor),
8924514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BitVector::Push),
8934514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BitVector::Pop),
8944514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BitVector::Has),
8954514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BitVector::SetBitsByRange),
8964514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BitVector::GetBitsByRange),
8974514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BitVector::Resize),
8984514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BitVector::SetAllBits),
8994514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BitVector::GetBitCountByRange),
9004514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BitVector::GetIndexOf),
9014514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BitVector::GetLastIndexOf),
9024514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BitVector::FlipBitByIndex),
9034514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BitVector::FlipBitsByRange),
9044514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BitVector::GetSize),
9054514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(BitVector::GetIteratorObj),
9064514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSAPIBitVectorIterator::Next),
9074514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Queue::QueueConstructor),
9084514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Queue::Add),
9094514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Queue::GetFirst),
9104514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Queue::Pop),
9114514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Queue::ForEach),
9124514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Queue::GetIteratorObj),
9134514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(Queue::GetSize),
9144514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSAPIQueueIterator::Next),
9154514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(PlainArray::PlainArrayConstructor),
9164514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(PlainArray::Add),
9174514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(PlainArray::Clear),
9184514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(PlainArray::Clone),
9194514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(PlainArray::Has),
9204514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(PlainArray::Get),
9214514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(PlainArray::GetIteratorObj),
9224514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(PlainArray::ForEach),
9234514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(PlainArray::ToString),
9244514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(PlainArray::GetIndexOfKey),
9254514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(PlainArray::GetIndexOfValue),
9264514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(PlainArray::IsEmpty),
9274514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(PlainArray::GetKeyAt),
9284514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(PlainArray::Remove),
9294514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(PlainArray::RemoveAt),
9304514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(PlainArray::RemoveRangeFrom),
9314514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(PlainArray::SetValueAt),
9324514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(PlainArray::GetValueAt),
9334514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(PlainArray::GetSize),
9344514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSAPIPlainArrayIterator::Next),
9354514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ContainerStack::StackConstructor),
9364514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ContainerStack::Iterator),
9374514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ContainerStack::IsEmpty),
9384514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ContainerStack::Push),
9394514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ContainerStack::Peek),
9404514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ContainerStack::Pop),
9414514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ContainerStack::Locate),
9424514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ContainerStack::ForEach),
9434514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(ContainerStack::GetLength),
9444514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSAPIStackIterator::Next),
9454514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(List::ListConstructor),
9464514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(List::Add),
9474514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(List::GetFirst),
9484514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(List::GetLast),
9494514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(List::Insert),
9504514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(List::Clear),
9514514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(List::RemoveByIndex),
9524514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(List::Remove),
9534514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(List::Has),
9544514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(List::IsEmpty),
9554514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(List::Get),
9564514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(List::GetIndexOf),
9574514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(List::GetLastIndexOf),
9584514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(List::Set),
9594514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(List::ForEach),
9604514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(List::ReplaceAllElements),
9614514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(List::GetIteratorObj),
9624514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(List::Equal),
9634514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(List::Sort),
9644514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(List::ConvertToArray),
9654514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(List::GetSubList),
9664514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(List::Length),
9674514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSAPIListIterator::Next),
9684514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LinkedList::LinkedListConstructor),
9694514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LinkedList::Add),
9704514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LinkedList::GetFirst),
9714514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LinkedList::GetLast),
9724514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LinkedList::Insert),
9734514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LinkedList::AddFirst),
9744514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LinkedList::Clear),
9754514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LinkedList::Clone),
9764514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LinkedList::Has),
9774514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LinkedList::Get),
9784514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LinkedList::GetIndexOf),
9794514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LinkedList::GetLastIndexOf),
9804514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LinkedList::RemoveByIndex),
9814514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LinkedList::Remove),
9824514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LinkedList::RemoveFirst),
9834514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LinkedList::RemoveLast),
9844514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LinkedList::RemoveFirstFound),
9854514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LinkedList::RemoveLastFound),
9864514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LinkedList::Set),
9874514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LinkedList::ConvertToArray),
9884514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(LinkedList::ForEach),
9894514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSAPILinkedListIterator::Next),
9904514f5e3Sopenharmony_ci
9914514f5e3Sopenharmony_ci    // not builtins method
9924514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSFunction::PrototypeSetter),
9934514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSFunction::PrototypeGetter),
9944514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSFunction::NameGetter),
9954514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSFunction::LengthGetter),
9964514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSArray::LengthSetter),
9974514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSArray::LengthGetter),
9984514f5e3Sopenharmony_ci    reinterpret_cast<uintptr_t>(JSPandaFileManager::GetInstance)
9994514f5e3Sopenharmony_ci};
10004514f5e3Sopenharmony_ci
10014514f5e3Sopenharmony_civoid SnapshotProcessor::Initialize()
10024514f5e3Sopenharmony_ci{
10034514f5e3Sopenharmony_ci    auto heap = const_cast<Heap *>(vm_->GetHeap());
10044514f5e3Sopenharmony_ci    size_t oldSpaceCapacity = heap->GetOldSpace()->GetInitialCapacity();
10054514f5e3Sopenharmony_ci    oldLocalSpace_ = new LocalSpace(heap, oldSpaceCapacity, oldSpaceCapacity);
10064514f5e3Sopenharmony_ci    size_t nonMovableCapacity = heap->GetNonMovableSpace()->GetInitialCapacity();
10074514f5e3Sopenharmony_ci    nonMovableLocalSpace_ = new LocalSpace(heap, nonMovableCapacity, nonMovableCapacity);
10084514f5e3Sopenharmony_ci    size_t machineCodeCapacity = heap->GetMachineCodeSpace()->GetInitialCapacity();
10094514f5e3Sopenharmony_ci    machineCodeLocalSpace_ = new LocalSpace(heap, machineCodeCapacity, machineCodeCapacity);
10104514f5e3Sopenharmony_ci    size_t snapshotSpaceCapacity = heap->GetSnapshotSpace()->GetMaximumCapacity();
10114514f5e3Sopenharmony_ci    snapshotLocalSpace_ = new SnapshotSpace(heap, snapshotSpaceCapacity, snapshotSpaceCapacity);
10124514f5e3Sopenharmony_ci    hugeObjectLocalSpace_ = new HugeObjectSpace(heap, heap->GetHeapRegionAllocator(),
10134514f5e3Sopenharmony_ci                                                oldSpaceCapacity, oldSpaceCapacity);
10144514f5e3Sopenharmony_ci}
10154514f5e3Sopenharmony_ci
10164514f5e3Sopenharmony_ciSnapshotProcessor::~SnapshotProcessor()
10174514f5e3Sopenharmony_ci{
10184514f5e3Sopenharmony_ci    pandaMethod_.clear();
10194514f5e3Sopenharmony_ci    stringVector_.clear();
10204514f5e3Sopenharmony_ci    deserializeStringVector_.clear();
10214514f5e3Sopenharmony_ci    regionIndexMap_.clear();
10224514f5e3Sopenharmony_ci    if (oldLocalSpace_ != nullptr) {
10234514f5e3Sopenharmony_ci        oldLocalSpace_->Reset();
10244514f5e3Sopenharmony_ci        delete oldLocalSpace_;
10254514f5e3Sopenharmony_ci        oldLocalSpace_ = nullptr;
10264514f5e3Sopenharmony_ci    }
10274514f5e3Sopenharmony_ci    if (nonMovableLocalSpace_ != nullptr) {
10284514f5e3Sopenharmony_ci        nonMovableLocalSpace_->Reset();
10294514f5e3Sopenharmony_ci        delete nonMovableLocalSpace_;
10304514f5e3Sopenharmony_ci        nonMovableLocalSpace_ = nullptr;
10314514f5e3Sopenharmony_ci    }
10324514f5e3Sopenharmony_ci    if (machineCodeLocalSpace_ != nullptr) {
10334514f5e3Sopenharmony_ci        machineCodeLocalSpace_->Reset();
10344514f5e3Sopenharmony_ci        delete machineCodeLocalSpace_;
10354514f5e3Sopenharmony_ci        machineCodeLocalSpace_ = nullptr;
10364514f5e3Sopenharmony_ci    }
10374514f5e3Sopenharmony_ci    if (snapshotLocalSpace_ != nullptr) {
10384514f5e3Sopenharmony_ci        snapshotLocalSpace_->Destroy();
10394514f5e3Sopenharmony_ci        delete snapshotLocalSpace_;
10404514f5e3Sopenharmony_ci        snapshotLocalSpace_ = nullptr;
10414514f5e3Sopenharmony_ci    }
10424514f5e3Sopenharmony_ci    if (hugeObjectLocalSpace_ != nullptr) {
10434514f5e3Sopenharmony_ci        hugeObjectLocalSpace_->Destroy();
10444514f5e3Sopenharmony_ci        delete hugeObjectLocalSpace_;
10454514f5e3Sopenharmony_ci        hugeObjectLocalSpace_ = nullptr;
10464514f5e3Sopenharmony_ci    }
10474514f5e3Sopenharmony_ci}
10484514f5e3Sopenharmony_ci
10494514f5e3Sopenharmony_civoid SnapshotProcessor::StopAllocate()
10504514f5e3Sopenharmony_ci{
10514514f5e3Sopenharmony_ci    oldLocalSpace_->Stop();
10524514f5e3Sopenharmony_ci    nonMovableLocalSpace_->Stop();
10534514f5e3Sopenharmony_ci    machineCodeLocalSpace_->Stop();
10544514f5e3Sopenharmony_ci    snapshotLocalSpace_->Stop();
10554514f5e3Sopenharmony_ci}
10564514f5e3Sopenharmony_ci
10574514f5e3Sopenharmony_civoid SnapshotProcessor::WriteObjectToFile(std::fstream &writer)
10584514f5e3Sopenharmony_ci{
10594514f5e3Sopenharmony_ci    WriteSpaceObjectToFile(oldLocalSpace_, writer);
10604514f5e3Sopenharmony_ci    WriteSpaceObjectToFile(nonMovableLocalSpace_, writer);
10614514f5e3Sopenharmony_ci    WriteSpaceObjectToFile(machineCodeLocalSpace_, writer);
10624514f5e3Sopenharmony_ci    WriteSpaceObjectToFile(snapshotLocalSpace_, writer);
10634514f5e3Sopenharmony_ci    WriteHugeObjectToFile(hugeObjectLocalSpace_, writer);
10644514f5e3Sopenharmony_ci}
10654514f5e3Sopenharmony_ci
10664514f5e3Sopenharmony_civoid SnapshotProcessor::WriteSpaceObjectToFile(Space* space, std::fstream &writer)
10674514f5e3Sopenharmony_ci{
10684514f5e3Sopenharmony_ci    size_t regionCount = space->GetRegionCount();
10694514f5e3Sopenharmony_ci    if (regionCount > 0) {
10704514f5e3Sopenharmony_ci        auto lastRegion = space->GetCurrentRegion();
10714514f5e3Sopenharmony_ci        space->EnumerateRegions([this, &writer, lastRegion](Region *current) {
10724514f5e3Sopenharmony_ci            if (current != lastRegion) {
10734514f5e3Sopenharmony_ci                ASAN_UNPOISON_MEMORY_REGION(reinterpret_cast<void *>(ToUintPtr(current)), DEFAULT_REGION_SIZE);
10744514f5e3Sopenharmony_ci                ResetRegionUnusedRange(current);
10754514f5e3Sopenharmony_ci                SnapshotRegionHeadInfo info = GenerateRegionHeadInfo(current);
10764514f5e3Sopenharmony_ci                // Firstly, serialize the region head information into the file;
10774514f5e3Sopenharmony_ci                writer.write(reinterpret_cast<char *>(&info), SnapshotRegionHeadInfo::RegionHeadInfoSize());
10784514f5e3Sopenharmony_ci                // Secondly, write the valid region memory (exclude region head and GC bit set).
10794514f5e3Sopenharmony_ci                writer.write(reinterpret_cast<char *>(current->packedData_.begin_),
10804514f5e3Sopenharmony_ci                             ToUintPtr(current) + DEFAULT_REGION_SIZE - current->packedData_.begin_);
10814514f5e3Sopenharmony_ci                writer.flush();
10824514f5e3Sopenharmony_ci            }
10834514f5e3Sopenharmony_ci        });
10844514f5e3Sopenharmony_ci
10854514f5e3Sopenharmony_ci        SnapshotRegionHeadInfo info = GenerateRegionHeadInfo(lastRegion);
10864514f5e3Sopenharmony_ci        // Firstly, serialize the region object into the file;
10874514f5e3Sopenharmony_ci        writer.write(reinterpret_cast<char *>(&info), SnapshotRegionHeadInfo::RegionHeadInfoSize());
10884514f5e3Sopenharmony_ci        // Secondly, write the valid region memory (exclude region head and GC bit set).
10894514f5e3Sopenharmony_ci        writer.write(reinterpret_cast<char *>(lastRegion->packedData_.begin_),
10904514f5e3Sopenharmony_ci                     lastRegion->highWaterMark_ - lastRegion->packedData_.begin_);
10914514f5e3Sopenharmony_ci        writer.flush();
10924514f5e3Sopenharmony_ci    }
10934514f5e3Sopenharmony_ci}
10944514f5e3Sopenharmony_ci
10954514f5e3Sopenharmony_civoid SnapshotProcessor::WriteHugeObjectToFile(HugeObjectSpace* space, std::fstream &writer)
10964514f5e3Sopenharmony_ci{
10974514f5e3Sopenharmony_ci    space->EnumerateRegions([&writer](Region *region) {
10984514f5e3Sopenharmony_ci        SnapshotRegionHeadInfo info;
10994514f5e3Sopenharmony_ci        info.regionIndex_ = SnapshotHelper::GetHugeObjectRegionIndex(region->GetSnapshotData());
11004514f5e3Sopenharmony_ci        size_t objSize = SnapshotHelper::GetHugeObjectSize(region->GetSnapshotData());
11014514f5e3Sopenharmony_ci        info.aliveObjectSize_ = objSize;
11024514f5e3Sopenharmony_ci        // Firstly, serialize the region head information into the file;
11034514f5e3Sopenharmony_ci        writer.write(reinterpret_cast<char *>(&info), SnapshotRegionHeadInfo::RegionHeadInfoSize());
11044514f5e3Sopenharmony_ci        // Secondly, write the valid region memory (exclude region head and GC bit set).
11054514f5e3Sopenharmony_ci        writer.write(reinterpret_cast<char *>(region->packedData_.begin_), objSize);
11064514f5e3Sopenharmony_ci        writer.flush();
11074514f5e3Sopenharmony_ci    });
11084514f5e3Sopenharmony_ci}
11094514f5e3Sopenharmony_ci
11104514f5e3Sopenharmony_cistd::vector<uint32_t> SnapshotProcessor::StatisticsObjectSize()
11114514f5e3Sopenharmony_ci{
11124514f5e3Sopenharmony_ci    std::vector<uint32_t> objSizeVector;
11134514f5e3Sopenharmony_ci    objSizeVector.emplace_back(StatisticsSpaceObjectSize(oldLocalSpace_));
11144514f5e3Sopenharmony_ci    objSizeVector.emplace_back(StatisticsSpaceObjectSize(nonMovableLocalSpace_));
11154514f5e3Sopenharmony_ci    objSizeVector.emplace_back(StatisticsSpaceObjectSize(machineCodeLocalSpace_));
11164514f5e3Sopenharmony_ci    objSizeVector.emplace_back(StatisticsSpaceObjectSize(snapshotLocalSpace_));
11174514f5e3Sopenharmony_ci    objSizeVector.emplace_back(StatisticsHugeObjectSize(hugeObjectLocalSpace_));
11184514f5e3Sopenharmony_ci    return objSizeVector;
11194514f5e3Sopenharmony_ci}
11204514f5e3Sopenharmony_ci
11214514f5e3Sopenharmony_ciuint32_t SnapshotProcessor::StatisticsSpaceObjectSize(Space* space)
11224514f5e3Sopenharmony_ci{
11234514f5e3Sopenharmony_ci    size_t regionCount = space->GetRegionCount();
11244514f5e3Sopenharmony_ci    size_t objSize = 0U;
11254514f5e3Sopenharmony_ci    if (regionCount > 0) {
11264514f5e3Sopenharmony_ci        auto lastRegion = space->GetCurrentRegion();
11274514f5e3Sopenharmony_ci        size_t lastRegionSize = lastRegion->highWaterMark_ - lastRegion->packedData_.begin_;
11284514f5e3Sopenharmony_ci        objSize = (regionCount - 1) * (SnapshotRegionHeadInfo::RegionHeadInfoSize() +
11294514f5e3Sopenharmony_ci            Region::GetRegionAvailableSize()) + SnapshotRegionHeadInfo::RegionHeadInfoSize() + lastRegionSize;
11304514f5e3Sopenharmony_ci    }
11314514f5e3Sopenharmony_ci    ASSERT(objSize <= Constants::MAX_UINT_32);
11324514f5e3Sopenharmony_ci    return static_cast<uint32_t>(objSize);
11334514f5e3Sopenharmony_ci}
11344514f5e3Sopenharmony_ci
11354514f5e3Sopenharmony_ciuint32_t SnapshotProcessor::StatisticsHugeObjectSize(HugeObjectSpace* space)
11364514f5e3Sopenharmony_ci{
11374514f5e3Sopenharmony_ci    size_t objSize = 0U;
11384514f5e3Sopenharmony_ci    space->EnumerateRegions([&objSize](Region *region) {
11394514f5e3Sopenharmony_ci        objSize += SnapshotRegionHeadInfo::RegionHeadInfoSize();
11404514f5e3Sopenharmony_ci        uint64_t snapshotData = region->GetSnapshotData();
11414514f5e3Sopenharmony_ci        // huge object size is storaged in region param snapshotData_ high 32 bits
11424514f5e3Sopenharmony_ci        objSize += SnapshotHelper::GetHugeObjectSize(snapshotData);
11434514f5e3Sopenharmony_ci    });
11444514f5e3Sopenharmony_ci    return static_cast<uint32_t>(objSize);
11454514f5e3Sopenharmony_ci}
11464514f5e3Sopenharmony_ci
11474514f5e3Sopenharmony_civoid SnapshotProcessor::ProcessObjectQueue(CQueue<TaggedObject *> *queue,
11484514f5e3Sopenharmony_ci                                           std::unordered_map<uint64_t, ObjectEncode> *data)
11494514f5e3Sopenharmony_ci{
11504514f5e3Sopenharmony_ci    while (!queue->empty()) {
11514514f5e3Sopenharmony_ci        auto taggedObject = queue->front();
11524514f5e3Sopenharmony_ci        if (taggedObject == nullptr) {
11534514f5e3Sopenharmony_ci            break;
11544514f5e3Sopenharmony_ci        }
11554514f5e3Sopenharmony_ci        queue->pop();
11564514f5e3Sopenharmony_ci        SerializeObject(taggedObject, queue, data);
11574514f5e3Sopenharmony_ci    }
11584514f5e3Sopenharmony_ci
11594514f5e3Sopenharmony_ci    StopAllocate();
11604514f5e3Sopenharmony_ci}
11614514f5e3Sopenharmony_ci
11624514f5e3Sopenharmony_ciuintptr_t SnapshotProcessor::AllocateObjectToLocalSpace(Space *space, size_t objectSize)
11634514f5e3Sopenharmony_ci{
11644514f5e3Sopenharmony_ci    uintptr_t newObj = 0;
11654514f5e3Sopenharmony_ci    if (space->GetSpaceType() == MemSpaceType::HUGE_OBJECT_SPACE) {
11664514f5e3Sopenharmony_ci        newObj = reinterpret_cast<HugeObjectSpace *>(space)->Allocate(objectSize, vm_->GetAssociatedJSThread());
11674514f5e3Sopenharmony_ci    } else if (space->GetSpaceType() == MemSpaceType::SNAPSHOT_SPACE) {
11684514f5e3Sopenharmony_ci        newObj = reinterpret_cast<SnapshotSpace *>(space)->Allocate(objectSize);
11694514f5e3Sopenharmony_ci    } else {
11704514f5e3Sopenharmony_ci        newObj = reinterpret_cast<LocalSpace *>(space)->Allocate(objectSize);
11714514f5e3Sopenharmony_ci    }
11724514f5e3Sopenharmony_ci    auto current = space->GetCurrentRegion();
11734514f5e3Sopenharmony_ci    if (newObj == current->GetBegin()) {
11744514f5e3Sopenharmony_ci        // region param snapshotData_ low 32 bits is reused to record regionIndex
11754514f5e3Sopenharmony_ci        uint64_t snapshotData = regionIndex_;
11764514f5e3Sopenharmony_ci        if (current->InHugeObjectSpace()) {
11774514f5e3Sopenharmony_ci            // region param snapshotData_ high 32 bits is reused to record huge object size
11784514f5e3Sopenharmony_ci            snapshotData += SnapshotHelper::EncodeHugeObjectSize(objectSize);
11794514f5e3Sopenharmony_ci        }
11804514f5e3Sopenharmony_ci        current->SetSnapshotData(snapshotData);
11814514f5e3Sopenharmony_ci        regionIndex_++;
11824514f5e3Sopenharmony_ci    }
11834514f5e3Sopenharmony_ci    return newObj;
11844514f5e3Sopenharmony_ci}
11854514f5e3Sopenharmony_ci
11864514f5e3Sopenharmony_civoid SnapshotProcessor::SetObjectEncodeField(uintptr_t obj, size_t offset, uint64_t value)
11874514f5e3Sopenharmony_ci{
11884514f5e3Sopenharmony_ci    *reinterpret_cast<uint64_t *>(obj + offset) = value;
11894514f5e3Sopenharmony_ci}
11904514f5e3Sopenharmony_ci
11914514f5e3Sopenharmony_civoid SnapshotProcessor::DeserializeObjectExcludeString(uintptr_t oldSpaceBegin, size_t oldSpaceObjSize,
11924514f5e3Sopenharmony_ci                                                       size_t nonMovableObjSize, size_t machineCodeObjSize,
11934514f5e3Sopenharmony_ci                                                       size_t snapshotObjSize, size_t hugeSpaceObjSize)
11944514f5e3Sopenharmony_ci{
11954514f5e3Sopenharmony_ci    uintptr_t nonMovableBegin = oldSpaceBegin + oldSpaceObjSize;
11964514f5e3Sopenharmony_ci    uintptr_t machineCodeBegin = nonMovableBegin + nonMovableObjSize;
11974514f5e3Sopenharmony_ci    uintptr_t snapshotBegin = machineCodeBegin + machineCodeObjSize;
11984514f5e3Sopenharmony_ci    uintptr_t hugeObjBegin = snapshotBegin + snapshotObjSize;
11994514f5e3Sopenharmony_ci    auto heap = vm_->GetHeap();
12004514f5e3Sopenharmony_ci    auto oldSpace = heap->GetOldSpace();
12014514f5e3Sopenharmony_ci    auto nonMovableSpace = heap->GetNonMovableSpace();
12024514f5e3Sopenharmony_ci    auto machineCodeSpace = heap->GetMachineCodeSpace();
12034514f5e3Sopenharmony_ci    auto snapshotSpace = heap->GetSnapshotSpace();
12044514f5e3Sopenharmony_ci    auto hugeObjectSpace = heap->GetHugeObjectSpace();
12054514f5e3Sopenharmony_ci
12064514f5e3Sopenharmony_ci    DeserializeSpaceObject(oldSpaceBegin, oldSpace, oldSpaceObjSize);
12074514f5e3Sopenharmony_ci    DeserializeSpaceObject(nonMovableBegin, nonMovableSpace, nonMovableObjSize);
12084514f5e3Sopenharmony_ci    DeserializeSpaceObject(machineCodeBegin, machineCodeSpace, machineCodeObjSize);
12094514f5e3Sopenharmony_ci    DeserializeSpaceObject(snapshotBegin, snapshotSpace, snapshotObjSize);
12104514f5e3Sopenharmony_ci    DeserializeHugeSpaceObject(hugeObjBegin, hugeObjectSpace, hugeSpaceObjSize);
12114514f5e3Sopenharmony_ci    snapshotSpace->ResetAllocator();
12124514f5e3Sopenharmony_ci}
12134514f5e3Sopenharmony_ci
12144514f5e3Sopenharmony_civoid SnapshotProcessor::DeserializeSpaceObject(uintptr_t beginAddr, Space* space, size_t spaceObjSize)
12154514f5e3Sopenharmony_ci{
12164514f5e3Sopenharmony_ci    size_t numberOfRegions = 0U;
12174514f5e3Sopenharmony_ci    if (spaceObjSize != 0) {
12184514f5e3Sopenharmony_ci        numberOfRegions = (spaceObjSize - 1) / (Region::GetRegionAvailableSize() +
12194514f5e3Sopenharmony_ci            SnapshotRegionHeadInfo::RegionHeadInfoSize()) + 1;
12204514f5e3Sopenharmony_ci    }
12214514f5e3Sopenharmony_ci    for (size_t i = 0; i < numberOfRegions; i++) {
12224514f5e3Sopenharmony_ci        Region *region = vm_->GetHeapRegionAllocator()->AllocateAlignedRegion(
12234514f5e3Sopenharmony_ci            space, DEFAULT_REGION_SIZE, vm_->GetAssociatedJSThread(), const_cast<Heap *>(vm_->GetHeap()));
12244514f5e3Sopenharmony_ci        auto info = ToNativePtr<SnapshotRegionHeadInfo>(beginAddr +
12254514f5e3Sopenharmony_ci            i * (Region::GetRegionAvailableSize() + SnapshotRegionHeadInfo::RegionHeadInfoSize()));
12264514f5e3Sopenharmony_ci        uintptr_t objectBeginAddr = ToUintPtr(info) + SnapshotRegionHeadInfo::RegionHeadInfoSize();
12274514f5e3Sopenharmony_ci        size_t regionIndex = info->regionIndex_;
12284514f5e3Sopenharmony_ci        size_t liveObjectSize = info->aliveObjectSize_;
12294514f5e3Sopenharmony_ci        regionIndexMap_.emplace(regionIndex, region);
12304514f5e3Sopenharmony_ci
12314514f5e3Sopenharmony_ci        ASAN_UNPOISON_MEMORY_REGION(reinterpret_cast<void *>(region->packedData_.begin_), liveObjectSize);
12324514f5e3Sopenharmony_ci        if (memcpy_s(ToVoidPtr(region->packedData_.begin_),
12334514f5e3Sopenharmony_ci                     liveObjectSize,
12344514f5e3Sopenharmony_ci                     ToVoidPtr(objectBeginAddr),
12354514f5e3Sopenharmony_ci                     liveObjectSize) != EOK) {
12364514f5e3Sopenharmony_ci            LOG_FULL(FATAL) << "memcpy_s failed";
12374514f5e3Sopenharmony_ci            UNREACHABLE();
12384514f5e3Sopenharmony_ci        }
12394514f5e3Sopenharmony_ci
12404514f5e3Sopenharmony_ci        // Other information like aliveObject size, highWaterMark etc. in the region object to restore.
12414514f5e3Sopenharmony_ci        region->aliveObject_ = liveObjectSize;
12424514f5e3Sopenharmony_ci        region->highWaterMark_ = region->packedData_.begin_ + liveObjectSize;
12434514f5e3Sopenharmony_ci        region->SetGCFlag(RegionGCFlags::NEED_RELOCATE);
12444514f5e3Sopenharmony_ci
12454514f5e3Sopenharmony_ci        if (space->GetSpaceType() != MemSpaceType::SNAPSHOT_SPACE) {
12464514f5e3Sopenharmony_ci            auto sparseSpace = reinterpret_cast<SparseSpace *>(space);
12474514f5e3Sopenharmony_ci            sparseSpace->FreeLiveRange(region, region->GetHighWaterMark(), region->GetEnd(), true);
12484514f5e3Sopenharmony_ci            sparseSpace->IncreaseLiveObjectSize(liveObjectSize);
12494514f5e3Sopenharmony_ci            sparseSpace->IncreaseAllocatedSize(liveObjectSize);
12504514f5e3Sopenharmony_ci            sparseSpace->AddRegion(region);
12514514f5e3Sopenharmony_ci        } else {
12524514f5e3Sopenharmony_ci            auto snapshotSpace = reinterpret_cast<SnapshotSpace *>(space);
12534514f5e3Sopenharmony_ci            snapshotSpace->IncreaseLiveObjectSize(liveObjectSize);
12544514f5e3Sopenharmony_ci            snapshotSpace->AddRegion(region);
12554514f5e3Sopenharmony_ci        }
12564514f5e3Sopenharmony_ci    }
12574514f5e3Sopenharmony_ci}
12584514f5e3Sopenharmony_ci
12594514f5e3Sopenharmony_civoid SnapshotProcessor::DeserializeHugeSpaceObject(uintptr_t beginAddr, HugeObjectSpace* space, size_t hugeSpaceObjSize)
12604514f5e3Sopenharmony_ci{
12614514f5e3Sopenharmony_ci    uintptr_t currentAddr = beginAddr;
12624514f5e3Sopenharmony_ci    uintptr_t endAddr = beginAddr + hugeSpaceObjSize;
12634514f5e3Sopenharmony_ci    while (currentAddr < endAddr) {
12644514f5e3Sopenharmony_ci        auto info = ToNativePtr<SnapshotRegionHeadInfo>(currentAddr);
12654514f5e3Sopenharmony_ci        // Retrieve the data beginning address based on the serialized data format.
12664514f5e3Sopenharmony_ci        uintptr_t copyFrom = ToUintPtr(info) + SnapshotRegionHeadInfo::RegionHeadInfoSize();
12674514f5e3Sopenharmony_ci        size_t objSize = info->aliveObjectSize_;
12684514f5e3Sopenharmony_ci        size_t alignedRegionObjSize = AlignUp(sizeof(Region), static_cast<size_t>(MemAlignment::MEM_ALIGN_REGION));
12694514f5e3Sopenharmony_ci        size_t hugeRegionHeadSize = AlignUp(alignedRegionObjSize + GCBitset::BYTE_PER_WORD,
12704514f5e3Sopenharmony_ci                                            static_cast<size_t>(MemAlignment::MEM_ALIGN_OBJECT));
12714514f5e3Sopenharmony_ci
12724514f5e3Sopenharmony_ci        ASSERT(objSize > MAX_REGULAR_HEAP_OBJECT_SIZE);
12734514f5e3Sopenharmony_ci        size_t alignedHugeRegionSize = AlignUp(objSize + hugeRegionHeadSize, PANDA_POOL_ALIGNMENT_IN_BYTES);
12744514f5e3Sopenharmony_ci        Region *region = vm_->GetHeapRegionAllocator()->AllocateAlignedRegion(
12754514f5e3Sopenharmony_ci            space, alignedHugeRegionSize, vm_->GetAssociatedJSThread(), const_cast<Heap *>(vm_->GetHeap()));
12764514f5e3Sopenharmony_ci        size_t regionIndex = info->regionIndex_;
12774514f5e3Sopenharmony_ci        regionIndexMap_.emplace(regionIndex, region);
12784514f5e3Sopenharmony_ci
12794514f5e3Sopenharmony_ci        ASAN_UNPOISON_MEMORY_REGION(reinterpret_cast<void *>(region->packedData_.begin_), objSize);
12804514f5e3Sopenharmony_ci        if (memcpy_s(ToVoidPtr(region->packedData_.begin_),
12814514f5e3Sopenharmony_ci                     objSize,
12824514f5e3Sopenharmony_ci                     ToVoidPtr(copyFrom),
12834514f5e3Sopenharmony_ci                     objSize) != EOK) {
12844514f5e3Sopenharmony_ci            LOG_FULL(FATAL) << "memcpy_s failed";
12854514f5e3Sopenharmony_ci            UNREACHABLE();
12864514f5e3Sopenharmony_ci        }
12874514f5e3Sopenharmony_ci
12884514f5e3Sopenharmony_ci        // Other information like aliveObject size, highWaterMark etc. in the region object to restore.
12894514f5e3Sopenharmony_ci        region->aliveObject_ = objSize;
12904514f5e3Sopenharmony_ci        region->highWaterMark_ = region->packedData_.begin_ + objSize;
12914514f5e3Sopenharmony_ci        region->SetGCFlag(RegionGCFlags::NEED_RELOCATE);
12924514f5e3Sopenharmony_ci        space->AddRegion(region);
12934514f5e3Sopenharmony_ci
12944514f5e3Sopenharmony_ci        currentAddr += SnapshotRegionHeadInfo::RegionHeadInfoSize();
12954514f5e3Sopenharmony_ci        currentAddr += objSize;
12964514f5e3Sopenharmony_ci    }
12974514f5e3Sopenharmony_ci}
12984514f5e3Sopenharmony_ci
12994514f5e3Sopenharmony_civoid SnapshotProcessor::DeserializeString(uintptr_t stringBegin, uintptr_t stringEnd)
13004514f5e3Sopenharmony_ci{
13014514f5e3Sopenharmony_ci    EcmaStringTable *stringTable = vm_->GetEcmaStringTable();
13024514f5e3Sopenharmony_ci    JSThread *thread = vm_->GetJSThread();
13034514f5e3Sopenharmony_ci    ASSERT(deserializeStringVector_.empty());
13044514f5e3Sopenharmony_ci    auto hugeSpace = sHeap_->GetHugeObjectSpace();
13054514f5e3Sopenharmony_ci    auto globalConst = const_cast<GlobalEnvConstants *>(thread->GlobalConstants());
13064514f5e3Sopenharmony_ci    auto lineStringClass = globalConst->GetLineStringClass();
13074514f5e3Sopenharmony_ci    auto constantStringClass = globalConst->GetConstantStringClass();
13084514f5e3Sopenharmony_ci    while (stringBegin < stringEnd) {
13094514f5e3Sopenharmony_ci        // str is from snapshot file, which is in native heap.
13104514f5e3Sopenharmony_ci        EcmaString *str = reinterpret_cast<EcmaString *>(stringBegin);
13114514f5e3Sopenharmony_ci        int index = JSTaggedValue(*(reinterpret_cast<JSTaggedType *>(str))).GetInt();
13124514f5e3Sopenharmony_ci        if (index == 1) {
13134514f5e3Sopenharmony_ci            str->SetClassWithoutBarrier(reinterpret_cast<JSHClass *>(constantStringClass.GetTaggedObject()));
13144514f5e3Sopenharmony_ci            std::shared_ptr<JSPandaFile> jsPandaFile = JSPandaFileManager::GetInstance()->FindMergedJSPandaFile();
13154514f5e3Sopenharmony_ci            if (jsPandaFile != nullptr) {
13164514f5e3Sopenharmony_ci                auto constantStr = ConstantString::Cast(str);
13174514f5e3Sopenharmony_ci                uint32_t id = constantStr->GetEntityIdU32();
13184514f5e3Sopenharmony_ci                auto stringData = jsPandaFile->GetStringData(EntityId(id)).data;
13194514f5e3Sopenharmony_ci                constantStr->SetConstantData(const_cast<uint8_t *>(stringData));
13204514f5e3Sopenharmony_ci                constantStr->SetRelocatedData(thread, JSTaggedValue::Undefined(), BarrierMode::SKIP_BARRIER);
13214514f5e3Sopenharmony_ci            } else {
13224514f5e3Sopenharmony_ci                LOG_ECMA_MEM(FATAL) << "JSPandaFile is nullptr";
13234514f5e3Sopenharmony_ci            }
13244514f5e3Sopenharmony_ci        } else {
13254514f5e3Sopenharmony_ci            ASSERT(index == 0);
13264514f5e3Sopenharmony_ci            str->SetClassWithoutBarrier(reinterpret_cast<JSHClass *>(lineStringClass.GetTaggedObject()));
13274514f5e3Sopenharmony_ci        }
13284514f5e3Sopenharmony_ci        size_t strSize = EcmaStringAccessor(str).ObjectSize();
13294514f5e3Sopenharmony_ci        strSize = AlignUp(strSize, static_cast<size_t>(MemAlignment::MEM_ALIGN_OBJECT));
13304514f5e3Sopenharmony_ci        {
13314514f5e3Sopenharmony_ci            auto hashcode = EcmaStringAccessor(str).GetHashcode();
13324514f5e3Sopenharmony_ci            RuntimeLockHolder locker(thread,
13334514f5e3Sopenharmony_ci                stringTable->stringTable_[EcmaStringTable::GetTableId(hashcode)].mutex_);
13344514f5e3Sopenharmony_ci            auto strFromTable = stringTable->GetStringWithHashThreadUnsafe(str, hashcode);
13354514f5e3Sopenharmony_ci            if (strFromTable) {
13364514f5e3Sopenharmony_ci                deserializeStringVector_.emplace_back(thread, strFromTable);
13374514f5e3Sopenharmony_ci            } else {
13384514f5e3Sopenharmony_ci                uintptr_t newObj = 0;
13394514f5e3Sopenharmony_ci                if (UNLIKELY(strSize > MAX_REGULAR_HEAP_OBJECT_SIZE)) {
13404514f5e3Sopenharmony_ci                    newObj = hugeSpace->Allocate(thread, strSize);
13414514f5e3Sopenharmony_ci                } else {
13424514f5e3Sopenharmony_ci                    newObj = sHeap_->GetOldSpace()->TryAllocateAndExpand(thread, strSize, true);
13434514f5e3Sopenharmony_ci                }
13444514f5e3Sopenharmony_ci                if (newObj == 0) {
13454514f5e3Sopenharmony_ci                    LOG_ECMA_MEM(FATAL) << "Snapshot Allocate OldSharedSpace OOM";
13464514f5e3Sopenharmony_ci                    UNREACHABLE();
13474514f5e3Sopenharmony_ci                }
13484514f5e3Sopenharmony_ci                if (memcpy_s(ToVoidPtr(newObj), strSize, str, strSize) != EOK) {
13494514f5e3Sopenharmony_ci                    LOG_FULL(FATAL) << "memcpy_s failed";
13504514f5e3Sopenharmony_ci                    UNREACHABLE();
13514514f5e3Sopenharmony_ci                }
13524514f5e3Sopenharmony_ci                str = reinterpret_cast<EcmaString *>(newObj);
13534514f5e3Sopenharmony_ci                stringTable->InsertStringToTableWithHashThreadUnsafe(str, hashcode);
13544514f5e3Sopenharmony_ci                deserializeStringVector_.emplace_back(thread, str);
13554514f5e3Sopenharmony_ci            }
13564514f5e3Sopenharmony_ci        }
13574514f5e3Sopenharmony_ci        stringBegin += strSize;
13584514f5e3Sopenharmony_ci    }
13594514f5e3Sopenharmony_ci}
13604514f5e3Sopenharmony_ci
13614514f5e3Sopenharmony_civoid SnapshotProcessor::DeserializePandaMethod(uintptr_t begin, uintptr_t end, MethodLiteral *methods,
13624514f5e3Sopenharmony_ci                                               size_t &methodNums, size_t &others)
13634514f5e3Sopenharmony_ci{
13644514f5e3Sopenharmony_ci    for (size_t i = 0; i < others; i++) {
13654514f5e3Sopenharmony_ci        pandaMethod_.emplace_back(begin);
13664514f5e3Sopenharmony_ci        auto method = reinterpret_cast<Method *>(begin);
13674514f5e3Sopenharmony_ci        if (memcpy_s(methods + (--methodNums), Method::Size(), method, Method::Size()) != EOK) {
13684514f5e3Sopenharmony_ci            LOG_FULL(FATAL) << "memcpy_s failed";
13694514f5e3Sopenharmony_ci            UNREACHABLE();
13704514f5e3Sopenharmony_ci        }
13714514f5e3Sopenharmony_ci        begin += Method::Size();
13724514f5e3Sopenharmony_ci        if (begin >= end) {
13734514f5e3Sopenharmony_ci            others = others - i - 1;
13744514f5e3Sopenharmony_ci        }
13754514f5e3Sopenharmony_ci    }
13764514f5e3Sopenharmony_ci}
13774514f5e3Sopenharmony_ci
13784514f5e3Sopenharmony_civoid SnapshotProcessor::HandleRootObject(SnapshotType type, uintptr_t rootObjectAddr,
13794514f5e3Sopenharmony_ci                                         size_t objType, size_t &constSpecialIndex)
13804514f5e3Sopenharmony_ci{
13814514f5e3Sopenharmony_ci    switch (type) {
13824514f5e3Sopenharmony_ci        case SnapshotType::VM_ROOT: {
13834514f5e3Sopenharmony_ci            if (JSType(objType) == JSType::GLOBAL_ENV) {
13844514f5e3Sopenharmony_ci                vm_->GetJSThread()->GetCurrentEcmaContext()->SetGlobalEnv(
13854514f5e3Sopenharmony_ci                    reinterpret_cast<GlobalEnv *>(rootObjectAddr));
13864514f5e3Sopenharmony_ci            } else if (JSType(objType) == JSType::MICRO_JOB_QUEUE) {
13874514f5e3Sopenharmony_ci                vm_->GetJSThread()->GetCurrentEcmaContext()->SetMicroJobQueue(
13884514f5e3Sopenharmony_ci                    reinterpret_cast<job::MicroJobQueue *>(rootObjectAddr));
13894514f5e3Sopenharmony_ci            }
13904514f5e3Sopenharmony_ci            break;
13914514f5e3Sopenharmony_ci        }
13924514f5e3Sopenharmony_ci        case SnapshotType::BUILTINS: {
13934514f5e3Sopenharmony_ci            JSTaggedValue result(static_cast<JSTaggedType>(rootObjectAddr));
13944514f5e3Sopenharmony_ci            auto constants = const_cast<GlobalEnvConstants *>(vm_->GetJSThread()->GlobalConstants());
13954514f5e3Sopenharmony_ci            size_t constCount = constants->GetConstantCount();
13964514f5e3Sopenharmony_ci            while (constants->IsSpecialOrUndefined(constSpecialIndex)) {
13974514f5e3Sopenharmony_ci                constSpecialIndex++; // Skip special or undefined value
13984514f5e3Sopenharmony_ci            }
13994514f5e3Sopenharmony_ci            if (constSpecialIndex < constCount) {
14004514f5e3Sopenharmony_ci                constants->SetConstant(ConstantIndex(constSpecialIndex), result);
14014514f5e3Sopenharmony_ci            } else {
14024514f5e3Sopenharmony_ci                vm_->GetJSThread()->GetCurrentEcmaContext()->SetGlobalEnv(
14034514f5e3Sopenharmony_ci                    reinterpret_cast<GlobalEnv *>(rootObjectAddr));
14044514f5e3Sopenharmony_ci            }
14054514f5e3Sopenharmony_ci            constSpecialIndex++;
14064514f5e3Sopenharmony_ci            break;
14074514f5e3Sopenharmony_ci        }
14084514f5e3Sopenharmony_ci        case SnapshotType::AI: {
14094514f5e3Sopenharmony_ci            JSTaggedValue item = JSTaggedValue(static_cast<JSTaggedType>(rootObjectAddr));
14104514f5e3Sopenharmony_ci            if (!isRootObjRelocate_ && item.IsTaggedArray()) {
14114514f5e3Sopenharmony_ci                root_ = item;
14124514f5e3Sopenharmony_ci                isRootObjRelocate_ = true;
14134514f5e3Sopenharmony_ci            }
14144514f5e3Sopenharmony_ci            break;
14154514f5e3Sopenharmony_ci        }
14164514f5e3Sopenharmony_ci        default:
14174514f5e3Sopenharmony_ci            break;
14184514f5e3Sopenharmony_ci    }
14194514f5e3Sopenharmony_ci}
14204514f5e3Sopenharmony_ci
14214514f5e3Sopenharmony_civoid SnapshotProcessor::AddRootObjectToAOTFileManager(SnapshotType type, const CString &fileName)
14224514f5e3Sopenharmony_ci{
14234514f5e3Sopenharmony_ci    if (type == SnapshotType::AI) {
14244514f5e3Sopenharmony_ci        ASSERT(!root_.IsHole());
14254514f5e3Sopenharmony_ci        AOTFileManager *aotFileManager = vm_->GetAOTFileManager();
14264514f5e3Sopenharmony_ci        aotFileManager->ParseDeserializedData(fileName, root_);
14274514f5e3Sopenharmony_ci    }
14284514f5e3Sopenharmony_ci}
14294514f5e3Sopenharmony_ci
14304514f5e3Sopenharmony_civoid SnapshotProcessor::SerializeObject(TaggedObject *objectHeader, CQueue<TaggedObject *> *queue,
14314514f5e3Sopenharmony_ci                                        std::unordered_map<uint64_t, ObjectEncode> *data)
14324514f5e3Sopenharmony_ci{
14334514f5e3Sopenharmony_ci    auto hclass = objectHeader->GetClass();
14344514f5e3Sopenharmony_ci    JSType objectType = hclass->GetObjectType();
14354514f5e3Sopenharmony_ci    uintptr_t snapshotObj = 0;
14364514f5e3Sopenharmony_ci    if (UNLIKELY(data->find(ToUintPtr(objectHeader)) == data->end())) {
14374514f5e3Sopenharmony_ci        LOG_FULL(FATAL) << "Data map can not find object";
14384514f5e3Sopenharmony_ci        UNREACHABLE();
14394514f5e3Sopenharmony_ci    } else {
14404514f5e3Sopenharmony_ci        snapshotObj = data->find(ToUintPtr(objectHeader))->second.first;
14414514f5e3Sopenharmony_ci    }
14424514f5e3Sopenharmony_ci
14434514f5e3Sopenharmony_ci    // header
14444514f5e3Sopenharmony_ci    EncodeBit encodeBit = SerializeObjectHeader(objectHeader, static_cast<size_t>(objectType), queue, data);
14454514f5e3Sopenharmony_ci    SetObjectEncodeField(snapshotObj, 0, encodeBit.GetValue());
14464514f5e3Sopenharmony_ci
14474514f5e3Sopenharmony_ci    auto visitor = [this, snapshotObj, queue, data](TaggedObject *root, ObjectSlot start, ObjectSlot end,
14484514f5e3Sopenharmony_ci                                                    VisitObjectArea area) {
14494514f5e3Sopenharmony_ci        int index = 0;
14504514f5e3Sopenharmony_ci        for (ObjectSlot slot = start; slot < end; slot++) {
14514514f5e3Sopenharmony_ci            if (area == VisitObjectArea::NATIVE_POINTER) {
14524514f5e3Sopenharmony_ci                auto nativePointer = *reinterpret_cast<void **>(slot.SlotAddress());
14534514f5e3Sopenharmony_ci                SetObjectEncodeField(snapshotObj, slot.SlotAddress() - ToUintPtr(root),
14544514f5e3Sopenharmony_ci                                     NativePointerToEncodeBit(nativePointer).GetValue());
14554514f5e3Sopenharmony_ci            } else {
14564514f5e3Sopenharmony_ci                if (VisitObjectBodyWithRep(root, slot, snapshotObj, index, area)) {
14574514f5e3Sopenharmony_ci                    continue;
14584514f5e3Sopenharmony_ci                }
14594514f5e3Sopenharmony_ci                auto fieldAddr = reinterpret_cast<JSTaggedType *>(slot.SlotAddress());
14604514f5e3Sopenharmony_ci                SetObjectEncodeField(snapshotObj, slot.SlotAddress() - ToUintPtr(root),
14614514f5e3Sopenharmony_ci                                     SerializeTaggedField(fieldAddr, queue, data));
14624514f5e3Sopenharmony_ci            }
14634514f5e3Sopenharmony_ci        }
14644514f5e3Sopenharmony_ci    };
14654514f5e3Sopenharmony_ci
14664514f5e3Sopenharmony_ci    ObjectXRay::VisitObjectBody<VisitType::SNAPSHOT_VISIT>(objectHeader, objectHeader->GetClass(), visitor);
14674514f5e3Sopenharmony_ci}
14684514f5e3Sopenharmony_ci
14694514f5e3Sopenharmony_cibool SnapshotProcessor::VisitObjectBodyWithRep(TaggedObject *root, ObjectSlot slot, uintptr_t obj, int index,
14704514f5e3Sopenharmony_ci    VisitObjectArea area)
14714514f5e3Sopenharmony_ci{
14724514f5e3Sopenharmony_ci    if (area != VisitObjectArea::IN_OBJECT) {
14734514f5e3Sopenharmony_ci        return false;
14744514f5e3Sopenharmony_ci    }
14754514f5e3Sopenharmony_ci    auto hclass = root->GetClass();
14764514f5e3Sopenharmony_ci    ASSERT(!hclass->IsAllTaggedProp());
14774514f5e3Sopenharmony_ci    auto layout = LayoutInfo::Cast(hclass->GetLayout().GetTaggedObject());
14784514f5e3Sopenharmony_ci    auto attr = layout->GetAttr(index++);
14794514f5e3Sopenharmony_ci    if (attr.GetRepresentation() == Representation::DOUBLE) {
14804514f5e3Sopenharmony_ci        auto fieldAddr = reinterpret_cast<double *>(slot.SlotAddress());
14814514f5e3Sopenharmony_ci        SetObjectEncodeField(obj, slot.SlotAddress() - ToUintPtr(root),
14824514f5e3Sopenharmony_ci                             JSTaggedValue(*fieldAddr).GetRawData());
14834514f5e3Sopenharmony_ci        return true;
14844514f5e3Sopenharmony_ci    } else if (attr.GetRepresentation() == Representation::INT) {
14854514f5e3Sopenharmony_ci        auto fieldAddr = reinterpret_cast<JSTaggedType *>(slot.SlotAddress());
14864514f5e3Sopenharmony_ci        SetObjectEncodeField(obj, slot.SlotAddress() - ToUintPtr(root),
14874514f5e3Sopenharmony_ci                             JSTaggedValue(static_cast<int32_t>(*fieldAddr)).GetRawData());
14884514f5e3Sopenharmony_ci        return true;
14894514f5e3Sopenharmony_ci    }
14904514f5e3Sopenharmony_ci    return false;
14914514f5e3Sopenharmony_ci}
14924514f5e3Sopenharmony_ci
14934514f5e3Sopenharmony_civoid SnapshotProcessor::Relocate(SnapshotType type, const JSPandaFile *jsPandaFile, uint64_t rootObjSize)
14944514f5e3Sopenharmony_ci{
14954514f5e3Sopenharmony_ci    size_t methodNums = 0;
14964514f5e3Sopenharmony_ci    MethodLiteral *methods = nullptr;
14974514f5e3Sopenharmony_ci    if (jsPandaFile) {
14984514f5e3Sopenharmony_ci        methodNums = jsPandaFile->GetNumMethods();
14994514f5e3Sopenharmony_ci        methods = jsPandaFile->GetMethodLiterals();
15004514f5e3Sopenharmony_ci    }
15014514f5e3Sopenharmony_ci
15024514f5e3Sopenharmony_ci    auto heap = vm_->GetHeap();
15034514f5e3Sopenharmony_ci    auto oldSpace = heap->GetOldSpace();
15044514f5e3Sopenharmony_ci    auto nonMovableSpace = heap->GetNonMovableSpace();
15054514f5e3Sopenharmony_ci    auto machineCodeSpace = heap->GetMachineCodeSpace();
15064514f5e3Sopenharmony_ci    auto snapshotSpace = heap->GetSnapshotSpace();
15074514f5e3Sopenharmony_ci    auto hugeObjectSpace = heap->GetHugeObjectSpace();
15084514f5e3Sopenharmony_ci
15094514f5e3Sopenharmony_ci    RelocateSpaceObject(jsPandaFile, oldSpace, type, methods, methodNums, rootObjSize);
15104514f5e3Sopenharmony_ci    RelocateSpaceObject(jsPandaFile, nonMovableSpace, type, methods, methodNums, rootObjSize);
15114514f5e3Sopenharmony_ci    RelocateSpaceObject(jsPandaFile, machineCodeSpace, type, methods, methodNums, rootObjSize);
15124514f5e3Sopenharmony_ci    RelocateSpaceObject(jsPandaFile, snapshotSpace, type, methods, methodNums, rootObjSize);
15134514f5e3Sopenharmony_ci    RelocateSpaceObject(jsPandaFile, hugeObjectSpace, type, methods, methodNums, rootObjSize);
15144514f5e3Sopenharmony_ci}
15154514f5e3Sopenharmony_ci
15164514f5e3Sopenharmony_civoid SnapshotProcessor::RelocateSpaceObject(const JSPandaFile *jsPandaFile, Space* space, SnapshotType type,
15174514f5e3Sopenharmony_ci                                            MethodLiteral* methods, size_t methodNums, size_t rootObjSize)
15184514f5e3Sopenharmony_ci{
15194514f5e3Sopenharmony_ci    size_t others = 0;
15204514f5e3Sopenharmony_ci    size_t objIndex = 0;
15214514f5e3Sopenharmony_ci    size_t constSpecialIndex = 0;
15224514f5e3Sopenharmony_ci    EcmaStringTable *stringTable = vm_->GetEcmaStringTable();
15234514f5e3Sopenharmony_ci    space->EnumerateRegions([jsPandaFile, stringTable, &others, &objIndex, &rootObjSize, &constSpecialIndex,
15244514f5e3Sopenharmony_ci                            &type, this, methods, &methodNums](Region *current) {
15254514f5e3Sopenharmony_ci        if (!current->NeedRelocate()) {
15264514f5e3Sopenharmony_ci            return;
15274514f5e3Sopenharmony_ci        }
15284514f5e3Sopenharmony_ci        current->ClearGCFlag(RegionGCFlags::NEED_RELOCATE);
15294514f5e3Sopenharmony_ci        size_t allocated = current->GetAllocatedBytes();
15304514f5e3Sopenharmony_ci        uintptr_t begin = current->GetBegin();
15314514f5e3Sopenharmony_ci        uintptr_t end = begin + allocated;
15324514f5e3Sopenharmony_ci        while (begin < end) {
15334514f5e3Sopenharmony_ci            if (others != 0) {
15344514f5e3Sopenharmony_ci                DeserializePandaMethod(begin, end, methods, methodNums, others);
15354514f5e3Sopenharmony_ci                break;
15364514f5e3Sopenharmony_ci            }
15374514f5e3Sopenharmony_ci            EncodeBit encodeBit(*reinterpret_cast<uint64_t *>(begin));
15384514f5e3Sopenharmony_ci            auto objType = encodeBit.GetObjectType();
15394514f5e3Sopenharmony_ci            if (objType == Constants::MASK_METHOD_SPACE_BEGIN) {
15404514f5e3Sopenharmony_ci                begin += sizeof(uint64_t);
15414514f5e3Sopenharmony_ci                others = encodeBit.GetNativePointerOrObjectIndex();
15424514f5e3Sopenharmony_ci                DeserializePandaMethod(begin, end, methods, methodNums, others);
15434514f5e3Sopenharmony_ci                break;
15444514f5e3Sopenharmony_ci            }
15454514f5e3Sopenharmony_ci            TaggedObject *objectHeader = reinterpret_cast<TaggedObject *>(begin);
15464514f5e3Sopenharmony_ci            DeserializeClassWord(objectHeader);
15474514f5e3Sopenharmony_ci            DeserializeField(objectHeader);
15484514f5e3Sopenharmony_ci            if (builtinsDeserialize_ &&
15494514f5e3Sopenharmony_ci                (JSType(objType) >= JSType::STRING_FIRST && JSType(objType) <= JSType::STRING_LAST)) {
15504514f5e3Sopenharmony_ci                auto str = reinterpret_cast<EcmaString *>(begin);
15514514f5e3Sopenharmony_ci                EcmaStringAccessor(str).ClearInternString();
15524514f5e3Sopenharmony_ci                stringTable->InsertStringIfNotExistThreadUnsafe(str);
15534514f5e3Sopenharmony_ci                if (JSType(objType) == JSType::CONSTANT_STRING) {
15544514f5e3Sopenharmony_ci                    auto constantStr = ConstantString::Cast(str);
15554514f5e3Sopenharmony_ci                    uint32_t id = constantStr->GetEntityIdU32();
15564514f5e3Sopenharmony_ci                    auto stringData = jsPandaFile->GetStringData(EntityId(id)).data;
15574514f5e3Sopenharmony_ci                    constantStr->SetConstantData(const_cast<uint8_t *>(stringData));
15584514f5e3Sopenharmony_ci                }
15594514f5e3Sopenharmony_ci            }
15604514f5e3Sopenharmony_ci            if (objIndex < rootObjSize) {
15614514f5e3Sopenharmony_ci                HandleRootObject(type, begin, objType, constSpecialIndex);
15624514f5e3Sopenharmony_ci            }
15634514f5e3Sopenharmony_ci            begin = begin + AlignUp(objectHeader->GetClass()->SizeFromJSHClass(objectHeader),
15644514f5e3Sopenharmony_ci                                    static_cast<size_t>(MemAlignment::MEM_ALIGN_OBJECT));
15654514f5e3Sopenharmony_ci            objIndex++;
15664514f5e3Sopenharmony_ci        }
15674514f5e3Sopenharmony_ci    });
15684514f5e3Sopenharmony_ci}
15694514f5e3Sopenharmony_ci
15704514f5e3Sopenharmony_ciEncodeBit SnapshotProcessor::SerializeObjectHeader(TaggedObject *objectHeader, size_t objectType,
15714514f5e3Sopenharmony_ci                                                   CQueue<TaggedObject *> *queue,
15724514f5e3Sopenharmony_ci                                                   std::unordered_map<uint64_t, ObjectEncode> *data)
15734514f5e3Sopenharmony_ci{
15744514f5e3Sopenharmony_ci    auto hclass = objectHeader->GetClass();
15754514f5e3Sopenharmony_ci    ASSERT(hclass != nullptr);
15764514f5e3Sopenharmony_ci    EncodeBit encodeBit(0);
15774514f5e3Sopenharmony_ci    if (data->find(ToUintPtr(hclass)) == data->end()) {
15784514f5e3Sopenharmony_ci        encodeBit = EncodeTaggedObject(hclass, queue, data);
15794514f5e3Sopenharmony_ci    } else {
15804514f5e3Sopenharmony_ci        ObjectEncode objectEncodePair = data->find(ToUintPtr(hclass))->second;
15814514f5e3Sopenharmony_ci        encodeBit = objectEncodePair.second;
15824514f5e3Sopenharmony_ci    }
15834514f5e3Sopenharmony_ci    encodeBit.SetObjectType(objectType);
15844514f5e3Sopenharmony_ci    return encodeBit;
15854514f5e3Sopenharmony_ci}
15864514f5e3Sopenharmony_ci
15874514f5e3Sopenharmony_ciuint64_t SnapshotProcessor::SerializeTaggedField(JSTaggedType *tagged, CQueue<TaggedObject *> *queue,
15884514f5e3Sopenharmony_ci                                                 std::unordered_map<uint64_t, ObjectEncode> *data)
15894514f5e3Sopenharmony_ci{
15904514f5e3Sopenharmony_ci    JSTaggedValue taggedValue(*tagged);
15914514f5e3Sopenharmony_ci    if (taggedValue.IsWeak()) {
15924514f5e3Sopenharmony_ci        taggedValue.RemoveWeakTag();
15934514f5e3Sopenharmony_ci        if (taggedValue.IsJSHClass()) {
15944514f5e3Sopenharmony_ci            EncodeBit encodeBit = GetObjectEncode(taggedValue, queue, data);
15954514f5e3Sopenharmony_ci            encodeBit.SetTSWeakObject();
15964514f5e3Sopenharmony_ci            return encodeBit.GetValue();
15974514f5e3Sopenharmony_ci        }
15984514f5e3Sopenharmony_ci        EncodeBit special(JSTaggedValue::Undefined().GetRawData());
15994514f5e3Sopenharmony_ci        special.SetObjectSpecial();
16004514f5e3Sopenharmony_ci        return special.GetValue();
16014514f5e3Sopenharmony_ci    }
16024514f5e3Sopenharmony_ci
16034514f5e3Sopenharmony_ci    if (taggedValue.IsSpecial()) {
16044514f5e3Sopenharmony_ci        EncodeBit special(taggedValue.GetRawData());
16054514f5e3Sopenharmony_ci        special.SetObjectSpecial();
16064514f5e3Sopenharmony_ci        return special.GetValue();  // special encode bit
16074514f5e3Sopenharmony_ci    }
16084514f5e3Sopenharmony_ci
16094514f5e3Sopenharmony_ci    if (!taggedValue.IsHeapObject()) {
16104514f5e3Sopenharmony_ci        return taggedValue.GetRawData();  // not object
16114514f5e3Sopenharmony_ci    }
16124514f5e3Sopenharmony_ci
16134514f5e3Sopenharmony_ci    EncodeBit encodeBit = GetObjectEncode(taggedValue, queue, data);
16144514f5e3Sopenharmony_ci
16154514f5e3Sopenharmony_ci    if (taggedValue.IsString()) {
16164514f5e3Sopenharmony_ci        encodeBit.SetReferenceToString(true);
16174514f5e3Sopenharmony_ci    }
16184514f5e3Sopenharmony_ci    return encodeBit.GetValue();  // object
16194514f5e3Sopenharmony_ci}
16204514f5e3Sopenharmony_ci
16214514f5e3Sopenharmony_civoid SnapshotProcessor::DeserializeTaggedField(uint64_t *value, TaggedObject *root)
16224514f5e3Sopenharmony_ci{
16234514f5e3Sopenharmony_ci    EncodeBit encodeBit(*value);
16244514f5e3Sopenharmony_ci    if (!builtinsDeserialize_ && encodeBit.IsReference() && encodeBit.IsGlobalConstOrBuiltins()) {
16254514f5e3Sopenharmony_ci        size_t index = encodeBit.GetNativePointerOrObjectIndex();
16264514f5e3Sopenharmony_ci        auto object = vm_->GetSnapshotEnv()->RelocateRootObjectAddr(index);
16274514f5e3Sopenharmony_ci        *value = object;
16284514f5e3Sopenharmony_ci        WriteBarrier<WriteBarrierType::DESERIALIZE>(vm_->GetJSThread(), reinterpret_cast<void *>(value), 0, object);
16294514f5e3Sopenharmony_ci        return;
16304514f5e3Sopenharmony_ci    }
16314514f5e3Sopenharmony_ci
16324514f5e3Sopenharmony_ci    if (!encodeBit.IsReference()) {
16334514f5e3Sopenharmony_ci        return;
16344514f5e3Sopenharmony_ci    }
16354514f5e3Sopenharmony_ci
16364514f5e3Sopenharmony_ci    if (encodeBit.IsReference() && !encodeBit.IsSpecial()) {
16374514f5e3Sopenharmony_ci        Region *rootRegion = Region::ObjectAddressToRange(ToUintPtr(root));
16384514f5e3Sopenharmony_ci        uintptr_t taggedObjectAddr = TaggedObjectEncodeBitToAddr(encodeBit);
16394514f5e3Sopenharmony_ci        Region *valueRegion = Region::ObjectAddressToRange(taggedObjectAddr);
16404514f5e3Sopenharmony_ci        if (rootRegion->InGeneralOldSpace() && valueRegion->InGeneralNewSpace()) {
16414514f5e3Sopenharmony_ci            // Should align with '8' in 64 and 32 bit platform
16424514f5e3Sopenharmony_ci            ASSERT((ToUintPtr(value) % static_cast<uint8_t>(MemAlignment::MEM_ALIGN_OBJECT)) == 0);
16434514f5e3Sopenharmony_ci            rootRegion->InsertOldToNewRSet((uintptr_t)value);
16444514f5e3Sopenharmony_ci        }
16454514f5e3Sopenharmony_ci        if (valueRegion->InSharedSweepableSpace()) {
16464514f5e3Sopenharmony_ci            if (!rootRegion->InSharedHeap()) {
16474514f5e3Sopenharmony_ci                rootRegion->InsertLocalToShareRSet((uintptr_t)value);
16484514f5e3Sopenharmony_ci            }
16494514f5e3Sopenharmony_ci            // In deserializing can not use barriers, only mark the shared value to prevent markingbit being lost
16504514f5e3Sopenharmony_ci            if (vm_->GetJSThread()->IsSharedConcurrentMarkingOrFinished()) {
16514514f5e3Sopenharmony_ci                ASSERT(DaemonThread::GetInstance()->IsConcurrentMarkingOrFinished());
16524514f5e3Sopenharmony_ci                valueRegion->AtomicMark(reinterpret_cast<void*>(taggedObjectAddr));
16534514f5e3Sopenharmony_ci            }
16544514f5e3Sopenharmony_ci        }
16554514f5e3Sopenharmony_ci        *value = taggedObjectAddr;
16564514f5e3Sopenharmony_ci        return;
16574514f5e3Sopenharmony_ci    }
16584514f5e3Sopenharmony_ci
16594514f5e3Sopenharmony_ci    if (encodeBit.IsSpecial()) {
16604514f5e3Sopenharmony_ci        encodeBit.ClearObjectSpecialFlag();
16614514f5e3Sopenharmony_ci        *value = encodeBit.GetValue();
16624514f5e3Sopenharmony_ci    }
16634514f5e3Sopenharmony_ci}
16644514f5e3Sopenharmony_ci
16654514f5e3Sopenharmony_civoid SnapshotProcessor::DeserializeClassWord(TaggedObject *object)
16664514f5e3Sopenharmony_ci{
16674514f5e3Sopenharmony_ci    EncodeBit encodeBit(*reinterpret_cast<uint64_t *>(object));
16684514f5e3Sopenharmony_ci    if (!builtinsDeserialize_ && encodeBit.IsGlobalConstOrBuiltins()) {
16694514f5e3Sopenharmony_ci        size_t hclassIndex = encodeBit.GetNativePointerOrObjectIndex();
16704514f5e3Sopenharmony_ci        auto globalConst = const_cast<GlobalEnvConstants *>(vm_->GetJSThread()->GlobalConstants());
16714514f5e3Sopenharmony_ci        JSTaggedValue hclassValue = globalConst->GetGlobalConstantObject(hclassIndex);
16724514f5e3Sopenharmony_ci        ASSERT(hclassValue.IsJSHClass());
16734514f5e3Sopenharmony_ci        object->SynchronizedSetClass(vm_->GetJSThread(), JSHClass::Cast(hclassValue.GetTaggedObject()));
16744514f5e3Sopenharmony_ci        return;
16754514f5e3Sopenharmony_ci    }
16764514f5e3Sopenharmony_ci    uintptr_t hclassAddr = TaggedObjectEncodeBitToAddr(encodeBit);
16774514f5e3Sopenharmony_ci    object->SynchronizedSetClass(vm_->GetJSThread(), reinterpret_cast<JSHClass *>(hclassAddr));
16784514f5e3Sopenharmony_ci}
16794514f5e3Sopenharmony_ci
16804514f5e3Sopenharmony_civoid SnapshotProcessor::DeserializeField(TaggedObject *objectHeader)
16814514f5e3Sopenharmony_ci{
16824514f5e3Sopenharmony_ci    auto visitor = [this]([[maybe_unused]] TaggedObject *root, ObjectSlot start, ObjectSlot end, VisitObjectArea area) {
16834514f5e3Sopenharmony_ci        for (ObjectSlot slot = start; slot < end; slot++) {
16844514f5e3Sopenharmony_ci            auto encodeBitAddr = reinterpret_cast<uint64_t *>(slot.SlotAddress());
16854514f5e3Sopenharmony_ci            if (area == VisitObjectArea::NATIVE_POINTER) {
16864514f5e3Sopenharmony_ci                DeserializeNativePointer(encodeBitAddr);
16874514f5e3Sopenharmony_ci            } else {
16884514f5e3Sopenharmony_ci                DeserializeTaggedField(encodeBitAddr, root);
16894514f5e3Sopenharmony_ci            }
16904514f5e3Sopenharmony_ci        }
16914514f5e3Sopenharmony_ci    };
16924514f5e3Sopenharmony_ci
16934514f5e3Sopenharmony_ci    ObjectXRay::VisitObjectBody<VisitType::SNAPSHOT_VISIT>(objectHeader, objectHeader->GetClass(), visitor);
16944514f5e3Sopenharmony_ci}
16954514f5e3Sopenharmony_ci
16964514f5e3Sopenharmony_ciEncodeBit SnapshotProcessor::NativePointerToEncodeBit(void *nativePointer)
16974514f5e3Sopenharmony_ci{
16984514f5e3Sopenharmony_ci    EncodeBit native(0);
16994514f5e3Sopenharmony_ci    if (nativePointer != nullptr) {  // nativePointer
17004514f5e3Sopenharmony_ci        size_t index = Constants::MAX_C_POINTER_INDEX;
17014514f5e3Sopenharmony_ci
17024514f5e3Sopenharmony_ci        if (programSerialize_) {
17034514f5e3Sopenharmony_ci            pandaMethod_.emplace_back(ToUintPtr(nativePointer));
17044514f5e3Sopenharmony_ci            ASSERT(pandaMethod_.size() + GetNativeTableSize() <= Constants::MAX_UINT_16);
17054514f5e3Sopenharmony_ci            ASSERT(pandaMethod_.size() + GetNativeTableSize() > 0);
17064514f5e3Sopenharmony_ci            // NOLINTNEXTLINE(bugprone-narrowing-conversions, cppcoreguidelines-narrowing-conversions)
17074514f5e3Sopenharmony_ci            index = pandaMethod_.size() + GetNativeTableSize() - 1;
17084514f5e3Sopenharmony_ci        } else {
17094514f5e3Sopenharmony_ci            index = SearchNativeMethodIndex(nativePointer);
17104514f5e3Sopenharmony_ci        }
17114514f5e3Sopenharmony_ci
17124514f5e3Sopenharmony_ci        LOG_ECMA_IF(index > Constants::MAX_C_POINTER_INDEX, FATAL) << "MAX_C_POINTER_INDEX: " << index;
17134514f5e3Sopenharmony_ci        native.SetNativePointerOrObjectIndex(index);
17144514f5e3Sopenharmony_ci    }
17154514f5e3Sopenharmony_ci    return native;
17164514f5e3Sopenharmony_ci}
17174514f5e3Sopenharmony_ci
17184514f5e3Sopenharmony_cisize_t SnapshotProcessor::SearchNativeMethodIndex(void *nativePointer)
17194514f5e3Sopenharmony_ci{
17204514f5e3Sopenharmony_ci    for (size_t i = 0; i < GetNativeTableSize(); i++) {
17214514f5e3Sopenharmony_ci        if (nativePointer == reinterpret_cast<void *>(g_nativeTable[i])) {
17224514f5e3Sopenharmony_ci            return i;
17234514f5e3Sopenharmony_ci        }
17244514f5e3Sopenharmony_ci    }
17254514f5e3Sopenharmony_ci
17264514f5e3Sopenharmony_ci    // not found
17274514f5e3Sopenharmony_ci    LOG_FULL(FATAL) << "native method did not register in g_table, please register it first";
17284514f5e3Sopenharmony_ci    UNREACHABLE();
17294514f5e3Sopenharmony_ci}
17304514f5e3Sopenharmony_ci
17314514f5e3Sopenharmony_ciuintptr_t SnapshotProcessor::TaggedObjectEncodeBitToAddr(EncodeBit taggedBit)
17324514f5e3Sopenharmony_ci{
17334514f5e3Sopenharmony_ci    ASSERT(taggedBit.IsReference());
17344514f5e3Sopenharmony_ci    if (!builtinsDeserialize_ && taggedBit.IsReferenceToString()) {
17354514f5e3Sopenharmony_ci        size_t stringIndex = taggedBit.GetNativePointerOrObjectIndex();
17364514f5e3Sopenharmony_ci        return reinterpret_cast<uintptr_t>(*deserializeStringVector_.at(stringIndex));
17374514f5e3Sopenharmony_ci    }
17384514f5e3Sopenharmony_ci    size_t regionIndex = taggedBit.GetRegionIndex();
17394514f5e3Sopenharmony_ci    if (UNLIKELY(regionIndexMap_.find(regionIndex) == regionIndexMap_.end())) {
17404514f5e3Sopenharmony_ci        LOG_FULL(FATAL) << "Snapshot deserialize can not find region by index";
17414514f5e3Sopenharmony_ci    }
17424514f5e3Sopenharmony_ci    Region *region = regionIndexMap_.find(regionIndex)->second;
17434514f5e3Sopenharmony_ci    size_t objectOffset = taggedBit.GetObjectOffsetInRegion();
17444514f5e3Sopenharmony_ci
17454514f5e3Sopenharmony_ci    uintptr_t addr = ToUintPtr(region) + objectOffset;
17464514f5e3Sopenharmony_ci    if (taggedBit.IsTSWeakObject()) {
17474514f5e3Sopenharmony_ci        JSTaggedValue object(static_cast<JSTaggedType>(addr));
17484514f5e3Sopenharmony_ci        object.CreateWeakRef();
17494514f5e3Sopenharmony_ci        addr = object.GetRawData();
17504514f5e3Sopenharmony_ci    }
17514514f5e3Sopenharmony_ci    return addr;
17524514f5e3Sopenharmony_ci}
17534514f5e3Sopenharmony_ci
17544514f5e3Sopenharmony_civoid SnapshotProcessor::DeserializeNativePointer(uint64_t *value)
17554514f5e3Sopenharmony_ci{
17564514f5e3Sopenharmony_ci    EncodeBit native(*value);
17574514f5e3Sopenharmony_ci    size_t index = native.GetNativePointerOrObjectIndex();
17584514f5e3Sopenharmony_ci    uintptr_t addr = 0U;
17594514f5e3Sopenharmony_ci    size_t nativeTableSize = GetNativeTableSize();
17604514f5e3Sopenharmony_ci    if (index < nativeTableSize) {
17614514f5e3Sopenharmony_ci        addr = g_nativeTable[index];
17624514f5e3Sopenharmony_ci    } else {
17634514f5e3Sopenharmony_ci        addr = pandaMethod_.at(index - nativeTableSize);
17644514f5e3Sopenharmony_ci    }
17654514f5e3Sopenharmony_ci    *value = addr;
17664514f5e3Sopenharmony_ci}
17674514f5e3Sopenharmony_ci
17684514f5e3Sopenharmony_civoid SnapshotProcessor::SerializePandaFileMethod()
17694514f5e3Sopenharmony_ci{
17704514f5e3Sopenharmony_ci    EncodeBit encodeBit(pandaMethod_.size());
17714514f5e3Sopenharmony_ci    encodeBit.SetObjectType(Constants::MASK_METHOD_SPACE_BEGIN);
17724514f5e3Sopenharmony_ci
17734514f5e3Sopenharmony_ci    ObjectFactory *factory = vm_->GetFactory();
17744514f5e3Sopenharmony_ci    // panda method space begin
17754514f5e3Sopenharmony_ci    uintptr_t snapshotObj = factory->NewSpaceBySnapshotAllocator(sizeof(uint64_t));
17764514f5e3Sopenharmony_ci    if (snapshotObj == 0) {
17774514f5e3Sopenharmony_ci        LOG_ECMA(ERROR) << "SnapshotAllocator OOM";
17784514f5e3Sopenharmony_ci        return;
17794514f5e3Sopenharmony_ci    }
17804514f5e3Sopenharmony_ci    SetObjectEncodeField(snapshotObj, 0, encodeBit.GetValue());  // methods
17814514f5e3Sopenharmony_ci
17824514f5e3Sopenharmony_ci    // panda methods
17834514f5e3Sopenharmony_ci    for (auto &it : pandaMethod_) {
17844514f5e3Sopenharmony_ci        // write method
17854514f5e3Sopenharmony_ci        size_t methodObjSize = Method::Size();
17864514f5e3Sopenharmony_ci        uintptr_t methodObj = factory->NewSpaceBySnapshotAllocator(methodObjSize);
17874514f5e3Sopenharmony_ci        if (methodObj == 0) {
17884514f5e3Sopenharmony_ci            LOG_ECMA(ERROR) << "SnapshotAllocator OOM";
17894514f5e3Sopenharmony_ci            return;
17904514f5e3Sopenharmony_ci        }
17914514f5e3Sopenharmony_ci        if (memcpy_s(ToVoidPtr(methodObj), methodObjSize, ToVoidPtr(it), Method::Size()) != EOK) {
17924514f5e3Sopenharmony_ci            LOG_FULL(FATAL) << "memcpy_s failed";
17934514f5e3Sopenharmony_ci            UNREACHABLE();
17944514f5e3Sopenharmony_ci        }
17954514f5e3Sopenharmony_ci    }
17964514f5e3Sopenharmony_ci}
17974514f5e3Sopenharmony_ci
17984514f5e3Sopenharmony_ciuintptr_t SnapshotProcessor::GetNewObj(size_t objectSize, TaggedObject *objectHeader)
17994514f5e3Sopenharmony_ci{
18004514f5e3Sopenharmony_ci    if (builtinsSerialize_) {
18014514f5e3Sopenharmony_ci        return AllocateObjectToLocalSpace(snapshotLocalSpace_, objectSize);
18024514f5e3Sopenharmony_ci    }
18034514f5e3Sopenharmony_ci    auto region = Region::ObjectAddressToRange(objectHeader);
18044514f5e3Sopenharmony_ci    if (region->InYoungOrOldSpace() || region->InSharedOldSpace()) {
18054514f5e3Sopenharmony_ci        return AllocateObjectToLocalSpace(oldLocalSpace_, objectSize);
18064514f5e3Sopenharmony_ci    }
18074514f5e3Sopenharmony_ci    if (region->InMachineCodeSpace()) {
18084514f5e3Sopenharmony_ci        return AllocateObjectToLocalSpace(machineCodeLocalSpace_, objectSize);
18094514f5e3Sopenharmony_ci    }
18104514f5e3Sopenharmony_ci    if (region->InNonMovableSpace() || region->InReadOnlySpace() ||
18114514f5e3Sopenharmony_ci        region->InSharedNonMovableSpace() || region->InSharedReadOnlySpace()) {
18124514f5e3Sopenharmony_ci        return AllocateObjectToLocalSpace(nonMovableLocalSpace_, objectSize);
18134514f5e3Sopenharmony_ci    }
18144514f5e3Sopenharmony_ci    if (region->InHugeObjectSpace() || region->InSharedHugeObjectSpace()) {
18154514f5e3Sopenharmony_ci        return AllocateObjectToLocalSpace(hugeObjectLocalSpace_, objectSize);
18164514f5e3Sopenharmony_ci    }
18174514f5e3Sopenharmony_ci    return AllocateObjectToLocalSpace(snapshotLocalSpace_, objectSize);
18184514f5e3Sopenharmony_ci}
18194514f5e3Sopenharmony_ci
18204514f5e3Sopenharmony_ciEncodeBit SnapshotProcessor::EncodeTaggedObject(TaggedObject *objectHeader, CQueue<TaggedObject *> *queue,
18214514f5e3Sopenharmony_ci                                                std::unordered_map<uint64_t, ObjectEncode> *data)
18224514f5e3Sopenharmony_ci{
18234514f5e3Sopenharmony_ci    if (!builtinsSerialize_) {
18244514f5e3Sopenharmony_ci        // String duplicate
18254514f5e3Sopenharmony_ci        if (objectHeader->GetClass()->IsString()) {
18264514f5e3Sopenharmony_ci            ASSERT(stringVector_.size() < Constants::MAX_OBJECT_INDEX);
18274514f5e3Sopenharmony_ci            EncodeBit encodeBit(stringVector_.size());
18284514f5e3Sopenharmony_ci            if (EcmaStringAccessor(objectHeader).IsTreeString()) {
18294514f5e3Sopenharmony_ci                data->emplace(ToUintPtr(objectHeader), std::make_pair(0U, encodeBit));
18304514f5e3Sopenharmony_ci                objectHeader = EcmaStringAccessor::FlattenNoGCForSnapshot(vm_, EcmaString::Cast(objectHeader));
18314514f5e3Sopenharmony_ci            }
18324514f5e3Sopenharmony_ci            stringVector_.emplace_back(ToUintPtr(objectHeader));
18334514f5e3Sopenharmony_ci            data->emplace(ToUintPtr(objectHeader), std::make_pair(0U, encodeBit));
18344514f5e3Sopenharmony_ci            return encodeBit;
18354514f5e3Sopenharmony_ci        }
18364514f5e3Sopenharmony_ci
18374514f5e3Sopenharmony_ci        // builtins object reuse
18384514f5e3Sopenharmony_ci        size_t index = vm_->GetSnapshotEnv()->FindEnvObjectIndex(ToUintPtr(objectHeader));
18394514f5e3Sopenharmony_ci        if (index != SnapshotEnv::MAX_UINT_32) {
18404514f5e3Sopenharmony_ci            EncodeBit encodeBit(index);
18414514f5e3Sopenharmony_ci            encodeBit.SetGlobalConstOrBuiltins();
18424514f5e3Sopenharmony_ci            data->emplace(ToUintPtr(objectHeader), std::make_pair(0U, encodeBit));
18434514f5e3Sopenharmony_ci            return encodeBit;
18444514f5e3Sopenharmony_ci        }
18454514f5e3Sopenharmony_ci    }
18464514f5e3Sopenharmony_ci    auto oldObjHeader = objectHeader;
18474514f5e3Sopenharmony_ci    if (objectHeader->GetClass()->IsString()) {
18484514f5e3Sopenharmony_ci        if (EcmaStringAccessor(objectHeader).IsTreeString()) {
18494514f5e3Sopenharmony_ci            objectHeader = EcmaStringAccessor::FlattenNoGCForSnapshot(vm_, EcmaString::Cast(objectHeader));
18504514f5e3Sopenharmony_ci        }
18514514f5e3Sopenharmony_ci    }
18524514f5e3Sopenharmony_ci    queue->emplace(objectHeader);
18534514f5e3Sopenharmony_ci    size_t objectSize = objectHeader->GetClass()->SizeFromJSHClass(objectHeader);
18544514f5e3Sopenharmony_ci    if (objectSize == 0) {
18554514f5e3Sopenharmony_ci        LOG_ECMA_MEM(FATAL) << "It is a zero object. Not Support.";
18564514f5e3Sopenharmony_ci    }
18574514f5e3Sopenharmony_ci    uintptr_t newObj = GetNewObj(objectSize, objectHeader);
18584514f5e3Sopenharmony_ci    if (newObj == 0) {
18594514f5e3Sopenharmony_ci        LOG_ECMA_MEM(FATAL) << "Snapshot Allocate OOM";
18604514f5e3Sopenharmony_ci    }
18614514f5e3Sopenharmony_ci    if (memcpy_s(ToVoidPtr(newObj), objectSize, objectHeader, objectSize) != EOK) {
18624514f5e3Sopenharmony_ci        LOG_FULL(FATAL) << "memcpy_s failed";
18634514f5e3Sopenharmony_ci        UNREACHABLE();
18644514f5e3Sopenharmony_ci    }
18654514f5e3Sopenharmony_ci    auto currentRegion = Region::ObjectAddressToRange(newObj);
18664514f5e3Sopenharmony_ci    // region snapshotData_ low 32 bits is used to record region index for snapshot
18674514f5e3Sopenharmony_ci    uint64_t snapshotData = currentRegion->GetSnapshotData();
18684514f5e3Sopenharmony_ci    size_t regionIndex = SnapshotHelper::GetHugeObjectRegionIndex(snapshotData);
18694514f5e3Sopenharmony_ci    size_t objOffset = newObj - ToUintPtr(currentRegion);
18704514f5e3Sopenharmony_ci    EncodeBit encodeBit(static_cast<uint64_t>(regionIndex));
18714514f5e3Sopenharmony_ci    encodeBit.SetObjectOffsetInRegion(objOffset);
18724514f5e3Sopenharmony_ci    if (oldObjHeader->GetClass()->IsString()) {
18734514f5e3Sopenharmony_ci        if (EcmaStringAccessor(oldObjHeader).IsTreeString()) {
18744514f5e3Sopenharmony_ci            data->emplace(ToUintPtr(oldObjHeader), std::make_pair(0U, encodeBit));
18754514f5e3Sopenharmony_ci        }
18764514f5e3Sopenharmony_ci    }
18774514f5e3Sopenharmony_ci    data->emplace(ToUintPtr(objectHeader), std::make_pair(newObj, encodeBit));
18784514f5e3Sopenharmony_ci    return encodeBit;
18794514f5e3Sopenharmony_ci}
18804514f5e3Sopenharmony_ci
18814514f5e3Sopenharmony_ciEncodeBit SnapshotProcessor::GetObjectEncode(JSTaggedValue object, CQueue<TaggedObject *> *queue,
18824514f5e3Sopenharmony_ci                                             std::unordered_map<uint64_t, ObjectEncode> *data)
18834514f5e3Sopenharmony_ci{
18844514f5e3Sopenharmony_ci    JSTaggedType addr = object.GetRawData();
18854514f5e3Sopenharmony_ci    EncodeBit encodeBit(0);
18864514f5e3Sopenharmony_ci
18874514f5e3Sopenharmony_ci    if (data->find(addr) == data->end()) {
18884514f5e3Sopenharmony_ci        encodeBit = EncodeTaggedObject(object.GetTaggedObject(), queue, data);
18894514f5e3Sopenharmony_ci    } else {
18904514f5e3Sopenharmony_ci        ObjectEncode objectEncodePair = data->find(object.GetRawData())->second;
18914514f5e3Sopenharmony_ci        encodeBit = objectEncodePair.second;
18924514f5e3Sopenharmony_ci    }
18934514f5e3Sopenharmony_ci    return encodeBit;
18944514f5e3Sopenharmony_ci}
18954514f5e3Sopenharmony_ci
18964514f5e3Sopenharmony_civoid SnapshotProcessor::EncodeTaggedObjectRange(ObjectSlot start, ObjectSlot end, CQueue<TaggedObject *> *queue,
18974514f5e3Sopenharmony_ci                                                std::unordered_map<uint64_t, ObjectEncode> *data)
18984514f5e3Sopenharmony_ci{
18994514f5e3Sopenharmony_ci    while (start < end) {
19004514f5e3Sopenharmony_ci        JSTaggedValue object(start.GetTaggedType());
19014514f5e3Sopenharmony_ci        start++;
19024514f5e3Sopenharmony_ci        if (object.IsHeapObject()) {
19034514f5e3Sopenharmony_ci            EncodeBit encodeBit(0);
19044514f5e3Sopenharmony_ci            if (data->find(object.GetRawData()) == data->end()) {
19054514f5e3Sopenharmony_ci                encodeBit = EncodeTaggedObject(object.GetTaggedObject(), queue, data);
19064514f5e3Sopenharmony_ci            }
19074514f5e3Sopenharmony_ci        }
19084514f5e3Sopenharmony_ci    }
19094514f5e3Sopenharmony_ci}
19104514f5e3Sopenharmony_ci
19114514f5e3Sopenharmony_cisize_t SnapshotProcessor::GetNativeTableSize() const
19124514f5e3Sopenharmony_ci{
19134514f5e3Sopenharmony_ci    return sizeof(g_nativeTable) / sizeof(g_nativeTable[0]);
19144514f5e3Sopenharmony_ci}
19154514f5e3Sopenharmony_ci
19164514f5e3Sopenharmony_ciSnapshotRegionHeadInfo SnapshotProcessor::GenerateRegionHeadInfo(Region *region)
19174514f5e3Sopenharmony_ci{
19184514f5e3Sopenharmony_ci    // Record region head information for deserialize
19194514f5e3Sopenharmony_ci    SnapshotRegionHeadInfo info;
19204514f5e3Sopenharmony_ci    info.regionIndex_ = region->GetSnapshotData();
19214514f5e3Sopenharmony_ci    if (region->InSnapshotSpace()) {
19224514f5e3Sopenharmony_ci        info.aliveObjectSize_ = region->highWaterMark_ - region->packedData_.begin_;
19234514f5e3Sopenharmony_ci    } else {
19244514f5e3Sopenharmony_ci        info.aliveObjectSize_ = region->AliveObject();
19254514f5e3Sopenharmony_ci    }
19264514f5e3Sopenharmony_ci    return info;
19274514f5e3Sopenharmony_ci}
19284514f5e3Sopenharmony_ci
19294514f5e3Sopenharmony_civoid SnapshotProcessor::ResetRegionUnusedRange(Region *region)
19304514f5e3Sopenharmony_ci{
19314514f5e3Sopenharmony_ci    // memset unused memory to 0
19324514f5e3Sopenharmony_ci    if (region->AliveObject() < region->end_ - region->packedData_.begin_) {
19334514f5e3Sopenharmony_ci        uintptr_t unusedAddrBegin = region->packedData_.begin_ + region->AliveObject();
19344514f5e3Sopenharmony_ci        size_t unusedSize = region->end_ - region->packedData_.begin_ - region->AliveObject();
19354514f5e3Sopenharmony_ci        if (memset_s(reinterpret_cast<void *>(unusedAddrBegin), unusedSize, 0, unusedSize)) {
19364514f5e3Sopenharmony_ci            LOG_FULL(FATAL) << "memset_s failed";
19374514f5e3Sopenharmony_ci            UNREACHABLE();
19384514f5e3Sopenharmony_ci        }
19394514f5e3Sopenharmony_ci    }
19404514f5e3Sopenharmony_ci}
19414514f5e3Sopenharmony_ci}  // namespace panda::ecmascript
1942