tor-browser

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

iterclose-dynamic-slot-throw.js (967B)


      1 var counter = 0;
      2 const iterable = {
      3  [Symbol.iterator]() {
      4    return {
      5      i: 0,
      6 
      7      // Force the return method into a dynamic slot.
      8      x0: 0, x1: 0, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0,
      9      x9: 0, x10: 0, x11: 0, x12: 0, x13: 0, x14: 0, x15: 0, x16: 0,
     10      x17: 0, x18: 0, x19: 0, x20: 0, x21: 0, x22: 0, x23: 0, x24: 0,
     11 
     12      next() {
     13        return { value: this.i++, done: false }
     14      },
     15      return() {
     16        counter += 1;
     17        return { value: undefined, done: true };
     18      }
     19    };
     20  }
     21 }
     22 
     23 function closeIter(o) {
     24  for (var x of o) {
     25    if (x == 2) {
     26      throw "good";
     27    }
     28  }
     29 }
     30 
     31 function test() {
     32  with ({}) {}
     33  counter = 0;
     34  for (var i = 0; i < 100; i++) {
     35    var caught = "bad";
     36    try {
     37      closeIter(iterable)
     38    } catch (e) {
     39      caught = e;
     40    }
     41    assertEq(caught, "good");
     42  }
     43  assertEq(counter, 100)
     44 }
     45 
     46 with ({}) {}
     47 
     48 test();
     49 
     50 // Force an IC in Ion.
     51 try {
     52  closeIter([1,2,3]);
     53 } catch {}
     54 
     55 test();