evals.js (1236B)
1 // Test that we can save stacks with direct and indirect eval calls. 2 3 const directEval = (function iife() { 4 return eval("(" + function evalFrame() { 5 return saveStack(); 6 } + "())"); 7 }()); 8 9 assertEq(directEval.source.includes("> eval"), true); 10 assertEq(directEval.functionDisplayName, "evalFrame"); 11 12 assertEq(directEval.parent.source.includes("> eval"), true); 13 14 assertEq(directEval.parent.parent.source.includes("> eval"), false); 15 assertEq(directEval.parent.parent.functionDisplayName, "iife"); 16 17 assertEq(directEval.parent.parent.parent.source.includes("> eval"), false); 18 19 assertEq(directEval.parent.parent.parent.parent, null); 20 21 const lave = eval; 22 const indirectEval = (function iife() { 23 return lave("(" + function evalFrame() { 24 return saveStack(); 25 } + "())"); 26 }()); 27 28 assertEq(indirectEval.source.includes("> eval"), true); 29 assertEq(indirectEval.functionDisplayName, "evalFrame"); 30 31 assertEq(indirectEval.parent.source.includes("> eval"), true); 32 33 assertEq(indirectEval.parent.parent.source.includes("> eval"), false); 34 assertEq(indirectEval.parent.parent.functionDisplayName, "iife"); 35 36 assertEq(indirectEval.parent.parent.parent.source.includes("> eval"), false); 37 38 assertEq(indirectEval.parent.parent.parent.parent, null);