async-func-dstr-const-async-ary-ptrn-rest-id-elision.js (2388B)
1 // |reftest| async 2 // This file was procedurally generated from the following sources: 3 // - src/dstr-binding-for-await/ary-ptrn-rest-id-elision.case 4 // - src/dstr-binding-for-await/default/for-await-of-async-func-const-async.template 5 /*--- 6 description: Rest element following elision elements (for-await-of statement) 7 esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation 8 features: [destructuring-binding, async-iteration] 9 flags: [generated, async] 10 info: | 11 IterationStatement : 12 for await ( ForDeclaration of AssignmentExpression ) Statement 13 14 [...] 15 2. Return ? ForIn/OfBodyEvaluation(ForDeclaration, Statement, keyResult, 16 lexicalBinding, labelSet, async). 17 18 13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation 19 20 [...] 21 4. Let destructuring be IsDestructuring of lhs. 22 [...] 23 6. Repeat 24 [...] 25 j. If destructuring is false, then 26 [...] 27 k. Else 28 i. If lhsKind is assignment, then 29 [...] 30 ii. Else if lhsKind is varBinding, then 31 [...] 32 iii. Else, 33 1. Assert: lhsKind is lexicalBinding. 34 2. Assert: lhs is a ForDeclaration. 35 3. Let status be the result of performing BindingInitialization 36 for lhs passing nextValue and iterationEnv as arguments. 37 [...] 38 39 13.3.3.6 Runtime Semantics: IteratorBindingInitialization 40 ArrayBindingPattern : [ Elisionopt BindingRestElement ] 41 1. If Elision is present, then 42 a. Let status be the result of performing 43 IteratorDestructuringAssignmentEvaluation of Elision with 44 iteratorRecord as the argument. 45 b. ReturnIfAbrupt(status). 46 2. Return the result of performing IteratorBindingInitialization for 47 BindingRestElement with iteratorRecord and environment as arguments. 48 ---*/ 49 var values = [1, 2, 3, 4, 5]; 50 51 var iterCount = 0; 52 var asyncIter = (async function*() { 53 yield* [values]; 54 })(); 55 56 async function fn() { 57 for await (const [ , , ...x] of asyncIter) { 58 assert(Array.isArray(x)); 59 assert.sameValue(x.length, 3); 60 assert.sameValue(x[0], 3); 61 assert.sameValue(x[1], 4); 62 assert.sameValue(x[2], 5); 63 assert.notSameValue(x, values); 64 65 iterCount += 1; 66 } 67 } 68 69 fn() 70 .then(() => assert.sameValue(iterCount, 1, 'iteration occurred as expected'), $DONE) 71 .then($DONE, $DONE);