diff --git a/test/language/expressions/class/gen-method-static-yield-identifier-spread-strict.js b/test/language/expressions/class/gen-method-static-yield-identifier-spread-strict.js new file mode 100644 index 0000000000000000000000000000000000000000..045a8d88179de5fc17119e271d2ce041543e02b4 --- /dev/null +++ b/test/language/expressions/class/gen-method-static-yield-identifier-spread-strict.js @@ -0,0 +1,50 @@ +// This file was procedurally generated from the following sources: +// - src/generators/yield-identifier-spread-strict.case +// - src/generators/default/class-expr-static-method.template +/*--- +description: It's an early error if the AssignmentExpression is a function body with yield as an identifier in strict mode. (Static generator method as a ClassExpression element) +esid: prod-GeneratorMethod +features: [object-spread] +flags: [generated, onlyStrict] +negative: + phase: early + type: SyntaxError +info: | + ClassElement : + static MethodDefinition + + MethodDefinition : + GeneratorMethod + + 14.4 Generator Function Definitions + + GeneratorMethod : + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } + + Spread Properties + + PropertyDefinition[Yield]: + (...) + ...AssignmentExpression[In, ?Yield] + +---*/ + +var callCount = 0; + +var C = class { static *gen() { + callCount += 1; + return { + ...(function() { + var yield; + throw new Test262Error(); + }()), + } +}} + +var gen = C.gen; + +var iter = gen(); + + + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/class/gen-method-static-yield-identifier-strict.js b/test/language/expressions/class/gen-method-static-yield-identifier-strict.js new file mode 100644 index 0000000000000000000000000000000000000000..7de5baf3dc695005848c1c3c624101843e83219a --- /dev/null +++ b/test/language/expressions/class/gen-method-static-yield-identifier-strict.js @@ -0,0 +1,40 @@ +// This file was procedurally generated from the following sources: +// - src/generators/yield-identifier-strict.case +// - src/generators/default/class-expr-static-method.template +/*--- +description: It's an early error if the generator body has another function body with yield as an identifier in strict mode. (Static generator method as a ClassExpression element) +esid: prod-GeneratorMethod +flags: [generated, onlyStrict] +negative: + phase: early + type: SyntaxError +info: | + ClassElement : + static MethodDefinition + + MethodDefinition : + GeneratorMethod + + 14.4 Generator Function Definitions + + GeneratorMethod : + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } +---*/ + +var callCount = 0; + +var C = class { static *gen() { + callCount += 1; + (function() { + var yield; + throw new Test262Error(); + }()) +}} + +var gen = C.gen; + +var iter = gen(); + + + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/class/gen-method-static-yield-spread-arr-multiple.js b/test/language/expressions/class/gen-method-static-yield-spread-arr-multiple.js new file mode 100644 index 0000000000000000000000000000000000000000..c522fe8c9f2e3ac4a1538945355f41177c07a81c --- /dev/null +++ b/test/language/expressions/class/gen-method-static-yield-spread-arr-multiple.js @@ -0,0 +1,48 @@ +// This file was procedurally generated from the following sources: +// - src/generators/yield-spread-arr-multiple.case +// - src/generators/default/class-expr-static-method.template +/*--- +description: Use yield value in a array spread position (Static generator method as a ClassExpression element) +esid: prod-GeneratorMethod +flags: [generated] +includes: [compareArray.js] +info: | + ClassElement : + static MethodDefinition + + MethodDefinition : + GeneratorMethod + + 14.4 Generator Function Definitions + + GeneratorMethod : + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } + + Array Initializer + + SpreadElement[Yield, Await]: + ...AssignmentExpression[+In, ?Yield, ?Await] + +---*/ +var arr = ['a', 'b', 'c']; +var item; + +var callCount = 0; + +var C = class { static *gen() { + callCount += 1; + yield [...yield yield]; +}} + +var gen = C.gen; + +var iter = gen(); + +iter.next(false); +item = iter.next(['a', 'b', 'c']); +item = iter.next(item.value); + +assert(compareArray(item.value, arr)); +assert.sameValue(item.done, false); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/class/gen-method-static-yield-spread-arr-single.js b/test/language/expressions/class/gen-method-static-yield-spread-arr-single.js new file mode 100644 index 0000000000000000000000000000000000000000..9e983666507b430678938f7cecd896e4b3006d82 --- /dev/null +++ b/test/language/expressions/class/gen-method-static-yield-spread-arr-single.js @@ -0,0 +1,46 @@ +// This file was procedurally generated from the following sources: +// - src/generators/yield-spread-arr-single.case +// - src/generators/default/class-expr-static-method.template +/*--- +description: Use yield value in a array spread position (Static generator method as a ClassExpression element) +esid: prod-GeneratorMethod +flags: [generated] +includes: [compareArray.js] +info: | + ClassElement : + static MethodDefinition + + MethodDefinition : + GeneratorMethod + + 14.4 Generator Function Definitions + + GeneratorMethod : + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } + + Array Initializer + + SpreadElement[Yield, Await]: + ...AssignmentExpression[+In, ?Yield, ?Await] + +---*/ +var arr = ['a', 'b', 'c']; + +var callCount = 0; + +var C = class { static *gen() { + callCount += 1; + yield [...yield]; +}} + +var gen = C.gen; + +var iter = gen(); + +iter.next(false); +var item = iter.next(['a', 'b', 'c']); + +assert(compareArray(item.value, arr)); +assert.sameValue(item.done, false); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/class/gen-method-static-yield-spread-obj.js b/test/language/expressions/class/gen-method-static-yield-spread-obj.js new file mode 100644 index 0000000000000000000000000000000000000000..22c26e197063cbdad6ee771c8bd74244b6951f69 --- /dev/null +++ b/test/language/expressions/class/gen-method-static-yield-spread-obj.js @@ -0,0 +1,55 @@ +// This file was procedurally generated from the following sources: +// - src/generators/yield-spread-obj.case +// - src/generators/default/class-expr-static-method.template +/*--- +description: Use yield value in a object spread position (Static generator method as a ClassExpression element) +esid: prod-GeneratorMethod +features: [object-spread] +flags: [generated] +includes: [compareArray.js] +info: | + ClassElement : + static MethodDefinition + + MethodDefinition : + GeneratorMethod + + 14.4 Generator Function Definitions + + GeneratorMethod : + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } + + Spread Properties + + PropertyDefinition[Yield]: + (...) + ...AssignmentExpression[In, ?Yield] + +---*/ + +var callCount = 0; + +var C = class { static *gen() { + callCount += 1; + yield { + ...yield, + y: 1, + ...yield yield, + }; +}} + +var gen = C.gen; + +var iter = gen(); + +iter.next(); +iter.next({ x: 42 }); +iter.next({ x: 'lol' }); +var item = iter.next({ y: 39 }); + +assert.sameValue(item.value.x, 42); +assert.sameValue(item.value.y, 39); +assert.sameValue(Object.keys(item.value).length, 2); +assert.sameValue(item.done, false); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/class/gen-method-yield-identifier-spread-strict.js b/test/language/expressions/class/gen-method-yield-identifier-spread-strict.js index b4b808dad8e4c949c6183601c45d99fbb26b5cf4..c60ac8d463339f395983321865c4948791319b3e 100644 --- a/test/language/expressions/class/gen-method-yield-identifier-spread-strict.js +++ b/test/language/expressions/class/gen-method-yield-identifier-spread-strict.js @@ -1,8 +1,8 @@ // This file was procedurally generated from the following sources: // - src/generators/yield-identifier-spread-strict.case -// - src/generators/default/class-method-definition.template +// - src/generators/default/class-expr-method.template /*--- -description: It's an early error if the AssignmentExpression is a function body with yield as an identifier in strict mode. (Generator method as a ClassElement) +description: It's an early error if the AssignmentExpression is a function body with yield as an identifier in strict mode. (Generator method as a ClassExpression element) esid: prod-GeneratorMethod features: [object-spread] flags: [generated, onlyStrict] @@ -10,16 +10,16 @@ negative: phase: early type: SyntaxError info: | - ClassElement[Yield, Await]: - MethodDefinition[?Yield, ?Await] + ClassElement : + MethodDefinition - MethodDefinition[Yield, Await]: - GeneratorMethod[?Yield, ?Await] + MethodDefinition : + GeneratorMethod 14.4 Generator Function Definitions - GeneratorMethod[Yield, Await]: - * PropertyName[?Yield, ?Await] ( UniqueFormalParameters[+Yield, ~Await] ) { GeneratorBody } + GeneratorMethod : + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } Spread Properties @@ -31,7 +31,7 @@ info: | var callCount = 0; -class C { *gen() { +var C = class {*gen() { callCount += 1; return { ...(function() { diff --git a/test/language/expressions/class/gen-method-yield-identifier-strict.js b/test/language/expressions/class/gen-method-yield-identifier-strict.js index e9c76cef22181d31dfff003bf7b3e909c5916845..a9e667e528a6f5d612216f0d7469b45c83a6d1c1 100644 --- a/test/language/expressions/class/gen-method-yield-identifier-strict.js +++ b/test/language/expressions/class/gen-method-yield-identifier-strict.js @@ -1,29 +1,29 @@ // This file was procedurally generated from the following sources: // - src/generators/yield-identifier-strict.case -// - src/generators/default/class-method-definition.template +// - src/generators/default/class-expr-method.template /*--- -description: It's an early error if the generator body has another function body with yield as an identifier in strict mode. (Generator method as a ClassElement) +description: It's an early error if the generator body has another function body with yield as an identifier in strict mode. (Generator method as a ClassExpression element) esid: prod-GeneratorMethod flags: [generated, onlyStrict] negative: phase: early type: SyntaxError info: | - ClassElement[Yield, Await]: - MethodDefinition[?Yield, ?Await] + ClassElement : + MethodDefinition - MethodDefinition[Yield, Await]: - GeneratorMethod[?Yield, ?Await] + MethodDefinition : + GeneratorMethod 14.4 Generator Function Definitions - GeneratorMethod[Yield, Await]: - * PropertyName[?Yield, ?Await] ( UniqueFormalParameters[+Yield, ~Await] ) { GeneratorBody } + GeneratorMethod : + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } ---*/ var callCount = 0; -class C { *gen() { +var C = class {*gen() { callCount += 1; (function() { var yield; diff --git a/test/language/expressions/class/gen-method-yield-spread-arr-multiple.js b/test/language/expressions/class/gen-method-yield-spread-arr-multiple.js index 2bb68b422c13ff8201f31d547b22175c98785eec..ac42e5da8e12336e06bca9316914295a58054e13 100644 --- a/test/language/expressions/class/gen-method-yield-spread-arr-multiple.js +++ b/test/language/expressions/class/gen-method-yield-spread-arr-multiple.js @@ -1,22 +1,22 @@ // This file was procedurally generated from the following sources: // - src/generators/yield-spread-arr-multiple.case -// - src/generators/default/class-method-definition.template +// - src/generators/default/class-expr-method.template /*--- -description: Use yield value in a array spread position (Generator method as a ClassElement) +description: Use yield value in a array spread position (Generator method as a ClassExpression element) esid: prod-GeneratorMethod flags: [generated] includes: [compareArray.js] info: | - ClassElement[Yield, Await]: - MethodDefinition[?Yield, ?Await] + ClassElement : + MethodDefinition - MethodDefinition[Yield, Await]: - GeneratorMethod[?Yield, ?Await] + MethodDefinition : + GeneratorMethod 14.4 Generator Function Definitions - GeneratorMethod[Yield, Await]: - * PropertyName[?Yield, ?Await] ( UniqueFormalParameters[+Yield, ~Await] ) { GeneratorBody } + GeneratorMethod : + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } Array Initializer @@ -29,7 +29,7 @@ var item; var callCount = 0; -class C { *gen() { +var C = class {*gen() { callCount += 1; yield [...yield yield]; }} diff --git a/test/language/expressions/class/gen-method-yield-spread-arr-single.js b/test/language/expressions/class/gen-method-yield-spread-arr-single.js index 6732fcd7bd2fef8611fe4653c756a24d6973da69..a9ecc6af525b672ef4adb77112a2ec226ae58e51 100644 --- a/test/language/expressions/class/gen-method-yield-spread-arr-single.js +++ b/test/language/expressions/class/gen-method-yield-spread-arr-single.js @@ -1,22 +1,22 @@ // This file was procedurally generated from the following sources: // - src/generators/yield-spread-arr-single.case -// - src/generators/default/class-method-definition.template +// - src/generators/default/class-expr-method.template /*--- -description: Use yield value in a array spread position (Generator method as a ClassElement) +description: Use yield value in a array spread position (Generator method as a ClassExpression element) esid: prod-GeneratorMethod flags: [generated] includes: [compareArray.js] info: | - ClassElement[Yield, Await]: - MethodDefinition[?Yield, ?Await] + ClassElement : + MethodDefinition - MethodDefinition[Yield, Await]: - GeneratorMethod[?Yield, ?Await] + MethodDefinition : + GeneratorMethod 14.4 Generator Function Definitions - GeneratorMethod[Yield, Await]: - * PropertyName[?Yield, ?Await] ( UniqueFormalParameters[+Yield, ~Await] ) { GeneratorBody } + GeneratorMethod : + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } Array Initializer @@ -28,7 +28,7 @@ var arr = ['a', 'b', 'c']; var callCount = 0; -class C { *gen() { +var C = class {*gen() { callCount += 1; yield [...yield]; }} diff --git a/test/language/expressions/class/gen-method-yield-spread-obj.js b/test/language/expressions/class/gen-method-yield-spread-obj.js index 6795c8451735f1079fce64c59fa11d210d6a5f8f..192c508b2b9d4af125de924faa228502852af51a 100644 --- a/test/language/expressions/class/gen-method-yield-spread-obj.js +++ b/test/language/expressions/class/gen-method-yield-spread-obj.js @@ -1,23 +1,23 @@ // This file was procedurally generated from the following sources: // - src/generators/yield-spread-obj.case -// - src/generators/default/class-method-definition.template +// - src/generators/default/class-expr-method.template /*--- -description: Use yield value in a object spread position (Generator method as a ClassElement) +description: Use yield value in a object spread position (Generator method as a ClassExpression element) esid: prod-GeneratorMethod features: [object-spread] flags: [generated] includes: [compareArray.js] info: | - ClassElement[Yield, Await]: - MethodDefinition[?Yield, ?Await] + ClassElement : + MethodDefinition - MethodDefinition[Yield, Await]: - GeneratorMethod[?Yield, ?Await] + MethodDefinition : + GeneratorMethod 14.4 Generator Function Definitions - GeneratorMethod[Yield, Await]: - * PropertyName[?Yield, ?Await] ( UniqueFormalParameters[+Yield, ~Await] ) { GeneratorBody } + GeneratorMethod : + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } Spread Properties @@ -29,7 +29,7 @@ info: | var callCount = 0; -class C { *gen() { +var C = class {*gen() { callCount += 1; yield { ...yield, diff --git a/test/language/expressions/generators/named-yield-identifier-non-strict.js b/test/language/expressions/generators/named-yield-identifier-non-strict.js new file mode 100644 index 0000000000000000000000000000000000000000..857edb209b7b76359f7174ea6ece87b0e3f7e7f3 --- /dev/null +++ b/test/language/expressions/generators/named-yield-identifier-non-strict.js @@ -0,0 +1,37 @@ +// This file was procedurally generated from the following sources: +// - src/generators/yield-identifier-non-strict.case +// - src/generators/non-strict/expression-named.template +/*--- +description: Use of yield as a valid identifier in a function body inside a generator body in non strict mode (Generator named expression - valid for non-strict only cases) +esid: prod-GeneratorExpression +flags: [generated, noStrict] +info: | + 14.4 Generator Function Definitions + + GeneratorExpression: + function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody } +---*/ + +var callCount = 0; + +var gen = function *g() { + callCount += 1; + return (function(arg) { + var yield = arg + 1; + return yield; + }(yield)) +}; + +var iter = gen(); + +var item = iter.next(); + +assert.sameValue(item.done, false); +assert.sameValue(item.value, undefined); + +item = iter.next(42); + +assert.sameValue(item.done, true); +assert.sameValue(item.value, 43); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/generators/named-yield-identifier-spread-non-strict.js b/test/language/expressions/generators/named-yield-identifier-spread-non-strict.js new file mode 100644 index 0000000000000000000000000000000000000000..4931f2f953287fe9875afc339006f207e25a9df3 --- /dev/null +++ b/test/language/expressions/generators/named-yield-identifier-spread-non-strict.js @@ -0,0 +1,55 @@ +// This file was procedurally generated from the following sources: +// - src/generators/yield-identifier-spread-non-strict.case +// - src/generators/non-strict/expression-named.template +/*--- +description: Mixed use of object spread and yield as a valid identifier in a function body inside a generator body in non strict mode (Generator named expression - valid for non-strict only cases) +esid: prod-GeneratorExpression +features: [object-spread] +flags: [generated, noStrict] +info: | + 14.4 Generator Function Definitions + + GeneratorExpression: + function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody } + + Spread Properties + + PropertyDefinition[Yield]: + (...) + ...AssignmentExpression[In, ?Yield] + +---*/ + +var callCount = 0; + +var gen = function *g() { + callCount += 1; + yield { + ...yield yield, + ...(function(arg) { + var yield = arg; + return {...yield}; + }(yield)), + ...yield, + } +}; + +var iter = gen(); + +var iter = gen(); + +iter.next(); +iter.next(); +iter.next({ x: 10, a: 0, b: 0 }); +iter.next({ y: 20, a: 1, b: 1 }); +var item = iter.next({ z: 30, b: 2 }); + +assert.sameValue(item.done, false); +assert.sameValue(item.value.x, 10); +assert.sameValue(item.value.y, 20); +assert.sameValue(item.value.z, 30); +assert.sameValue(item.value.a, 1); +assert.sameValue(item.value.b, 2); +assert.sameValue(Object.keys(item.value).length, 5); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/generators/named-yield-identifier-spread-strict.js b/test/language/expressions/generators/named-yield-identifier-spread-strict.js new file mode 100644 index 0000000000000000000000000000000000000000..f375e7a0f8d667b36e7c19c6c694906157bbf500 --- /dev/null +++ b/test/language/expressions/generators/named-yield-identifier-spread-strict.js @@ -0,0 +1,42 @@ +// This file was procedurally generated from the following sources: +// - src/generators/yield-identifier-spread-strict.case +// - src/generators/default/expression-named.template +/*--- +description: It's an early error if the AssignmentExpression is a function body with yield as an identifier in strict mode. (Named generator expression) +esid: prod-GeneratorExpression +features: [object-spread] +flags: [generated, onlyStrict] +negative: + phase: early + type: SyntaxError +info: | + 14.4 Generator Function Definitions + + GeneratorExpression: + function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody } + + Spread Properties + + PropertyDefinition[Yield]: + (...) + ...AssignmentExpression[In, ?Yield] + +---*/ + +var callCount = 0; + +var gen = function *g() { + callCount += 1; + return { + ...(function() { + var yield; + throw new Test262Error(); + }()), + } +}; + +var iter = gen(); + + + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/generators/named-yield-identifier-strict.js b/test/language/expressions/generators/named-yield-identifier-strict.js new file mode 100644 index 0000000000000000000000000000000000000000..70101210b2778885c416262131ebdee0ea1e1fb3 --- /dev/null +++ b/test/language/expressions/generators/named-yield-identifier-strict.js @@ -0,0 +1,32 @@ +// This file was procedurally generated from the following sources: +// - src/generators/yield-identifier-strict.case +// - src/generators/default/expression-named.template +/*--- +description: It's an early error if the generator body has another function body with yield as an identifier in strict mode. (Named generator expression) +esid: prod-GeneratorExpression +flags: [generated, onlyStrict] +negative: + phase: early + type: SyntaxError +info: | + 14.4 Generator Function Definitions + + GeneratorExpression: + function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody } +---*/ + +var callCount = 0; + +var gen = function *g() { + callCount += 1; + (function() { + var yield; + throw new Test262Error(); + }()) +}; + +var iter = gen(); + + + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/generators/named-yield-spread-arr-multiple.js b/test/language/expressions/generators/named-yield-spread-arr-multiple.js new file mode 100644 index 0000000000000000000000000000000000000000..616f13cb4bda5a0cab44ccf3142d8b82e9ed4ffe --- /dev/null +++ b/test/language/expressions/generators/named-yield-spread-arr-multiple.js @@ -0,0 +1,40 @@ +// This file was procedurally generated from the following sources: +// - src/generators/yield-spread-arr-multiple.case +// - src/generators/default/expression-named.template +/*--- +description: Use yield value in a array spread position (Named generator expression) +esid: prod-GeneratorExpression +flags: [generated] +includes: [compareArray.js] +info: | + 14.4 Generator Function Definitions + + GeneratorExpression: + function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody } + + Array Initializer + + SpreadElement[Yield, Await]: + ...AssignmentExpression[+In, ?Yield, ?Await] + +---*/ +var arr = ['a', 'b', 'c']; +var item; + +var callCount = 0; + +var gen = function *g() { + callCount += 1; + yield [...yield yield]; +}; + +var iter = gen(); + +iter.next(false); +item = iter.next(['a', 'b', 'c']); +item = iter.next(item.value); + +assert(compareArray(item.value, arr)); +assert.sameValue(item.done, false); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/generators/named-yield-spread-arr-single.js b/test/language/expressions/generators/named-yield-spread-arr-single.js new file mode 100644 index 0000000000000000000000000000000000000000..eb2b8534d209d35f5ce92442c242824382b3bdf0 --- /dev/null +++ b/test/language/expressions/generators/named-yield-spread-arr-single.js @@ -0,0 +1,38 @@ +// This file was procedurally generated from the following sources: +// - src/generators/yield-spread-arr-single.case +// - src/generators/default/expression-named.template +/*--- +description: Use yield value in a array spread position (Named generator expression) +esid: prod-GeneratorExpression +flags: [generated] +includes: [compareArray.js] +info: | + 14.4 Generator Function Definitions + + GeneratorExpression: + function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody } + + Array Initializer + + SpreadElement[Yield, Await]: + ...AssignmentExpression[+In, ?Yield, ?Await] + +---*/ +var arr = ['a', 'b', 'c']; + +var callCount = 0; + +var gen = function *g() { + callCount += 1; + yield [...yield]; +}; + +var iter = gen(); + +iter.next(false); +var item = iter.next(['a', 'b', 'c']); + +assert(compareArray(item.value, arr)); +assert.sameValue(item.done, false); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/generators/named-yield-spread-obj.js b/test/language/expressions/generators/named-yield-spread-obj.js new file mode 100644 index 0000000000000000000000000000000000000000..86885614767384db9df3935d25aba759e966f80d --- /dev/null +++ b/test/language/expressions/generators/named-yield-spread-obj.js @@ -0,0 +1,47 @@ +// This file was procedurally generated from the following sources: +// - src/generators/yield-spread-obj.case +// - src/generators/default/expression-named.template +/*--- +description: Use yield value in a object spread position (Named generator expression) +esid: prod-GeneratorExpression +features: [object-spread] +flags: [generated] +includes: [compareArray.js] +info: | + 14.4 Generator Function Definitions + + GeneratorExpression: + function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody } + + Spread Properties + + PropertyDefinition[Yield]: + (...) + ...AssignmentExpression[In, ?Yield] + +---*/ + +var callCount = 0; + +var gen = function *g() { + callCount += 1; + yield { + ...yield, + y: 1, + ...yield yield, + }; +}; + +var iter = gen(); + +iter.next(); +iter.next({ x: 42 }); +iter.next({ x: 'lol' }); +var item = iter.next({ y: 39 }); + +assert.sameValue(item.value.x, 42); +assert.sameValue(item.value.y, 39); +assert.sameValue(Object.keys(item.value).length, 2); +assert.sameValue(item.done, false); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/generators/yield-identifier-non-strict.js b/test/language/expressions/generators/yield-identifier-non-strict.js index 80420e6d08ca8f6d0d47b950b153888067e88bc6..8cbb2e7fc8d94d1a621afc3bfa996728a886b11c 100644 --- a/test/language/expressions/generators/yield-identifier-non-strict.js +++ b/test/language/expressions/generators/yield-identifier-non-strict.js @@ -9,7 +9,7 @@ info: | 14.4 Generator Function Definitions GeneratorExpression: - function * BindingIdentifier[+Yield, ~Await]opt ( FormalParameters[+Yield, ~Await] ) { GeneratorBody } + function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody } ---*/ var callCount = 0; diff --git a/test/language/expressions/generators/yield-identifier-spread-non-strict.js b/test/language/expressions/generators/yield-identifier-spread-non-strict.js index fd9025f6c921ff86800edb859efb0c08027e6c63..2991544a0607cef32b8d89cd07df3ad1b37e7b28 100644 --- a/test/language/expressions/generators/yield-identifier-spread-non-strict.js +++ b/test/language/expressions/generators/yield-identifier-spread-non-strict.js @@ -10,7 +10,7 @@ info: | 14.4 Generator Function Definitions GeneratorExpression: - function * BindingIdentifier[+Yield, ~Await]opt ( FormalParameters[+Yield, ~Await] ) { GeneratorBody } + function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody } Spread Properties diff --git a/test/language/expressions/generators/yield-identifier-spread-strict.js b/test/language/expressions/generators/yield-identifier-spread-strict.js index c485c04500d4e9c77fdcee7b45b4e66924f7674a..3b1d37d61779b5d53d1130a0b63a2130280d33b3 100644 --- a/test/language/expressions/generators/yield-identifier-spread-strict.js +++ b/test/language/expressions/generators/yield-identifier-spread-strict.js @@ -2,7 +2,7 @@ // - src/generators/yield-identifier-spread-strict.case // - src/generators/default/expression.template /*--- -description: It's an early error if the AssignmentExpression is a function body with yield as an identifier in strict mode. (Generator expression) +description: It's an early error if the AssignmentExpression is a function body with yield as an identifier in strict mode. (Unnamed generator expression) esid: prod-GeneratorExpression features: [object-spread] flags: [generated, onlyStrict] @@ -13,7 +13,7 @@ info: | 14.4 Generator Function Definitions GeneratorExpression: - function * BindingIdentifier[+Yield, ~Await]opt ( FormalParameters[+Yield, ~Await] ) { GeneratorBody } + function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody } Spread Properties diff --git a/test/language/expressions/generators/yield-identifier-strict.js b/test/language/expressions/generators/yield-identifier-strict.js index f6bdb03ede1fbade5c2d4d4513d111c35f42fd65..b6554db8fd336286830f401e066f6aa905fe8808 100644 --- a/test/language/expressions/generators/yield-identifier-strict.js +++ b/test/language/expressions/generators/yield-identifier-strict.js @@ -2,7 +2,7 @@ // - src/generators/yield-identifier-strict.case // - src/generators/default/expression.template /*--- -description: It's an early error if the generator body has another function body with yield as an identifier in strict mode. (Generator expression) +description: It's an early error if the generator body has another function body with yield as an identifier in strict mode. (Unnamed generator expression) esid: prod-GeneratorExpression flags: [generated, onlyStrict] negative: @@ -12,7 +12,7 @@ info: | 14.4 Generator Function Definitions GeneratorExpression: - function * BindingIdentifier[+Yield, ~Await]opt ( FormalParameters[+Yield, ~Await] ) { GeneratorBody } + function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody } ---*/ var callCount = 0; diff --git a/test/language/expressions/generators/yield-spread-arr-multiple.js b/test/language/expressions/generators/yield-spread-arr-multiple.js index 272a6acb666b34fce59c1469b0ada648e4446e89..f8958a970f47f753d87cad7a9483805d89fd19d5 100644 --- a/test/language/expressions/generators/yield-spread-arr-multiple.js +++ b/test/language/expressions/generators/yield-spread-arr-multiple.js @@ -2,7 +2,7 @@ // - src/generators/yield-spread-arr-multiple.case // - src/generators/default/expression.template /*--- -description: Use yield value in a array spread position (Generator expression) +description: Use yield value in a array spread position (Unnamed generator expression) esid: prod-GeneratorExpression flags: [generated] includes: [compareArray.js] @@ -10,7 +10,7 @@ info: | 14.4 Generator Function Definitions GeneratorExpression: - function * BindingIdentifier[+Yield, ~Await]opt ( FormalParameters[+Yield, ~Await] ) { GeneratorBody } + function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody } Array Initializer diff --git a/test/language/expressions/generators/yield-spread-arr-single.js b/test/language/expressions/generators/yield-spread-arr-single.js index 636ac3e889463152bade7dfca5ad105aa910808a..f9cba19aa323d8edd47e31d7e5d476050d0f2a57 100644 --- a/test/language/expressions/generators/yield-spread-arr-single.js +++ b/test/language/expressions/generators/yield-spread-arr-single.js @@ -2,7 +2,7 @@ // - src/generators/yield-spread-arr-single.case // - src/generators/default/expression.template /*--- -description: Use yield value in a array spread position (Generator expression) +description: Use yield value in a array spread position (Unnamed generator expression) esid: prod-GeneratorExpression flags: [generated] includes: [compareArray.js] @@ -10,7 +10,7 @@ info: | 14.4 Generator Function Definitions GeneratorExpression: - function * BindingIdentifier[+Yield, ~Await]opt ( FormalParameters[+Yield, ~Await] ) { GeneratorBody } + function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody } Array Initializer diff --git a/test/language/expressions/generators/yield-spread-obj.js b/test/language/expressions/generators/yield-spread-obj.js index f7c6f2e85e857c026fcf6ad4780166c8b027e3c4..e05908ccac28dd833a604e2121f8681677d6700c 100644 --- a/test/language/expressions/generators/yield-spread-obj.js +++ b/test/language/expressions/generators/yield-spread-obj.js @@ -2,7 +2,7 @@ // - src/generators/yield-spread-obj.case // - src/generators/default/expression.template /*--- -description: Use yield value in a object spread position (Generator expression) +description: Use yield value in a object spread position (Unnamed generator expression) esid: prod-GeneratorExpression features: [object-spread] flags: [generated] @@ -11,7 +11,7 @@ info: | 14.4 Generator Function Definitions GeneratorExpression: - function * BindingIdentifier[+Yield, ~Await]opt ( FormalParameters[+Yield, ~Await] ) { GeneratorBody } + function * BindingIdentifier opt ( FormalParameters ) { GeneratorBody } Spread Properties diff --git a/test/language/expressions/object/method-definition/generator-yield-identifier-non-strict.js b/test/language/expressions/object/method-definition/gen-yield-identifier-non-strict.js similarity index 84% rename from test/language/expressions/object/method-definition/generator-yield-identifier-non-strict.js rename to test/language/expressions/object/method-definition/gen-yield-identifier-non-strict.js index 3790d7b8aac833717443291ba037c8cb58446594..bb23db974688cfd336a760d7f9644989c0079820 100644 --- a/test/language/expressions/object/method-definition/generator-yield-identifier-non-strict.js +++ b/test/language/expressions/object/method-definition/gen-yield-identifier-non-strict.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/generators/yield-identifier-non-strict.case -// - src/generators/non-strict/method-definition.template +// - src/generators/non-strict/obj-method.template /*--- description: Use of yield as a valid identifier in a function body inside a generator body in non strict mode (Generator method - valid for non-strict only cases) esid: prod-GeneratorMethod @@ -9,7 +9,7 @@ info: | 14.4 Generator Function Definitions GeneratorMethod[Yield, Await]: - * PropertyName[?Yield, ?Await] ( UniqueFormalParameters[+Yield, ~Await] ) { GeneratorBody } + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } ---*/ var callCount = 0; diff --git a/test/language/expressions/object/method-definition/generator-yield-identifier-spread-non-strict.js b/test/language/expressions/object/method-definition/gen-yield-identifier-spread-non-strict.js similarity index 89% rename from test/language/expressions/object/method-definition/generator-yield-identifier-spread-non-strict.js rename to test/language/expressions/object/method-definition/gen-yield-identifier-spread-non-strict.js index 6e527d280b2a9ab772e3196ee6ff8c115e74afc5..02c646bf754f83895f1ca0a84dd2cae8054396fe 100644 --- a/test/language/expressions/object/method-definition/generator-yield-identifier-spread-non-strict.js +++ b/test/language/expressions/object/method-definition/gen-yield-identifier-spread-non-strict.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/generators/yield-identifier-spread-non-strict.case -// - src/generators/non-strict/method-definition.template +// - src/generators/non-strict/obj-method.template /*--- description: Mixed use of object spread and yield as a valid identifier in a function body inside a generator body in non strict mode (Generator method - valid for non-strict only cases) esid: prod-GeneratorMethod @@ -10,7 +10,7 @@ info: | 14.4 Generator Function Definitions GeneratorMethod[Yield, Await]: - * PropertyName[?Yield, ?Await] ( UniqueFormalParameters[+Yield, ~Await] ) { GeneratorBody } + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } Spread Properties diff --git a/test/language/expressions/object/method-definition/generator-yield-identifier-spread-strict.js b/test/language/expressions/object/method-definition/gen-yield-identifier-spread-strict.js similarity index 94% rename from test/language/expressions/object/method-definition/generator-yield-identifier-spread-strict.js rename to test/language/expressions/object/method-definition/gen-yield-identifier-spread-strict.js index 3d43dc780483c73faf4447834b6ae39891c41f63..801084fe312ea6e331a2a0f4f3b7396106ffb8b4 100644 --- a/test/language/expressions/object/method-definition/generator-yield-identifier-spread-strict.js +++ b/test/language/expressions/object/method-definition/gen-yield-identifier-spread-strict.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/generators/yield-identifier-spread-strict.case -// - src/generators/default/method-definition.template +// - src/generators/default/obj-method.template /*--- description: It's an early error if the AssignmentExpression is a function body with yield as an identifier in strict mode. (Generator method) esid: prod-GeneratorMethod diff --git a/test/language/expressions/object/method-definition/generator-yield-identifier-strict.js b/test/language/expressions/object/method-definition/gen-yield-identifier-strict.js similarity index 93% rename from test/language/expressions/object/method-definition/generator-yield-identifier-strict.js rename to test/language/expressions/object/method-definition/gen-yield-identifier-strict.js index 0f1ad962cfce7ca17de982377d3585e1978ece11..617cad48bb78c682ebd59961eb636cedf99959da 100644 --- a/test/language/expressions/object/method-definition/generator-yield-identifier-strict.js +++ b/test/language/expressions/object/method-definition/gen-yield-identifier-strict.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/generators/yield-identifier-strict.case -// - src/generators/default/method-definition.template +// - src/generators/default/obj-method.template /*--- description: It's an early error if the generator body has another function body with yield as an identifier in strict mode. (Generator method) esid: prod-GeneratorMethod diff --git a/test/language/expressions/object/method-definition/generator-yield-spread-arr-multiple.js b/test/language/expressions/object/method-definition/gen-yield-spread-arr-multiple.js similarity index 94% rename from test/language/expressions/object/method-definition/generator-yield-spread-arr-multiple.js rename to test/language/expressions/object/method-definition/gen-yield-spread-arr-multiple.js index f0c2c30ea2240952abcbab805f080be746a035cc..c8ac0b133b7ec552caef0f0227069d56e7fee906 100644 --- a/test/language/expressions/object/method-definition/generator-yield-spread-arr-multiple.js +++ b/test/language/expressions/object/method-definition/gen-yield-spread-arr-multiple.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/generators/yield-spread-arr-multiple.case -// - src/generators/default/method-definition.template +// - src/generators/default/obj-method.template /*--- description: Use yield value in a array spread position (Generator method) esid: prod-GeneratorMethod diff --git a/test/language/expressions/object/method-definition/generator-yield-spread-arr-single.js b/test/language/expressions/object/method-definition/gen-yield-spread-arr-single.js similarity index 94% rename from test/language/expressions/object/method-definition/generator-yield-spread-arr-single.js rename to test/language/expressions/object/method-definition/gen-yield-spread-arr-single.js index a535807236c17704e4ad37371635ed7b289a9c7f..47a3f9d5beca15f60e56b2ac1c43ad8d221c8a3a 100644 --- a/test/language/expressions/object/method-definition/generator-yield-spread-arr-single.js +++ b/test/language/expressions/object/method-definition/gen-yield-spread-arr-single.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/generators/yield-spread-arr-single.case -// - src/generators/default/method-definition.template +// - src/generators/default/obj-method.template /*--- description: Use yield value in a array spread position (Generator method) esid: prod-GeneratorMethod diff --git a/test/language/expressions/object/method-definition/generator-yield-spread-obj.js b/test/language/expressions/object/method-definition/gen-yield-spread-obj.js similarity index 95% rename from test/language/expressions/object/method-definition/generator-yield-spread-obj.js rename to test/language/expressions/object/method-definition/gen-yield-spread-obj.js index a135327fa7a7fd415f2feb95962a5209b6e0f1c0..c52740bf46e7403f204c566caadb234424108e15 100644 --- a/test/language/expressions/object/method-definition/generator-yield-spread-obj.js +++ b/test/language/expressions/object/method-definition/gen-yield-spread-obj.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/generators/yield-spread-obj.case -// - src/generators/default/method-definition.template +// - src/generators/default/obj-method.template /*--- description: Use yield value in a object spread position (Generator method) esid: prod-GeneratorMethod diff --git a/test/language/statements/class/gen-method-static-yield-identifier-spread-strict.js b/test/language/statements/class/gen-method-static-yield-identifier-spread-strict.js new file mode 100644 index 0000000000000000000000000000000000000000..1ccd80303971d4a394baf1f74a2fb351ee37462c --- /dev/null +++ b/test/language/statements/class/gen-method-static-yield-identifier-spread-strict.js @@ -0,0 +1,50 @@ +// This file was procedurally generated from the following sources: +// - src/generators/yield-identifier-spread-strict.case +// - src/generators/default/class-decl-static-method.template +/*--- +description: It's an early error if the AssignmentExpression is a function body with yield as an identifier in strict mode. (Static generator method as a ClassDeclaration element) +esid: prod-GeneratorMethod +features: [object-spread] +flags: [generated, onlyStrict] +negative: + phase: early + type: SyntaxError +info: | + ClassElement : + static MethodDefinition + + MethodDefinition : + GeneratorMethod + + 14.4 Generator Function Definitions + + GeneratorMethod : + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } + + Spread Properties + + PropertyDefinition[Yield]: + (...) + ...AssignmentExpression[In, ?Yield] + +---*/ + +var callCount = 0; + +class C {static *gen() { + callCount += 1; + return { + ...(function() { + var yield; + throw new Test262Error(); + }()), + } +}} + +var gen = C.gen; + +var iter = gen(); + + + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/class/gen-method-static-yield-identifier-strict.js b/test/language/statements/class/gen-method-static-yield-identifier-strict.js new file mode 100644 index 0000000000000000000000000000000000000000..82ffa649c91ab876ea413f05aa1ac19fbede1ccf --- /dev/null +++ b/test/language/statements/class/gen-method-static-yield-identifier-strict.js @@ -0,0 +1,40 @@ +// This file was procedurally generated from the following sources: +// - src/generators/yield-identifier-strict.case +// - src/generators/default/class-decl-static-method.template +/*--- +description: It's an early error if the generator body has another function body with yield as an identifier in strict mode. (Static generator method as a ClassDeclaration element) +esid: prod-GeneratorMethod +flags: [generated, onlyStrict] +negative: + phase: early + type: SyntaxError +info: | + ClassElement : + static MethodDefinition + + MethodDefinition : + GeneratorMethod + + 14.4 Generator Function Definitions + + GeneratorMethod : + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } +---*/ + +var callCount = 0; + +class C {static *gen() { + callCount += 1; + (function() { + var yield; + throw new Test262Error(); + }()) +}} + +var gen = C.gen; + +var iter = gen(); + + + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/class/gen-method-static-yield-spread-arr-multiple.js b/test/language/statements/class/gen-method-static-yield-spread-arr-multiple.js new file mode 100644 index 0000000000000000000000000000000000000000..9a100d24559b5e9914c292ee0321ec079cfa6184 --- /dev/null +++ b/test/language/statements/class/gen-method-static-yield-spread-arr-multiple.js @@ -0,0 +1,48 @@ +// This file was procedurally generated from the following sources: +// - src/generators/yield-spread-arr-multiple.case +// - src/generators/default/class-decl-static-method.template +/*--- +description: Use yield value in a array spread position (Static generator method as a ClassDeclaration element) +esid: prod-GeneratorMethod +flags: [generated] +includes: [compareArray.js] +info: | + ClassElement : + static MethodDefinition + + MethodDefinition : + GeneratorMethod + + 14.4 Generator Function Definitions + + GeneratorMethod : + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } + + Array Initializer + + SpreadElement[Yield, Await]: + ...AssignmentExpression[+In, ?Yield, ?Await] + +---*/ +var arr = ['a', 'b', 'c']; +var item; + +var callCount = 0; + +class C {static *gen() { + callCount += 1; + yield [...yield yield]; +}} + +var gen = C.gen; + +var iter = gen(); + +iter.next(false); +item = iter.next(['a', 'b', 'c']); +item = iter.next(item.value); + +assert(compareArray(item.value, arr)); +assert.sameValue(item.done, false); + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/class/gen-method-static-yield-spread-arr-single.js b/test/language/statements/class/gen-method-static-yield-spread-arr-single.js new file mode 100644 index 0000000000000000000000000000000000000000..900dc84d4601abd42646f2f87986a379964e5d8a --- /dev/null +++ b/test/language/statements/class/gen-method-static-yield-spread-arr-single.js @@ -0,0 +1,46 @@ +// This file was procedurally generated from the following sources: +// - src/generators/yield-spread-arr-single.case +// - src/generators/default/class-decl-static-method.template +/*--- +description: Use yield value in a array spread position (Static generator method as a ClassDeclaration element) +esid: prod-GeneratorMethod +flags: [generated] +includes: [compareArray.js] +info: | + ClassElement : + static MethodDefinition + + MethodDefinition : + GeneratorMethod + + 14.4 Generator Function Definitions + + GeneratorMethod : + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } + + Array Initializer + + SpreadElement[Yield, Await]: + ...AssignmentExpression[+In, ?Yield, ?Await] + +---*/ +var arr = ['a', 'b', 'c']; + +var callCount = 0; + +class C {static *gen() { + callCount += 1; + yield [...yield]; +}} + +var gen = C.gen; + +var iter = gen(); + +iter.next(false); +var item = iter.next(['a', 'b', 'c']); + +assert(compareArray(item.value, arr)); +assert.sameValue(item.done, false); + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/class/gen-method-static-yield-spread-obj.js b/test/language/statements/class/gen-method-static-yield-spread-obj.js new file mode 100644 index 0000000000000000000000000000000000000000..04a4f30e67bc2d73d49feeec2c8af15290031ee9 --- /dev/null +++ b/test/language/statements/class/gen-method-static-yield-spread-obj.js @@ -0,0 +1,55 @@ +// This file was procedurally generated from the following sources: +// - src/generators/yield-spread-obj.case +// - src/generators/default/class-decl-static-method.template +/*--- +description: Use yield value in a object spread position (Static generator method as a ClassDeclaration element) +esid: prod-GeneratorMethod +features: [object-spread] +flags: [generated] +includes: [compareArray.js] +info: | + ClassElement : + static MethodDefinition + + MethodDefinition : + GeneratorMethod + + 14.4 Generator Function Definitions + + GeneratorMethod : + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } + + Spread Properties + + PropertyDefinition[Yield]: + (...) + ...AssignmentExpression[In, ?Yield] + +---*/ + +var callCount = 0; + +class C {static *gen() { + callCount += 1; + yield { + ...yield, + y: 1, + ...yield yield, + }; +}} + +var gen = C.gen; + +var iter = gen(); + +iter.next(); +iter.next({ x: 42 }); +iter.next({ x: 'lol' }); +var item = iter.next({ y: 39 }); + +assert.sameValue(item.value.x, 42); +assert.sameValue(item.value.y, 39); +assert.sameValue(Object.keys(item.value).length, 2); +assert.sameValue(item.done, false); + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/class/gen-method-yield-identifier-spread-strict.js b/test/language/statements/class/gen-method-yield-identifier-spread-strict.js new file mode 100644 index 0000000000000000000000000000000000000000..43a076fcfab9fbd7f438b42b5eab02235f698233 --- /dev/null +++ b/test/language/statements/class/gen-method-yield-identifier-spread-strict.js @@ -0,0 +1,50 @@ +// This file was procedurally generated from the following sources: +// - src/generators/yield-identifier-spread-strict.case +// - src/generators/default/class-decl-method.template +/*--- +description: It's an early error if the AssignmentExpression is a function body with yield as an identifier in strict mode. (Geenerator method as a ClassDeclaration element) +esid: prod-GeneratorMethod +features: [object-spread] +flags: [generated, onlyStrict] +negative: + phase: early + type: SyntaxError +info: | + ClassElement : + MethodDefinition + + MethodDefinition : + GeneratorMethod + + 14.4 Generator Function Definitions + + GeneratorMethod : + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } + + Spread Properties + + PropertyDefinition[Yield]: + (...) + ...AssignmentExpression[In, ?Yield] + +---*/ + +var callCount = 0; + +class C { *gen() { + callCount += 1; + return { + ...(function() { + var yield; + throw new Test262Error(); + }()), + } +}} + +var gen = C.prototype.gen; + +var iter = gen(); + + + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/class/gen-method-yield-identifier-strict.js b/test/language/statements/class/gen-method-yield-identifier-strict.js new file mode 100644 index 0000000000000000000000000000000000000000..ae27517773b2138344f75ccbcb41a63c5f40a1c9 --- /dev/null +++ b/test/language/statements/class/gen-method-yield-identifier-strict.js @@ -0,0 +1,40 @@ +// This file was procedurally generated from the following sources: +// - src/generators/yield-identifier-strict.case +// - src/generators/default/class-decl-method.template +/*--- +description: It's an early error if the generator body has another function body with yield as an identifier in strict mode. (Geenerator method as a ClassDeclaration element) +esid: prod-GeneratorMethod +flags: [generated, onlyStrict] +negative: + phase: early + type: SyntaxError +info: | + ClassElement : + MethodDefinition + + MethodDefinition : + GeneratorMethod + + 14.4 Generator Function Definitions + + GeneratorMethod : + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } +---*/ + +var callCount = 0; + +class C { *gen() { + callCount += 1; + (function() { + var yield; + throw new Test262Error(); + }()) +}} + +var gen = C.prototype.gen; + +var iter = gen(); + + + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/class/gen-method-yield-spread-arr-multiple.js b/test/language/statements/class/gen-method-yield-spread-arr-multiple.js new file mode 100644 index 0000000000000000000000000000000000000000..daf4bbd4a2753a8b85b2de5577364a2a8142611d --- /dev/null +++ b/test/language/statements/class/gen-method-yield-spread-arr-multiple.js @@ -0,0 +1,48 @@ +// This file was procedurally generated from the following sources: +// - src/generators/yield-spread-arr-multiple.case +// - src/generators/default/class-decl-method.template +/*--- +description: Use yield value in a array spread position (Geenerator method as a ClassDeclaration element) +esid: prod-GeneratorMethod +flags: [generated] +includes: [compareArray.js] +info: | + ClassElement : + MethodDefinition + + MethodDefinition : + GeneratorMethod + + 14.4 Generator Function Definitions + + GeneratorMethod : + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } + + Array Initializer + + SpreadElement[Yield, Await]: + ...AssignmentExpression[+In, ?Yield, ?Await] + +---*/ +var arr = ['a', 'b', 'c']; +var item; + +var callCount = 0; + +class C { *gen() { + callCount += 1; + yield [...yield yield]; +}} + +var gen = C.prototype.gen; + +var iter = gen(); + +iter.next(false); +item = iter.next(['a', 'b', 'c']); +item = iter.next(item.value); + +assert(compareArray(item.value, arr)); +assert.sameValue(item.done, false); + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/class/gen-method-yield-spread-arr-single.js b/test/language/statements/class/gen-method-yield-spread-arr-single.js new file mode 100644 index 0000000000000000000000000000000000000000..6ae9e72200249bb8029ce4719fe10d9898c5ffff --- /dev/null +++ b/test/language/statements/class/gen-method-yield-spread-arr-single.js @@ -0,0 +1,46 @@ +// This file was procedurally generated from the following sources: +// - src/generators/yield-spread-arr-single.case +// - src/generators/default/class-decl-method.template +/*--- +description: Use yield value in a array spread position (Geenerator method as a ClassDeclaration element) +esid: prod-GeneratorMethod +flags: [generated] +includes: [compareArray.js] +info: | + ClassElement : + MethodDefinition + + MethodDefinition : + GeneratorMethod + + 14.4 Generator Function Definitions + + GeneratorMethod : + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } + + Array Initializer + + SpreadElement[Yield, Await]: + ...AssignmentExpression[+In, ?Yield, ?Await] + +---*/ +var arr = ['a', 'b', 'c']; + +var callCount = 0; + +class C { *gen() { + callCount += 1; + yield [...yield]; +}} + +var gen = C.prototype.gen; + +var iter = gen(); + +iter.next(false); +var item = iter.next(['a', 'b', 'c']); + +assert(compareArray(item.value, arr)); +assert.sameValue(item.done, false); + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/class/gen-method-yield-spread-obj.js b/test/language/statements/class/gen-method-yield-spread-obj.js new file mode 100644 index 0000000000000000000000000000000000000000..693003505c5bd97d07eceb9e6959ad97e0b6287e --- /dev/null +++ b/test/language/statements/class/gen-method-yield-spread-obj.js @@ -0,0 +1,55 @@ +// This file was procedurally generated from the following sources: +// - src/generators/yield-spread-obj.case +// - src/generators/default/class-decl-method.template +/*--- +description: Use yield value in a object spread position (Geenerator method as a ClassDeclaration element) +esid: prod-GeneratorMethod +features: [object-spread] +flags: [generated] +includes: [compareArray.js] +info: | + ClassElement : + MethodDefinition + + MethodDefinition : + GeneratorMethod + + 14.4 Generator Function Definitions + + GeneratorMethod : + * PropertyName ( UniqueFormalParameters ) { GeneratorBody } + + Spread Properties + + PropertyDefinition[Yield]: + (...) + ...AssignmentExpression[In, ?Yield] + +---*/ + +var callCount = 0; + +class C { *gen() { + callCount += 1; + yield { + ...yield, + y: 1, + ...yield yield, + }; +}} + +var gen = C.prototype.gen; + +var iter = gen(); + +iter.next(); +iter.next({ x: 42 }); +iter.next({ x: 'lol' }); +var item = iter.next({ y: 39 }); + +assert.sameValue(item.value.x, 42); +assert.sameValue(item.value.y, 39); +assert.sameValue(Object.keys(item.value).length, 2); +assert.sameValue(item.done, false); + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/generators/yield-identifier-non-strict.js b/test/language/statements/generators/yield-identifier-non-strict.js index d69c887c7d63560e2f1f3301e76b04544e5188e3..afc45810b97adeef3205810772efc3a65e1d3110 100644 --- a/test/language/statements/generators/yield-identifier-non-strict.js +++ b/test/language/statements/generators/yield-identifier-non-strict.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/generators/yield-identifier-non-strict.case -// - src/generators/non-strict/statement.template +// - src/generators/non-strict/declaration.template /*--- description: Use of yield as a valid identifier in a function body inside a generator body in non strict mode (Generator function declaration - valid for non-strict only cases) esid: prod-GeneratorDeclaration diff --git a/test/language/statements/generators/yield-identifier-spread-non-strict.js b/test/language/statements/generators/yield-identifier-spread-non-strict.js index 98d33db21afde2cd2860de8151f29f768cc37297..3fa89b1dfa78069bba034f3922f7036edaba61f0 100644 --- a/test/language/statements/generators/yield-identifier-spread-non-strict.js +++ b/test/language/statements/generators/yield-identifier-spread-non-strict.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/generators/yield-identifier-spread-non-strict.case -// - src/generators/non-strict/statement.template +// - src/generators/non-strict/declaration.template /*--- description: Mixed use of object spread and yield as a valid identifier in a function body inside a generator body in non strict mode (Generator function declaration - valid for non-strict only cases) esid: prod-GeneratorDeclaration diff --git a/test/language/statements/generators/yield-identifier-spread-strict.js b/test/language/statements/generators/yield-identifier-spread-strict.js index 6faf35d9b67619d7c5601653dcc8a0569fb932a6..f682d958becf74962b10ce925933baae9f55dabd 100644 --- a/test/language/statements/generators/yield-identifier-spread-strict.js +++ b/test/language/statements/generators/yield-identifier-spread-strict.js @@ -1,8 +1,8 @@ // This file was procedurally generated from the following sources: // - src/generators/yield-identifier-spread-strict.case -// - src/generators/default/statement.template +// - src/generators/default/declaration.template /*--- -description: It's an early error if the AssignmentExpression is a function body with yield as an identifier in strict mode. (Generator function declaration) +description: It's an early error if the AssignmentExpression is a function body with yield as an identifier in strict mode. (Generator Function declaration) esid: prod-GeneratorDeclaration features: [object-spread] flags: [generated, onlyStrict] @@ -12,8 +12,8 @@ negative: info: | 14.4 Generator Function Definitions - GeneratorDeclaration[Yield, Await, Default]: - function * BindingIdentifier[?Yield, ?Await] ( FormalParameters[+Yield, ~Await] ) { GeneratorBody } + GeneratorDeclaration : + function * BindingIdentifier ( FormalParameters ) { GeneratorBody } Spread Properties diff --git a/test/language/statements/generators/yield-identifier-strict.js b/test/language/statements/generators/yield-identifier-strict.js index 90339c3715bd1fc52036dacf956cdee42272901b..7c9c5debea4c167d1ee327817ae4bc522450b2ff 100644 --- a/test/language/statements/generators/yield-identifier-strict.js +++ b/test/language/statements/generators/yield-identifier-strict.js @@ -1,8 +1,8 @@ // This file was procedurally generated from the following sources: // - src/generators/yield-identifier-strict.case -// - src/generators/default/statement.template +// - src/generators/default/declaration.template /*--- -description: It's an early error if the generator body has another function body with yield as an identifier in strict mode. (Generator function declaration) +description: It's an early error if the generator body has another function body with yield as an identifier in strict mode. (Generator Function declaration) esid: prod-GeneratorDeclaration flags: [generated, onlyStrict] negative: @@ -11,8 +11,8 @@ negative: info: | 14.4 Generator Function Definitions - GeneratorDeclaration[Yield, Await, Default]: - function * BindingIdentifier[?Yield, ?Await] ( FormalParameters[+Yield, ~Await] ) { GeneratorBody } + GeneratorDeclaration : + function * BindingIdentifier ( FormalParameters ) { GeneratorBody } ---*/ var callCount = 0; diff --git a/test/language/statements/generators/yield-spread-arr-multiple.js b/test/language/statements/generators/yield-spread-arr-multiple.js index 515ac675b3fba4a623357109b9375d81e95e1f66..1fdf352d0b4e7fb8b79c05dae383a3b0050f15b2 100644 --- a/test/language/statements/generators/yield-spread-arr-multiple.js +++ b/test/language/statements/generators/yield-spread-arr-multiple.js @@ -1,16 +1,16 @@ // This file was procedurally generated from the following sources: // - src/generators/yield-spread-arr-multiple.case -// - src/generators/default/statement.template +// - src/generators/default/declaration.template /*--- -description: Use yield value in a array spread position (Generator function declaration) +description: Use yield value in a array spread position (Generator Function declaration) esid: prod-GeneratorDeclaration flags: [generated] includes: [compareArray.js] info: | 14.4 Generator Function Definitions - GeneratorDeclaration[Yield, Await, Default]: - function * BindingIdentifier[?Yield, ?Await] ( FormalParameters[+Yield, ~Await] ) { GeneratorBody } + GeneratorDeclaration : + function * BindingIdentifier ( FormalParameters ) { GeneratorBody } Array Initializer diff --git a/test/language/statements/generators/yield-spread-arr-single.js b/test/language/statements/generators/yield-spread-arr-single.js index ab30e3785ecd90dff05be295c7de2c8a9d6b97fc..00aaba1eca72938079b541a6c837f104d6aae528 100644 --- a/test/language/statements/generators/yield-spread-arr-single.js +++ b/test/language/statements/generators/yield-spread-arr-single.js @@ -1,16 +1,16 @@ // This file was procedurally generated from the following sources: // - src/generators/yield-spread-arr-single.case -// - src/generators/default/statement.template +// - src/generators/default/declaration.template /*--- -description: Use yield value in a array spread position (Generator function declaration) +description: Use yield value in a array spread position (Generator Function declaration) esid: prod-GeneratorDeclaration flags: [generated] includes: [compareArray.js] info: | 14.4 Generator Function Definitions - GeneratorDeclaration[Yield, Await, Default]: - function * BindingIdentifier[?Yield, ?Await] ( FormalParameters[+Yield, ~Await] ) { GeneratorBody } + GeneratorDeclaration : + function * BindingIdentifier ( FormalParameters ) { GeneratorBody } Array Initializer diff --git a/test/language/statements/generators/yield-spread-obj.js b/test/language/statements/generators/yield-spread-obj.js index da341009469caaa881c290dfd92ccd1fcddd62b6..d5f22061793a1f5233196315e2a8b50b737a5aa0 100644 --- a/test/language/statements/generators/yield-spread-obj.js +++ b/test/language/statements/generators/yield-spread-obj.js @@ -1,8 +1,8 @@ // This file was procedurally generated from the following sources: // - src/generators/yield-spread-obj.case -// - src/generators/default/statement.template +// - src/generators/default/declaration.template /*--- -description: Use yield value in a object spread position (Generator function declaration) +description: Use yield value in a object spread position (Generator Function declaration) esid: prod-GeneratorDeclaration features: [object-spread] flags: [generated] @@ -10,8 +10,8 @@ includes: [compareArray.js] info: | 14.4 Generator Function Definitions - GeneratorDeclaration[Yield, Await, Default]: - function * BindingIdentifier[?Yield, ?Await] ( FormalParameters[+Yield, ~Await] ) { GeneratorBody } + GeneratorDeclaration : + function * BindingIdentifier ( FormalParameters ) { GeneratorBody } Spread Properties