ary-ptrn-rest-ary-elem.js (2159B)
1 // |reftest| async 2 // This file was procedurally generated from the following sources: 3 // - src/dstr-binding/ary-ptrn-rest-ary-elem.case 4 // - src/dstr-binding/default/async-gen-func-decl.template 5 /*--- 6 description: Rest element containing an array BindingElementList pattern (async generator function declaration) 7 esid: sec-asyncgenerator-definitions-instantiatefunctionobject 8 features: [async-iteration] 9 flags: [generated, async] 10 info: | 11 AsyncGeneratorDeclaration : async [no LineTerminator here] function * BindingIdentifier 12 ( FormalParameters ) { AsyncGeneratorBody } 13 14 [...] 15 3. Let F be ! AsyncGeneratorFunctionCreate(Normal, FormalParameters, AsyncGeneratorBody, 16 scope, strict). 17 [...] 18 19 20 13.3.3.6 Runtime Semantics: IteratorBindingInitialization 21 22 BindingRestElement : ... BindingPattern 23 24 1. Let A be ArrayCreate(0). 25 [...] 26 3. Repeat 27 [...] 28 b. If iteratorRecord.[[done]] is true, then 29 i. Return the result of performing BindingInitialization of 30 BindingPattern with A and environment as the arguments. 31 [...] 32 33 13.3.3.6 Runtime Semantics: IteratorBindingInitialization 34 35 SingleNameBinding : BindingIdentifier Initializeropt 36 37 [...] 38 4. If iteratorRecord.[[done]] is false, then 39 a. Let next be IteratorStep(iteratorRecord.[[iterator]]). 40 b. If next is an abrupt completion, set iteratorRecord.[[done]] to true. 41 c. ReturnIfAbrupt(next). 42 d. If next is false, set iteratorRecord.[[done]] to true. 43 e. Else, 44 [...] 45 i. Let v be IteratorValue(next). 46 ii. If v is an abrupt completion, set 47 iteratorRecord.[[done]] to true. 48 iii. ReturnIfAbrupt(v). 49 5. If iteratorRecord.[[done]] is true, let v be undefined. 50 [...] 51 8. Return InitializeReferencedBinding(lhs, v). 52 ---*/ 53 54 55 var callCount = 0; 56 async function* f([...[x, y, z]]) { 57 assert.sameValue(x, 3); 58 assert.sameValue(y, 4); 59 assert.sameValue(z, 5); 60 callCount = callCount + 1; 61 }; 62 f([3, 4, 5]).next().then(() => { 63 assert.sameValue(callCount, 1, 'invoked exactly once'); 64 }).then($DONE, $DONE);