|
1 // The debugger can eval in any frame in the stack even if every frame was |
|
2 // pushed in a different context. |
|
3 |
|
4 var g = newGlobal(); |
|
5 g.eval('function f(a) {\n' + |
|
6 ' if (a == 1)\n' + |
|
7 ' debugger;\n' + |
|
8 ' else\n' + |
|
9 ' evaluate("f(" + a + " - 1);", {newContext: true});\n' + |
|
10 '}\n'); |
|
11 var N = 9; |
|
12 |
|
13 var dbg = new Debugger(g); |
|
14 var frames = []; |
|
15 var hits = 0; |
|
16 dbg.onEnterFrame = function (frame) { |
|
17 if (frame.type == "call" && frame.callee.name == "f") { |
|
18 frames.push(frame); |
|
19 frame.onPop = function () { assertEq(frames.pop(), frame); }; |
|
20 } |
|
21 }; |
|
22 dbg.onDebuggerStatement = function (frame) { |
|
23 assertEq(frames.length, N); |
|
24 var i = N; |
|
25 for (var f of frames) |
|
26 assertEq(f.eval('a').return, i--); |
|
27 hits++; |
|
28 }; |
|
29 |
|
30 g.f(N); |
|
31 assertEq(hits, 1); |
|
32 assertEq(frames.length, 0); |