From 6437e8f3a804d9bb000d8c624f6f2d466925f455 Mon Sep 17 00:00:00 2001
From: Cheng Shao <terrorjack@type.dance>
Date: Sun, 10 Nov 2024 18:21:18 +0000
Subject: [PATCH] wasm: fix FinalizationRegistry logic for Cloudflare Workers

This patch fixes FinalizationRegistry related logic for Cloudflare
Workers in wasm backend js post linker. Cloudflare Workers doesn't
support FinalizationRegistry, in this case we use a dummy
implementation that doesn't do anything.

(cherry picked from commit bea8ea4cabcd51d098a361bd27d78884effa5d00)
(cherry picked from commit 0346e7b71d4b48f91f2374e6864b15f8d8530fad)
---
 utils/jsffi/post-link.mjs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/utils/jsffi/post-link.mjs b/utils/jsffi/post-link.mjs
index 02fb631f0ac..9e3e0643512 100755
--- a/utils/jsffi/post-link.mjs
+++ b/utils/jsffi/post-link.mjs
@@ -62,7 +62,7 @@ export async function postLink(mod) {
   // Keep this in sync with dyld.mjs!
   src = `${src}\nexport default (__exports) => {`;
   src = `${src}\nconst __ghc_wasm_jsffi_jsval_manager = new JSValManager();`;
-  src = `${src}\nconst __ghc_wasm_jsffi_finalization_registry = new FinalizationRegistry(sp => __exports.rts_freeStablePtr(sp));`;
+  src = `${src}\nconst __ghc_wasm_jsffi_finalization_registry = globalThis.FinalizationRegistry ? new FinalizationRegistry(sp => __exports.rts_freeStablePtr(sp)) : { register: () => {}, unregister: () => true };`;
   src = `${src}\nreturn {`;
   src = `${src}\nnewJSVal: (v) => __ghc_wasm_jsffi_jsval_manager.newJSVal(v),`;
   src = `${src}\ngetJSVal: (k) => __ghc_wasm_jsffi_jsval_manager.getJSVal(k),`;
-- 
GitLab