tor-browser

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

object-constructor.js (1890B)


      1 // Test various inlinable Object constructor calls.
      2 
      3 function callNoArgs() {
      4  for (let i = 0; i < 100; ++i) {
      5    let obj = Object();
      6 
      7    // Creates a new empty object.
      8    assertEq(Reflect.getPrototypeOf(obj), Object.prototype);
      9    assertEq(Reflect.ownKeys(obj).length, 0);
     10  }
     11 }
     12 for (let i = 0; i < 2; ++i) callNoArgs();
     13 
     14 function constructNoArgs() {
     15  for (let i = 0; i < 100; ++i) {
     16    let obj = new Object();
     17 
     18    // Creates a new empty object.
     19    assertEq(Reflect.getPrototypeOf(obj), Object.prototype);
     20    assertEq(Reflect.ownKeys(obj).length, 0);
     21  }
     22 }
     23 for (let i = 0; i < 2; ++i) constructNoArgs();
     24 
     25 function funCallNoArgs() {
     26  // NB: Function.prototype.call is only inlined when the thisValue argument is present.
     27  const thisValue = null;
     28 
     29  for (let i = 0; i < 100; ++i) {
     30    let obj = Object.call(thisValue);
     31 
     32    // Creates a new empty object.
     33    assertEq(Reflect.getPrototypeOf(obj), Object.prototype);
     34    assertEq(Reflect.ownKeys(obj).length, 0);
     35  }
     36 }
     37 for (let i = 0; i < 2; ++i) funCallNoArgs();
     38 
     39 function callObjectArg() {
     40  let xs = [{}, {}];
     41  for (let i = 0; i < 100; ++i) {
     42    let x = xs[i & 1];
     43    let obj = Object(x);
     44 
     45    // Returns the input object.
     46    assertEq(obj, x);
     47  }
     48 }
     49 for (let i = 0; i < 2; ++i) callObjectArg();
     50 
     51 function constructObjectArg() {
     52  let xs = [{}, {}];
     53  for (let i = 0; i < 100; ++i) {
     54    let x = xs[i & 1];
     55    let obj = new Object(x);
     56 
     57    // Returns the input object.
     58    assertEq(obj, x);
     59  }
     60 }
     61 for (let i = 0; i < 2; ++i) constructObjectArg();
     62 
     63 function funCallObjectArg() {
     64  // NB: Function.prototype.call is only inlined when the thisValue argument is present.
     65  const thisValue = null;
     66 
     67  let xs = [{}, {}];
     68  for (let i = 0; i < 100; ++i) {
     69    let x = xs[i & 1];
     70    let obj = Object.call(thisValue, x);
     71 
     72    // Returns the input object.
     73    assertEq(obj, x);
     74  }
     75 }
     76 for (let i = 0; i < 2; ++i) funCallObjectArg();