js/src/jit-test/tests/basic/bug1013922.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 String.prototype.repeat = function(num) {
     2     return new Array(num + 1).join(this);
     3 }
     5 function set_to_length(length, frag_size)
     6 {
     7     var fragment = "'" + "x".repeat(frag_size) + "' + ";
     8     var frags = Math.floor((length - 1)/frag_size);
     9     var code = "var x = " + fragment.repeat(frags) + "'" +
    10         "x".repeat(length - frags * frag_size) + "';";
    12     try {
    13         eval(code);
    14     }
    15     catch(err) {
    16         if (err.message && err.message == "Out of memory")
    17             return -1;
    18         if (err == "out of memory")
    19             return -1;
    20         throw(err); /* Oops, broke something. */
    21     }
    23     return code.length;
    24 }
    26 var first_fail;
    27 var first_pass;
    28 var frag_size;
    29 var pass_code_length;
    31 function search_up()
    32 {
    33     if (set_to_length(first_fail, frag_size) < 0) {
    34         setTimeout(binary_search, 0);
    35         return;
    36     }
    38     first_fail *= 2;
    39 }
    41 function binary_search()
    42 {
    43     if (first_fail - first_pass > 1) {
    44         var length = (first_pass + first_fail) / 2;
    45         var code_len = set_to_length(length, frag_size);
    46         if (code_len > 0) {
    47             first_pass = length;
    48             pass_code_length = code_len;
    49         } else
    50             first_fail = length;
    51         setTimeout(binary_search, 0);
    52         return;
    53     }
    54 }
    56 function run_find_limit()
    57 {
    58     frag_size = 64;
    59     first_fail = 65536; /* A guess */
    60     first_pass = 0;
    61     pass_code_length = 0;
    63     for (var i=0; i<5; i++)
    64 	search_up(0);
    65 }
    67 run_find_limit();

mercurial