Source-introductionScript-02.js (1266B)
1 // Calls to 'eval', etc. by JS primitives get attributed to the point of 2 // the primitive's call. 3 4 var g = newGlobal({newCompartment: true}); 5 var dbg = new Debugger; 6 var gDO = dbg.addDebuggee(g); 7 var log = ''; 8 9 function outerHandler(frame) { 10 log += 'o'; 11 var outerScript = frame.script; 12 13 dbg.onDebuggerStatement = function (frame) { 14 log += 'i'; 15 var source = frame.script.source; 16 var introScript = source.introductionScript; 17 assertEq(introScript, outerScript); 18 assertEq(introScript.getOffsetLocation(source.introductionOffset).lineNumber, 1234); 19 }; 20 }; 21 22 log = ''; 23 dbg.onDebuggerStatement = outerHandler; 24 g.evaluate('debugger; ["debugger;"].map(eval)', { lineNumber: 1234 }); 25 assertEq(log, 'oi'); 26 27 log = ''; 28 dbg.onDebuggerStatement = outerHandler; 29 g.evaluate('debugger; "debugger;".replace(/.*/, eval);', 30 { lineNumber: 1234 }); 31 assertEq(log, 'oi'); 32 33 34 // If the call takes place in another global, however, we don't record the 35 // introduction script. 36 log = ''; 37 dbg.onDebuggerStatement = function (frame) { 38 log += 'd'; 39 assertEq(frame.script.source.introductionScript, undefined); 40 assertEq(frame.script.source.introductionOffset, undefined); 41 }; 42 ["debugger;"].map(g.eval); 43 "debugger;".replace(/.*/, g.eval); 44 assertEq(log, 'dd');