summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/language/statements/async-generator/yield-star-return-notdone-iter-value-throws.js
blob: f0fbdabdd61afda5d3dd58a04f4d190d43cf9565 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// |reftest| async
// Copyright (C) 2019 André Bargull. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-generator-function-definitions-runtime-semantics-evaluation
description: >
    Abrupt completion when calling IteratorValue is propagated when received.[[Type]] is return.
info: |
    14.4.14 Runtime Semantics: Evaluation
    YieldExpression : yield* AssignmentExpression

    ...
    7. Repeat,
      ...
      c. Else,
        i. Assert: received.[[Type]] is return.
        ...
        ix. If generatorKind is async, then set received to AsyncGeneratorYield(? IteratorValue(innerReturnResult)).
        ...

flags: [async]
features: [async-iteration]
---*/

var token = {};

var asyncIter = {
  [Symbol.asyncIterator]() {
      return this;
  },
  next() {
    return {
      done: false,
      value: undefined,
    };
  },
  return() {
    return {
      done: false,
      get value() {
        throw token;
      }
    };
  }
};

async function* f() {
  var thrown;
  try {
    yield* asyncIter;
  } catch (e) {
    thrown = e;
  }
  return thrown;
}

var iter = f();

iter.next().then(() => {
  iter.return().then(({value}) => {
    assert.sameValue(value, token);
  }).then($DONE, $DONE);
}).catch($DONE);