|
1 // Observably different visits to the same with-statement produce distinct Environments. |
|
2 |
|
3 var g = newGlobal(); |
|
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); |