tor-browser

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

mapped-unmapped-args.js (1495B)


      1 // An unmapped arguments object is created for strict functions or functions
      2 // with default/rest/destructuring args.
      3 
      4 load(libdir + "asserts.js");
      5 
      6 function testDefaults(a, b=3) {
      7    a = 3;
      8    b = 4;
      9    assertEq(arguments.length, 1);
     10    assertEq(arguments[0], 1);
     11    assertEq(arguments[1], undefined);
     12    arguments[0] = 5;
     13    assertEq(a, 3);
     14    assertThrowsInstanceOf(() => arguments.callee, TypeError);
     15 }
     16 testDefaults(1);
     17 
     18 function testRest(a, ...rest) {
     19    a = 3;
     20    assertEq(arguments.length, 3);
     21    assertEq(arguments[0], 1);
     22    assertEq(arguments[1], 2);
     23    arguments[0] = 5;
     24    assertEq(a, 3);
     25    arguments[1] = 6;
     26    assertEq(arguments[1], 6);
     27    assertEq(rest.toString(), "2,3");
     28    assertThrowsInstanceOf(() => arguments.callee, TypeError);
     29 }
     30 testRest(1, 2, 3);
     31 
     32 function testDestructuring(a, {foo, bar}, b) {
     33    a = 3;
     34    bar = 4;
     35    b = 1;
     36    assertEq(arguments.length, 3);
     37    assertEq(arguments[0], 1);
     38    assertEq(arguments[1].bar, 2);
     39    assertEq(arguments[2], 9);
     40    assertThrowsInstanceOf(() => arguments.callee, TypeError);
     41 }
     42 testDestructuring(1, {foo: 1, bar: 2}, 9);
     43 
     44 function testStrict(a) {
     45    "use strict";
     46    a = 3;
     47    assertEq(arguments[0], 1);
     48    arguments[0] = 8;
     49    assertEq(a, 3);
     50    assertThrowsInstanceOf(() => arguments.callee, TypeError);
     51 }
     52 testStrict(1, 2);
     53 
     54 function testMapped(a) {
     55    a = 3;
     56    assertEq(arguments[0], 3);
     57    arguments[0] = 5;
     58    assertEq(a, 5);
     59    assertEq(arguments.callee, testMapped);
     60 }
     61 testMapped(1);