|
1 // If debugger.onEnterFrame returns {return:val}, the frame returns. |
|
2 |
|
3 var g = newGlobal(); |
|
4 g.set = false; |
|
5 g.eval("function f() {\n" + |
|
6 " set = true;\n" + |
|
7 " return 'fail';\n" + |
|
8 "}\n"); |
|
9 g.eval("function g() { return 'g ' + f(); }"); |
|
10 g.eval("function h() { return 'h ' + g(); }"); |
|
11 |
|
12 var dbg = Debugger(g); |
|
13 var savedFrame; |
|
14 dbg.onEnterFrame = function (frame) { |
|
15 savedFrame = frame; |
|
16 return {return: "pass"}; |
|
17 }; |
|
18 |
|
19 // Call g.f as a function. |
|
20 savedFrame = undefined; |
|
21 assertEq(g.f(), "pass"); |
|
22 assertEq(savedFrame.live, false); |
|
23 assertEq(g.set, false); |
|
24 |
|
25 // Call g.f as a constructor. |
|
26 savedFrame = undefined; |
|
27 var r = new g.f; |
|
28 assertEq(typeof r, "object"); |
|
29 assertEq(savedFrame.live, false); |
|
30 assertEq(g.set, false); |
|
31 |
|
32 var count = 0; |
|
33 dbg.onEnterFrame = function (frame) { |
|
34 count++; |
|
35 if (count == 3) { |
|
36 savedFrame = frame; |
|
37 return {return: "pass"}; |
|
38 } |
|
39 return undefined; |
|
40 }; |
|
41 g.set = false; |
|
42 savedFrame = undefined; |
|
43 assertEq(g.h(), "h g pass"); |
|
44 assertEq(savedFrame.live, false); |
|
45 assertEq(g.set, false); |