// |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);