Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
michael@0 | 1 | // The LHS of a for-loop is not bound to a particular scope until after the .next() method returns. |
michael@0 | 2 | |
michael@0 | 3 | var obj = {}; |
michael@0 | 4 | |
michael@0 | 5 | // Test 1 |
michael@0 | 6 | function g() { |
michael@0 | 7 | obj.x = 0; |
michael@0 | 8 | yield 1; |
michael@0 | 9 | } |
michael@0 | 10 | var x = 2, n = 0; |
michael@0 | 11 | with (obj) { |
michael@0 | 12 | for (x of g()) // g().next() inserts a binding for x on obj |
michael@0 | 13 | n++; |
michael@0 | 14 | } |
michael@0 | 15 | assertEq(x, 2); |
michael@0 | 16 | assertEq(obj.x, 1); |
michael@0 | 17 | assertEq(n, 1); |
michael@0 | 18 | |
michael@0 | 19 | // Test 2 |
michael@0 | 20 | function h() { |
michael@0 | 21 | delete obj.x; |
michael@0 | 22 | yield 3; |
michael@0 | 23 | } |
michael@0 | 24 | n = 0; |
michael@0 | 25 | with (obj) { |
michael@0 | 26 | for (x of h()) // h().next() deletes the binding for x on obj |
michael@0 | 27 | n++; |
michael@0 | 28 | } |
michael@0 | 29 | assertEq(x, 3); |
michael@0 | 30 | assertEq("x" in obj, false); |
michael@0 | 31 | assertEq(n, 1); |