| // Test interactions between ES6 generators and not-yet-standard |
| // features. |
| |
| function assertSyntaxError(str) { |
| var msg; |
| var evil = eval; |
| try { |
| // Non-direct eval. |
| evil(str); |
| } catch (exc) { |
| if (exc instanceof SyntaxError) |
| return; |
| msg = "Assertion failed: expected SyntaxError, got " + exc; |
| } |
| if (msg === undefined) |
| msg = "Assertion failed: expected SyntaxError, but no exception thrown"; |
| throw new Error(msg + " - " + str); |
| } |
| |
| // Destructuring binding. |
| assertSyntaxError("function* f(x = yield) {}"); |
| assertSyntaxError("function* f(x = yield 17) {}"); |
| assertSyntaxError("function* f([yield]) {}"); |
| assertSyntaxError("function* f({ yield }) {}"); |
| assertSyntaxError("function* f(...yield) {}"); |
| |
| // For each. |
| assertSyntaxError("for yield"); |
| assertSyntaxError("for yield (;;) {}"); |
| assertSyntaxError("for yield (x of y) {}"); |
| assertSyntaxError("for yield (var i in o) {}"); |
| |
| // Expression bodies. |
| assertSyntaxError("function* f() yield 7"); |