tor-browser

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

bug977966.js (2985B)


      1 // |jit-test| --ion-eager
      2 
      3 function join_check() {
      4    var lengthWasCalled = false;
      5    var obj = {"0": "", "1": ""};
      6    Object.defineProperty(obj, "length", {
      7        get : function(){ lengthWasCalled = true; return 2; },
      8        enumerable : true,
      9        configurable : true
     10    });
     11 
     12    var res = Array.prototype.join.call(obj, { toString: function () {
     13        if (lengthWasCalled)
     14            return "good";
     15        else
     16            return "bad";
     17    }})
     18 
     19    assertEq(res, "good");
     20 }
     21 function split(i) {
     22    var x = (i + "->" + i).split("->");
     23    assertEq(x[0], "" + i);
     24    return i;
     25 }
     26 
     27 function join(i) {
     28    var x = [i, i].join("->");
     29    assertEq(x, i + "->" + i);
     30    return i;
     31 }
     32 
     33 function split_join(i) {
     34    var x = (i + "-" + i).split("-").join("->");
     35    assertEq(x, i + "->" + i);
     36    return i;
     37 }
     38 
     39 function split_join_2(i) {
     40    var x = (i + "-" + i).split("-");
     41    x.push("" + i);
     42    var res = x.join("->");
     43    assertEq(res, i + "->" + i + "->" + i);
     44    return i;
     45 }
     46 
     47 function resumeHere() { bailout(); }
     48 
     49 function split_join_3(i) {
     50    var x = (i + "-" + i).split("-");
     51    resumeHere();
     52    var res = x.join("->");
     53    assertEq(res, i + "->" + i);
     54    return i;
     55 }
     56 
     57 function trip(i) {
     58    if (i == 99)
     59        assertEq(myjoin.arguments[1][0], "" + i)
     60 }
     61 
     62 function myjoin(i, x) {
     63    trip(i);
     64    return x.join("->");
     65 }
     66 
     67 function split_join_4(i) {
     68    var x = (i + "-" + i).split("-");
     69    var res = myjoin(i, x);
     70    assertEq(res, i + "->" + i);
     71    return i;
     72 }
     73 
     74 function split_join_5(i) {
     75    var s = "abca";
     76    assertEq(s.split("a").join("") + i, "bc" + i);
     77 }
     78 
     79 function split_join_two_byte_char(i) {
     80    var s1 = "ab";
     81    assertEq(s1.split("").join("\u03c0"), "a\u03c0b");
     82    var s2 = i + "\u03c0" + i;
     83    assertEq(s2.split("\u03c0").join("-"), i + "-" + i);
     84 }
     85 
     86 function split_join_underflow(i)
     87 {
     88    var s = "";
     89    assertEq(s.split("").join("x" + i), "");
     90 }
     91 
     92 // Check that we do not consider the string argument of join as a replacement
     93 // pattern, as the string replace primitive is supposed to do.
     94 function split_join_pattern(i) {
     95    var s = i + "-" + i;
     96    assertEq(s.split("-").join("$`$&$'"), i + "$`$&$'" + i);
     97    assertEq(s.replace("-", "$`$&$'"), "" + i + i + "-" + i + i);
     98 }
     99 
    100 // Check that, as opposed to String.replace, we are doing a global replacement
    101 // as String.split does.
    102 function split_join_multiple(i) {
    103    var s1 = i + "-\n-" + i + "-\n-" + i;
    104    assertEq(s1.split("-\n-").join("-")  , i + "-" + i + "-" + i);
    105    assertEq(s1.replace("-\n-", "-")     , i + "-" + i + "-\n-" + i);
    106 
    107    var s2 = "abc";
    108    assertEq(s2.split("").join("" + i)   , "a" + i + "b" + i + "c");
    109    assertEq(s2.replace("", "" + i)      , i + "abc");
    110 }
    111 
    112 for (var i = 0; i < 1000; ++i) {
    113    join_check(i);
    114    split(i);
    115    join(i);
    116    split_join(i);
    117    split_join_2(i);
    118    split_join_3(i);
    119    split_join_4(i);
    120    split_join_5(i);
    121    split_join_pattern(i);
    122    split_join_multiple(i);
    123    split_join_two_byte_char(i);
    124    split_join_underflow(i);
    125 }