| /* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ |
| /* This Source Code Form is subject to the terms of the Mozilla Public |
| * License, v. 2.0. If a copy of the MPL was not distributed with this |
| * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| |
| //----------------------------------------------------------------------------- |
| var BUGNUMBER = 313763; |
| var summary = 'Root jsarray.c creatures'; |
| var actual = ''; |
| var expect = ''; |
| |
| printBugNumber(BUGNUMBER); |
| printStatus (summary); |
| printStatus ('This bug requires TOO_MUCH_GC'); |
| |
| var N = 0x80000002; |
| var array = Array(N); |
| array[N - 1] = 1; |
| array[N - 2] = 2; |
| |
| // Set getter not to wait until engine loops through 2^31 holes in the array. |
| var LOOP_TERMINATOR = "stop_long_loop"; |
| array.__defineGetter__(N - 2, function() { |
| throw "stop_long_loop"; |
| }); |
| |
| var prepared_string = String(1); |
| array.__defineGetter__(N - 1, function() { |
| var tmp = prepared_string; |
| prepared_string = null; |
| return tmp; |
| }) |
| |
| |
| try { |
| array.unshift(1); |
| } catch (e) { |
| if (e !== LOOP_TERMINATOR) |
| throw e; |
| } |
| |
| var expect = "1"; |
| var actual = array[N]; |
| printStatus(expect === actual); |
| |
| reportCompare(expect, actual, summary); |