tor-browser

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

star-rhs-iter-nrml-res-value-err.js (1499B)


      1 // Copyright (C) 2016 the V8 project authors. All rights reserved.
      2 // This code is governed by the BSD license found in the LICENSE file.
      3 /*---
      4 esid: sec-generator-function-definitions-runtime-semantics-evaluation
      5 es6id: 14.4.14
      6 description: >
      7  Abrupt completion returned when accessing `value` property of iteration
      8  result
      9 info: |
     10  YieldExpression : yield * AssignmentExpression
     11 
     12  1. Let exprRef be the result of evaluating AssignmentExpression.
     13  2. Let value be ? GetValue(exprRef).
     14  3. Let iterator be ? GetIterator(value).
     15  4. Let received be NormalCompletion(undefined).
     16  5. Repeat
     17     a. If received.[[Type]] is normal, then
     18        i. Let innerResult be ? IteratorNext(iterator, received.[[Value]]).
     19        ii. Let done be ? IteratorComplete(innerResult).
     20        iii. If done is true, then
     21             1. Return ? IteratorValue(innerResult).
     22 
     23  7.4.4 IteratorValue
     24 
     25  1. Assert: Type(iterResult) is Object.
     26  2. Return ? Get(iterResult, "value").
     27 features: [generators, Symbol.iterator]
     28 ---*/
     29 
     30 var thrown = new Test262Error();
     31 var badIter = {};
     32 var poisonedValue = Object.defineProperty({ done: true }, 'value', {
     33  get: function() {
     34    throw thrown;
     35  }
     36 });
     37 badIter[Symbol.iterator] = function() {
     38  return {
     39    next: function() {
     40      return poisonedValue;
     41    }
     42  };
     43 };
     44 function* g() {
     45  try {
     46    yield * badIter;
     47  } catch (err) {
     48    caught = err;
     49  }
     50 }
     51 var iter = g();
     52 var result, caught;
     53 
     54 result = iter.next();
     55 
     56 assert.sameValue(caught, thrown);
     57 
     58 reportCompare(0, 0);