tor-browser

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

iterator-not-closed-for-throwing-done-accessor.js (1345B)


      1 // Copyright (C) 2018 Kevin Gibbons. All rights reserved.
      2 // This code is governed by the BSD license found in the LICENSE file.
      3 
      4 /*---
      5 esid: sec-object.fromentries
      6 description: Does not close iterators with a `done` accessor which throws.
      7 info: |
      8  Object.fromEntries ( iterable )
      9 
     10  ...
     11  4. Let stepsDefine be the algorithm steps defined in CreateDataPropertyOnObject Functions.
     12  5. Let adder be CreateBuiltinFunction(stepsDefine, « »).
     13  6. Return ? AddEntriesFromIterable(obj, iterable, adder).
     14 
     15  AddEntriesFromIterable ( target, iterable, adder )
     16 
     17  ...
     18  4. Repeat,
     19    a. Let next be ? IteratorStep(iteratorRecord).
     20 
     21 
     22  IteratorStep ( iteratorRecord )
     23 
     24  1. Let result be ? IteratorNext(iteratorRecord).
     25 
     26 
     27  IteratorNext ( iteratorRecord [ , value ] )
     28 
     29  ...
     30  3. If Type(result) is not Object, throw a TypeError exception.
     31 
     32 features: [Symbol.iterator, Object.fromEntries]
     33 ---*/
     34 
     35 function DummyError() {}
     36 
     37 var returned = false;
     38 var iterable = {
     39  [Symbol.iterator]: function() {
     40    return {
     41      next: function() {
     42        return {
     43          get done() {
     44            throw new DummyError();
     45          },
     46        };
     47      },
     48      return: function() {
     49        throw new Test262Error('should not call return');
     50      },
     51    };
     52  },
     53 };
     54 
     55 assert.throws(DummyError, function() {
     56  Object.fromEntries(iterable);
     57 });
     58 
     59 reportCompare(0, 0);