tor-browser

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

yield-star-throw-notdone-iter-value-throws.js (1320B)


      1 // |reftest| async
      2 // Copyright (C) 2019 André Bargull. 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    Abrupt completion when calling IteratorValue is propagated when received.[[Type]] is throw.
      9 info: |
     10    14.4.14 Runtime Semantics: Evaluation
     11    YieldExpression : yield* AssignmentExpression
     12 
     13    ...
     14    7. Repeat,
     15      ...
     16      b. Else if received.[[Type]] is throw, then
     17        ...
     18        ii. If throw is not undefined, then
     19          ...
     20          7. If generatorKind is async, then set received to AsyncGeneratorYield(? IteratorValue(innerResult)).
     21          ...
     22 
     23 flags: [async]
     24 features: [async-iteration]
     25 ---*/
     26 
     27 var token = {};
     28 
     29 var asyncIter = {
     30  [Symbol.asyncIterator]() {
     31      return this;
     32  },
     33  next() {
     34    return {
     35      done: false,
     36      value: undefined,
     37    };
     38  },
     39  throw() {
     40    return {
     41      done: false,
     42      get value() {
     43        throw token;
     44      }
     45    };
     46  }
     47 };
     48 
     49 async function* f() {
     50  var thrown;
     51  try {
     52    yield* asyncIter;
     53  } catch (e) {
     54    thrown = e;
     55  }
     56  return thrown;
     57 }
     58 
     59 var iter = f();
     60 
     61 iter.next().then(() => {
     62  iter.throw().then(({value}) => {
     63    assert.sameValue(value, token);
     64  }).then($DONE, $DONE);
     65 }).catch($DONE);