yield-thenable-create-resolving-functions-reject.js (1795B)
1 // |reftest| async 2 // Copyright (C) 2020 Alexey Shvayka. All rights reserved. 3 // This code is governed by the BSD license found in the LICENSE file. 4 5 /*--- 6 esid: sec-generator-function-definitions-runtime-semantics-evaluation 7 description: > 8 `reject` is anonymous built-in function with length of 1. 9 info: | 10 YieldExpression : yield AssignmentExpression 11 12 [...] 13 4. If generatorKind is async, then return ? AsyncGeneratorYield(value). 14 15 AsyncGeneratorYield ( value ) 16 17 [...] 18 5. Set value to ? Await(value). 19 [...] 20 9. Return ! AsyncGeneratorResolve(generator, value, false). 21 22 Await 23 24 [...] 25 2. Let promise be ? PromiseResolve(%Promise%, value). 26 [...] 27 28 PromiseResolve ( C, x ) 29 30 [...] 31 3. Let promiseCapability be ? NewPromiseCapability(C). 32 4. Perform ? Call(promiseCapability.[[Resolve]], undefined, « x »). 33 5. Return promiseCapability.[[Promise]]. 34 35 NewPromiseCapability ( C ) 36 37 [...] 38 7. Let promise be ? Construct(C, « executor »). 39 [...] 40 11. Return promiseCapability. 41 42 Promise ( executor ) 43 44 [...] 45 8. Let resolvingFunctions be CreateResolvingFunctions(promise). 46 [...] 47 11. Return promise. 48 49 CreateResolvingFunctions ( promise ) 50 51 [...] 52 7. Let reject be ! CreateBuiltinFunction(stepsReject, « [[Promise]], [[AlreadyResolved]] »). 53 [...] 54 10. Return the Record { [[Resolve]]: resolve, [[Reject]]: reject }. 55 flags: [async] 56 features: [async-iteration, Reflect.construct] 57 includes: [isConstructor.js] 58 ---*/ 59 60 var thenable = { 61 then: function(resolve, reject) { 62 resolve(reject); 63 }, 64 }; 65 66 var iter = (async function*() { 67 yield thenable; 68 }()); 69 70 iter.next().then(function(result) { 71 var reject = result.value; 72 assert(!isConstructor(reject)); 73 assert.sameValue(reject.length, 1); 74 assert.sameValue(reject.name, ''); 75 }).then($DONE, $DONE);