From f385daa365fe0bc863891084332813c8fd770eb2 Mon Sep 17 00:00:00 2001 From: chentianyu Date: Tue, 10 Jun 2025 16:49:44 +0800 Subject: [PATCH] xref adapt to cmc-gc Signed-off-by: chentianyu Change-Id: I60b520f6ed432ab951a874c11196fda3b9e7be9c --- interfaces/inner_api/napi/native_node_api.h | 1 + native_engine/impl/ark/ark_native_reference.cpp | 5 +++++ native_engine/impl/ark/ark_native_reference.h | 1 + native_engine/native_api.cpp | 9 +++++++++ 4 files changed, 16 insertions(+) diff --git a/interfaces/inner_api/napi/native_node_api.h b/interfaces/inner_api/napi/native_node_api.h index 713571120..5dbcd8dc5 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 f086ba26a..aea25fadd 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 10b0c7367..4cf31cd13 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 0228afa07..d3d17439f 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); -- Gitee