// Bug 1099956 load(libdir + "asserts.js"); // ES6 treating yield as an identifier except in ES6 generators introduces a // syntax conflict with permissible JS >= 1.7 legacy generator syntax. Is // |yield /a/g| inside a function an attempt to convert the function into a // legacy generator, yielding a RegExp instance? Or does it instead read as // |(yield / a) / g|? Similar ambiguities exist for different textual content // in place of |a| -- |yield /x+17/g| or |(yield / x) + 17 / g|, and so on. // (And, much less importantly, is |yield /a/g| a syntax error in global code // as in JS >= 1.7, or is it |(yield / a) / g|.) // // For now, in JS >= 1.7, we preserve the old behavior. In all other JS we // conform to ES6: |yield /a/g| is a YieldExpression inside an ES6 generator, // and it's an IdentifierReference divided twice when not in an ES6 generator. // This test will need changes if we change our JS >= 1.7 parsing to be // ES6-compatible. function f1() { yield /abc/g; } var g = f1(); var v; v = g.next(); assertEq(v instanceof RegExp, true); assertEq(v.toString(), "/abc/g"); assertThrowsValue(() => g.next(), StopIteration); function* f2() { yield /abc/g; } g = f2(); v = g.next(); assertEq(v.done, false); assertEq(v.value instanceof RegExp, true); assertEq(v.value.toString(), "/abc/g"); v = g.next(); assertEq(v.done, true);