tor-browser

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

var-in-catch-body-annex-b.js (1870B)


      1 // Tests annex B.3.5.
      2 
      3 assertThrowsInstanceOf(function () {
      4  eval(`
      5       function f() {
      6         let x;
      7         try {} catch (x) {
      8           var x;
      9         }
     10       }
     11       `);
     12 }, SyntaxError);
     13 
     14 assertThrowsInstanceOf(function () {
     15  eval(`
     16       function f() {
     17         try {} catch (x) {
     18           let y;
     19           var y;
     20         }
     21       }
     22       `);
     23 }, SyntaxError);
     24 
     25 assertThrowsInstanceOf(function () {
     26  eval(`
     27       function f() {
     28         try {} catch (x) {
     29           let x;
     30         }
     31       }
     32       `);
     33 }, SyntaxError);
     34 
     35 assertThrowsInstanceOf(function () {
     36  eval(`
     37       function f() {
     38         try {} catch (x) {
     39           const x;
     40         }
     41       }
     42       `);
     43 }, SyntaxError);
     44 
     45 // Tests that redeclaring a var inside the catch is not allowed if there's a
     46 // body-level lexical.
     47 assertThrowsInstanceOf(function () {
     48  eval(`
     49    let x;
     50    try {} catch (x) {
     51      var x;
     52    }
     53    `);
     54 }, SyntaxError);
     55 
     56 var log = '';
     57 var x = 'global-x';
     58 
     59 function g() {
     60  x = 'g';
     61  try { throw 8; } catch (x) {
     62    var x = 42;
     63    log += x;
     64  }
     65  log += x;
     66 }
     67 g();
     68 
     69 // Tests that var declaration is allowed in for-in head.
     70 function h0() {
     71  try {} catch (e) {
     72    for (var e in {});
     73  }
     74 }
     75 h0();
     76 
     77 // Tests that var declaration is allowed in C-for head.
     78 function h1() {
     79  try {} catch (e) {
     80    for (var e;;);
     81  }
     82 }
     83 h1();
     84 
     85 // Tests that var declaration is allowed in for-of head.
     86 function h2() {
     87  try {} catch (e) {
     88    for (var e of {});
     89  }
     90 }
     91 h2();
     92 
     93 // Tests that redeclaring a var inside the catch is allowed.
     94 function h3() {
     95  var e;
     96  try {} catch (e) {
     97    var e;
     98  }
     99 }
    100 h3();
    101 
    102 if (typeof evaluate === "function") {
    103  assertThrowsInstanceOf(function () {
    104    evaluate(`
    105             let y;
    106             try {} catch (y) { var y; }
    107             `);
    108  }, SyntaxError);
    109 }
    110 
    111 assertEq(log, "42g");
    112 
    113 if ("reportCompare" in this)
    114  reportCompare(true, true)