/* * Any copyright is dedicated to the Public Domain. * http://creativecommons.org/licenses/publicdomain/ */ var BUGNUMBER = 465199; var summary = "RegExp lastIndex property set should not coerce type to number"; print(BUGNUMBER + ": " + summary); /************** * BEGIN TEST * **************/ var called = false; var o = { valueOf: function() { called = true; return 1; } }; var r = /a/g; var desc, m; assertEq(r.lastIndex, 0); desc = Object.getOwnPropertyDescriptor(r, "lastIndex"); assertEq(desc.enumerable, false); assertEq(desc.configurable, false); assertEq(desc.value, 0); assertEq(desc.writable, true); r.lastIndex = o; assertEq(r.lastIndex, o); desc = Object.getOwnPropertyDescriptor(r, "lastIndex"); assertEq(desc.enumerable, false); assertEq(desc.configurable, false); assertEq(desc.value, o); assertEq(desc.writable, true); assertEq(called, false); assertEq(r.exec("aaaa").length, 1); assertEq(called, true); assertEq(r.lastIndex, 2); desc = Object.getOwnPropertyDescriptor(r, "lastIndex"); assertEq(desc.enumerable, false); assertEq(desc.configurable, false); assertEq(desc.value, 2); assertEq(desc.writable, true); r.lastIndex = -0.2; assertEq(r.lastIndex, -0.2); m = r.exec("aaaa"); assertEq(Array.isArray(m), true); assertEq(m.length, 1); assertEq(m[0], "a"); assertEq(r.lastIndex, 1); m = r.exec("aaaa"); assertEq(Array.isArray(m), true); assertEq(m.length, 1); assertEq(m[0], "a"); assertEq(r.lastIndex, 2); /******************************************************************************/ if (typeof reportCompare === "function") reportCompare(true, true); print("All tests passed!");