michael@0: // Test the corner case of accessing an unaliased variable of a block michael@0: // while the block is not live. michael@0: michael@0: var g = newGlobal(); michael@0: g.eval("function h() { debugger }"); michael@0: g.eval("function f() { let (x = 1, y) { (function() { y = 0 })(); h() } }"); michael@0: g.eval("var surprise = null"); michael@0: michael@0: var dbg = new Debugger(g); michael@0: dbg.onDebuggerStatement = function(hFrame) { michael@0: var fFrame = hFrame.older; michael@0: assertEq(fFrame.environment.getVariable('x'), 1); michael@0: assertEq(fFrame.environment.getVariable('y'), 0); michael@0: fFrame.eval("surprise = function() { return ++x }"); michael@0: assertEq(g.surprise(), 2); michael@0: } michael@0: g.f(); michael@0: assertEq(g.surprise !== null, true); michael@0: michael@0: // Either succeed or throw an error about 'x' not being live michael@0: try { michael@0: assertEq(g.surprise(), 3); michael@0: } catch (e) { michael@0: assertEq(e+'', 'Error: x is not live'); michael@0: }