| // Turning debugger on for a particular global with on-stack scripts shouldn't |
| // make other globals' scripts observable. |
| |
| var g1 = newGlobal(); |
| var g2 = newGlobal(); |
| var g3 = newGlobal(); |
| |
| g1.eval("" + function f() { |
| var name = "f"; |
| g(); |
| return name; |
| }); |
| g2.eval("" + function g() { |
| var name = "g"; |
| h(); |
| return name; |
| }); |
| g3.eval("" + function h() { |
| var name = "h"; |
| toggle(); |
| return name; |
| }); |
| |
| g1.g = g2.g; |
| g2.h = g3.h; |
| |
| function name(f) { |
| return f.environment.getVariable("name"); |
| } |
| |
| var dbg = new Debugger; |
| g3.toggle = function () { |
| var frame; |
| |
| // Only f should be visible. |
| dbg.addDebuggee(g1); |
| frame = dbg.getNewestFrame(); |
| assertEq(name(frame), "f"); |
| |
| // Now h should also be visible. |
| dbg.addDebuggee(g3); |
| frame = dbg.getNewestFrame(); |
| assertEq(name(frame), "h"); |
| assertEq(name(frame.older), "f"); |
| |
| // Finally everything should be visible. |
| dbg.addDebuggee(g2); |
| frame = dbg.getNewestFrame(); |
| assertEq(name(frame), "h"); |
| assertEq(name(frame.older), "g"); |
| assertEq(name(frame.older.older), "f"); |
| }; |
| |
| g1.eval("(" + function () { f(); } + ")();"); |
| |