tor-browser

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

outerBinding.js (1149B)


      1 // |reftest| skip-if(!xulRuntime.shell)
      2 //
      3 // The above skip-if is because global lexicals aren't yet implemented. Remove
      4 // that and the |evaluate| call below once they are.
      5 //
      6 // A class statement creates a mutable lexical outer binding.
      7 
      8 class Foo { constructor() { } }
      9 assertEq(typeof Foo, "function");
     10 Foo = 5;
     11 assertEq(Foo, 5);
     12 
     13 {
     14    class foo { constructor() { } }
     15    assertEq(typeof foo, "function");
     16    foo = 4;
     17    assertEq(foo, 4);
     18 }
     19 
     20 {
     21    class PermanentBinding { constructor() { } }
     22    delete PermanentBinding;
     23    // That...didn't actually work, right?
     24    assertEq(typeof PermanentBinding, "function");
     25 }
     26 
     27 evaluate("const globalConstant = 0; var earlyError = true;");
     28 
     29 try {
     30    evaluate("earlyError = false; class globalConstant { constructor() { } }");
     31 } catch (e) {
     32    if (!(e instanceof SyntaxError))
     33        throw e;
     34 }
     35 assertEq(earlyError, true);
     36 
     37 function strictEvalShadows() {
     38    "use strict";
     39    let x = 4;
     40    eval(`class x { constructor() { } }
     41           assertEq(typeof x, "function");
     42         `);
     43    assertEq(x, 4);
     44 }
     45 strictEvalShadows()
     46 
     47 if (typeof reportCompare === "function")
     48    reportCompare(0, 0, "OK");