// The LHS of a for-of loop is not evaluated until after the .next() method returns. var s; function f() { s += 'f'; return {}; } // Test 1: .next() throws StopIteration right away. f is never called. s = ''; for (f().x of []) s += '.'; assertEq(s, ''); // Test 2: check proper interleaving of f calls, iterator.next() calls, and the loop body. function* g() { s += 'g'; yield 0; s += 'g'; yield 1; s += 'g'; } for (f().x of g()) s += '.'; assertEq(s, 'gf.gf.g');