1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/jit-test/tests/basic/bug1013922.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,67 @@ 1.4 +String.prototype.repeat = function(num) { 1.5 + return new Array(num + 1).join(this); 1.6 +} 1.7 + 1.8 +function set_to_length(length, frag_size) 1.9 +{ 1.10 + var fragment = "'" + "x".repeat(frag_size) + "' + "; 1.11 + var frags = Math.floor((length - 1)/frag_size); 1.12 + var code = "var x = " + fragment.repeat(frags) + "'" + 1.13 + "x".repeat(length - frags * frag_size) + "';"; 1.14 + 1.15 + try { 1.16 + eval(code); 1.17 + } 1.18 + catch(err) { 1.19 + if (err.message && err.message == "Out of memory") 1.20 + return -1; 1.21 + if (err == "out of memory") 1.22 + return -1; 1.23 + throw(err); /* Oops, broke something. */ 1.24 + } 1.25 + 1.26 + return code.length; 1.27 +} 1.28 + 1.29 +var first_fail; 1.30 +var first_pass; 1.31 +var frag_size; 1.32 +var pass_code_length; 1.33 + 1.34 +function search_up() 1.35 +{ 1.36 + if (set_to_length(first_fail, frag_size) < 0) { 1.37 + setTimeout(binary_search, 0); 1.38 + return; 1.39 + } 1.40 + 1.41 + first_fail *= 2; 1.42 +} 1.43 + 1.44 +function binary_search() 1.45 +{ 1.46 + if (first_fail - first_pass > 1) { 1.47 + var length = (first_pass + first_fail) / 2; 1.48 + var code_len = set_to_length(length, frag_size); 1.49 + if (code_len > 0) { 1.50 + first_pass = length; 1.51 + pass_code_length = code_len; 1.52 + } else 1.53 + first_fail = length; 1.54 + setTimeout(binary_search, 0); 1.55 + return; 1.56 + } 1.57 +} 1.58 + 1.59 +function run_find_limit() 1.60 +{ 1.61 + frag_size = 64; 1.62 + first_fail = 65536; /* A guess */ 1.63 + first_pass = 0; 1.64 + pass_code_length = 0; 1.65 + 1.66 + for (var i=0; i<5; i++) 1.67 + search_up(0); 1.68 +} 1.69 + 1.70 +run_find_limit();