diff --git a/src/bun.js/bindings/napi.cpp b/src/bun.js/bindings/napi.cpp index ac93a07fcdf1f2..dcfca1d9be28e1 100644 --- a/src/bun.js/bindings/napi.cpp +++ b/src/bun.js/bindings/napi.cpp @@ -767,14 +767,12 @@ node_api_create_external_string_latin1(napi_env env, // WTF::ExternalStringImpl does not allow creating empty strings, so we have this limitation for now. NAPI_RETURN_EARLY_IF_FALSE(env, length > 0, napi_invalid_arg); Ref impl = WTF::ExternalStringImpl::create({ reinterpret_cast(str), static_cast(length) }, finalize_hint, [finalize_callback, env](void* hint, void* str, unsigned length) { - if (finalize_callback) { - NAPI_LOG("latin1 string finalizer"); - finalize_callback(env, str, hint); - } + NAPI_LOG("latin1 string finalizer"); + env->doFinalizer(finalize_callback, str, hint); }); Zig::GlobalObject* globalObject = toJS(env); - JSString* out = JSC::jsString(JSC::getVM(globalObject), WTF::String(impl.get())); + JSString* out = JSC::jsString(JSC::getVM(globalObject), WTF::String(WTFMove(impl))); ensureStillAliveHere(out); *result = toNapi(out, globalObject); ensureStillAliveHere(out); @@ -803,15 +801,14 @@ node_api_create_external_string_utf16(napi_env env, length = length == NAPI_AUTO_LENGTH ? std::char_traits::length(str) : length; // WTF::ExternalStringImpl does not allow creating empty strings, so we have this limitation for now. NAPI_RETURN_EARLY_IF_FALSE(env, length > 0, napi_invalid_arg); + Ref impl = WTF::ExternalStringImpl::create({ reinterpret_cast(str), static_cast(length) }, finalize_hint, [finalize_callback, env](void* hint, void* str, unsigned length) { - if (finalize_callback) { - NAPI_LOG("utf16 string finalizer"); - finalize_callback(env, str, hint); - } + NAPI_LOG("utf16 string finalizer"); + env->doFinalizer(finalize_callback, str, hint); }); Zig::GlobalObject* globalObject = toJS(env); - JSString* out = JSC::jsString(JSC::getVM(globalObject), WTF::String(impl.get())); + JSString* out = JSC::jsString(JSC::getVM(globalObject), WTF::String(WTFMove(impl))); ensureStillAliveHere(out); *result = toNapi(out, globalObject); ensureStillAliveHere(out);