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