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