tor-browser

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

iterclose-invalidate-with-catch.js (844B)


      1 var invalidate = false;
      2 var caught = false;
      3 
      4 const iterable = {
      5  [Symbol.iterator]() {
      6    return {
      7      i: 0,
      8      next() {
      9        return { value: this.i++, done: false }
     10      },
     11      return() {
     12        if (invalidate) {
     13          // Invalidate Ion scripts.
     14          gc(closeIter, 'shrinking');
     15          return undefined;
     16        }
     17        return { value: "return", done: true };
     18      }
     19    };
     20  }
     21 }
     22 
     23 function closeIter(o) {
     24  try {
     25    for (var x of o) {
     26      if (x == 2) {
     27        break;
     28      }
     29    }
     30  } catch(e) {
     31    caught = true;
     32  }
     33 }
     34 
     35 function test() {
     36  with ({}) {}
     37  for (var i = 0; i < 100; i++) {
     38    closeIter(iterable);
     39  }
     40  invalidate = true;
     41  closeIter(iterable);
     42  assertEq(caught, true);
     43  invalidate = false;
     44  caught = false;
     45 }
     46 
     47 with ({}) {}
     48 
     49 test();
     50 
     51 // Force an IC in Ion.
     52 closeIter([1,2,3,4,5]);
     53 
     54 test();