|
1 // |jit-test| debug |
|
2 // Debugger.Frame.prototype.live is true for frames on the stack and false for |
|
3 // frames that have returned |
|
4 |
|
5 var desc = Object.getOwnPropertyDescriptor(Debugger.Frame.prototype, "live"); |
|
6 assertEq(typeof desc.get, "function"); |
|
7 assertEq(desc.set, undefined); |
|
8 assertEq(desc.configurable, true); |
|
9 assertEq(desc.enumerable, false); |
|
10 |
|
11 var loc; |
|
12 |
|
13 var g = newGlobal(); |
|
14 g.debuggeeGlobal = this; |
|
15 g.eval("var hits = 0;"); |
|
16 g.eval("(" + function () { |
|
17 var a = []; |
|
18 var dbg = Debugger(debuggeeGlobal); |
|
19 dbg.onDebuggerStatement = function (frame) { |
|
20 var loc = debuggeeGlobal.loc; |
|
21 a[loc] = frame; |
|
22 for (var i = 0; i < a.length; i++) { |
|
23 assertEq(a[i] === frame, i === loc); |
|
24 assertEq(!!(a[i] && a[i].live), i >= loc); |
|
25 } |
|
26 hits++; |
|
27 }; |
|
28 } + ")()"); |
|
29 |
|
30 function f(n) { |
|
31 loc = n; debugger; |
|
32 if (n !== 0) { |
|
33 f(n - 1); |
|
34 loc = n; debugger; |
|
35 eval("f(n - 1);"); |
|
36 loc = n; debugger; |
|
37 } |
|
38 } |
|
39 |
|
40 f(4); |
|
41 assertEq(g.hits, 16 + 8*3 + 4*3 + 2*3 + 1*3); |
|
42 |