Environment-unscopables.js (954B)
1 // An Environment for a `with` statement does not observe bindings ruled out by @@unscopables. 2 3 load(libdir + "asserts.js"); 4 5 let g = newGlobal({newCompartment: true}); 6 g.eval(` 7 let x = 'global'; 8 function f() { 9 let obj = { 10 x: 'obj', 11 y: 'obj', 12 [Symbol.unscopables]: {x: 1}, 13 }; 14 with (obj) 15 debugger; 16 } 17 `); 18 let dbg = Debugger(g); 19 let hits = 0; 20 dbg.onDebuggerStatement = function (frame) { 21 let env = frame.environment; 22 23 assertEq(env.find("x") !== env, true); 24 assertEq(env.names().indexOf("x"), -1); 25 assertEq(env.getVariable("x"), undefined); 26 assertThrowsInstanceOf(() => env.setVariable("x", 7), TypeError); 27 28 assertEq(env.find("y") === env, true); 29 assertEq(env.getVariable("y"), "obj"); 30 env.setVariable("y", 8); 31 32 assertEq(frame.eval("x").return, "global"); 33 assertEq(frame.eval("y").return, 8); 34 hits++; 35 }; 36 g.f(); 37 assertEq(hits, 1);