michael@0: function test1() { michael@0: var f = function() { return 1; }; michael@0: michael@0: for (var i=0; i<25; i++) { michael@0: f.call(); michael@0: if (i > 20) michael@0: f = Math.abs; michael@0: } michael@0: } michael@0: test1(); michael@0: michael@0: var origCall = Function.prototype.call; michael@0: michael@0: function test2() { michael@0: var f = function() { return 1; }; michael@0: var c = 0; michael@0: for (var i=0; i<25; i++) { michael@0: f.call(); michael@0: if (i > 20) michael@0: Function.prototype.call = function() { c++; }; michael@0: } michael@0: assertEq(c, 3); michael@0: } michael@0: test2(); michael@0: Function.prototype.call = origCall; michael@0: michael@0: function test3() { michael@0: var f = function() { return 1; }; michael@0: for (var i=0; i<25; i++) { michael@0: f.call(); michael@0: if (i > 20) michael@0: Function.prototype.call = undefined; michael@0: } michael@0: } michael@0: try { michael@0: test3(); michael@0: assertEq(0, 1); michael@0: } catch(e) {} michael@0: michael@0: Function.prototype.call = origCall; michael@0: michael@0: function test4() { michael@0: var f = function(a, b, c) { michael@0: assertEq(arguments.length, 1); michael@0: assertEq(a, 1); michael@0: assertEq(b, undefined); michael@0: assertEq(c, undefined); michael@0: return 1; michael@0: }; michael@0: for (var i=0; i<25; i++) { michael@0: f.call(null, 1); michael@0: } michael@0: } michael@0: test4();