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