• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "ark_native_engine.h"
17 
18 #include "ark_native_deferred.h"
19 #include "ark_native_engine_impl.h"
20 #include "ark_native_reference.h"
21 
22 #ifdef ENABLE_CONTAINER_SCOPE
23 #include "core/common/container_scope.h"
24 #endif
25 
26 #include "native_engine/native_property.h"
27 
28 #include "native_value/ark_native_array.h"
29 #include "native_value/ark_native_array_buffer.h"
30 #include "native_value/ark_native_big_int.h"
31 #include "native_value/ark_native_boolean.h"
32 #include "native_value/ark_native_data_view.h"
33 #include "native_value/ark_native_external.h"
34 #include "native_value/ark_native_function.h"
35 #include "native_value/ark_native_number.h"
36 #include "native_value/ark_native_object.h"
37 #include "native_value/ark_native_string.h"
38 #include "native_value/ark_native_typed_array.h"
39 #include "native_value/ark_native_date.h"
40 
41 #ifndef PREVIEW
42 #if defined(ECMASCRIPT_SUPPORT_SNAPSHOT)
43 #include "parameters.h"
44 #endif
45 #endif
46 #include "securec.h"
47 #include "utils/log.h"
48 
ArkNativeEngine(EcmaVM * vm,void * jsEngine)49 ArkNativeEngine::ArkNativeEngine(EcmaVM* vm, void* jsEngine) : NativeEngine(jsEngine)
50 {
51     HILOG_DEBUG("ArkNativeEngine::ArkNativeEngine");
52     nativeEngineImpl_ = new ArkNativeEngineImpl(vm, this, jsEngine);
53 }
54 
ArkNativeEngine(NativeEngineInterface * engineImpl,void * jsEngine,bool isAppModule)55 ArkNativeEngine::ArkNativeEngine(NativeEngineInterface* engineImpl, void* jsEngine, bool isAppModule)
56     : NativeEngine(jsEngine)
57 {
58     nativeEngineImpl_ = engineImpl;
59     isAppModule_ = isAppModule;
60     HILOG_DEBUG("ArkNativeEngine::ArkNativeEngine");
61 }
62 
~ArkNativeEngine()63 ArkNativeEngine::~ArkNativeEngine()
64 {
65     HILOG_INFO("ArkNativeEngine::~ArkNativeEngine");
66 }
67 
GetEcmaVm() const68 const EcmaVM* ArkNativeEngine::GetEcmaVm() const
69 {
70     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
71     return arkNativeEngineImpl->GetEcmaVm();
72 }
73 
GetModuleFromName(const std::string & moduleName,bool isAppModule,const std::string & id,const std::string & param,const std::string & instanceName,void ** instance)74 panda::Local<panda::ObjectRef> ArkNativeEngine::GetModuleFromName(
75     const std::string& moduleName, bool isAppModule, const std::string& id, const std::string& param,
76     const std::string& instanceName, void** instance)
77 {
78     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
79     return arkNativeEngineImpl->GetModuleFromName(this, moduleName, isAppModule, id, param, instanceName, instance);
80 }
81 
LoadModuleByName(const std::string & moduleName,bool isAppModule,const std::string & param,const std::string & instanceName,void * instance,const std::string & path)82 panda::Local<panda::ObjectRef> ArkNativeEngine::LoadModuleByName(const std::string& moduleName, bool isAppModule,
83     const std::string& param, const std::string& instanceName, void* instance, const std::string& path)
84 {
85     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
86     return arkNativeEngineImpl->LoadModuleByName(this, moduleName, isAppModule, param, instanceName, instance, path);
87 }
88 
Loop(LoopMode mode,bool needSync)89 void ArkNativeEngine::Loop(LoopMode mode, bool needSync)
90 {
91     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
92     return arkNativeEngineImpl->Loop(mode, needSync);
93 }
94 
GetGlobal()95 NativeValue* ArkNativeEngine::GetGlobal()
96 {
97     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
98     return arkNativeEngineImpl->GetGlobal(this);
99 }
100 
CreateNull()101 NativeValue* ArkNativeEngine::CreateNull()
102 {
103     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
104     return arkNativeEngineImpl->CreateNull(this);
105 }
106 
CreateUndefined()107 NativeValue* ArkNativeEngine::CreateUndefined()
108 {
109     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
110     return arkNativeEngineImpl->CreateUndefined(this);
111 }
112 
CreateBoolean(bool value)113 NativeValue* ArkNativeEngine::CreateBoolean(bool value)
114 {
115     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
116     return arkNativeEngineImpl->CreateBoolean(this, value);
117 }
118 
CreateNumber(int32_t value)119 NativeValue* ArkNativeEngine::CreateNumber(int32_t value)
120 {
121     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
122     return arkNativeEngineImpl->CreateNumber(this, value);
123 }
124 
CreateNumber(uint32_t value)125 NativeValue* ArkNativeEngine::CreateNumber(uint32_t value)
126 {
127     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
128     return arkNativeEngineImpl->CreateNumber(this, value);
129 }
130 
CreateNumber(int64_t value)131 NativeValue* ArkNativeEngine::CreateNumber(int64_t value)
132 {
133     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
134     return arkNativeEngineImpl->CreateNumber(this, value);
135 }
136 
CreateNumber(double value)137 NativeValue* ArkNativeEngine::CreateNumber(double value)
138 {
139     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
140     return arkNativeEngineImpl->CreateNumber(this, value);
141 }
142 
CreateBigInt(int64_t value)143 NativeValue* ArkNativeEngine::CreateBigInt(int64_t value)
144 {
145     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
146     return arkNativeEngineImpl->CreateBigInt(this, value);
147 }
148 
CreateBigInt(uint64_t value)149 NativeValue* ArkNativeEngine::CreateBigInt(uint64_t value)
150 {
151     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
152     return arkNativeEngineImpl->CreateBigInt(this, value);
153 }
154 
CreateString(const char * value,size_t length)155 NativeValue* ArkNativeEngine::CreateString(const char* value, size_t length)
156 {
157     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
158     return arkNativeEngineImpl->CreateString(this, value, length);
159 }
160 
CreateString16(const char16_t * value,size_t length)161 NativeValue* ArkNativeEngine::CreateString16(const char16_t* value, size_t length)
162 {
163     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
164     return arkNativeEngineImpl->CreateString16(this, value, length);
165 }
166 
CreateSymbol(NativeValue * value)167 NativeValue* ArkNativeEngine::CreateSymbol(NativeValue* value)
168 {
169     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
170     return arkNativeEngineImpl->CreateSymbol(this, value);
171 }
172 
CreateExternal(void * value,NativeFinalize callback,void * hint,size_t nativeBindingSize)173 NativeValue* ArkNativeEngine::CreateExternal(void* value, NativeFinalize callback, void* hint,
174     size_t nativeBindingSize)
175 {
176     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
177     return arkNativeEngineImpl->CreateExternal(this, value, callback, hint, nativeBindingSize);
178 }
179 
CreateObject()180 NativeValue* ArkNativeEngine::CreateObject()
181 {
182     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
183     return arkNativeEngineImpl->CreateObject(this);
184 }
185 
CreateNativeBindingObject(void * detach,void * attach)186 NativeValue* ArkNativeEngine::CreateNativeBindingObject(void* detach, void* attach)
187 {
188     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
189     return arkNativeEngineImpl->CreateNativeBindingObject(this, detach, attach);
190 }
191 
CreateNBObject(DetachCallback detach,AttachCallback attach)192 NativeValue* ArkNativeEngine::CreateNBObject(DetachCallback detach, AttachCallback attach)
193 {
194     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
195     return arkNativeEngineImpl->CreateNBObject(this, detach, attach);
196 }
197 
CreateFunction(const char * name,size_t length,NativeCallback cb,void * value)198 NativeValue* ArkNativeEngine::CreateFunction(const char* name, size_t length, NativeCallback cb, void* value)
199 {
200     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
201     return arkNativeEngineImpl->CreateFunction(this, name, length, cb, value);
202 }
203 
CreateArray(size_t length)204 NativeValue* ArkNativeEngine::CreateArray(size_t length)
205 {
206     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
207     return arkNativeEngineImpl->CreateArray(this, length);
208 }
209 
CreateArrayBuffer(void ** value,size_t length)210 NativeValue* ArkNativeEngine::CreateArrayBuffer(void** value, size_t length)
211 {
212     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
213     return arkNativeEngineImpl->CreateArrayBuffer(this, value, length);
214 }
215 
CreateArrayBufferExternal(void * value,size_t length,NativeFinalize cb,void * hint)216 NativeValue* ArkNativeEngine::CreateArrayBufferExternal(void* value, size_t length, NativeFinalize cb, void* hint)
217 {
218     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
219     return arkNativeEngineImpl->CreateArrayBufferExternal(this, value, length, cb, hint);
220 }
221 
CreateTypedArray(NativeTypedArrayType type,NativeValue * value,size_t length,size_t offset)222 NativeValue* ArkNativeEngine::CreateTypedArray(NativeTypedArrayType type,
223                                                NativeValue* value,
224                                                size_t length,
225                                                size_t offset)
226 {
227     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
228     return arkNativeEngineImpl->CreateTypedArray(this, type, value, length, offset);
229 }
230 
CreateDataView(NativeValue * value,size_t length,size_t offset)231 NativeValue* ArkNativeEngine::CreateDataView(NativeValue* value, size_t length, size_t offset)
232 {
233     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
234     return arkNativeEngineImpl->CreateDataView(this, value, length, offset);
235 }
236 
CreatePromise(NativeDeferred ** deferred)237 NativeValue* ArkNativeEngine::CreatePromise(NativeDeferred** deferred)
238 {
239     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
240     return arkNativeEngineImpl->CreatePromise(this, deferred);
241 }
242 
CreateError(NativeValue * code,NativeValue * message)243 NativeValue* ArkNativeEngine::CreateError(NativeValue* code, NativeValue* message)
244 {
245     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
246     return arkNativeEngineImpl->CreateError(this, code, message);
247 }
248 
InitTaskPoolThread(NativeEngine * engine,NapiConcurrentCallback callback)249 bool ArkNativeEngine::InitTaskPoolThread(NativeEngine* engine, NapiConcurrentCallback callback)
250 {
251     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
252     return arkNativeEngineImpl->InitTaskPoolThread(this, callback);
253 }
254 
InitTaskPoolFunc(NativeEngine * engine,NativeValue * func)255 bool ArkNativeEngine::InitTaskPoolFunc(NativeEngine* engine, NativeValue* func)
256 {
257     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
258     return arkNativeEngineImpl->InitTaskPoolFunc(this, func);
259 }
260 
CallFunction(NativeValue * thisVar,NativeValue * function,NativeValue * const * argv,size_t argc)261 NativeValue* ArkNativeEngine::CallFunction(
262     NativeValue* thisVar, NativeValue* function, NativeValue* const* argv, size_t argc)
263 {
264     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
265     return arkNativeEngineImpl->CallFunction(this, thisVar, function, argv, argc);
266 }
267 
RunScript(NativeValue * script)268 NativeValue* ArkNativeEngine::RunScript(NativeValue* script)
269 {
270     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
271     return arkNativeEngineImpl->RunScript(this, script);
272 }
273 
RunScriptPath(const char * path)274 NativeValue* ArkNativeEngine::RunScriptPath(const char* path)
275 {
276     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
277     return arkNativeEngineImpl->RunScriptPath(this, path);
278 }
279 
RunScriptBuffer(const char * path,std::vector<uint8_t> & buffer,bool isBundle)280 NativeValue* ArkNativeEngine::RunScriptBuffer(const char* path, std::vector<uint8_t>& buffer, bool isBundle)
281 {
282     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
283     return arkNativeEngineImpl->RunScriptBuffer(this, path, buffer, isBundle);
284 }
285 
SetPackagePath(const std::string appLinPathKey,const std::vector<std::string> & packagePath)286 void ArkNativeEngine::SetPackagePath(const std::string appLinPathKey, const std::vector<std::string>& packagePath)
287 {
288     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
289     return arkNativeEngineImpl->SetPackagePath(appLinPathKey, packagePath);
290 }
291 
DefineClass(const char * name,NativeCallback callback,void * data,const NativePropertyDescriptor * properties,size_t length)292 NativeValue* ArkNativeEngine::DefineClass(const char* name,
293                                           NativeCallback callback,
294                                           void* data,
295                                           const NativePropertyDescriptor* properties,
296                                           size_t length)
297 {
298     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
299     return arkNativeEngineImpl->DefineClass(this, name, callback, data, properties, length);
300 }
301 
CreateInstance(NativeValue * constructor,NativeValue * const * argv,size_t argc)302 NativeValue* ArkNativeEngine::CreateInstance(NativeValue* constructor, NativeValue* const *argv, size_t argc)
303 {
304     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
305     return arkNativeEngineImpl->CreateInstance(this, constructor, argv, argc);
306 }
307 
CreateReference(NativeValue * value,uint32_t initialRefcount,NativeFinalize callback,void * data,void * hint)308 NativeReference* ArkNativeEngine::CreateReference(NativeValue* value, uint32_t initialRefcount,
309     NativeFinalize callback, void* data, void* hint)
310 {
311     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
312     return arkNativeEngineImpl->CreateReference(this, value, initialRefcount, callback, data, hint);
313 }
314 
IsExceptionPending() const315 bool ArkNativeEngine::IsExceptionPending() const
316 {
317     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
318     return arkNativeEngineImpl->IsExceptionPending();
319 }
320 
GetAndClearLastException()321 NativeValue* ArkNativeEngine::GetAndClearLastException()
322 {
323     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
324     return arkNativeEngineImpl->GetAndClearLastException(this);
325 }
326 
Throw(NativeValue * error)327 bool ArkNativeEngine::Throw(NativeValue* error)
328 {
329     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
330     return arkNativeEngineImpl->Throw(error);
331 }
332 
Throw(NativeErrorType type,const char * code,const char * message)333 bool ArkNativeEngine::Throw(NativeErrorType type, const char* code, const char* message)
334 {
335     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
336     return arkNativeEngineImpl->Throw(this, type, code, message);
337 }
338 
CreateRuntime()339 void* ArkNativeEngine::CreateRuntime()
340 {
341     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
342     return arkNativeEngineImpl->CreateRuntime(this);
343 }
344 
Serialize(NativeEngine * context,NativeValue * value,NativeValue * transfer)345 NativeValue* ArkNativeEngine::Serialize(NativeEngine* context, NativeValue* value, NativeValue* transfer)
346 {
347     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
348     return arkNativeEngineImpl->Serialize(context, value, transfer);
349 }
350 
Deserialize(NativeEngine * context,NativeValue * recorder)351 NativeValue* ArkNativeEngine::Deserialize(NativeEngine* context, NativeValue* recorder)
352 {
353     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
354     return arkNativeEngineImpl->Deserialize(this, context, recorder);
355 }
356 
DeleteSerializationData(NativeValue * value) const357 void ArkNativeEngine::DeleteSerializationData(NativeValue* value) const
358 {
359     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
360     return arkNativeEngineImpl->DeleteSerializationData(value);
361 }
362 
StartCpuProfiler(const std::string & fileName)363 void ArkNativeEngine::StartCpuProfiler(const std::string& fileName)
364 {
365     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
366     return arkNativeEngineImpl->StartCpuProfiler(fileName);
367 }
368 
StopCpuProfiler()369 void ArkNativeEngine::StopCpuProfiler()
370 {
371     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
372     return arkNativeEngineImpl->StopCpuProfiler();
373 }
374 
ResumeVM()375 void ArkNativeEngine::ResumeVM()
376 {
377     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
378     return arkNativeEngineImpl->ResumeVM();
379 }
380 
SuspendVM()381 bool ArkNativeEngine::SuspendVM()
382 {
383     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
384     return arkNativeEngineImpl->SuspendVM();
385 }
386 
IsSuspended()387 bool ArkNativeEngine::IsSuspended()
388 {
389     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
390     return arkNativeEngineImpl->IsSuspended();
391 }
392 
CheckSafepoint()393 bool ArkNativeEngine::CheckSafepoint()
394 {
395     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
396     return arkNativeEngineImpl->CheckSafepoint();
397 }
398 
RunBufferScript(std::vector<uint8_t> & buffer)399 NativeValue* ArkNativeEngine::RunBufferScript(std::vector<uint8_t>& buffer)
400 {
401     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
402     return arkNativeEngineImpl->RunBufferScript(this, buffer);
403 }
404 
RunActor(std::vector<uint8_t> & buffer,const char * descriptor)405 NativeValue* ArkNativeEngine::RunActor(std::vector<uint8_t>& buffer, const char* descriptor)
406 {
407     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
408     return arkNativeEngineImpl->RunActor(this, buffer, descriptor);
409 }
410 
LoadArkModule(const char * str,int32_t len,const std::string & fileName)411 NativeValue* ArkNativeEngine::LoadArkModule(const char* str, int32_t len, const std::string& fileName)
412 {
413     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
414     return arkNativeEngineImpl->LoadArkModule(this, str, len, fileName);
415 }
416 
LoadModule(NativeValue * str,const std::string & fileName)417 NativeValue* ArkNativeEngine::LoadModule(NativeValue* str, const std::string& fileName)
418 {
419     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
420     return arkNativeEngineImpl->LoadModule(this, str, fileName);
421 }
422 
GetNativeChunk()423 NativeChunk& ArkNativeEngine::GetNativeChunk()
424 {
425     return GetScopeManager()->GetNativeChunk();
426 }
427 
ArkValueToNativeValue(ArkNativeEngine * engine,Local<JSValueRef> value)428 NativeValue* ArkNativeEngine::ArkValueToNativeValue(ArkNativeEngine* engine, Local<JSValueRef> value)
429 {
430     NativeValue* result = nullptr;
431     NativeChunk& chunk = engine->GetNativeChunk();
432     if (value->IsNull() || value->IsUndefined() || value->IsSymbol()) {
433         result = chunk.New<ArkNativeValue>(engine, value);
434     } else if (value->IsNumber()) {
435         result = chunk.New<ArkNativeNumber>(engine, value);
436     } else if (value->IsString()) {
437         result = chunk.New<ArkNativeString>(engine, value);
438     } else if (value->IsArray(engine->GetEcmaVm())) {
439         result = chunk.New<ArkNativeArray>(engine, value);
440     } else if (value->IsFunction()) {
441         result = chunk.New<ArkNativeFunction>(engine, value);
442     } else if (value->IsArrayBuffer()) {
443         result = chunk.New<ArkNativeArrayBuffer>(engine, value);
444     } else if (value->IsDataView()) {
445         result = chunk.New<ArkNativeDataView>(engine, value);
446     } else if (value->IsTypedArray()) {
447         result = chunk.New<ArkNativeTypedArray>(engine, value);
448     } else if (value->IsNativePointer()) {
449         result = chunk.New<ArkNativeExternal>(engine, value);
450     } else if (value->IsDate()) {
451         result = chunk.New<ArkNativeDate>(engine, value);
452     } else if (value->IsBigInt()) {
453         result = chunk.New<ArkNativeBigInt>(engine, value);
454     } else if (value->IsObject() || value->IsPromise()) {
455         result = chunk.New<ArkNativeObject>(engine, value);
456     } else if (value->IsBoolean()) {
457         result = chunk.New<ArkNativeBoolean>(engine, value);
458     }
459     return result;
460 }
461 
ValueToNativeValue(JSValueWrapper & value)462 NativeValue* ArkNativeEngine::ValueToNativeValue(JSValueWrapper& value)
463 {
464     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
465     return arkNativeEngineImpl->ValueToNativeValue(this, value);
466 }
467 
ExecuteJsBin(const std::string & fileName)468 bool ArkNativeEngine::ExecuteJsBin(const std::string& fileName)
469 {
470     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
471     return arkNativeEngineImpl->ExecuteJsBin(fileName);
472 }
473 
CreateBuffer(void ** value,size_t length)474 NativeValue* ArkNativeEngine::CreateBuffer(void** value, size_t length)
475 {
476     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
477     return arkNativeEngineImpl->CreateBuffer(this, value, length);
478 }
479 
CreateBufferCopy(void ** value,size_t length,const void * data)480 NativeValue* ArkNativeEngine::CreateBufferCopy(void** value, size_t length, const void* data)
481 {
482     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
483     return arkNativeEngineImpl->CreateBufferCopy(this, value, length, data);
484 }
485 
CreateBufferExternal(void * value,size_t length,NativeFinalize cb,void * hint)486 NativeValue* ArkNativeEngine::CreateBufferExternal(void* value, size_t length, NativeFinalize cb, void* hint)
487 {
488     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
489     return arkNativeEngineImpl->CreateBufferExternal(this, value, length, cb, hint);
490 }
491 
CreateDate(double value)492 NativeValue* ArkNativeEngine::CreateDate(double value)
493 {
494     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
495     return arkNativeEngineImpl->CreateDate(this, value);
496 }
497 
CreateBigWords(int sign_bit,size_t word_count,const uint64_t * words)498 NativeValue* ArkNativeEngine::CreateBigWords(int sign_bit, size_t word_count, const uint64_t* words)
499 {
500     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
501     return arkNativeEngineImpl->CreateBigWords(this, sign_bit, word_count, words);
502 }
503 
TriggerFatalException(NativeValue * error)504 bool ArkNativeEngine::TriggerFatalException(NativeValue* error)
505 {
506     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
507     return arkNativeEngineImpl->TriggerFatalException(error);
508 }
509 
AdjustExternalMemory(int64_t ChangeInBytes,int64_t * AdjustedValue)510 bool ArkNativeEngine::AdjustExternalMemory(int64_t ChangeInBytes, int64_t* AdjustedValue)
511 {
512     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
513     return arkNativeEngineImpl->AdjustExternalMemory(ChangeInBytes, AdjustedValue);
514 }
515 
SetPromiseRejectCallback(NativeReference * rejectCallbackRef,NativeReference * checkCallbackRef)516 void ArkNativeEngine::SetPromiseRejectCallback(NativeReference* rejectCallbackRef, NativeReference* checkCallbackRef)
517 {
518     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
519     return arkNativeEngineImpl->SetPromiseRejectCallback(this, rejectCallbackRef, checkCallbackRef);
520 }
521 
DumpHeapSnapshot(const std::string & path,bool isVmMode,DumpFormat dumpFormat)522 void ArkNativeEngine::DumpHeapSnapshot(const std::string& path, bool isVmMode, DumpFormat dumpFormat)
523 {
524     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
525     return arkNativeEngineImpl->DumpHeapSnapshot(path, isVmMode, dumpFormat);
526 }
527 
DumpHeapSnapshot(bool isVmMode,DumpFormat dumpFormat,bool isPrivate)528 void ArkNativeEngine::DumpHeapSnapshot(bool isVmMode, DumpFormat dumpFormat, bool isPrivate)
529 {
530     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
531     return arkNativeEngineImpl->DumpHeapSnapshotExt(isVmMode, dumpFormat, isPrivate);
532 }
533 
BuildNativeAndJsStackTrace(std::string & stackTraceStr)534 bool ArkNativeEngine::BuildNativeAndJsStackTrace(std::string& stackTraceStr)
535 {
536     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
537     return arkNativeEngineImpl->BuildNativeAndJsStackTrace(stackTraceStr);
538 }
539 
BuildJsStackTrace(std::string & stackTraceStr)540 bool ArkNativeEngine::BuildJsStackTrace(std::string& stackTraceStr)
541 {
542     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
543     return arkNativeEngineImpl->BuildJsStackTrace(stackTraceStr);
544 }
545 
BuildJsStackInfoList(uint32_t tid,std::vector<JsFrameInfo> & jsFrames)546 bool ArkNativeEngine::BuildJsStackInfoList(uint32_t tid, std::vector<JsFrameInfo>& jsFrames)
547 {
548     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
549     return arkNativeEngineImpl->BuildJsStackInfoList(tid, jsFrames);
550 }
551 
DeleteWorker(NativeEngine * hostEngine,NativeEngine * workerEngine)552 bool ArkNativeEngine::DeleteWorker(NativeEngine* hostEngine, NativeEngine* workerEngine)
553 {
554     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
555     if (hostEngine != nullptr && workerEngine != nullptr) {
556         return arkNativeEngineImpl->DeleteWorker(hostEngine, workerEngine);
557     }
558     return false;
559 }
560 
StartHeapTracking(double timeInterval,bool isVmMode)561 bool ArkNativeEngine::StartHeapTracking(double timeInterval, bool isVmMode)
562 {
563     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
564     return arkNativeEngineImpl->StartHeapTracking(timeInterval, isVmMode);
565 }
566 
StopHeapTracking(const std::string & filePath)567 bool ArkNativeEngine::StopHeapTracking(const std::string &filePath)
568 {
569     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
570     return arkNativeEngineImpl->StopHeapTracking(filePath);
571 }
572 
573 #if !defined(PREVIEW)
PrintStatisticResult()574 void ArkNativeEngine::PrintStatisticResult()
575 {
576     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
577     return arkNativeEngineImpl->PrintStatisticResult();
578 }
579 
StartRuntimeStat()580 void ArkNativeEngine::StartRuntimeStat()
581 {
582     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
583     return arkNativeEngineImpl->StartRuntimeStat();
584 }
585 
StopRuntimeStat()586 void ArkNativeEngine::StopRuntimeStat()
587 {
588     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
589     return arkNativeEngineImpl->StopRuntimeStat();
590 }
591 
GetArrayBufferSize()592 size_t ArkNativeEngine::GetArrayBufferSize()
593 {
594     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
595     return arkNativeEngineImpl->GetArrayBufferSize();
596 }
597 
GetHeapTotalSize()598 size_t ArkNativeEngine::GetHeapTotalSize()
599 {
600     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
601     return arkNativeEngineImpl->GetHeapTotalSize();
602 }
603 
GetHeapUsedSize()604 size_t ArkNativeEngine::GetHeapUsedSize()
605 {
606     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
607     return arkNativeEngineImpl->GetHeapUsedSize();
608 }
609 
NotifyApplicationState(bool inBackground)610 void ArkNativeEngine::NotifyApplicationState(bool inBackground)
611 {
612     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
613     return arkNativeEngineImpl->NotifyApplicationState(inBackground);
614 }
615 
NotifyIdleTime(int idleMicroSec)616 void ArkNativeEngine::NotifyIdleTime(int idleMicroSec)
617 {
618     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
619     return arkNativeEngineImpl->NotifyIdleTime(idleMicroSec);
620 }
621 
NotifyMemoryPressure(bool inHighMemoryPressure)622 void ArkNativeEngine::NotifyMemoryPressure(bool inHighMemoryPressure)
623 {
624     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
625     return arkNativeEngineImpl->NotifyMemoryPressure(inHighMemoryPressure);
626 }
627 #else
PrintStatisticResult()628 void ArkNativeEngine::PrintStatisticResult()
629 {
630     HILOG_WARN("ARK does not support dfx on windows");
631 }
632 
StartRuntimeStat()633 void ArkNativeEngine::StartRuntimeStat()
634 {
635     HILOG_WARN("ARK does not support dfx on windows");
636 }
637 
StopRuntimeStat()638 void ArkNativeEngine::StopRuntimeStat()
639 {
640     HILOG_WARN("ARK does not support dfx on windows");
641 }
642 
GetArrayBufferSize()643 size_t ArkNativeEngine::GetArrayBufferSize()
644 {
645     HILOG_WARN("ARK does not support dfx on windows");
646     return 0;
647 }
648 
GetHeapTotalSize()649 size_t ArkNativeEngine::GetHeapTotalSize()
650 {
651     HILOG_WARN("ARK does not support dfx on windows");
652     return 0;
653 }
654 
GetHeapUsedSize()655 size_t ArkNativeEngine::GetHeapUsedSize()
656 {
657     HILOG_WARN("ARK does not support dfx on windows");
658     return 0;
659 }
660 
NotifyApplicationState(bool inBackground)661 void ArkNativeEngine::NotifyApplicationState([[maybe_unused]] bool inBackground)
662 {
663     HILOG_WARN("ARK does not support dfx on windows");
664 }
665 
NotifyIdleTime(int idleMicroSec)666 void ArkNativeEngine::NotifyIdleTime([[maybe_unused]] int idleMicroSec)
667 {
668     HILOG_WARN("ARK does not support dfx on windows");
669 }
670 
NotifyMemoryPressure(bool inHighMemoryPressure)671 void ArkNativeEngine::NotifyMemoryPressure([[maybe_unused]] bool inHighMemoryPressure)
672 {
673     HILOG_WARN("ARK does not support dfx on windows");
674 }
675 #endif
676 
RegisterUncaughtExceptionHandler(UncaughtExceptionCallback callback)677 void ArkNativeEngine::RegisterUncaughtExceptionHandler(UncaughtExceptionCallback callback)
678 {
679     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
680     return arkNativeEngineImpl->RegisterUncaughtExceptionHandler(callback);
681 }
682 
HandleUncaughtException()683 void ArkNativeEngine::HandleUncaughtException()
684 {
685     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
686     return arkNativeEngineImpl->HandleUncaughtException(this);
687 }
688 
HasPendingException()689 bool ArkNativeEngine::HasPendingException()
690 {
691     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
692     return arkNativeEngineImpl->HasPendingException();
693 }
694 
IsMixedDebugEnabled()695 bool ArkNativeEngine::IsMixedDebugEnabled()
696 {
697     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
698     return arkNativeEngineImpl->IsMixedDebugEnabled();
699 }
700 
NotifyNativeCalling(const void * nativeAddress)701 void ArkNativeEngine::NotifyNativeCalling(const void *nativeAddress)
702 {
703     auto arkNativeEngineImpl = static_cast<ArkNativeEngineImpl*>(nativeEngineImpl_);
704     return arkNativeEngineImpl->NotifyNativeCalling(nativeAddress);
705 }