mirror of https://github.com/tc39/test262.git
65 lines
1.3 KiB
JavaScript
65 lines
1.3 KiB
JavaScript
// 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);
|