tor-browser

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

recover-newstringiterator.js (1446B)


      1 var max = 40;
      2 setJitCompilerOption("ion.warmup.trigger", max - 10);
      3 
      4 // Prevent the GC from cancelling Ion compilations, when we expect them to succeed
      5 gczeal(0);
      6 
      7 function selfhosted() {
      8    if (typeof getSelfHostedValue === "undefined")
      9        return;
     10 
     11    var NewStringIterator = getSelfHostedValue("NewStringIterator");
     12    var iter = NewStringIterator();
     13    bailout();
     14    // assertRecoveredOnBailout(iter, true);
     15 }
     16 
     17 function iterator(i) {
     18    var string = String.fromCharCode(0x41, i);
     19    var iter = string[Symbol.iterator]();
     20    assertEq(iter.next().value, 'A');
     21    bailout();
     22    // This sometimes fails
     23    // assertRecoveredOnBailout(iter, true);
     24    var result = iter.next();
     25    assertEq(result.value, String.fromCharCode(i));
     26    assertEq(result.done, false);
     27    assertEq(iter.next().done, true);
     28 }
     29 
     30 function forof(i) {
     31    var string = String.fromCharCode(0x41, i);
     32    var first = true;
     33 
     34    for (var x of string) {
     35        if (first) {
     36            assertEq(x, 'A');
     37            bailout();
     38            first = false;
     39        } else {
     40            assertEq(x, String.fromCharCode(i));
     41        }
     42    }
     43 }
     44 
     45 var data = {
     46  a: 'foo',
     47  b: {c: 'd'},
     48  str: 'ABC'
     49 };
     50 
     51 function fn() {
     52  var {a, b:{c:b}, str:[, c]} = data;
     53  return c;
     54 }
     55 
     56 function destructuring() {
     57    for (var i = 0; i < max; i++)
     58        assertEq(fn(), 'B');
     59 }
     60 
     61 for (var i = 0; i < max; i++) {
     62    selfhosted();
     63    iterator(i);
     64    forof(i);
     65    destructuring();
     66 }