tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

async-gen-dstr-var-async-ary-ptrn-rest-id-elision.js (2391B)


      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-gen-var-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 (var [ , , ...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().next()
     70  .then(() => assert.sameValue(iterCount, 1, 'iteration occurred as expected'), $DONE)
     71  .then($DONE, $DONE);