tor-browser

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

disposal-during-non-local-jump-loop.js (2214B)


      1 // |jit-test| skip-if: !getBuildConfiguration("explicit-resource-management"); --enable-explicit-resource-management
      2 
      3 load(libdir + "asserts.js");
      4 
      5 {
      6  const disposed = [];
      7  const d = {
      8    [Symbol.dispose]() {
      9      disposed.push(1);
     10    }
     11  };
     12  outer: for (let a of [1]) {
     13    for (using x of [d]) {
     14      {
     15        let a = 0, b = () => a;
     16        break outer;
     17      }
     18    }
     19  }
     20  assertArrayEq(disposed, [1]);
     21 }
     22 
     23 {
     24  const disposed = [];
     25  const d = {
     26    [Symbol.dispose]() {
     27      disposed.push(1);
     28    }
     29  };
     30  outer: for (let a of [1]) {
     31    for (using x of [d]) {
     32      continue outer;
     33    }
     34  }
     35  assertArrayEq(disposed, [1]);
     36 }
     37 
     38 {
     39  const disposed = [];
     40  const d = {
     41    [Symbol.dispose]() {
     42      disposed.push(1);
     43    }
     44  };
     45  outer: for (let a of [1]) {
     46    for (using x of [d]) {
     47      {
     48        let a = 0, b = () => a;
     49        continue outer;
     50      }
     51    }
     52  }
     53  assertArrayEq(disposed, [1]);
     54 }
     55 
     56 {
     57  const disposed = [];
     58  const d = {
     59    [Symbol.dispose]() {
     60      disposed.push(1);
     61    }
     62  }
     63  for (const i in { a: 1 }) {
     64    using x = d;
     65    break;
     66  }
     67  assertArrayEq(disposed, [1]);
     68 }
     69 
     70 {
     71  const disposed = [];
     72  const d = {
     73    [Symbol.dispose]() {
     74      disposed.push(1);
     75    }
     76  }
     77  outer: for (const i in { a: 1 }) {
     78    for (const j in { b: 1 }) {
     79      using x = d;
     80      break outer;
     81    }
     82  }
     83  assertArrayEq(disposed, [1]);
     84 }
     85 
     86 {
     87  const disposed = [];
     88  const d = {
     89    [Symbol.dispose]() {
     90      disposed.push(1);
     91    }
     92  }
     93  outer: for (const i in { a: 1 }) {
     94    for (const j in { b: 1 }) {
     95      using x = d;
     96      continue outer;
     97    }
     98  }
     99  assertArrayEq(disposed, [1]);
    100 }
    101 
    102 {
    103  const disposed = [];
    104  const d = {
    105    [Symbol.dispose]() {
    106      disposed.push(1);
    107    }
    108  }
    109  outer: for (const i in { a: 1 }) {
    110    for (const j in { b: 1 }) {
    111      using x = d;
    112      {
    113        let a = 0, b = () => a;
    114        break outer;
    115      }
    116    }
    117  }
    118  assertArrayEq(disposed, [1]);
    119 }
    120 
    121 {
    122  const disposed = [];
    123  const d = {
    124    [Symbol.dispose]() {
    125      disposed.push(1);
    126    }
    127  }
    128  outer: for (const i in { a: 1 }) {
    129    for (const j in { b: 1 }) {
    130      using x = d;
    131      {
    132        let a = 0, b = () => a;
    133        continue outer;
    134      }
    135    }
    136  }
    137  assertArrayEq(disposed, [1]);
    138 }