|
1 // Calls to 'eval', etc. by JS primitives get attributed to the point of |
|
2 // the primitive's call. |
|
3 |
|
4 var g = newGlobal(); |
|
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.getOffsetLine(source.introductionOffset), 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'); |