/* -*- 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 = 350621; var summary = 'for-in loops over generator objects'; var actual = ''; var expect = ''; //----------------------------------------------------------------------------- test(); //----------------------------------------------------------------------------- function test() { enterFunc ('test'); printBugNumber(BUGNUMBER); printStatus (summary); var LOOPS = 500; function gen1() { for (var a = 1; a <= LOOPS; ++a) yield; } function gen2() { for (var b in gen1()) yield; } function test_it(RUNS) { for (var c = 1; c <= RUNS; ++c) { var count = 0; for (var d in gen2()) { // The next line is needed to demonstrate the bug. // Note that simply omitting the "x" triggers the bug far less often. Object("x"); ++count; } if (count != LOOPS) { print("Test run " + c + ": test failed, count = " + count + ", should be " + LOOPS); var failed = true; } } actual = !failed; if (!failed) { print("Test passed."); } } expect = true; test_it(20); reportCompare(expect, actual, summary); exitFunc ('test'); }