Source code
Revision control
Copy as Markdown
Other Tools
{
const brokenPromise = new Promise(() => {});
Object.defineProperty(brokenPromise, "constructor", {
get() { throw "broken constructor"; }
});
async function* gen() {
try {
await brokenPromise;
} catch (e) {
yield "caught:" + e;
}
}
let fulfilledValue = undefined;
const g = gen();
g.next().then(v => {
fulfilledValue = v.value;
});
drainJobQueue();
assertEq(fulfilledValue, "caught:broken constructor");
}
{
async function* gen() {
await undefined;
yield 1;
}
const g = gen();
g.next();
const bp = Promise.resolve();
Object.defineProperty(bp, "constructor", {
get() { throw "broken constructor"; }
});
let rejectedReason = undefined;
g.return(bp).catch(e => {
rejectedReason = e;
});
drainJobQueue();
assertEq(rejectedReason, "broken constructor");
}
{
async function* gen() {
await undefined;
try {
yield 1;
} catch (e) {
yield "caught:" + e;
}
}
const g = gen();
g.next();
const bp = Promise.resolve();
Object.defineProperty(bp, "constructor", {
get() { throw "broken constructor"; }
});
let fulfilledValue = undefined;
g.return(bp).then(v => {
fulfilledValue = v.value;
});
drainJobQueue();
assertEq(fulfilledValue, "caught:broken constructor");
}
if (typeof reportCompare === "function")
reportCompare(0, 0);