dflt-ary-ptrn-rest-ary-elision.js (2136B)
1 // |reftest| async 2 // This file was procedurally generated from the following sources: 3 // - src/dstr-binding/ary-ptrn-rest-ary-elision.case 4 // - src/dstr-binding/default/async-gen-func-expr-dflt.template 5 /*--- 6 description: Rest element containing an elision (async generator function expression (default parameter)) 7 esid: sec-asyncgenerator-definitions-evaluation 8 features: [generators, async-iteration] 9 flags: [generated, async] 10 info: | 11 AsyncGeneratorExpression : async [no LineTerminator here] function * ( FormalParameters ) { 12 AsyncGeneratorBody } 13 14 [...] 15 3. Let closure be ! AsyncGeneratorFunctionCreate(Normal, FormalParameters, 16 AsyncGeneratorBody, 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 ArrayBindingPattern : [ Elision ] 36 37 1. Return the result of performing 38 IteratorDestructuringAssignmentEvaluation of Elision with iteratorRecord 39 as the argument. 40 41 12.14.5.3 Runtime Semantics: IteratorDestructuringAssignmentEvaluation 42 43 Elision : , 44 45 1. If iteratorRecord.[[done]] is false, then 46 a. Let next be IteratorStep(iteratorRecord.[[iterator]]). 47 b. If next is an abrupt completion, set iteratorRecord.[[done]] to true. 48 c. ReturnIfAbrupt(next). 49 d. If next is false, set iteratorRecord.[[done]] to true. 50 2. Return NormalCompletion(empty). 51 52 ---*/ 53 var first = 0; 54 var second = 0; 55 function* g() { 56 first += 1; 57 yield; 58 second += 1; 59 }; 60 61 62 var callCount = 0; 63 var f; 64 f = async function*([...[,]] = g()) { 65 assert.sameValue(first, 1); 66 assert.sameValue(second, 1); 67 callCount = callCount + 1; 68 }; 69 70 f().next().then(() => { 71 assert.sameValue(callCount, 1, 'invoked exactly once'); 72 }).then($DONE, $DONE);