Environment-identity-04.js (745B)
1 // Observably different visits to the same with-statement produce distinct Environments. 2 3 var g = newGlobal({newCompartment: true}); 4 g.eval("function f(a, obj) { with (obj) return function () { return a; }; }"); 5 var dbg = Debugger(g); 6 var hits = 0; 7 dbg.onDebuggerStatement = function (frame) { 8 // Even though the two visits to the with-statement have the same target 9 // object, Math, the environments are observably different. 10 var f1 = frame.eval("f(1, Math);").return; 11 var f2 = frame.eval("f(2, Math);").return; 12 assertEq(f1.environment !== f2.environment, true); 13 assertEq(f1.object, f2.object); 14 assertEq(f1.call().return, 1); 15 assertEq(f2.call().return, 2); 16 hits++; 17 }; 18 g.eval("debugger;"); 19 assertEq(hits, 1);