redefine-callee.js (731B)
1 function test() { 2 let count = 0; 3 for (var i = 0; i < 30; i++) { 4 assertEq(arguments.callee, i > 20 ? 3 : test); 5 if (i === 20) { 6 Object.defineProperty(arguments, "callee", {get: function() { count++; return 3; }}); 7 } 8 } 9 assertEq(count, 9); 10 } 11 test(); 12 13 function testUnusedResult() { 14 let count = 0; 15 for (var i = 0; i < 30; i++) { 16 arguments.callee; 17 if (i === 20) { 18 Object.defineProperty(arguments, "callee", {get: function() { count++; return 3; }}); 19 } 20 } 21 assertEq(count, 9); 22 } 23 testUnusedResult(); 24 25 function testSetter() { 26 Object.defineProperty(arguments, "callee", {set: function() {}}); 27 for (var i = 0; i < 15; i++) { 28 assertEq(arguments.callee, undefined); 29 } 30 } 31 testSetter();