bug818023.js (717B)
1 Function.prototype.callX = Function.prototype.call; 2 var x; 3 function f() { 4 x = f.caller; 5 return x; 6 } 7 8 function g() { 9 return f.callX(null); 10 } 11 12 function h1() { 13 // native 14 return ([0].map(f))[0]; 15 } 16 17 function h2() { 18 // self-hosted 19 x = null; 20 [0].forEach(f); 21 return x; 22 } 23 24 function k() { 25 x = null; 26 [0, 1].sort(f); 27 return x; 28 } 29 30 function l() { 31 return f(); 32 } 33 34 assertEq(g(), g); 35 assertEq(h1(), h1); 36 assertEq(h2(), h2); 37 assertEq(k(), k); 38 assertEq(l(), l); 39 40 var baz; 41 var foo = {callX: function() { return "m"; }}; 42 function bar() { 43 return baz.caller; 44 } 45 function m() { 46 return baz.callX(null); 47 } 48 49 baz = foo; 50 assertEq(m(), "m"); 51 baz = bar; 52 assertEq(m(), m); 53 assertEq(m(), m);