import { assert, assertThrows } from "./assert.js";
let saved;
Promise.prototype.then = function (f, r) {if (typeof r === "function") saved = r;return Promise.resolve();};
let s = new AsyncDisposableStack();
s.use(undefined);
s.defer(() => {});
s.disposeAsync();
try { saved(); } catch {}
gc();
assert(saved !== undefined, true, "saved is undefined");
let callCount = 0;
let saved2;
Promise.prototype.then = function (onFulfilled, onRejected) {
callCount++;
if (callCount === 1)
return onRejected({ previous: 1 }); if (callCount === 2) {
saved2 = onRejected; return Promise.resolve();
}
return Promise.resolve();
};
const stack = new AsyncDisposableStack();
stack.defer(() => undefined);
stack.defer(() => { throw { first: 1 }; });
stack.disposeAsync();
try { saved2(); } catch {}
gc();
assert(saved2 !== undefined, true, "saved2 is undefined");