michael@0: /* michael@0: * Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/licenses/publicdomain/ michael@0: */ michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: var BUGNUMBER = 987243; michael@0: var summary = "Don't use .call(...) in the self-hosted Map.prototype.forEach"; michael@0: michael@0: print(BUGNUMBER + ": " + summary); michael@0: michael@0: /************** michael@0: * BEGIN TEST * michael@0: **************/ michael@0: michael@0: var functionCall = Function.prototype.call; michael@0: michael@0: function throwSyntaxError() michael@0: { michael@0: throw new SyntaxError("Function.prototype.call incorrectly called"); michael@0: } michael@0: michael@0: function lalala() {} michael@0: michael@0: Function.prototype.call = throwSyntaxError; michael@0: michael@0: new Map().forEach(throwSyntaxError); michael@0: new Map([[1, 2]]).forEach(lalala); michael@0: new Map([[1, 2], [3, 4]]).forEach(lalala); michael@0: michael@0: Function.prototype.call = function() { this.set(42, "fnord"); }; michael@0: michael@0: new Map().forEach(throwSyntaxError); michael@0: new Map([[1, 2]]).forEach(lalala); michael@0: new Map([[1, 2], [3, 4]]).forEach(lalala); michael@0: michael@0: var callCount = 0; michael@0: Function.prototype.call = function() { callCount++; }; michael@0: michael@0: new Map().forEach(throwSyntaxError); michael@0: new Map([[1, 2]]).forEach(lalala); michael@0: new Map([[1, 2], [3, 4]]).forEach(lalala); michael@0: michael@0: assertEq(callCount, 0); michael@0: michael@0: /******************************************************************************/ michael@0: michael@0: if (typeof reportCompare === "function") michael@0: reportCompare(true, true); michael@0: michael@0: print("Tests complete");