Frame-eval-14.js (848B)
1 // Test the corner case of accessing an unaliased variable of a block 2 // while the block is not live. 3 4 var g = newGlobal({newCompartment: true}); 5 g.eval("function h() { debugger }"); 6 g.eval("function f() { { let x = 1, y; (function() { y = 0 })(); h() } }"); 7 g.eval("var surprise = null"); 8 9 var dbg = new Debugger; 10 var gw = dbg.addDebuggee(g); 11 dbg.onDebuggerStatement = function(hFrame) { 12 var fFrame = hFrame.older; 13 assertEq(fFrame.environment.getVariable('x'), 1); 14 assertEq(fFrame.environment.getVariable('y'), 0); 15 fFrame.eval("surprise = function() { return ++x }"); 16 assertEq(gw.executeInGlobal("surprise()").return, 2); 17 } 18 g.f(); 19 assertEq(g.surprise !== null, true); 20 21 // Either succeed or throw an error about 'x' not being live 22 try { 23 assertEq(g.surprise(), 3); 24 } catch (e) { 25 assertEq(e+'', 'Error: x is not live'); 26 }