tor-browser

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

regexp-2.js (1494B)


      1 // Tests for IsRegExpPrototypeOptimizable and IsOptimizableRegExpObject intrinsics.
      2 function test() {
      3  const IsRegExpPrototypeOptimizable = getSelfHostedValue("IsRegExpPrototypeOptimizable");
      4  const IsOptimizableRegExpObject = getSelfHostedValue("IsOptimizableRegExpObject");
      5  
      6  for (var i = 0; i < 20; i++) {
      7    assertEq(IsRegExpPrototypeOptimizable(), true);
      8    assertEq(IsOptimizableRegExpObject(/a/), true);
      9    assertEq(IsOptimizableRegExpObject({}), false);
     10 
     11    // Proto is not RegExp.prototype.
     12    var re1 = /abc/;
     13    assertEq(IsOptimizableRegExpObject(re1), true);
     14    Object.setPrototypeOf(re1, Object.create(RegExp.prototype));
     15    assertEq(IsOptimizableRegExpObject(re1), false);
     16 
     17    // Own "flags" property.
     18    var re2 = /abc.*def/;
     19    assertEq(IsOptimizableRegExpObject(re2), true);
     20    Object.defineProperty(re2, "flags", {value: ""});
     21    assertEq(IsOptimizableRegExpObject(re2), false);
     22 
     23    // Other own properties.
     24    var re3 = /.+/gi;
     25    assertEq(IsOptimizableRegExpObject(re3), true);
     26    re3.foobar = 1;
     27    assertEq(IsOptimizableRegExpObject(re3), false);
     28  }
     29 
     30  for (var i = 0; i < 20; i++) {
     31    if (i === 13) {
     32      // This pops the fuse!
     33      RegExp.prototype.exec = function() {};
     34    }
     35 
     36    assertEq(IsRegExpPrototypeOptimizable(), i < 13);
     37    assertEq(IsOptimizableRegExpObject(/abc.*/), i < 13);
     38 
     39    var re = /abc/;
     40    Object.setPrototypeOf(re, Object.create(RegExp.prototype));
     41    assertEq(IsOptimizableRegExpObject(re), false);
     42  }
     43 }
     44 test();