Source code

Revision control

Copy as Markdown

Other Tools

// |reftest| async
// Copyright (C) 2019 André Bargull. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-generator-function-definitions-runtime-semantics-evaluation
description: >
Abrupt completion when calling IteratorValue is propagated when received.[[Type]] is throw.
info: |
14.4.14 Runtime Semantics: Evaluation
YieldExpression : yield* AssignmentExpression
...
7. Repeat,
...
b. Else if received.[[Type]] is throw, then
...
ii. If throw is not undefined, then
...
7. If generatorKind is async, then set received to AsyncGeneratorYield(? IteratorValue(innerResult)).
...
flags: [async]
features: [async-iteration]
---*/
var token = {};
var asyncIter = {
[Symbol.asyncIterator]() {
return this;
},
next() {
return {
done: false,
value: undefined,
};
},
throw() {
return {
done: false,
get value() {
throw token;
}
};
}
};
async function* f() {
var thrown;
try {
yield* asyncIter;
} catch (e) {
thrown = e;
}
return thrown;
}
var iter = f();
iter.next().then(() => {
iter.throw().then(({value}) => {
assert.sameValue(value, token);
}).then($DONE, $DONE);
}).catch($DONE);