Source code

Revision control

Copy as Markdown

Other Tools

// |jit-test| skip-if: !getBuildConfiguration("explicit-resource-management"); --enable-explicit-resource-management
const g = newGlobal({ newCompartment: true });
const dbg = new Debugger(g);
g.leak = function(promise) {
const pDO = dbg.makeGlobalObjectReference(g).makeDebuggeeValue(promise);
const reactions = pDO.getPromiseReactions();
for (const r of reactions) {
if (r && r.environment) {
const v = r.environment.getVariable("disposeCapability");
if (v && v.class === "Array") {
return v.unsafeDereference();
}
}
}
return null;
};
g.eval(`
var as = new AsyncDisposableStack();
var p;
as.defer(() => (p = new Promise(() => {})));
as.use({
get [Symbol.asyncDispose]() {
as.disposeAsync();
var arr = leak(p);
assertEq(arr, null);
return function() {};
}
});
`);