Files
sausage/userland/qjs/source/tests/bug1661.js
T
surma d44f1d9677 Build separate native and WASI pipelines with shared multicall names
Checkpoint before integration and package validation.

Assisted-by: SurmAgent:unknown [read] [edit] [bash]
2026-11-12 09:36:27 +00:00

42 lines
1.1 KiB
JavaScript

import { assert, assertThrows } from "./assert.js";
// Adapted from @mschwarzl's repros
// Test js_async_dispose_step path
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");
// Test js_async_dispose_rethrow path
let callCount = 0;
let saved2;
Promise.prototype.then = function (onFulfilled, onRejected) {
callCount++;
if (callCount === 1)
return onRejected({ previous: 1 }); // drives step() into the rethrow branch
if (callCount === 2) {
saved2 = onRejected; // this is the js_async_dispose_rethrow reject_fn
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");