1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/tests/ecma_6/Comprehensions/generator-semantics.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,52 @@ 1.4 +// Interaction of eval with generator expressions. 1.5 +function a1() { 1.6 + var a = 10; 1.7 + var g = (for (y of [0]) eval('var a=42;')); 1.8 + g.next(); 1.9 + return a; 1.10 +} 1.11 +assertEq(a1(), 10); 1.12 + 1.13 +function a2() { 1.14 + var a = 10; 1.15 + (for (y of [0]) eval('a=42')).next(); 1.16 + return a; 1.17 +} 1.18 +assertEq(a2(), 42) 1.19 + 1.20 +// Arguments and this. 1.21 +function b1() { 1.22 + return [for (arg of (for (i of [0, 1, 2]) arguments[i])) arg]; 1.23 +} 1.24 +assertDeepEq(b1('a', 'b', 'c'), ['a', 'b', 'c']); 1.25 + 1.26 +function b2() { 1.27 + return [for (x of (for (i of [0]) this)) x]; 1.28 +} 1.29 +var b2o = { b2: b2 } 1.30 +assertDeepEq(b2o.b2(), [b2o]) 1.31 + 1.32 +// Assignment to eval or arguments. 1.33 +function c1() { 1.34 + return [for (arg of (for (i of [0, 1, 2]) arguments = i)) arg]; 1.35 +} 1.36 +assertDeepEq(c1(), [0, 1, 2]); 1.37 + 1.38 +function c2() { 1.39 + "use strict"; 1.40 + return eval('[for (arg of (for (i of [0, 1, 2]) arguments = i)) arg]'); 1.41 +} 1.42 +assertThrows(c2, SyntaxError); 1.43 + 1.44 +function c3() { 1.45 + return [for (arg of (for (i of [0, 1, 2]) eval = i)) arg]; 1.46 +} 1.47 +assertDeepEq(c3(), [0, 1, 2]); 1.48 + 1.49 +function c4() { 1.50 + "use strict"; 1.51 + return eval('[for (arg of (for (i of [0, 1, 2]) eval = i)) arg]'); 1.52 +} 1.53 +assertThrows(c4, SyntaxError); 1.54 + 1.55 +reportCompare(null, null, "test");