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