var BUGNUMBER = 924672; var summary = 'Method Definitions - Generators' print(BUGNUMBER + ": " + summary); // Function definitions. function syntaxError (script) { try { Function(script); } catch (e) { if (e instanceof SyntaxError) { return; } } throw new Error('Expected syntax error: ' + script); } // Tests begin. syntaxError("{*a(){}}"); syntaxError("b = {*(){}"); syntaxError("b = {*{}"); syntaxError("b = {*){}"); syntaxError("b = {*({}"); syntaxError("b = {*(){"); syntaxError("b = {*()}"); syntaxError("b = {*a("); syntaxError("b = {*a)"); syntaxError("b = {*a(}"); syntaxError("b = {*a)}"); syntaxError("b = {*a()"); syntaxError("b = {*a()}"); syntaxError("b = {*a(){}"); syntaxError("b = {*a){}"); syntaxError("b = {*a}}"); syntaxError("b = {*a{}}"); syntaxError("b = {*a({}}"); syntaxError("b = {*a@(){}}"); syntaxError("b = {*@(){}}"); syntaxError("b = {*get a(){}}"); syntaxError("b = {get *a(){}}"); syntaxError("b = {get a*(){}}"); syntaxError("b = {*set a(c){}}"); syntaxError("b = {set *a(c){}}"); syntaxError("b = {set a*(c){}}"); syntaxError("b = {*a : 1}"); syntaxError("b = {a* : 1}"); syntaxError("b = {a :* 1}"); syntaxError("b = {a*(){}}"); // Generator methods. b = { * g() { var a = { [yield 1]: 2, [yield 2]: 3}; return a; } } var it = b.g(); var next = it.next(); assertEq(next.done, false); assertEq(next.value, 1); next = it.next("hello"); assertEq(next.done, false); assertEq(next.value, 2); next = it.next("world"); assertEq(next.done, true); assertEq(next.value.hello, 2); assertEq(next.value.world, 3); // prototype property assertEq(b.g.hasOwnProperty("prototype"), true); // Strict mode a = {*b(c){"use strict";yield c;}}; assertEq(a.b(1).next().value, 1); a = {*["b"](c){"use strict";return c;}}; assertEq(a.b(1).next().value, 1); // Generators should not have [[Construct]] a = {*g() { yield 1; }} assertThrowsInstanceOf(() => { new a.g }, TypeError); if (typeof reportCompare === 'function') reportCompare(0, 0, "ok");