js/src/tests/ecma_6/Comprehensions/generator-semantics.js

changeset 0
6474c204b198
     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");

mercurial