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