From bd2be3fe6bdca6d28cc10a9db186488400ffd72d Mon Sep 17 00:00:00 2001 From: Dan Connolly Date: Mon, 2 Sep 2019 20:53:17 -0500 Subject: [PATCH] delay WeakMap until after xs preload xs doesn't support WeakMap in pre-loaded closures aka "vetted customization code" originally developed in SwingSet: From ffe8c0dd41c88d83ead7f8abb3f704f7a23f8614 Mon Sep 17 00:00:00 2001 Date: Mon, 26 Aug 2019 22:50:18 -0500 Subject: eventual-send: delay WeakMap til after xs preload From 876de729205ceb2e7c07e1689b333606fd92f289 Mon Sep 17 00:00:00 2001 Date: Tue, 27 Aug 2019 23:42:50 -0500 Subject: eventual-send: ensureMaps() needed in resolve() too --- src/index.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/index.js b/src/index.js index 684f32acb69..56e13b0b5c3 100644 --- a/src/index.js +++ b/src/index.js @@ -18,9 +18,18 @@ export default function maybeExtendPromise(Promise) { return Promise; } - const presenceToHandler = new WeakMap(); - const presenceToPromise = new WeakMap(); - const promiseToHandler = new WeakMap(); + // xs doesn't support WeakMap in pre-loaded closures + // aka "vetted customization code" + let presenceToHandler; + let presenceToPromise; + let promiseToHandler; + function ensureMaps() { + if (!presenceToHandler) { + presenceToHandler = new WeakMap(); + presenceToPromise = new WeakMap(); + promiseToHandler = new WeakMap(); + } + } // This special handler accepts Promises, and forwards // handled Promises to their corresponding fulfilledHandler. @@ -94,6 +103,7 @@ export default function maybeExtendPromise(Promise) { Promise, Object.getOwnPropertyDescriptors({ resolve(value) { + ensureMaps(); // Resolving a Presence returns the pre-registered handled promise. const handledPromise = presenceToPromise.get(value); if (handledPromise) { @@ -103,6 +113,7 @@ export default function maybeExtendPromise(Promise) { }, makeHandled(executor, unfulfilledHandler = undefined) { + ensureMaps(); let handledResolve; let handledReject; let continueForwarding = () => {};