diff --git a/interfaces/inner_api/napi/native_node_api.h b/interfaces/inner_api/napi/native_node_api.h index 7135711209808aac757fcd659e63275bf24aa562..5dbcd8dc54c8d95204190c8e6fd9e29081c871f6 100644 --- a/interfaces/inner_api/napi/native_node_api.h +++ b/interfaces/inner_api/napi/native_node_api.h @@ -203,6 +203,7 @@ NAPI_EXTERN napi_status napi_xref_wrap(napi_env env, napi_ref* result); NAPI_EXTERN napi_status napi_xref_unwrap(napi_env env, napi_value js_object, void** result); +NAPI_EXTERN napi_status napi_mark_from_object(napi_env env, napi_ref ref, std::function &visitor); NAPI_EXTERN napi_status napi_mark_from_object(napi_env env, napi_ref ref); NAPI_EXTERN napi_status napi_create_xref(napi_env env, napi_value value, diff --git a/native_engine/impl/ark/ark_native_reference.cpp b/native_engine/impl/ark/ark_native_reference.cpp index f086ba26a04215940a5c5f534bbbc4cd2ea1933b..aea25fadd090b57f1d633c77aec2afb28abd0b91 100644 --- a/native_engine/impl/ark/ark_native_reference.cpp +++ b/native_engine/impl/ark/ark_native_reference.cpp @@ -225,6 +225,11 @@ void ArkNativeReference::ResetFinalizer() } #ifdef PANDA_JS_ETS_HYBRID_MODE +void ArkNativeReference::MarkFromObject(std::function &visitor) +{ + value_.MarkFromObject(visitor); +} + void ArkNativeReference::MarkFromObject() { value_.MarkFromObject(); diff --git a/native_engine/impl/ark/ark_native_reference.h b/native_engine/impl/ark/ark_native_reference.h index 10b0c7367bb46877452961df6209e20ba382f733..4cf31cd13b47cb3d65b6425f84a85b4fa6533b2b 100644 --- a/native_engine/impl/ark/ark_native_reference.h +++ b/native_engine/impl/ark/ark_native_reference.h @@ -91,6 +91,7 @@ public: napi_value GetNapiValue() override; void ResetFinalizer() override; #ifdef PANDA_JS_ETS_HYBRID_MODE + void MarkFromObject(std::function &visitor); void MarkFromObject(); bool IsObjectAlive(); bool IsValidHeapObject(); diff --git a/native_engine/native_api.cpp b/native_engine/native_api.cpp index 0228afa0714ae40a94c2271a6bd6476a497931e4..d3d17439f738324e71e03294a572d1780668e9dc 100644 --- a/native_engine/native_api.cpp +++ b/native_engine/native_api.cpp @@ -4427,6 +4427,15 @@ NAPI_EXTERN napi_status napi_vm_handshake(napi_env env, return napi_clear_last_error(env); } +NAPI_EXTERN napi_status napi_mark_from_object(napi_env env, napi_ref ref, std::function &visitor) +{ + NAPI_PREAMBLE(env); + CHECK_ARG(env, ref); + ArkNativeReference* reference = reinterpret_cast(ref); + reference->MarkFromObject(visitor); + return napi_clear_last_error(env); +} + NAPI_EXTERN napi_status napi_mark_from_object(napi_env env, napi_ref ref) { NAPI_PREAMBLE(env);