summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/for-of/semantics-10.js
blob: 03f6bc3cfc0869ae718791ee9584916484de774f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// The LHS of a for-loop is not bound to a particular scope until after the .next() method returns.

var obj = {};

// Test 1
function* g() {
    obj.x = 0;
    yield 1;
}
var x = 2, n = 0;
with (obj) {
    for (x of g())  // g().next() inserts a binding for x on obj
        n++;
}
assertEq(x, 2);
assertEq(obj.x, 1);
assertEq(n, 1);

// Test 2
function* h() {
    delete obj.x;
    yield 3;
}
n = 0;
with (obj) {
    for (x of h())  // h().next() deletes the binding for x on obj
        n++;
}
assertEq(x, 3);
assertEq("x" in obj, false);
assertEq(n, 1);