// Interaction of eval with generator expressions. function a1() { var a = 10; var g = (for (y of [0]) eval('var a=42;')); g.next(); return a; } assertEq(a1(), 10); function a2() { var a = 10; (for (y of [0]) eval('a=42')).next(); return a; } assertEq(a2(), 42) // Arguments and this. function b1() { return [for (arg of (for (i of [0, 1, 2]) arguments[i])) arg]; } assertDeepEq(b1('a', 'b', 'c'), ['a', 'b', 'c']); function b2() { return [for (x of (for (i of [0]) this)) x]; } var b2o = { b2: b2 } assertDeepEq(b2o.b2(), [b2o]) // Assignment to eval or arguments. function c1() { return [for (arg of (for (i of [0, 1, 2]) arguments = i)) arg]; } assertDeepEq(c1(), [0, 1, 2]); function c2() { "use strict"; return eval('[for (arg of (for (i of [0, 1, 2]) arguments = i)) arg]'); } assertThrows(c2, SyntaxError); function c3() { return [for (arg of (for (i of [0, 1, 2]) eval = i)) arg]; } assertDeepEq(c3(), [0, 1, 2]); function c4() { "use strict"; return eval('[for (arg of (for (i of [0, 1, 2]) eval = i)) arg]'); } assertThrows(c4, SyntaxError); reportCompare(null, null, "test");