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