michael@0: // A live Environment can observe the new variables introduced by ES5 non-strict direct eval. michael@0: michael@0: var g = newGlobal(); michael@0: g.eval("var x = 'global'; function f(s) { h(); eval(s); h(); }"); michael@0: g.eval("function h() { debugger; }"); michael@0: var dbg = Debugger(g); michael@0: var env = undefined; michael@0: var hits = 0; michael@0: dbg.onDebuggerStatement = function (hframe) { michael@0: if (env === undefined) { michael@0: // First debugger statement. michael@0: env = hframe.older.environment; michael@0: assertEq(env.find("x") !== env, true); michael@0: assertEq(env.names().indexOf("x"), -1); michael@0: } else { michael@0: // Second debugger statement, post-eval. michael@0: assertEq(env.find("x"), env); michael@0: assertEq(env.names().indexOf("x") >= 0, true); michael@0: } michael@0: hits++; michael@0: }; michael@0: g.f("var x = 'local';"); michael@0: assertEq(hits, 2);