Source code

Revision control

Copy as Markdown

Other Tools

// |jit-test| exitstatus: 6;
//
// 27.1.6.4 AsyncFromSyncIteratorContinuation ( result, promiseCapability, syncIteratorRecord, closeOnRejection )
//
// ...
// 6 Let valueWrapper be Completion(PromiseResolve(%Promise%, value)).
// 7. If valueWrapper is an abrupt completion, done is false, and closeOnRejection is true, then
// a. Set valueWrapper to Completion(IteratorClose(syncIteratorRecord, valueWrapper)).
// 8. IfAbruptRejectPromise(valueWrapper, promiseCapability).
// ...
//
//
// 27.2.4.7.1 PromiseResolve ( C, x )
//
// 1. If IsPromise(x) is true, then
// a. Let xConstructor be ? Get(x, "constructor").
// b. If SameValue(xConstructor, C) is true, return x.
// ...
let p = Promise.resolve(0);
// Add a getter to execute user-defined operations when PromiseResolve is called.
Object.defineProperty(p, "constructor", {
get() {
// Request an interrupt.
interruptIf(true);
return Promise;
}
});
setInterruptCallback(function() {
// Return false from the interrupt handler to stop execution.
return false;
});
var iterator = {
[Symbol.iterator]() {
return this;
},
next() {
return {value: p, done: false};
},
return() {
throw "bad error";
},
};
async function f() {
for await (let v of iterator) {}
}
f();