From 2786109a86c78fe94bd5d00455d65d9bf2fbbcf8 Mon Sep 17 00:00:00 2001 From: Leo Balter Date: Thu, 1 Aug 2019 16:21:09 -0400 Subject: [PATCH 1/2] Add cases for Optional Expressions as DestructuringAssignmentTarget --- features.txt | 4 ++ ...ted-memberexpr-optchain-prop-ref-init.case | 55 ++++++++++++++++++ ...m-nested-memberexpr-optchain-prop-ref.case | 55 ++++++++++++++++++ ...ut-obj-literal-optchain-prop-ref-init.case | 57 +++++++++++++++++++ ...lem-put-obj-literal-optchain-prop-ref.case | 57 +++++++++++++++++++ ...get-memberexpr-optchain-prop-ref-init.case | 55 ++++++++++++++++++ ...m-target-memberexpr-optchain-prop-ref.case | 55 ++++++++++++++++++ ...et-obj-literal-optchain-prop-ref-init.case | 57 +++++++++++++++++++ ...-target-obj-literal-optchain-prop-ref.case | 57 +++++++++++++++++++ .../syntax/assignment-expr.template | 1 - src/dstr-assignment/syntax/for-in.template | 1 - src/dstr-assignment/syntax/for-of.template | 1 - 12 files changed, 452 insertions(+), 3 deletions(-) create mode 100644 src/dstr-assignment/array-elem-nested-memberexpr-optchain-prop-ref-init.case create mode 100644 src/dstr-assignment/array-elem-nested-memberexpr-optchain-prop-ref.case create mode 100644 src/dstr-assignment/array-elem-put-obj-literal-optchain-prop-ref-init.case create mode 100644 src/dstr-assignment/array-elem-put-obj-literal-optchain-prop-ref.case create mode 100644 src/dstr-assignment/obj-prop-elem-target-memberexpr-optchain-prop-ref-init.case create mode 100644 src/dstr-assignment/obj-prop-elem-target-memberexpr-optchain-prop-ref.case create mode 100644 src/dstr-assignment/obj-prop-elem-target-obj-literal-optchain-prop-ref-init.case create mode 100644 src/dstr-assignment/obj-prop-elem-target-obj-literal-optchain-prop-ref.case diff --git a/features.txt b/features.txt index 6184a1cce61..40ee8f33be0 100644 --- a/features.txt +++ b/features.txt @@ -133,6 +133,10 @@ import.meta WeakRef FinalizationGroup +# Optional Chaining +# https://github.com/tc39/proposal-optional-chaining +optional-chaining + ## Standard language features # # Language features that have been included in a published version of the diff --git a/src/dstr-assignment/array-elem-nested-memberexpr-optchain-prop-ref-init.case b/src/dstr-assignment/array-elem-nested-memberexpr-optchain-prop-ref-init.case new file mode 100644 index 00000000000..15f996210eb --- /dev/null +++ b/src/dstr-assignment/array-elem-nested-memberexpr-optchain-prop-ref-init.case @@ -0,0 +1,55 @@ +// Copyright (C) 2019 Leo Balter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: prod-DestructuringAssignmentTarget +desc: > + It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an + ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple + Using Object + (MemberExpression OptionalChain .IdentifierName Initializer) +info: | + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. +features: [optional-chaining] +template: syntax +negative: + phase: parse + type: SyntaxError +---*/ + +//- setup +$DONOTEVALUATE(); +var x = {}; +//- elems +[x?.y = 42] +//- vals +[23] diff --git a/src/dstr-assignment/array-elem-nested-memberexpr-optchain-prop-ref.case b/src/dstr-assignment/array-elem-nested-memberexpr-optchain-prop-ref.case new file mode 100644 index 00000000000..404e8cb079c --- /dev/null +++ b/src/dstr-assignment/array-elem-nested-memberexpr-optchain-prop-ref.case @@ -0,0 +1,55 @@ +// Copyright (C) 2019 Leo Balter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: prod-DestructuringAssignmentTarget +desc: > + It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an + ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple + Using Object + (MemberExpression OptionalChain .IdentifierName) +info: | + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. +features: [optional-chaining] +template: syntax +negative: + phase: parse + type: SyntaxError +---*/ + +//- setup +$DONOTEVALUATE(); +var x = {}; +//- elems +[x?.y] +//- vals +[23] diff --git a/src/dstr-assignment/array-elem-put-obj-literal-optchain-prop-ref-init.case b/src/dstr-assignment/array-elem-put-obj-literal-optchain-prop-ref-init.case new file mode 100644 index 00000000000..01fbd16111d --- /dev/null +++ b/src/dstr-assignment/array-elem-put-obj-literal-optchain-prop-ref-init.case @@ -0,0 +1,57 @@ +// Copyright (C) 2019 Leo Balter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: prod-DestructuringAssignmentTarget +desc: > + It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an + ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple + Using Object +info: | + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. +features: [optional-chaining] +template: syntax +negative: + phase: parse + type: SyntaxError +---*/ + +//- setup +$DONOTEVALUATE(); +//- elems +[{ + set y(val) { + throw new Test262Error('The property should not be accessed.'); + } +}?.y = 42] +//- vals +[23] diff --git a/src/dstr-assignment/array-elem-put-obj-literal-optchain-prop-ref.case b/src/dstr-assignment/array-elem-put-obj-literal-optchain-prop-ref.case new file mode 100644 index 00000000000..f3e848811e5 --- /dev/null +++ b/src/dstr-assignment/array-elem-put-obj-literal-optchain-prop-ref.case @@ -0,0 +1,57 @@ +// Copyright (C) 2019 Leo Balter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: prod-DestructuringAssignmentTarget +desc: > + It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an + ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple + Using Object +info: | + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. +features: [optional-chaining] +template: syntax +negative: + phase: parse + type: SyntaxError +---*/ + +//- setup +$DONOTEVALUATE(); +//- elems +[{ + set y(val) { + throw new Test262Error('The property should not be accessed.'); + } +}?.y] +//- vals +[23] diff --git a/src/dstr-assignment/obj-prop-elem-target-memberexpr-optchain-prop-ref-init.case b/src/dstr-assignment/obj-prop-elem-target-memberexpr-optchain-prop-ref-init.case new file mode 100644 index 00000000000..cbc85778f0f --- /dev/null +++ b/src/dstr-assignment/obj-prop-elem-target-memberexpr-optchain-prop-ref-init.case @@ -0,0 +1,55 @@ +// Copyright (C) 2019 Leo Balter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: prod-DestructuringAssignmentTarget +desc: > + It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an + ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple + Using Object + (MemberExpression OptionalChain .IdentifierName Initializer) +info: | + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. +features: [optional-chaining] +template: syntax +negative: + phase: parse + type: SyntaxError +---*/ + +//- setup +$DONOTEVALUATE(); +var y = {}; +//- elems +{ x: y?.z = 42 } +//- vals +{ x: 23 } diff --git a/src/dstr-assignment/obj-prop-elem-target-memberexpr-optchain-prop-ref.case b/src/dstr-assignment/obj-prop-elem-target-memberexpr-optchain-prop-ref.case new file mode 100644 index 00000000000..d4a3fbc20f9 --- /dev/null +++ b/src/dstr-assignment/obj-prop-elem-target-memberexpr-optchain-prop-ref.case @@ -0,0 +1,55 @@ +// Copyright (C) 2019 Leo Balter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: prod-DestructuringAssignmentTarget +desc: > + It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an + ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple + Using Object + (MemberExpression OptionalChain .IdentifierName) +info: | + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. +features: [optional-chaining] +template: syntax +negative: + phase: parse + type: SyntaxError +---*/ + +//- setup +$DONOTEVALUATE(); +var y = {}; +//- elems +{ x: y?.z } +//- vals +{ x: 23 } diff --git a/src/dstr-assignment/obj-prop-elem-target-obj-literal-optchain-prop-ref-init.case b/src/dstr-assignment/obj-prop-elem-target-obj-literal-optchain-prop-ref-init.case new file mode 100644 index 00000000000..457870ca63e --- /dev/null +++ b/src/dstr-assignment/obj-prop-elem-target-obj-literal-optchain-prop-ref-init.case @@ -0,0 +1,57 @@ +// Copyright (C) 2019 Leo Balter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: prod-DestructuringAssignmentTarget +desc: > + It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an + ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple + Using Object +info: | + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. +features: [optional-chaining] +template: syntax +negative: + phase: parse + type: SyntaxError +---*/ + +//- setup +$DONOTEVALUATE(); +//- elems +{ x: { + set y(val) { + throw new Test262Error('The property should not be accessed.'); + } +}?.y = 42} +//- vals +{x: 42} diff --git a/src/dstr-assignment/obj-prop-elem-target-obj-literal-optchain-prop-ref.case b/src/dstr-assignment/obj-prop-elem-target-obj-literal-optchain-prop-ref.case new file mode 100644 index 00000000000..28a60748421 --- /dev/null +++ b/src/dstr-assignment/obj-prop-elem-target-obj-literal-optchain-prop-ref.case @@ -0,0 +1,57 @@ +// Copyright (C) 2019 Leo Balter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: prod-DestructuringAssignmentTarget +desc: > + It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an + ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple + Using Object +info: | + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. +features: [optional-chaining] +template: syntax +negative: + phase: parse + type: SyntaxError +---*/ + +//- setup +$DONOTEVALUATE(); +//- elems +{ x: { + set y(val) { + throw new Test262Error('The property should not be accessed.'); + } +}?.y} +//- vals +{x: 42} diff --git a/src/dstr-assignment/syntax/assignment-expr.template b/src/dstr-assignment/syntax/assignment-expr.template index f634ff68525..9b98c23fbf7 100644 --- a/src/dstr-assignment/syntax/assignment-expr.template +++ b/src/dstr-assignment/syntax/assignment-expr.template @@ -5,7 +5,6 @@ path: language/expressions/assignment/dstr/ name: > AssignmentExpression esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] info: | VariableDeclaration : BindingPattern Initializer diff --git a/src/dstr-assignment/syntax/for-in.template b/src/dstr-assignment/syntax/for-in.template index d4ad97bcafb..a9b60b56820 100644 --- a/src/dstr-assignment/syntax/for-in.template +++ b/src/dstr-assignment/syntax/for-in.template @@ -5,7 +5,6 @@ path: language/statements/for-in/dstr/ name: > For..in statement esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] info: | IterationStatement : diff --git a/src/dstr-assignment/syntax/for-of.template b/src/dstr-assignment/syntax/for-of.template index 1a89eddaf6c..7a1b4b431db 100644 --- a/src/dstr-assignment/syntax/for-of.template +++ b/src/dstr-assignment/syntax/for-of.template @@ -5,7 +5,6 @@ path: language/statements/for-of/dstr/ name: > For..of statement esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] info: | IterationStatement : From 4e5bcbab5904f5e3ace30bd8d2a8f48beda60146 Mon Sep 17 00:00:00 2001 From: Leo Balter Date: Fri, 2 Aug 2019 12:56:21 -0400 Subject: [PATCH 2/2] Generate tests --- .../array-elem-init-yield-ident-invalid.js | 1 - .../dstr/array-elem-nested-array-invalid.js | 1 - ...y-elem-nested-array-yield-ident-invalid.js | 1 - ...ested-memberexpr-optchain-prop-ref-init.js | 56 +++++++++++++++ ...lem-nested-memberexpr-optchain-prop-ref.js | 56 +++++++++++++++ .../dstr/array-elem-nested-obj-invalid.js | 1 - ...ray-elem-nested-obj-yield-ident-invalid.js | 1 - ...-put-obj-literal-optchain-prop-ref-init.js | 59 ++++++++++++++++ ...-elem-put-obj-literal-optchain-prop-ref.js | 59 ++++++++++++++++ .../dstr/array-elem-target-simple-strict.js | 1 - .../dstr/array-elem-target-yield-invalid.js | 1 - .../dstr/array-rest-before-element.js | 1 - .../dstr/array-rest-before-elision.js | 1 - .../assignment/dstr/array-rest-before-rest.js | 1 - .../dstr/array-rest-elision-invalid.js | 1 - .../assignment/dstr/array-rest-init.js | 1 - .../dstr/array-rest-nested-array-invalid.js | 1 - ...y-rest-nested-array-yield-ident-invalid.js | 1 - .../dstr/array-rest-nested-obj-invalid.js | 1 - ...ray-rest-nested-obj-yield-ident-invalid.js | 1 - .../dstr/array-rest-yield-ident-invalid.js | 1 - .../dstr/obj-id-identifier-yield-expr.js | 1 - .../obj-id-identifier-yield-ident-invalid.js | 1 - .../dstr/obj-id-init-simple-strict.js | 1 - .../dstr/obj-id-init-yield-ident-invalid.js | 1 - .../assignment/dstr/obj-id-simple-strict.js | 1 - .../obj-prop-elem-init-yield-ident-invalid.js | 1 - ...arget-memberexpr-optchain-prop-ref-init.js | 56 +++++++++++++++ ...lem-target-memberexpr-optchain-prop-ref.js | 56 +++++++++++++++ ...rget-obj-literal-optchain-prop-ref-init.js | 59 ++++++++++++++++ ...em-target-obj-literal-optchain-prop-ref.js | 59 ++++++++++++++++ ...bj-prop-elem-target-yield-ident-invalid.js | 1 - .../dstr/obj-prop-nested-array-invalid.js | 1 - ...j-prop-nested-array-yield-ident-invalid.js | 1 - .../dstr/obj-prop-nested-obj-invalid.js | 1 - ...obj-prop-nested-obj-yield-ident-invalid.js | 1 - .../dstr/obj-rest-not-last-element-invalid.js | 1 - .../array-elem-init-yield-ident-invalid.js | 1 - .../dstr/array-elem-nested-array-invalid.js | 1 - ...y-elem-nested-array-yield-ident-invalid.js | 1 - ...ested-memberexpr-optchain-prop-ref-init.js | 65 ++++++++++++++++++ ...lem-nested-memberexpr-optchain-prop-ref.js | 65 ++++++++++++++++++ .../dstr/array-elem-nested-obj-invalid.js | 1 - ...ray-elem-nested-obj-yield-ident-invalid.js | 1 - ...-put-obj-literal-optchain-prop-ref-init.js | 68 +++++++++++++++++++ ...-elem-put-obj-literal-optchain-prop-ref.js | 68 +++++++++++++++++++ .../dstr/array-elem-target-simple-strict.js | 1 - .../dstr/array-elem-target-yield-invalid.js | 1 - .../for-in/dstr/array-rest-before-element.js | 1 - .../for-in/dstr/array-rest-before-elision.js | 1 - .../for-in/dstr/array-rest-before-rest.js | 1 - .../for-in/dstr/array-rest-elision-invalid.js | 1 - .../statements/for-in/dstr/array-rest-init.js | 1 - .../dstr/array-rest-nested-array-invalid.js | 1 - ...y-rest-nested-array-yield-ident-invalid.js | 1 - .../dstr/array-rest-nested-obj-invalid.js | 1 - ...ray-rest-nested-obj-yield-ident-invalid.js | 1 - .../dstr/array-rest-yield-ident-invalid.js | 1 - .../dstr/obj-id-identifier-yield-expr.js | 1 - .../obj-id-identifier-yield-ident-invalid.js | 1 - .../for-in/dstr/obj-id-init-simple-strict.js | 1 - .../dstr/obj-id-init-yield-ident-invalid.js | 1 - .../for-in/dstr/obj-id-simple-strict.js | 1 - .../obj-prop-elem-init-yield-ident-invalid.js | 1 - ...arget-memberexpr-optchain-prop-ref-init.js | 65 ++++++++++++++++++ ...lem-target-memberexpr-optchain-prop-ref.js | 65 ++++++++++++++++++ ...rget-obj-literal-optchain-prop-ref-init.js | 68 +++++++++++++++++++ ...em-target-obj-literal-optchain-prop-ref.js | 68 +++++++++++++++++++ ...bj-prop-elem-target-yield-ident-invalid.js | 1 - .../dstr/obj-prop-nested-array-invalid.js | 1 - ...j-prop-nested-array-yield-ident-invalid.js | 1 - .../dstr/obj-prop-nested-obj-invalid.js | 1 - ...obj-prop-nested-obj-yield-ident-invalid.js | 1 - .../dstr/obj-rest-not-last-element-invalid.js | 1 - .../array-elem-init-yield-ident-invalid.js | 1 - .../dstr/array-elem-nested-array-invalid.js | 1 - ...y-elem-nested-array-yield-ident-invalid.js | 1 - ...ested-memberexpr-optchain-prop-ref-init.js | 65 ++++++++++++++++++ ...lem-nested-memberexpr-optchain-prop-ref.js | 65 ++++++++++++++++++ .../dstr/array-elem-nested-obj-invalid.js | 1 - ...ray-elem-nested-obj-yield-ident-invalid.js | 1 - ...-put-obj-literal-optchain-prop-ref-init.js | 68 +++++++++++++++++++ ...-elem-put-obj-literal-optchain-prop-ref.js | 68 +++++++++++++++++++ .../dstr/array-elem-target-simple-strict.js | 1 - .../dstr/array-elem-target-yield-invalid.js | 1 - .../for-of/dstr/array-rest-before-element.js | 1 - .../for-of/dstr/array-rest-before-elision.js | 1 - .../for-of/dstr/array-rest-before-rest.js | 1 - .../for-of/dstr/array-rest-elision-invalid.js | 1 - .../statements/for-of/dstr/array-rest-init.js | 1 - .../dstr/array-rest-nested-array-invalid.js | 1 - ...y-rest-nested-array-yield-ident-invalid.js | 1 - .../dstr/array-rest-nested-obj-invalid.js | 1 - ...ray-rest-nested-obj-yield-ident-invalid.js | 1 - .../dstr/array-rest-yield-ident-invalid.js | 1 - .../dstr/obj-id-identifier-yield-expr.js | 1 - .../obj-id-identifier-yield-ident-invalid.js | 1 - .../for-of/dstr/obj-id-init-simple-strict.js | 1 - .../dstr/obj-id-init-yield-ident-invalid.js | 1 - .../for-of/dstr/obj-id-simple-strict.js | 1 - .../obj-prop-elem-init-yield-ident-invalid.js | 1 - ...arget-memberexpr-optchain-prop-ref-init.js | 65 ++++++++++++++++++ ...lem-target-memberexpr-optchain-prop-ref.js | 65 ++++++++++++++++++ ...rget-obj-literal-optchain-prop-ref-init.js | 68 +++++++++++++++++++ ...em-target-obj-literal-optchain-prop-ref.js | 68 +++++++++++++++++++ ...bj-prop-elem-target-yield-ident-invalid.js | 1 - .../dstr/obj-prop-nested-array-invalid.js | 1 - ...j-prop-nested-array-yield-ident-invalid.js | 1 - .../dstr/obj-prop-nested-obj-invalid.js | 1 - ...obj-prop-nested-obj-yield-ident-invalid.js | 1 - .../dstr/obj-rest-not-last-element-invalid.js | 1 - 111 files changed, 1524 insertions(+), 87 deletions(-) create mode 100644 test/language/expressions/assignment/dstr/array-elem-nested-memberexpr-optchain-prop-ref-init.js create mode 100644 test/language/expressions/assignment/dstr/array-elem-nested-memberexpr-optchain-prop-ref.js create mode 100644 test/language/expressions/assignment/dstr/array-elem-put-obj-literal-optchain-prop-ref-init.js create mode 100644 test/language/expressions/assignment/dstr/array-elem-put-obj-literal-optchain-prop-ref.js create mode 100644 test/language/expressions/assignment/dstr/obj-prop-elem-target-memberexpr-optchain-prop-ref-init.js create mode 100644 test/language/expressions/assignment/dstr/obj-prop-elem-target-memberexpr-optchain-prop-ref.js create mode 100644 test/language/expressions/assignment/dstr/obj-prop-elem-target-obj-literal-optchain-prop-ref-init.js create mode 100644 test/language/expressions/assignment/dstr/obj-prop-elem-target-obj-literal-optchain-prop-ref.js create mode 100644 test/language/statements/for-in/dstr/array-elem-nested-memberexpr-optchain-prop-ref-init.js create mode 100644 test/language/statements/for-in/dstr/array-elem-nested-memberexpr-optchain-prop-ref.js create mode 100644 test/language/statements/for-in/dstr/array-elem-put-obj-literal-optchain-prop-ref-init.js create mode 100644 test/language/statements/for-in/dstr/array-elem-put-obj-literal-optchain-prop-ref.js create mode 100644 test/language/statements/for-in/dstr/obj-prop-elem-target-memberexpr-optchain-prop-ref-init.js create mode 100644 test/language/statements/for-in/dstr/obj-prop-elem-target-memberexpr-optchain-prop-ref.js create mode 100644 test/language/statements/for-in/dstr/obj-prop-elem-target-obj-literal-optchain-prop-ref-init.js create mode 100644 test/language/statements/for-in/dstr/obj-prop-elem-target-obj-literal-optchain-prop-ref.js create mode 100644 test/language/statements/for-of/dstr/array-elem-nested-memberexpr-optchain-prop-ref-init.js create mode 100644 test/language/statements/for-of/dstr/array-elem-nested-memberexpr-optchain-prop-ref.js create mode 100644 test/language/statements/for-of/dstr/array-elem-put-obj-literal-optchain-prop-ref-init.js create mode 100644 test/language/statements/for-of/dstr/array-elem-put-obj-literal-optchain-prop-ref.js create mode 100644 test/language/statements/for-of/dstr/obj-prop-elem-target-memberexpr-optchain-prop-ref-init.js create mode 100644 test/language/statements/for-of/dstr/obj-prop-elem-target-memberexpr-optchain-prop-ref.js create mode 100644 test/language/statements/for-of/dstr/obj-prop-elem-target-obj-literal-optchain-prop-ref-init.js create mode 100644 test/language/statements/for-of/dstr/obj-prop-elem-target-obj-literal-optchain-prop-ref.js diff --git a/test/language/expressions/assignment/dstr/array-elem-init-yield-ident-invalid.js b/test/language/expressions/assignment/dstr/array-elem-init-yield-ident-invalid.js index 295e7d1d5ec..5df6dd1a63c 100644 --- a/test/language/expressions/assignment/dstr/array-elem-init-yield-ident-invalid.js +++ b/test/language/expressions/assignment/dstr/array-elem-init-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the Initializer of an AssignmentElement outside of a generator function body, it behaves as an IdentifierReference. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/expressions/assignment/dstr/array-elem-nested-array-invalid.js b/test/language/expressions/assignment/dstr/array-elem-nested-array-invalid.js index b87e6a8e41d..d1d77d43207 100644 --- a/test/language/expressions/assignment/dstr/array-elem-nested-array-invalid.js +++ b/test/language/expressions/assignment/dstr/array-elem-nested-array-invalid.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if LeftHandSideExpression is either an ObjectLiteral or an ArrayLiteral and if the lexical token sequence matched by LeftHandSideExpression cannot be parsed with no tokens left over using AssignmentPattern as the goal symbol. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/expressions/assignment/dstr/array-elem-nested-array-yield-ident-invalid.js b/test/language/expressions/assignment/dstr/array-elem-nested-array-yield-ident-invalid.js index cec871b71d0..95d589cfc31 100644 --- a/test/language/expressions/assignment/dstr/array-elem-nested-array-yield-ident-invalid.js +++ b/test/language/expressions/assignment/dstr/array-elem-nested-array-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the DestructuringAssignmentTarget of a nested destructuring assignment outside of strict mode, it behaves as an IdentifierReference. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/expressions/assignment/dstr/array-elem-nested-memberexpr-optchain-prop-ref-init.js b/test/language/expressions/assignment/dstr/array-elem-nested-memberexpr-optchain-prop-ref-init.js new file mode 100644 index 00000000000..e30260c7f44 --- /dev/null +++ b/test/language/expressions/assignment/dstr/array-elem-nested-memberexpr-optchain-prop-ref-init.js @@ -0,0 +1,56 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-assignment/array-elem-nested-memberexpr-optchain-prop-ref-init.case +// - src/dstr-assignment/syntax/assignment-expr.template +/*--- +description: It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple Using Object (MemberExpression OptionalChain .IdentifierName Initializer) (AssignmentExpression) +esid: sec-variable-statement-runtime-semantics-evaluation +features: [optional-chaining, destructuring-binding] +flags: [generated] +negative: + phase: parse + type: SyntaxError +info: | + VariableDeclaration : BindingPattern Initializer + + 1. Let rhs be the result of evaluating Initializer. + 2. Let rval be GetValue(rhs). + 3. ReturnIfAbrupt(rval). + 4. Return the result of performing BindingInitialization for + BindingPattern passing rval and undefined as arguments. + + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. + +---*/ +$DONOTEVALUATE(); +var x = {}; + +0, [x?.y = 42] = [23]; diff --git a/test/language/expressions/assignment/dstr/array-elem-nested-memberexpr-optchain-prop-ref.js b/test/language/expressions/assignment/dstr/array-elem-nested-memberexpr-optchain-prop-ref.js new file mode 100644 index 00000000000..96faf02c6af --- /dev/null +++ b/test/language/expressions/assignment/dstr/array-elem-nested-memberexpr-optchain-prop-ref.js @@ -0,0 +1,56 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-assignment/array-elem-nested-memberexpr-optchain-prop-ref.case +// - src/dstr-assignment/syntax/assignment-expr.template +/*--- +description: It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple Using Object (MemberExpression OptionalChain .IdentifierName) (AssignmentExpression) +esid: sec-variable-statement-runtime-semantics-evaluation +features: [optional-chaining, destructuring-binding] +flags: [generated] +negative: + phase: parse + type: SyntaxError +info: | + VariableDeclaration : BindingPattern Initializer + + 1. Let rhs be the result of evaluating Initializer. + 2. Let rval be GetValue(rhs). + 3. ReturnIfAbrupt(rval). + 4. Return the result of performing BindingInitialization for + BindingPattern passing rval and undefined as arguments. + + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. + +---*/ +$DONOTEVALUATE(); +var x = {}; + +0, [x?.y] = [23]; diff --git a/test/language/expressions/assignment/dstr/array-elem-nested-obj-invalid.js b/test/language/expressions/assignment/dstr/array-elem-nested-obj-invalid.js index 82d583858bb..2bce48e1a73 100644 --- a/test/language/expressions/assignment/dstr/array-elem-nested-obj-invalid.js +++ b/test/language/expressions/assignment/dstr/array-elem-nested-obj-invalid.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if LeftHandSideExpression is either an ObjectLiteral or an ArrayLiteral and if the lexical token sequence matched by LeftHandSideExpression cannot be parsed with no tokens left over using AssignmentPattern as the goal symbol. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/expressions/assignment/dstr/array-elem-nested-obj-yield-ident-invalid.js b/test/language/expressions/assignment/dstr/array-elem-nested-obj-yield-ident-invalid.js index bc82895b165..8b4b5969765 100644 --- a/test/language/expressions/assignment/dstr/array-elem-nested-obj-yield-ident-invalid.js +++ b/test/language/expressions/assignment/dstr/array-elem-nested-obj-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the Initializer of a nested destructuring assignment outside of a generator function body, it behaves as a IdentifierReference. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/expressions/assignment/dstr/array-elem-put-obj-literal-optchain-prop-ref-init.js b/test/language/expressions/assignment/dstr/array-elem-put-obj-literal-optchain-prop-ref-init.js new file mode 100644 index 00000000000..967ace5379c --- /dev/null +++ b/test/language/expressions/assignment/dstr/array-elem-put-obj-literal-optchain-prop-ref-init.js @@ -0,0 +1,59 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-assignment/array-elem-put-obj-literal-optchain-prop-ref-init.case +// - src/dstr-assignment/syntax/assignment-expr.template +/*--- +description: It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple Using Object (AssignmentExpression) +esid: sec-variable-statement-runtime-semantics-evaluation +features: [optional-chaining, destructuring-binding] +flags: [generated] +negative: + phase: parse + type: SyntaxError +info: | + VariableDeclaration : BindingPattern Initializer + + 1. Let rhs be the result of evaluating Initializer. + 2. Let rval be GetValue(rhs). + 3. ReturnIfAbrupt(rval). + 4. Return the result of performing BindingInitialization for + BindingPattern passing rval and undefined as arguments. + + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. + +---*/ +$DONOTEVALUATE(); + +0, [{ + set y(val) { + throw new Test262Error('The property should not be accessed.'); + } +}?.y = 42] = [23]; diff --git a/test/language/expressions/assignment/dstr/array-elem-put-obj-literal-optchain-prop-ref.js b/test/language/expressions/assignment/dstr/array-elem-put-obj-literal-optchain-prop-ref.js new file mode 100644 index 00000000000..70de525dbe5 --- /dev/null +++ b/test/language/expressions/assignment/dstr/array-elem-put-obj-literal-optchain-prop-ref.js @@ -0,0 +1,59 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-assignment/array-elem-put-obj-literal-optchain-prop-ref.case +// - src/dstr-assignment/syntax/assignment-expr.template +/*--- +description: It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple Using Object (AssignmentExpression) +esid: sec-variable-statement-runtime-semantics-evaluation +features: [optional-chaining, destructuring-binding] +flags: [generated] +negative: + phase: parse + type: SyntaxError +info: | + VariableDeclaration : BindingPattern Initializer + + 1. Let rhs be the result of evaluating Initializer. + 2. Let rval be GetValue(rhs). + 3. ReturnIfAbrupt(rval). + 4. Return the result of performing BindingInitialization for + BindingPattern passing rval and undefined as arguments. + + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. + +---*/ +$DONOTEVALUATE(); + +0, [{ + set y(val) { + throw new Test262Error('The property should not be accessed.'); + } +}?.y] = [23]; diff --git a/test/language/expressions/assignment/dstr/array-elem-target-simple-strict.js b/test/language/expressions/assignment/dstr/array-elem-target-simple-strict.js index 1bb8c516b08..87703057b36 100644 --- a/test/language/expressions/assignment/dstr/array-elem-target-simple-strict.js +++ b/test/language/expressions/assignment/dstr/array-elem-target-simple-strict.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is false. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/expressions/assignment/dstr/array-elem-target-yield-invalid.js b/test/language/expressions/assignment/dstr/array-elem-target-yield-invalid.js index 14392e86108..0e40bf0fe97 100644 --- a/test/language/expressions/assignment/dstr/array-elem-target-yield-invalid.js +++ b/test/language/expressions/assignment/dstr/array-elem-target-yield-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the DestructuringAssignmentTarget of an AssignmentElement and outside of a generator function body, it behaves as an IdentifierReference. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/expressions/assignment/dstr/array-rest-before-element.js b/test/language/expressions/assignment/dstr/array-rest-before-element.js index 9d1c466aac9..011e1c12768 100644 --- a/test/language/expressions/assignment/dstr/array-rest-before-element.js +++ b/test/language/expressions/assignment/dstr/array-rest-before-element.js @@ -4,7 +4,6 @@ /*--- description: An AssignmentElement may not follow an AssignmentRestElement in an AssignmentElementList. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/expressions/assignment/dstr/array-rest-before-elision.js b/test/language/expressions/assignment/dstr/array-rest-before-elision.js index dc6e706b1be..df7bf9d9c56 100644 --- a/test/language/expressions/assignment/dstr/array-rest-before-elision.js +++ b/test/language/expressions/assignment/dstr/array-rest-before-elision.js @@ -4,7 +4,6 @@ /*--- description: An elision may not follow an AssignmentRestElement in an AssignmentElementList. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/expressions/assignment/dstr/array-rest-before-rest.js b/test/language/expressions/assignment/dstr/array-rest-before-rest.js index 021b9bb22bd..df829f85547 100644 --- a/test/language/expressions/assignment/dstr/array-rest-before-rest.js +++ b/test/language/expressions/assignment/dstr/array-rest-before-rest.js @@ -4,7 +4,6 @@ /*--- description: An AssignmentRestElement may not follow another AssignmentRestElement in an AssignmentElementList. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/expressions/assignment/dstr/array-rest-elision-invalid.js b/test/language/expressions/assignment/dstr/array-rest-elision-invalid.js index 80f9f9ad540..bd7efd0c73d 100644 --- a/test/language/expressions/assignment/dstr/array-rest-elision-invalid.js +++ b/test/language/expressions/assignment/dstr/array-rest-elision-invalid.js @@ -4,7 +4,6 @@ /*--- description: ArrayAssignmentPattern may not include elisions following an AssignmentRestElement in a AssignmentElementList. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/expressions/assignment/dstr/array-rest-init.js b/test/language/expressions/assignment/dstr/array-rest-init.js index 0abe0e9c5e9..e63928fa8ef 100644 --- a/test/language/expressions/assignment/dstr/array-rest-init.js +++ b/test/language/expressions/assignment/dstr/array-rest-init.js @@ -4,7 +4,6 @@ /*--- description: The AssignmentRestElement does not support an initializer. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/expressions/assignment/dstr/array-rest-nested-array-invalid.js b/test/language/expressions/assignment/dstr/array-rest-nested-array-invalid.js index b1da76740d8..409a8f87cf0 100644 --- a/test/language/expressions/assignment/dstr/array-rest-nested-array-invalid.js +++ b/test/language/expressions/assignment/dstr/array-rest-nested-array-invalid.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if LeftHandSideExpression is either an ObjectLiteral or an ArrayLiteral and if the lexical token sequence matched by LeftHandSideExpression cannot be parsed with no tokens left over using AssignmentPattern as the goal symbol. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/expressions/assignment/dstr/array-rest-nested-array-yield-ident-invalid.js b/test/language/expressions/assignment/dstr/array-rest-nested-array-yield-ident-invalid.js index 7c02875a03c..270a630a8f6 100644 --- a/test/language/expressions/assignment/dstr/array-rest-nested-array-yield-ident-invalid.js +++ b/test/language/expressions/assignment/dstr/array-rest-nested-array-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the DestructuringAssignmentTarget of a nested destructuring assignment and outside of a generator function body, it should behave as an IdentifierExpression. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/expressions/assignment/dstr/array-rest-nested-obj-invalid.js b/test/language/expressions/assignment/dstr/array-rest-nested-obj-invalid.js index 055a034aa8b..87cbe616f8c 100644 --- a/test/language/expressions/assignment/dstr/array-rest-nested-obj-invalid.js +++ b/test/language/expressions/assignment/dstr/array-rest-nested-obj-invalid.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if LeftHandSideExpression is either an ObjectLiteral or an ArrayLiteral and if the lexical token sequence matched by LeftHandSideExpression cannot be parsed with no tokens left over using AssignmentPattern as the goal symbol. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/expressions/assignment/dstr/array-rest-nested-obj-yield-ident-invalid.js b/test/language/expressions/assignment/dstr/array-rest-nested-obj-yield-ident-invalid.js index 16327d9c377..a93bc6a5488 100644 --- a/test/language/expressions/assignment/dstr/array-rest-nested-obj-yield-ident-invalid.js +++ b/test/language/expressions/assignment/dstr/array-rest-nested-obj-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the Initializer of a nested destructuring assignment and outside of a generator function body, it should behave as an IdentifierExpression. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/expressions/assignment/dstr/array-rest-yield-ident-invalid.js b/test/language/expressions/assignment/dstr/array-rest-yield-ident-invalid.js index bc8aaa83dac..5dd5d9e3655 100644 --- a/test/language/expressions/assignment/dstr/array-rest-yield-ident-invalid.js +++ b/test/language/expressions/assignment/dstr/array-rest-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the DestructuringAssignmentTarget of an AssignmentRestElement and outside of a generator function body, it should behave as an IdentifierReference. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/expressions/assignment/dstr/obj-id-identifier-yield-expr.js b/test/language/expressions/assignment/dstr/obj-id-identifier-yield-expr.js index 65ae6f32c8b..8f54015c573 100644 --- a/test/language/expressions/assignment/dstr/obj-id-identifier-yield-expr.js +++ b/test/language/expressions/assignment/dstr/obj-id-identifier-yield-expr.js @@ -4,7 +4,6 @@ /*--- description: yield is not a valid IdentifierReference in an AssignmentProperty within generator function bodies. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [generators, destructuring-binding] flags: [generated, noStrict] negative: diff --git a/test/language/expressions/assignment/dstr/obj-id-identifier-yield-ident-invalid.js b/test/language/expressions/assignment/dstr/obj-id-identifier-yield-ident-invalid.js index 6a03a9ada60..fab8be9f2b8 100644 --- a/test/language/expressions/assignment/dstr/obj-id-identifier-yield-ident-invalid.js +++ b/test/language/expressions/assignment/dstr/obj-id-identifier-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: yield is not a valid IdentifierReference in an AssignmentProperty within strict mode code. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/expressions/assignment/dstr/obj-id-init-simple-strict.js b/test/language/expressions/assignment/dstr/obj-id-init-simple-strict.js index b6cba9869f8..53b142bf2f5 100644 --- a/test/language/expressions/assignment/dstr/obj-id-init-simple-strict.js +++ b/test/language/expressions/assignment/dstr/obj-id-init-simple-strict.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if IsValidSimpleAssignmentTarget of IdentifierReference is false. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/expressions/assignment/dstr/obj-id-init-yield-ident-invalid.js b/test/language/expressions/assignment/dstr/obj-id-init-yield-ident-invalid.js index 87c81cba637..e3dd048d61c 100644 --- a/test/language/expressions/assignment/dstr/obj-id-init-yield-ident-invalid.js +++ b/test/language/expressions/assignment/dstr/obj-id-init-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the Initializer of an AssignmentProperty and outside of a generator function body, it should behave as an IdentifierReference. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/expressions/assignment/dstr/obj-id-simple-strict.js b/test/language/expressions/assignment/dstr/obj-id-simple-strict.js index 836c6f3eb1b..c81c4033d05 100644 --- a/test/language/expressions/assignment/dstr/obj-id-simple-strict.js +++ b/test/language/expressions/assignment/dstr/obj-id-simple-strict.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if IsValidSimpleAssignmentTarget of IdentifierReference is false. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/expressions/assignment/dstr/obj-prop-elem-init-yield-ident-invalid.js b/test/language/expressions/assignment/dstr/obj-prop-elem-init-yield-ident-invalid.js index 797b1bf0c16..c1197b2a7aa 100644 --- a/test/language/expressions/assignment/dstr/obj-prop-elem-init-yield-ident-invalid.js +++ b/test/language/expressions/assignment/dstr/obj-prop-elem-init-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the Initializer of an AssignmentElement and outside of a generator function body, it should behave as an IdentifierReference. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/expressions/assignment/dstr/obj-prop-elem-target-memberexpr-optchain-prop-ref-init.js b/test/language/expressions/assignment/dstr/obj-prop-elem-target-memberexpr-optchain-prop-ref-init.js new file mode 100644 index 00000000000..81d3923eeff --- /dev/null +++ b/test/language/expressions/assignment/dstr/obj-prop-elem-target-memberexpr-optchain-prop-ref-init.js @@ -0,0 +1,56 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-assignment/obj-prop-elem-target-memberexpr-optchain-prop-ref-init.case +// - src/dstr-assignment/syntax/assignment-expr.template +/*--- +description: It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple Using Object (MemberExpression OptionalChain .IdentifierName Initializer) (AssignmentExpression) +esid: sec-variable-statement-runtime-semantics-evaluation +features: [optional-chaining, destructuring-binding] +flags: [generated] +negative: + phase: parse + type: SyntaxError +info: | + VariableDeclaration : BindingPattern Initializer + + 1. Let rhs be the result of evaluating Initializer. + 2. Let rval be GetValue(rhs). + 3. ReturnIfAbrupt(rval). + 4. Return the result of performing BindingInitialization for + BindingPattern passing rval and undefined as arguments. + + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. + +---*/ +$DONOTEVALUATE(); +var y = {}; + +0, { x: y?.z = 42 } = { x: 23 }; diff --git a/test/language/expressions/assignment/dstr/obj-prop-elem-target-memberexpr-optchain-prop-ref.js b/test/language/expressions/assignment/dstr/obj-prop-elem-target-memberexpr-optchain-prop-ref.js new file mode 100644 index 00000000000..581a0de1b48 --- /dev/null +++ b/test/language/expressions/assignment/dstr/obj-prop-elem-target-memberexpr-optchain-prop-ref.js @@ -0,0 +1,56 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-assignment/obj-prop-elem-target-memberexpr-optchain-prop-ref.case +// - src/dstr-assignment/syntax/assignment-expr.template +/*--- +description: It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple Using Object (MemberExpression OptionalChain .IdentifierName) (AssignmentExpression) +esid: sec-variable-statement-runtime-semantics-evaluation +features: [optional-chaining, destructuring-binding] +flags: [generated] +negative: + phase: parse + type: SyntaxError +info: | + VariableDeclaration : BindingPattern Initializer + + 1. Let rhs be the result of evaluating Initializer. + 2. Let rval be GetValue(rhs). + 3. ReturnIfAbrupt(rval). + 4. Return the result of performing BindingInitialization for + BindingPattern passing rval and undefined as arguments. + + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. + +---*/ +$DONOTEVALUATE(); +var y = {}; + +0, { x: y?.z } = { x: 23 }; diff --git a/test/language/expressions/assignment/dstr/obj-prop-elem-target-obj-literal-optchain-prop-ref-init.js b/test/language/expressions/assignment/dstr/obj-prop-elem-target-obj-literal-optchain-prop-ref-init.js new file mode 100644 index 00000000000..c1dbb369f07 --- /dev/null +++ b/test/language/expressions/assignment/dstr/obj-prop-elem-target-obj-literal-optchain-prop-ref-init.js @@ -0,0 +1,59 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-assignment/obj-prop-elem-target-obj-literal-optchain-prop-ref-init.case +// - src/dstr-assignment/syntax/assignment-expr.template +/*--- +description: It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple Using Object (AssignmentExpression) +esid: sec-variable-statement-runtime-semantics-evaluation +features: [optional-chaining, destructuring-binding] +flags: [generated] +negative: + phase: parse + type: SyntaxError +info: | + VariableDeclaration : BindingPattern Initializer + + 1. Let rhs be the result of evaluating Initializer. + 2. Let rval be GetValue(rhs). + 3. ReturnIfAbrupt(rval). + 4. Return the result of performing BindingInitialization for + BindingPattern passing rval and undefined as arguments. + + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. + +---*/ +$DONOTEVALUATE(); + +0, { x: { + set y(val) { + throw new Test262Error('The property should not be accessed.'); + } +}?.y = 42} = {x: 42}; diff --git a/test/language/expressions/assignment/dstr/obj-prop-elem-target-obj-literal-optchain-prop-ref.js b/test/language/expressions/assignment/dstr/obj-prop-elem-target-obj-literal-optchain-prop-ref.js new file mode 100644 index 00000000000..2604c83ff6f --- /dev/null +++ b/test/language/expressions/assignment/dstr/obj-prop-elem-target-obj-literal-optchain-prop-ref.js @@ -0,0 +1,59 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-assignment/obj-prop-elem-target-obj-literal-optchain-prop-ref.case +// - src/dstr-assignment/syntax/assignment-expr.template +/*--- +description: It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple Using Object (AssignmentExpression) +esid: sec-variable-statement-runtime-semantics-evaluation +features: [optional-chaining, destructuring-binding] +flags: [generated] +negative: + phase: parse + type: SyntaxError +info: | + VariableDeclaration : BindingPattern Initializer + + 1. Let rhs be the result of evaluating Initializer. + 2. Let rval be GetValue(rhs). + 3. ReturnIfAbrupt(rval). + 4. Return the result of performing BindingInitialization for + BindingPattern passing rval and undefined as arguments. + + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. + +---*/ +$DONOTEVALUATE(); + +0, { x: { + set y(val) { + throw new Test262Error('The property should not be accessed.'); + } +}?.y} = {x: 42}; diff --git a/test/language/expressions/assignment/dstr/obj-prop-elem-target-yield-ident-invalid.js b/test/language/expressions/assignment/dstr/obj-prop-elem-target-yield-ident-invalid.js index b774c80ece3..6e22bd5f4bf 100644 --- a/test/language/expressions/assignment/dstr/obj-prop-elem-target-yield-ident-invalid.js +++ b/test/language/expressions/assignment/dstr/obj-prop-elem-target-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the DestructuringAssignmentTarget of an AssignmentElement and outside of a generator function body, it should behave as an IdentifierReference. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/expressions/assignment/dstr/obj-prop-nested-array-invalid.js b/test/language/expressions/assignment/dstr/obj-prop-nested-array-invalid.js index a706092950f..29c0d4aad0e 100644 --- a/test/language/expressions/assignment/dstr/obj-prop-nested-array-invalid.js +++ b/test/language/expressions/assignment/dstr/obj-prop-nested-array-invalid.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if LeftHandSideExpression is either an ObjectLiteral or an ArrayLiteral and if the lexical token sequence matched by LeftHandSideExpression cannot be parsed with no tokens left over using AssignmentPattern as the goal symbol. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/expressions/assignment/dstr/obj-prop-nested-array-yield-ident-invalid.js b/test/language/expressions/assignment/dstr/obj-prop-nested-array-yield-ident-invalid.js index 25dad8173f8..31337c561e8 100644 --- a/test/language/expressions/assignment/dstr/obj-prop-nested-array-yield-ident-invalid.js +++ b/test/language/expressions/assignment/dstr/obj-prop-nested-array-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the Initializer of a nested destructuring assignment and outside of a generator function body, it should behave as an IdentifierReference. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/expressions/assignment/dstr/obj-prop-nested-obj-invalid.js b/test/language/expressions/assignment/dstr/obj-prop-nested-obj-invalid.js index 9f227c52bb3..7317ccd709c 100644 --- a/test/language/expressions/assignment/dstr/obj-prop-nested-obj-invalid.js +++ b/test/language/expressions/assignment/dstr/obj-prop-nested-obj-invalid.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if LeftHandSideExpression is either an ObjectLiteral or an ArrayLiteral and if the lexical token sequence matched by LeftHandSideExpression cannot be parsed with no tokens left over using AssignmentPattern as the goal symbol. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/expressions/assignment/dstr/obj-prop-nested-obj-yield-ident-invalid.js b/test/language/expressions/assignment/dstr/obj-prop-nested-obj-yield-ident-invalid.js index ba38b80b534..2c88b059032 100644 --- a/test/language/expressions/assignment/dstr/obj-prop-nested-obj-yield-ident-invalid.js +++ b/test/language/expressions/assignment/dstr/obj-prop-nested-obj-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the Initializer of a nested destructuring assignment and outside of a generator function body, it should behave as an IdentifierReference. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/expressions/assignment/dstr/obj-rest-not-last-element-invalid.js b/test/language/expressions/assignment/dstr/obj-rest-not-last-element-invalid.js index a3e103fefee..4c59914efce 100644 --- a/test/language/expressions/assignment/dstr/obj-rest-not-last-element-invalid.js +++ b/test/language/expressions/assignment/dstr/obj-rest-not-last-element-invalid.js @@ -4,7 +4,6 @@ /*--- description: Object rest element needs to be the last AssignmenProperty in ObjectAssignmentPattern. (AssignmentExpression) esid: sec-variable-statement-runtime-semantics-evaluation -es6id: 13.3.2.4 features: [object-rest, destructuring-binding] flags: [generated] negative: diff --git a/test/language/statements/for-in/dstr/array-elem-init-yield-ident-invalid.js b/test/language/statements/for-in/dstr/array-elem-init-yield-ident-invalid.js index 16164b10b03..def1a03c269 100644 --- a/test/language/statements/for-in/dstr/array-elem-init-yield-ident-invalid.js +++ b/test/language/statements/for-in/dstr/array-elem-init-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the Initializer of an AssignmentElement outside of a generator function body, it behaves as an IdentifierReference. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-in/dstr/array-elem-nested-array-invalid.js b/test/language/statements/for-in/dstr/array-elem-nested-array-invalid.js index 6ad91804de8..6879fb1ed53 100644 --- a/test/language/statements/for-in/dstr/array-elem-nested-array-invalid.js +++ b/test/language/statements/for-in/dstr/array-elem-nested-array-invalid.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if LeftHandSideExpression is either an ObjectLiteral or an ArrayLiteral and if the lexical token sequence matched by LeftHandSideExpression cannot be parsed with no tokens left over using AssignmentPattern as the goal symbol. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/statements/for-in/dstr/array-elem-nested-array-yield-ident-invalid.js b/test/language/statements/for-in/dstr/array-elem-nested-array-yield-ident-invalid.js index 1e367da12de..9a319ffedc3 100644 --- a/test/language/statements/for-in/dstr/array-elem-nested-array-yield-ident-invalid.js +++ b/test/language/statements/for-in/dstr/array-elem-nested-array-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the DestructuringAssignmentTarget of a nested destructuring assignment outside of strict mode, it behaves as an IdentifierReference. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-in/dstr/array-elem-nested-memberexpr-optchain-prop-ref-init.js b/test/language/statements/for-in/dstr/array-elem-nested-memberexpr-optchain-prop-ref-init.js new file mode 100644 index 00000000000..2ce03455bf1 --- /dev/null +++ b/test/language/statements/for-in/dstr/array-elem-nested-memberexpr-optchain-prop-ref-init.js @@ -0,0 +1,65 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-assignment/array-elem-nested-memberexpr-optchain-prop-ref-init.case +// - src/dstr-assignment/syntax/for-in.template +/*--- +description: It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple Using Object (MemberExpression OptionalChain .IdentifierName Initializer) (For..in statement) +esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation +features: [optional-chaining, destructuring-binding] +flags: [generated] +negative: + phase: parse + type: SyntaxError +info: | + IterationStatement : + for ( LeftHandSideExpression of AssignmentExpression ) Statement + + 1. Let keyResult be the result of performing ? ForIn/OfHeadEvaluation(« », + AssignmentExpression, iterate). + 2. Return ? ForIn/OfBodyEvaluation(LeftHandSideExpression, Statement, + keyResult, assignment, labelSet). + + 13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation + + [...] + 4. If destructuring is true and if lhsKind is assignment, then + a. Assert: lhs is a LeftHandSideExpression. + b. Let assignmentPattern be the parse of the source text corresponding to + lhs using AssignmentPattern as the goal symbol. + [...] + + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. + +---*/ +$DONOTEVALUATE(); +var x = {}; + +for ([x?.y = 42] in [[23]]) ; diff --git a/test/language/statements/for-in/dstr/array-elem-nested-memberexpr-optchain-prop-ref.js b/test/language/statements/for-in/dstr/array-elem-nested-memberexpr-optchain-prop-ref.js new file mode 100644 index 00000000000..9ca5561af87 --- /dev/null +++ b/test/language/statements/for-in/dstr/array-elem-nested-memberexpr-optchain-prop-ref.js @@ -0,0 +1,65 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-assignment/array-elem-nested-memberexpr-optchain-prop-ref.case +// - src/dstr-assignment/syntax/for-in.template +/*--- +description: It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple Using Object (MemberExpression OptionalChain .IdentifierName) (For..in statement) +esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation +features: [optional-chaining, destructuring-binding] +flags: [generated] +negative: + phase: parse + type: SyntaxError +info: | + IterationStatement : + for ( LeftHandSideExpression of AssignmentExpression ) Statement + + 1. Let keyResult be the result of performing ? ForIn/OfHeadEvaluation(« », + AssignmentExpression, iterate). + 2. Return ? ForIn/OfBodyEvaluation(LeftHandSideExpression, Statement, + keyResult, assignment, labelSet). + + 13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation + + [...] + 4. If destructuring is true and if lhsKind is assignment, then + a. Assert: lhs is a LeftHandSideExpression. + b. Let assignmentPattern be the parse of the source text corresponding to + lhs using AssignmentPattern as the goal symbol. + [...] + + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. + +---*/ +$DONOTEVALUATE(); +var x = {}; + +for ([x?.y] in [[23]]) ; diff --git a/test/language/statements/for-in/dstr/array-elem-nested-obj-invalid.js b/test/language/statements/for-in/dstr/array-elem-nested-obj-invalid.js index 9aa6ddaa85e..22de1edfb1c 100644 --- a/test/language/statements/for-in/dstr/array-elem-nested-obj-invalid.js +++ b/test/language/statements/for-in/dstr/array-elem-nested-obj-invalid.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if LeftHandSideExpression is either an ObjectLiteral or an ArrayLiteral and if the lexical token sequence matched by LeftHandSideExpression cannot be parsed with no tokens left over using AssignmentPattern as the goal symbol. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/statements/for-in/dstr/array-elem-nested-obj-yield-ident-invalid.js b/test/language/statements/for-in/dstr/array-elem-nested-obj-yield-ident-invalid.js index 290d1197987..2c6e77adbbc 100644 --- a/test/language/statements/for-in/dstr/array-elem-nested-obj-yield-ident-invalid.js +++ b/test/language/statements/for-in/dstr/array-elem-nested-obj-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the Initializer of a nested destructuring assignment outside of a generator function body, it behaves as a IdentifierReference. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-in/dstr/array-elem-put-obj-literal-optchain-prop-ref-init.js b/test/language/statements/for-in/dstr/array-elem-put-obj-literal-optchain-prop-ref-init.js new file mode 100644 index 00000000000..b08ae41b4e3 --- /dev/null +++ b/test/language/statements/for-in/dstr/array-elem-put-obj-literal-optchain-prop-ref-init.js @@ -0,0 +1,68 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-assignment/array-elem-put-obj-literal-optchain-prop-ref-init.case +// - src/dstr-assignment/syntax/for-in.template +/*--- +description: It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple Using Object (For..in statement) +esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation +features: [optional-chaining, destructuring-binding] +flags: [generated] +negative: + phase: parse + type: SyntaxError +info: | + IterationStatement : + for ( LeftHandSideExpression of AssignmentExpression ) Statement + + 1. Let keyResult be the result of performing ? ForIn/OfHeadEvaluation(« », + AssignmentExpression, iterate). + 2. Return ? ForIn/OfBodyEvaluation(LeftHandSideExpression, Statement, + keyResult, assignment, labelSet). + + 13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation + + [...] + 4. If destructuring is true and if lhsKind is assignment, then + a. Assert: lhs is a LeftHandSideExpression. + b. Let assignmentPattern be the parse of the source text corresponding to + lhs using AssignmentPattern as the goal symbol. + [...] + + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. + +---*/ +$DONOTEVALUATE(); + +for ([{ + set y(val) { + throw new Test262Error('The property should not be accessed.'); + } +}?.y = 42] in [[23]]) ; diff --git a/test/language/statements/for-in/dstr/array-elem-put-obj-literal-optchain-prop-ref.js b/test/language/statements/for-in/dstr/array-elem-put-obj-literal-optchain-prop-ref.js new file mode 100644 index 00000000000..07f72271f7c --- /dev/null +++ b/test/language/statements/for-in/dstr/array-elem-put-obj-literal-optchain-prop-ref.js @@ -0,0 +1,68 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-assignment/array-elem-put-obj-literal-optchain-prop-ref.case +// - src/dstr-assignment/syntax/for-in.template +/*--- +description: It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple Using Object (For..in statement) +esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation +features: [optional-chaining, destructuring-binding] +flags: [generated] +negative: + phase: parse + type: SyntaxError +info: | + IterationStatement : + for ( LeftHandSideExpression of AssignmentExpression ) Statement + + 1. Let keyResult be the result of performing ? ForIn/OfHeadEvaluation(« », + AssignmentExpression, iterate). + 2. Return ? ForIn/OfBodyEvaluation(LeftHandSideExpression, Statement, + keyResult, assignment, labelSet). + + 13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation + + [...] + 4. If destructuring is true and if lhsKind is assignment, then + a. Assert: lhs is a LeftHandSideExpression. + b. Let assignmentPattern be the parse of the source text corresponding to + lhs using AssignmentPattern as the goal symbol. + [...] + + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. + +---*/ +$DONOTEVALUATE(); + +for ([{ + set y(val) { + throw new Test262Error('The property should not be accessed.'); + } +}?.y] in [[23]]) ; diff --git a/test/language/statements/for-in/dstr/array-elem-target-simple-strict.js b/test/language/statements/for-in/dstr/array-elem-target-simple-strict.js index 73f0a284e78..8694b0aa589 100644 --- a/test/language/statements/for-in/dstr/array-elem-target-simple-strict.js +++ b/test/language/statements/for-in/dstr/array-elem-target-simple-strict.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is false. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-in/dstr/array-elem-target-yield-invalid.js b/test/language/statements/for-in/dstr/array-elem-target-yield-invalid.js index 728aac37752..dc0ef2e9c2b 100644 --- a/test/language/statements/for-in/dstr/array-elem-target-yield-invalid.js +++ b/test/language/statements/for-in/dstr/array-elem-target-yield-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the DestructuringAssignmentTarget of an AssignmentElement and outside of a generator function body, it behaves as an IdentifierReference. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-in/dstr/array-rest-before-element.js b/test/language/statements/for-in/dstr/array-rest-before-element.js index 8de0f7e14c5..99024f04176 100644 --- a/test/language/statements/for-in/dstr/array-rest-before-element.js +++ b/test/language/statements/for-in/dstr/array-rest-before-element.js @@ -4,7 +4,6 @@ /*--- description: An AssignmentElement may not follow an AssignmentRestElement in an AssignmentElementList. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/statements/for-in/dstr/array-rest-before-elision.js b/test/language/statements/for-in/dstr/array-rest-before-elision.js index ae2ed110d18..674c9c9508f 100644 --- a/test/language/statements/for-in/dstr/array-rest-before-elision.js +++ b/test/language/statements/for-in/dstr/array-rest-before-elision.js @@ -4,7 +4,6 @@ /*--- description: An elision may not follow an AssignmentRestElement in an AssignmentElementList. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/statements/for-in/dstr/array-rest-before-rest.js b/test/language/statements/for-in/dstr/array-rest-before-rest.js index 1b7d33b195f..42f0443c896 100644 --- a/test/language/statements/for-in/dstr/array-rest-before-rest.js +++ b/test/language/statements/for-in/dstr/array-rest-before-rest.js @@ -4,7 +4,6 @@ /*--- description: An AssignmentRestElement may not follow another AssignmentRestElement in an AssignmentElementList. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/statements/for-in/dstr/array-rest-elision-invalid.js b/test/language/statements/for-in/dstr/array-rest-elision-invalid.js index b40bc81bcde..cceb9a930f5 100644 --- a/test/language/statements/for-in/dstr/array-rest-elision-invalid.js +++ b/test/language/statements/for-in/dstr/array-rest-elision-invalid.js @@ -4,7 +4,6 @@ /*--- description: ArrayAssignmentPattern may not include elisions following an AssignmentRestElement in a AssignmentElementList. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/statements/for-in/dstr/array-rest-init.js b/test/language/statements/for-in/dstr/array-rest-init.js index e366b190037..4b6db92dda0 100644 --- a/test/language/statements/for-in/dstr/array-rest-init.js +++ b/test/language/statements/for-in/dstr/array-rest-init.js @@ -4,7 +4,6 @@ /*--- description: The AssignmentRestElement does not support an initializer. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/statements/for-in/dstr/array-rest-nested-array-invalid.js b/test/language/statements/for-in/dstr/array-rest-nested-array-invalid.js index 366b5605a6b..e104cd8dfc6 100644 --- a/test/language/statements/for-in/dstr/array-rest-nested-array-invalid.js +++ b/test/language/statements/for-in/dstr/array-rest-nested-array-invalid.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if LeftHandSideExpression is either an ObjectLiteral or an ArrayLiteral and if the lexical token sequence matched by LeftHandSideExpression cannot be parsed with no tokens left over using AssignmentPattern as the goal symbol. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/statements/for-in/dstr/array-rest-nested-array-yield-ident-invalid.js b/test/language/statements/for-in/dstr/array-rest-nested-array-yield-ident-invalid.js index 4a729370f09..17c0468af31 100644 --- a/test/language/statements/for-in/dstr/array-rest-nested-array-yield-ident-invalid.js +++ b/test/language/statements/for-in/dstr/array-rest-nested-array-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the DestructuringAssignmentTarget of a nested destructuring assignment and outside of a generator function body, it should behave as an IdentifierExpression. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-in/dstr/array-rest-nested-obj-invalid.js b/test/language/statements/for-in/dstr/array-rest-nested-obj-invalid.js index c19f0938077..d202ee2301e 100644 --- a/test/language/statements/for-in/dstr/array-rest-nested-obj-invalid.js +++ b/test/language/statements/for-in/dstr/array-rest-nested-obj-invalid.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if LeftHandSideExpression is either an ObjectLiteral or an ArrayLiteral and if the lexical token sequence matched by LeftHandSideExpression cannot be parsed with no tokens left over using AssignmentPattern as the goal symbol. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/statements/for-in/dstr/array-rest-nested-obj-yield-ident-invalid.js b/test/language/statements/for-in/dstr/array-rest-nested-obj-yield-ident-invalid.js index aed7def4d80..1d3b881f4d4 100644 --- a/test/language/statements/for-in/dstr/array-rest-nested-obj-yield-ident-invalid.js +++ b/test/language/statements/for-in/dstr/array-rest-nested-obj-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the Initializer of a nested destructuring assignment and outside of a generator function body, it should behave as an IdentifierExpression. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-in/dstr/array-rest-yield-ident-invalid.js b/test/language/statements/for-in/dstr/array-rest-yield-ident-invalid.js index e8e3821d5aa..b9884f5d58e 100644 --- a/test/language/statements/for-in/dstr/array-rest-yield-ident-invalid.js +++ b/test/language/statements/for-in/dstr/array-rest-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the DestructuringAssignmentTarget of an AssignmentRestElement and outside of a generator function body, it should behave as an IdentifierReference. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-in/dstr/obj-id-identifier-yield-expr.js b/test/language/statements/for-in/dstr/obj-id-identifier-yield-expr.js index 5d263f0a446..ec98db730da 100644 --- a/test/language/statements/for-in/dstr/obj-id-identifier-yield-expr.js +++ b/test/language/statements/for-in/dstr/obj-id-identifier-yield-expr.js @@ -4,7 +4,6 @@ /*--- description: yield is not a valid IdentifierReference in an AssignmentProperty within generator function bodies. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [generators, destructuring-binding] flags: [generated, noStrict] negative: diff --git a/test/language/statements/for-in/dstr/obj-id-identifier-yield-ident-invalid.js b/test/language/statements/for-in/dstr/obj-id-identifier-yield-ident-invalid.js index 90750856170..3cd9deaf741 100644 --- a/test/language/statements/for-in/dstr/obj-id-identifier-yield-ident-invalid.js +++ b/test/language/statements/for-in/dstr/obj-id-identifier-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: yield is not a valid IdentifierReference in an AssignmentProperty within strict mode code. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-in/dstr/obj-id-init-simple-strict.js b/test/language/statements/for-in/dstr/obj-id-init-simple-strict.js index a94595511b7..e11a27e659e 100644 --- a/test/language/statements/for-in/dstr/obj-id-init-simple-strict.js +++ b/test/language/statements/for-in/dstr/obj-id-init-simple-strict.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if IsValidSimpleAssignmentTarget of IdentifierReference is false. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-in/dstr/obj-id-init-yield-ident-invalid.js b/test/language/statements/for-in/dstr/obj-id-init-yield-ident-invalid.js index 4782a0d4405..a287feef31e 100644 --- a/test/language/statements/for-in/dstr/obj-id-init-yield-ident-invalid.js +++ b/test/language/statements/for-in/dstr/obj-id-init-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the Initializer of an AssignmentProperty and outside of a generator function body, it should behave as an IdentifierReference. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-in/dstr/obj-id-simple-strict.js b/test/language/statements/for-in/dstr/obj-id-simple-strict.js index 03523690309..7a7be10bff6 100644 --- a/test/language/statements/for-in/dstr/obj-id-simple-strict.js +++ b/test/language/statements/for-in/dstr/obj-id-simple-strict.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if IsValidSimpleAssignmentTarget of IdentifierReference is false. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-in/dstr/obj-prop-elem-init-yield-ident-invalid.js b/test/language/statements/for-in/dstr/obj-prop-elem-init-yield-ident-invalid.js index 3cef6319b0a..bc0037346e4 100644 --- a/test/language/statements/for-in/dstr/obj-prop-elem-init-yield-ident-invalid.js +++ b/test/language/statements/for-in/dstr/obj-prop-elem-init-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the Initializer of an AssignmentElement and outside of a generator function body, it should behave as an IdentifierReference. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-in/dstr/obj-prop-elem-target-memberexpr-optchain-prop-ref-init.js b/test/language/statements/for-in/dstr/obj-prop-elem-target-memberexpr-optchain-prop-ref-init.js new file mode 100644 index 00000000000..7b2c395bd9c --- /dev/null +++ b/test/language/statements/for-in/dstr/obj-prop-elem-target-memberexpr-optchain-prop-ref-init.js @@ -0,0 +1,65 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-assignment/obj-prop-elem-target-memberexpr-optchain-prop-ref-init.case +// - src/dstr-assignment/syntax/for-in.template +/*--- +description: It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple Using Object (MemberExpression OptionalChain .IdentifierName Initializer) (For..in statement) +esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation +features: [optional-chaining, destructuring-binding] +flags: [generated] +negative: + phase: parse + type: SyntaxError +info: | + IterationStatement : + for ( LeftHandSideExpression of AssignmentExpression ) Statement + + 1. Let keyResult be the result of performing ? ForIn/OfHeadEvaluation(« », + AssignmentExpression, iterate). + 2. Return ? ForIn/OfBodyEvaluation(LeftHandSideExpression, Statement, + keyResult, assignment, labelSet). + + 13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation + + [...] + 4. If destructuring is true and if lhsKind is assignment, then + a. Assert: lhs is a LeftHandSideExpression. + b. Let assignmentPattern be the parse of the source text corresponding to + lhs using AssignmentPattern as the goal symbol. + [...] + + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. + +---*/ +$DONOTEVALUATE(); +var y = {}; + +for ({ x: y?.z = 42 } in [{ x: 23 }]) ; diff --git a/test/language/statements/for-in/dstr/obj-prop-elem-target-memberexpr-optchain-prop-ref.js b/test/language/statements/for-in/dstr/obj-prop-elem-target-memberexpr-optchain-prop-ref.js new file mode 100644 index 00000000000..cea65bb92df --- /dev/null +++ b/test/language/statements/for-in/dstr/obj-prop-elem-target-memberexpr-optchain-prop-ref.js @@ -0,0 +1,65 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-assignment/obj-prop-elem-target-memberexpr-optchain-prop-ref.case +// - src/dstr-assignment/syntax/for-in.template +/*--- +description: It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple Using Object (MemberExpression OptionalChain .IdentifierName) (For..in statement) +esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation +features: [optional-chaining, destructuring-binding] +flags: [generated] +negative: + phase: parse + type: SyntaxError +info: | + IterationStatement : + for ( LeftHandSideExpression of AssignmentExpression ) Statement + + 1. Let keyResult be the result of performing ? ForIn/OfHeadEvaluation(« », + AssignmentExpression, iterate). + 2. Return ? ForIn/OfBodyEvaluation(LeftHandSideExpression, Statement, + keyResult, assignment, labelSet). + + 13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation + + [...] + 4. If destructuring is true and if lhsKind is assignment, then + a. Assert: lhs is a LeftHandSideExpression. + b. Let assignmentPattern be the parse of the source text corresponding to + lhs using AssignmentPattern as the goal symbol. + [...] + + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. + +---*/ +$DONOTEVALUATE(); +var y = {}; + +for ({ x: y?.z } in [{ x: 23 }]) ; diff --git a/test/language/statements/for-in/dstr/obj-prop-elem-target-obj-literal-optchain-prop-ref-init.js b/test/language/statements/for-in/dstr/obj-prop-elem-target-obj-literal-optchain-prop-ref-init.js new file mode 100644 index 00000000000..4fda28ce165 --- /dev/null +++ b/test/language/statements/for-in/dstr/obj-prop-elem-target-obj-literal-optchain-prop-ref-init.js @@ -0,0 +1,68 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-assignment/obj-prop-elem-target-obj-literal-optchain-prop-ref-init.case +// - src/dstr-assignment/syntax/for-in.template +/*--- +description: It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple Using Object (For..in statement) +esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation +features: [optional-chaining, destructuring-binding] +flags: [generated] +negative: + phase: parse + type: SyntaxError +info: | + IterationStatement : + for ( LeftHandSideExpression of AssignmentExpression ) Statement + + 1. Let keyResult be the result of performing ? ForIn/OfHeadEvaluation(« », + AssignmentExpression, iterate). + 2. Return ? ForIn/OfBodyEvaluation(LeftHandSideExpression, Statement, + keyResult, assignment, labelSet). + + 13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation + + [...] + 4. If destructuring is true and if lhsKind is assignment, then + a. Assert: lhs is a LeftHandSideExpression. + b. Let assignmentPattern be the parse of the source text corresponding to + lhs using AssignmentPattern as the goal symbol. + [...] + + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. + +---*/ +$DONOTEVALUATE(); + +for ({ x: { + set y(val) { + throw new Test262Error('The property should not be accessed.'); + } +}?.y = 42} in [{x: 42}]) ; diff --git a/test/language/statements/for-in/dstr/obj-prop-elem-target-obj-literal-optchain-prop-ref.js b/test/language/statements/for-in/dstr/obj-prop-elem-target-obj-literal-optchain-prop-ref.js new file mode 100644 index 00000000000..af1e6639bd3 --- /dev/null +++ b/test/language/statements/for-in/dstr/obj-prop-elem-target-obj-literal-optchain-prop-ref.js @@ -0,0 +1,68 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-assignment/obj-prop-elem-target-obj-literal-optchain-prop-ref.case +// - src/dstr-assignment/syntax/for-in.template +/*--- +description: It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple Using Object (For..in statement) +esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation +features: [optional-chaining, destructuring-binding] +flags: [generated] +negative: + phase: parse + type: SyntaxError +info: | + IterationStatement : + for ( LeftHandSideExpression of AssignmentExpression ) Statement + + 1. Let keyResult be the result of performing ? ForIn/OfHeadEvaluation(« », + AssignmentExpression, iterate). + 2. Return ? ForIn/OfBodyEvaluation(LeftHandSideExpression, Statement, + keyResult, assignment, labelSet). + + 13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation + + [...] + 4. If destructuring is true and if lhsKind is assignment, then + a. Assert: lhs is a LeftHandSideExpression. + b. Let assignmentPattern be the parse of the source text corresponding to + lhs using AssignmentPattern as the goal symbol. + [...] + + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. + +---*/ +$DONOTEVALUATE(); + +for ({ x: { + set y(val) { + throw new Test262Error('The property should not be accessed.'); + } +}?.y} in [{x: 42}]) ; diff --git a/test/language/statements/for-in/dstr/obj-prop-elem-target-yield-ident-invalid.js b/test/language/statements/for-in/dstr/obj-prop-elem-target-yield-ident-invalid.js index 09a3f196a7a..9d8fd7651c9 100644 --- a/test/language/statements/for-in/dstr/obj-prop-elem-target-yield-ident-invalid.js +++ b/test/language/statements/for-in/dstr/obj-prop-elem-target-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the DestructuringAssignmentTarget of an AssignmentElement and outside of a generator function body, it should behave as an IdentifierReference. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-in/dstr/obj-prop-nested-array-invalid.js b/test/language/statements/for-in/dstr/obj-prop-nested-array-invalid.js index e0ac8d8c082..336d2af8454 100644 --- a/test/language/statements/for-in/dstr/obj-prop-nested-array-invalid.js +++ b/test/language/statements/for-in/dstr/obj-prop-nested-array-invalid.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if LeftHandSideExpression is either an ObjectLiteral or an ArrayLiteral and if the lexical token sequence matched by LeftHandSideExpression cannot be parsed with no tokens left over using AssignmentPattern as the goal symbol. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/statements/for-in/dstr/obj-prop-nested-array-yield-ident-invalid.js b/test/language/statements/for-in/dstr/obj-prop-nested-array-yield-ident-invalid.js index e684cf2ab24..043a5f4a12a 100644 --- a/test/language/statements/for-in/dstr/obj-prop-nested-array-yield-ident-invalid.js +++ b/test/language/statements/for-in/dstr/obj-prop-nested-array-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the Initializer of a nested destructuring assignment and outside of a generator function body, it should behave as an IdentifierReference. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-in/dstr/obj-prop-nested-obj-invalid.js b/test/language/statements/for-in/dstr/obj-prop-nested-obj-invalid.js index 1e2895b2c95..9171f39fb54 100644 --- a/test/language/statements/for-in/dstr/obj-prop-nested-obj-invalid.js +++ b/test/language/statements/for-in/dstr/obj-prop-nested-obj-invalid.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if LeftHandSideExpression is either an ObjectLiteral or an ArrayLiteral and if the lexical token sequence matched by LeftHandSideExpression cannot be parsed with no tokens left over using AssignmentPattern as the goal symbol. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/statements/for-in/dstr/obj-prop-nested-obj-yield-ident-invalid.js b/test/language/statements/for-in/dstr/obj-prop-nested-obj-yield-ident-invalid.js index 7b855674cfd..44613311885 100644 --- a/test/language/statements/for-in/dstr/obj-prop-nested-obj-yield-ident-invalid.js +++ b/test/language/statements/for-in/dstr/obj-prop-nested-obj-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the Initializer of a nested destructuring assignment and outside of a generator function body, it should behave as an IdentifierReference. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-in/dstr/obj-rest-not-last-element-invalid.js b/test/language/statements/for-in/dstr/obj-rest-not-last-element-invalid.js index 42a3b391927..d619477e281 100644 --- a/test/language/statements/for-in/dstr/obj-rest-not-last-element-invalid.js +++ b/test/language/statements/for-in/dstr/obj-rest-not-last-element-invalid.js @@ -4,7 +4,6 @@ /*--- description: Object rest element needs to be the last AssignmenProperty in ObjectAssignmentPattern. (For..in statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [object-rest, destructuring-binding] flags: [generated] negative: diff --git a/test/language/statements/for-of/dstr/array-elem-init-yield-ident-invalid.js b/test/language/statements/for-of/dstr/array-elem-init-yield-ident-invalid.js index 1e10ae3a359..da773416027 100644 --- a/test/language/statements/for-of/dstr/array-elem-init-yield-ident-invalid.js +++ b/test/language/statements/for-of/dstr/array-elem-init-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the Initializer of an AssignmentElement outside of a generator function body, it behaves as an IdentifierReference. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-of/dstr/array-elem-nested-array-invalid.js b/test/language/statements/for-of/dstr/array-elem-nested-array-invalid.js index 50b3e0602bb..6ed71c5414c 100644 --- a/test/language/statements/for-of/dstr/array-elem-nested-array-invalid.js +++ b/test/language/statements/for-of/dstr/array-elem-nested-array-invalid.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if LeftHandSideExpression is either an ObjectLiteral or an ArrayLiteral and if the lexical token sequence matched by LeftHandSideExpression cannot be parsed with no tokens left over using AssignmentPattern as the goal symbol. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/statements/for-of/dstr/array-elem-nested-array-yield-ident-invalid.js b/test/language/statements/for-of/dstr/array-elem-nested-array-yield-ident-invalid.js index d225982a0eb..8df7c57b89e 100644 --- a/test/language/statements/for-of/dstr/array-elem-nested-array-yield-ident-invalid.js +++ b/test/language/statements/for-of/dstr/array-elem-nested-array-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the DestructuringAssignmentTarget of a nested destructuring assignment outside of strict mode, it behaves as an IdentifierReference. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-of/dstr/array-elem-nested-memberexpr-optchain-prop-ref-init.js b/test/language/statements/for-of/dstr/array-elem-nested-memberexpr-optchain-prop-ref-init.js new file mode 100644 index 00000000000..39b272ac200 --- /dev/null +++ b/test/language/statements/for-of/dstr/array-elem-nested-memberexpr-optchain-prop-ref-init.js @@ -0,0 +1,65 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-assignment/array-elem-nested-memberexpr-optchain-prop-ref-init.case +// - src/dstr-assignment/syntax/for-of.template +/*--- +description: It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple Using Object (MemberExpression OptionalChain .IdentifierName Initializer) (For..of statement) +esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation +features: [optional-chaining, destructuring-binding] +flags: [generated] +negative: + phase: parse + type: SyntaxError +info: | + IterationStatement : + for ( LeftHandSideExpression of AssignmentExpression ) Statement + + 1. Let keyResult be the result of performing ? ForIn/OfHeadEvaluation(« », + AssignmentExpression, iterate). + 2. Return ? ForIn/OfBodyEvaluation(LeftHandSideExpression, Statement, + keyResult, assignment, labelSet). + + 13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation + + [...] + 4. If destructuring is true and if lhsKind is assignment, then + a. Assert: lhs is a LeftHandSideExpression. + b. Let assignmentPattern be the parse of the source text corresponding to + lhs using AssignmentPattern as the goal symbol. + [...] + + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. + +---*/ +$DONOTEVALUATE(); +var x = {}; + +for ([x?.y = 42] of [[23]]) ; diff --git a/test/language/statements/for-of/dstr/array-elem-nested-memberexpr-optchain-prop-ref.js b/test/language/statements/for-of/dstr/array-elem-nested-memberexpr-optchain-prop-ref.js new file mode 100644 index 00000000000..ce815f61284 --- /dev/null +++ b/test/language/statements/for-of/dstr/array-elem-nested-memberexpr-optchain-prop-ref.js @@ -0,0 +1,65 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-assignment/array-elem-nested-memberexpr-optchain-prop-ref.case +// - src/dstr-assignment/syntax/for-of.template +/*--- +description: It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple Using Object (MemberExpression OptionalChain .IdentifierName) (For..of statement) +esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation +features: [optional-chaining, destructuring-binding] +flags: [generated] +negative: + phase: parse + type: SyntaxError +info: | + IterationStatement : + for ( LeftHandSideExpression of AssignmentExpression ) Statement + + 1. Let keyResult be the result of performing ? ForIn/OfHeadEvaluation(« », + AssignmentExpression, iterate). + 2. Return ? ForIn/OfBodyEvaluation(LeftHandSideExpression, Statement, + keyResult, assignment, labelSet). + + 13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation + + [...] + 4. If destructuring is true and if lhsKind is assignment, then + a. Assert: lhs is a LeftHandSideExpression. + b. Let assignmentPattern be the parse of the source text corresponding to + lhs using AssignmentPattern as the goal symbol. + [...] + + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. + +---*/ +$DONOTEVALUATE(); +var x = {}; + +for ([x?.y] of [[23]]) ; diff --git a/test/language/statements/for-of/dstr/array-elem-nested-obj-invalid.js b/test/language/statements/for-of/dstr/array-elem-nested-obj-invalid.js index aed00ae1c40..e448a9ddbf2 100644 --- a/test/language/statements/for-of/dstr/array-elem-nested-obj-invalid.js +++ b/test/language/statements/for-of/dstr/array-elem-nested-obj-invalid.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if LeftHandSideExpression is either an ObjectLiteral or an ArrayLiteral and if the lexical token sequence matched by LeftHandSideExpression cannot be parsed with no tokens left over using AssignmentPattern as the goal symbol. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/statements/for-of/dstr/array-elem-nested-obj-yield-ident-invalid.js b/test/language/statements/for-of/dstr/array-elem-nested-obj-yield-ident-invalid.js index f11c1679efa..b3ae477c546 100644 --- a/test/language/statements/for-of/dstr/array-elem-nested-obj-yield-ident-invalid.js +++ b/test/language/statements/for-of/dstr/array-elem-nested-obj-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the Initializer of a nested destructuring assignment outside of a generator function body, it behaves as a IdentifierReference. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-of/dstr/array-elem-put-obj-literal-optchain-prop-ref-init.js b/test/language/statements/for-of/dstr/array-elem-put-obj-literal-optchain-prop-ref-init.js new file mode 100644 index 00000000000..7777a493b57 --- /dev/null +++ b/test/language/statements/for-of/dstr/array-elem-put-obj-literal-optchain-prop-ref-init.js @@ -0,0 +1,68 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-assignment/array-elem-put-obj-literal-optchain-prop-ref-init.case +// - src/dstr-assignment/syntax/for-of.template +/*--- +description: It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple Using Object (For..of statement) +esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation +features: [optional-chaining, destructuring-binding] +flags: [generated] +negative: + phase: parse + type: SyntaxError +info: | + IterationStatement : + for ( LeftHandSideExpression of AssignmentExpression ) Statement + + 1. Let keyResult be the result of performing ? ForIn/OfHeadEvaluation(« », + AssignmentExpression, iterate). + 2. Return ? ForIn/OfBodyEvaluation(LeftHandSideExpression, Statement, + keyResult, assignment, labelSet). + + 13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation + + [...] + 4. If destructuring is true and if lhsKind is assignment, then + a. Assert: lhs is a LeftHandSideExpression. + b. Let assignmentPattern be the parse of the source text corresponding to + lhs using AssignmentPattern as the goal symbol. + [...] + + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. + +---*/ +$DONOTEVALUATE(); + +for ([{ + set y(val) { + throw new Test262Error('The property should not be accessed.'); + } +}?.y = 42] of [[23]]) ; diff --git a/test/language/statements/for-of/dstr/array-elem-put-obj-literal-optchain-prop-ref.js b/test/language/statements/for-of/dstr/array-elem-put-obj-literal-optchain-prop-ref.js new file mode 100644 index 00000000000..c901e74a11f --- /dev/null +++ b/test/language/statements/for-of/dstr/array-elem-put-obj-literal-optchain-prop-ref.js @@ -0,0 +1,68 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-assignment/array-elem-put-obj-literal-optchain-prop-ref.case +// - src/dstr-assignment/syntax/for-of.template +/*--- +description: It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple Using Object (For..of statement) +esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation +features: [optional-chaining, destructuring-binding] +flags: [generated] +negative: + phase: parse + type: SyntaxError +info: | + IterationStatement : + for ( LeftHandSideExpression of AssignmentExpression ) Statement + + 1. Let keyResult be the result of performing ? ForIn/OfHeadEvaluation(« », + AssignmentExpression, iterate). + 2. Return ? ForIn/OfBodyEvaluation(LeftHandSideExpression, Statement, + keyResult, assignment, labelSet). + + 13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation + + [...] + 4. If destructuring is true and if lhsKind is assignment, then + a. Assert: lhs is a LeftHandSideExpression. + b. Let assignmentPattern be the parse of the source text corresponding to + lhs using AssignmentPattern as the goal symbol. + [...] + + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. + +---*/ +$DONOTEVALUATE(); + +for ([{ + set y(val) { + throw new Test262Error('The property should not be accessed.'); + } +}?.y] of [[23]]) ; diff --git a/test/language/statements/for-of/dstr/array-elem-target-simple-strict.js b/test/language/statements/for-of/dstr/array-elem-target-simple-strict.js index bd7ad37361e..2acdcbcf044 100644 --- a/test/language/statements/for-of/dstr/array-elem-target-simple-strict.js +++ b/test/language/statements/for-of/dstr/array-elem-target-simple-strict.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is false. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-of/dstr/array-elem-target-yield-invalid.js b/test/language/statements/for-of/dstr/array-elem-target-yield-invalid.js index ffcd84209dc..1b3fb0911b7 100644 --- a/test/language/statements/for-of/dstr/array-elem-target-yield-invalid.js +++ b/test/language/statements/for-of/dstr/array-elem-target-yield-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the DestructuringAssignmentTarget of an AssignmentElement and outside of a generator function body, it behaves as an IdentifierReference. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-of/dstr/array-rest-before-element.js b/test/language/statements/for-of/dstr/array-rest-before-element.js index de8be9a8ea6..2ead8263b65 100644 --- a/test/language/statements/for-of/dstr/array-rest-before-element.js +++ b/test/language/statements/for-of/dstr/array-rest-before-element.js @@ -4,7 +4,6 @@ /*--- description: An AssignmentElement may not follow an AssignmentRestElement in an AssignmentElementList. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/statements/for-of/dstr/array-rest-before-elision.js b/test/language/statements/for-of/dstr/array-rest-before-elision.js index 7f736657a62..caf10c0b7dd 100644 --- a/test/language/statements/for-of/dstr/array-rest-before-elision.js +++ b/test/language/statements/for-of/dstr/array-rest-before-elision.js @@ -4,7 +4,6 @@ /*--- description: An elision may not follow an AssignmentRestElement in an AssignmentElementList. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/statements/for-of/dstr/array-rest-before-rest.js b/test/language/statements/for-of/dstr/array-rest-before-rest.js index 610eff16e04..8136a69dc81 100644 --- a/test/language/statements/for-of/dstr/array-rest-before-rest.js +++ b/test/language/statements/for-of/dstr/array-rest-before-rest.js @@ -4,7 +4,6 @@ /*--- description: An AssignmentRestElement may not follow another AssignmentRestElement in an AssignmentElementList. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/statements/for-of/dstr/array-rest-elision-invalid.js b/test/language/statements/for-of/dstr/array-rest-elision-invalid.js index f87953aade0..f404e2943fe 100644 --- a/test/language/statements/for-of/dstr/array-rest-elision-invalid.js +++ b/test/language/statements/for-of/dstr/array-rest-elision-invalid.js @@ -4,7 +4,6 @@ /*--- description: ArrayAssignmentPattern may not include elisions following an AssignmentRestElement in a AssignmentElementList. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/statements/for-of/dstr/array-rest-init.js b/test/language/statements/for-of/dstr/array-rest-init.js index de3d63cbf80..01152cc6705 100644 --- a/test/language/statements/for-of/dstr/array-rest-init.js +++ b/test/language/statements/for-of/dstr/array-rest-init.js @@ -4,7 +4,6 @@ /*--- description: The AssignmentRestElement does not support an initializer. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/statements/for-of/dstr/array-rest-nested-array-invalid.js b/test/language/statements/for-of/dstr/array-rest-nested-array-invalid.js index c7c890a157e..a58fdfa89e6 100644 --- a/test/language/statements/for-of/dstr/array-rest-nested-array-invalid.js +++ b/test/language/statements/for-of/dstr/array-rest-nested-array-invalid.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if LeftHandSideExpression is either an ObjectLiteral or an ArrayLiteral and if the lexical token sequence matched by LeftHandSideExpression cannot be parsed with no tokens left over using AssignmentPattern as the goal symbol. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/statements/for-of/dstr/array-rest-nested-array-yield-ident-invalid.js b/test/language/statements/for-of/dstr/array-rest-nested-array-yield-ident-invalid.js index f71b64d87ac..f2a04f4f387 100644 --- a/test/language/statements/for-of/dstr/array-rest-nested-array-yield-ident-invalid.js +++ b/test/language/statements/for-of/dstr/array-rest-nested-array-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the DestructuringAssignmentTarget of a nested destructuring assignment and outside of a generator function body, it should behave as an IdentifierExpression. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-of/dstr/array-rest-nested-obj-invalid.js b/test/language/statements/for-of/dstr/array-rest-nested-obj-invalid.js index a4f11bb2e61..c9e58829388 100644 --- a/test/language/statements/for-of/dstr/array-rest-nested-obj-invalid.js +++ b/test/language/statements/for-of/dstr/array-rest-nested-obj-invalid.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if LeftHandSideExpression is either an ObjectLiteral or an ArrayLiteral and if the lexical token sequence matched by LeftHandSideExpression cannot be parsed with no tokens left over using AssignmentPattern as the goal symbol. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/statements/for-of/dstr/array-rest-nested-obj-yield-ident-invalid.js b/test/language/statements/for-of/dstr/array-rest-nested-obj-yield-ident-invalid.js index e8041341f94..d7d16744870 100644 --- a/test/language/statements/for-of/dstr/array-rest-nested-obj-yield-ident-invalid.js +++ b/test/language/statements/for-of/dstr/array-rest-nested-obj-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the Initializer of a nested destructuring assignment and outside of a generator function body, it should behave as an IdentifierExpression. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-of/dstr/array-rest-yield-ident-invalid.js b/test/language/statements/for-of/dstr/array-rest-yield-ident-invalid.js index 9527ecd9461..5082a266c80 100644 --- a/test/language/statements/for-of/dstr/array-rest-yield-ident-invalid.js +++ b/test/language/statements/for-of/dstr/array-rest-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the DestructuringAssignmentTarget of an AssignmentRestElement and outside of a generator function body, it should behave as an IdentifierReference. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-of/dstr/obj-id-identifier-yield-expr.js b/test/language/statements/for-of/dstr/obj-id-identifier-yield-expr.js index 98c31890c9d..011588dcf40 100644 --- a/test/language/statements/for-of/dstr/obj-id-identifier-yield-expr.js +++ b/test/language/statements/for-of/dstr/obj-id-identifier-yield-expr.js @@ -4,7 +4,6 @@ /*--- description: yield is not a valid IdentifierReference in an AssignmentProperty within generator function bodies. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [generators, destructuring-binding] flags: [generated, noStrict] negative: diff --git a/test/language/statements/for-of/dstr/obj-id-identifier-yield-ident-invalid.js b/test/language/statements/for-of/dstr/obj-id-identifier-yield-ident-invalid.js index d31920459e8..6a69ce69d0f 100644 --- a/test/language/statements/for-of/dstr/obj-id-identifier-yield-ident-invalid.js +++ b/test/language/statements/for-of/dstr/obj-id-identifier-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: yield is not a valid IdentifierReference in an AssignmentProperty within strict mode code. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-of/dstr/obj-id-init-simple-strict.js b/test/language/statements/for-of/dstr/obj-id-init-simple-strict.js index 457b64e2883..f02f419b7df 100644 --- a/test/language/statements/for-of/dstr/obj-id-init-simple-strict.js +++ b/test/language/statements/for-of/dstr/obj-id-init-simple-strict.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if IsValidSimpleAssignmentTarget of IdentifierReference is false. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-of/dstr/obj-id-init-yield-ident-invalid.js b/test/language/statements/for-of/dstr/obj-id-init-yield-ident-invalid.js index 99a5c81fb76..0b208e5f0d5 100644 --- a/test/language/statements/for-of/dstr/obj-id-init-yield-ident-invalid.js +++ b/test/language/statements/for-of/dstr/obj-id-init-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the Initializer of an AssignmentProperty and outside of a generator function body, it should behave as an IdentifierReference. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-of/dstr/obj-id-simple-strict.js b/test/language/statements/for-of/dstr/obj-id-simple-strict.js index a422abcfdb2..b47f7558798 100644 --- a/test/language/statements/for-of/dstr/obj-id-simple-strict.js +++ b/test/language/statements/for-of/dstr/obj-id-simple-strict.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if IsValidSimpleAssignmentTarget of IdentifierReference is false. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-of/dstr/obj-prop-elem-init-yield-ident-invalid.js b/test/language/statements/for-of/dstr/obj-prop-elem-init-yield-ident-invalid.js index 38f25e24d8a..a95f5eaa275 100644 --- a/test/language/statements/for-of/dstr/obj-prop-elem-init-yield-ident-invalid.js +++ b/test/language/statements/for-of/dstr/obj-prop-elem-init-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the Initializer of an AssignmentElement and outside of a generator function body, it should behave as an IdentifierReference. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-of/dstr/obj-prop-elem-target-memberexpr-optchain-prop-ref-init.js b/test/language/statements/for-of/dstr/obj-prop-elem-target-memberexpr-optchain-prop-ref-init.js new file mode 100644 index 00000000000..3e2e1f54c29 --- /dev/null +++ b/test/language/statements/for-of/dstr/obj-prop-elem-target-memberexpr-optchain-prop-ref-init.js @@ -0,0 +1,65 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-assignment/obj-prop-elem-target-memberexpr-optchain-prop-ref-init.case +// - src/dstr-assignment/syntax/for-of.template +/*--- +description: It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple Using Object (MemberExpression OptionalChain .IdentifierName Initializer) (For..of statement) +esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation +features: [optional-chaining, destructuring-binding] +flags: [generated] +negative: + phase: parse + type: SyntaxError +info: | + IterationStatement : + for ( LeftHandSideExpression of AssignmentExpression ) Statement + + 1. Let keyResult be the result of performing ? ForIn/OfHeadEvaluation(« », + AssignmentExpression, iterate). + 2. Return ? ForIn/OfBodyEvaluation(LeftHandSideExpression, Statement, + keyResult, assignment, labelSet). + + 13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation + + [...] + 4. If destructuring is true and if lhsKind is assignment, then + a. Assert: lhs is a LeftHandSideExpression. + b. Let assignmentPattern be the parse of the source text corresponding to + lhs using AssignmentPattern as the goal symbol. + [...] + + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. + +---*/ +$DONOTEVALUATE(); +var y = {}; + +for ({ x: y?.z = 42 } of [{ x: 23 }]) ; diff --git a/test/language/statements/for-of/dstr/obj-prop-elem-target-memberexpr-optchain-prop-ref.js b/test/language/statements/for-of/dstr/obj-prop-elem-target-memberexpr-optchain-prop-ref.js new file mode 100644 index 00000000000..bbf7118b573 --- /dev/null +++ b/test/language/statements/for-of/dstr/obj-prop-elem-target-memberexpr-optchain-prop-ref.js @@ -0,0 +1,65 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-assignment/obj-prop-elem-target-memberexpr-optchain-prop-ref.case +// - src/dstr-assignment/syntax/for-of.template +/*--- +description: It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple Using Object (MemberExpression OptionalChain .IdentifierName) (For..of statement) +esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation +features: [optional-chaining, destructuring-binding] +flags: [generated] +negative: + phase: parse + type: SyntaxError +info: | + IterationStatement : + for ( LeftHandSideExpression of AssignmentExpression ) Statement + + 1. Let keyResult be the result of performing ? ForIn/OfHeadEvaluation(« », + AssignmentExpression, iterate). + 2. Return ? ForIn/OfBodyEvaluation(LeftHandSideExpression, Statement, + keyResult, assignment, labelSet). + + 13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation + + [...] + 4. If destructuring is true and if lhsKind is assignment, then + a. Assert: lhs is a LeftHandSideExpression. + b. Let assignmentPattern be the parse of the source text corresponding to + lhs using AssignmentPattern as the goal symbol. + [...] + + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. + +---*/ +$DONOTEVALUATE(); +var y = {}; + +for ({ x: y?.z } of [{ x: 23 }]) ; diff --git a/test/language/statements/for-of/dstr/obj-prop-elem-target-obj-literal-optchain-prop-ref-init.js b/test/language/statements/for-of/dstr/obj-prop-elem-target-obj-literal-optchain-prop-ref-init.js new file mode 100644 index 00000000000..c1a0e64035b --- /dev/null +++ b/test/language/statements/for-of/dstr/obj-prop-elem-target-obj-literal-optchain-prop-ref-init.js @@ -0,0 +1,68 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-assignment/obj-prop-elem-target-obj-literal-optchain-prop-ref-init.case +// - src/dstr-assignment/syntax/for-of.template +/*--- +description: It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple Using Object (For..of statement) +esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation +features: [optional-chaining, destructuring-binding] +flags: [generated] +negative: + phase: parse + type: SyntaxError +info: | + IterationStatement : + for ( LeftHandSideExpression of AssignmentExpression ) Statement + + 1. Let keyResult be the result of performing ? ForIn/OfHeadEvaluation(« », + AssignmentExpression, iterate). + 2. Return ? ForIn/OfBodyEvaluation(LeftHandSideExpression, Statement, + keyResult, assignment, labelSet). + + 13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation + + [...] + 4. If destructuring is true and if lhsKind is assignment, then + a. Assert: lhs is a LeftHandSideExpression. + b. Let assignmentPattern be the parse of the source text corresponding to + lhs using AssignmentPattern as the goal symbol. + [...] + + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. + +---*/ +$DONOTEVALUATE(); + +for ({ x: { + set y(val) { + throw new Test262Error('The property should not be accessed.'); + } +}?.y = 42} of [{x: 42}]) ; diff --git a/test/language/statements/for-of/dstr/obj-prop-elem-target-obj-literal-optchain-prop-ref.js b/test/language/statements/for-of/dstr/obj-prop-elem-target-obj-literal-optchain-prop-ref.js new file mode 100644 index 00000000000..130fef7f0e4 --- /dev/null +++ b/test/language/statements/for-of/dstr/obj-prop-elem-target-obj-literal-optchain-prop-ref.js @@ -0,0 +1,68 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-assignment/obj-prop-elem-target-obj-literal-optchain-prop-ref.case +// - src/dstr-assignment/syntax/for-of.template +/*--- +description: It is a Syntax Error if LeftHandSideExpression of an DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral and AssignmentTargetType(LeftHandSideExpression) is not simple Using Object (For..of statement) +esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation +features: [optional-chaining, destructuring-binding] +flags: [generated] +negative: + phase: parse + type: SyntaxError +info: | + IterationStatement : + for ( LeftHandSideExpression of AssignmentExpression ) Statement + + 1. Let keyResult be the result of performing ? ForIn/OfHeadEvaluation(« », + AssignmentExpression, iterate). + 2. Return ? ForIn/OfBodyEvaluation(LeftHandSideExpression, Statement, + keyResult, assignment, labelSet). + + 13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation + + [...] + 4. If destructuring is true and if lhsKind is assignment, then + a. Assert: lhs is a LeftHandSideExpression. + b. Let assignmentPattern be the parse of the source text corresponding to + lhs using AssignmentPattern as the goal symbol. + [...] + + Syntax + + AssignmentElement : DestructuringAssignmentTarget Initializer_opt + DestructuringAssignmentTarget : LeftHandSideExpression + + Static Semantics: Early Errors + + OptionalExpression: + MemberExpression OptionalChain + CallExpression OptionalChain + OptionalExpression OptionalChain + + OptionalChain: + ?. [ Expression ] + ?. IdentifierName + ?. Arguments + ?. TemplateLiteral + OptionalChain [ Expression ] + OptionalChain .IdentifierName + OptionalChain Arguments + OptionalChain TemplateLiteral + + DestructuringAssignmentTarget : LeftHandSideExpression + + - It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is not true. + + Static Semantics: IsValidSimpleAssignmentTarget + + LeftHandSideExpression : OptionalExpression + 1. Return false. + +---*/ +$DONOTEVALUATE(); + +for ({ x: { + set y(val) { + throw new Test262Error('The property should not be accessed.'); + } +}?.y} of [{x: 42}]) ; diff --git a/test/language/statements/for-of/dstr/obj-prop-elem-target-yield-ident-invalid.js b/test/language/statements/for-of/dstr/obj-prop-elem-target-yield-ident-invalid.js index 6f7a4d4a3b1..cd6fd32a3af 100644 --- a/test/language/statements/for-of/dstr/obj-prop-elem-target-yield-ident-invalid.js +++ b/test/language/statements/for-of/dstr/obj-prop-elem-target-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the DestructuringAssignmentTarget of an AssignmentElement and outside of a generator function body, it should behave as an IdentifierReference. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-of/dstr/obj-prop-nested-array-invalid.js b/test/language/statements/for-of/dstr/obj-prop-nested-array-invalid.js index 4ebc5b3009f..79e545cae3c 100644 --- a/test/language/statements/for-of/dstr/obj-prop-nested-array-invalid.js +++ b/test/language/statements/for-of/dstr/obj-prop-nested-array-invalid.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if LeftHandSideExpression is either an ObjectLiteral or an ArrayLiteral and if the lexical token sequence matched by LeftHandSideExpression cannot be parsed with no tokens left over using AssignmentPattern as the goal symbol. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/statements/for-of/dstr/obj-prop-nested-array-yield-ident-invalid.js b/test/language/statements/for-of/dstr/obj-prop-nested-array-yield-ident-invalid.js index 44e525a80c0..beb095261e2 100644 --- a/test/language/statements/for-of/dstr/obj-prop-nested-array-yield-ident-invalid.js +++ b/test/language/statements/for-of/dstr/obj-prop-nested-array-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the Initializer of a nested destructuring assignment and outside of a generator function body, it should behave as an IdentifierReference. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-of/dstr/obj-prop-nested-obj-invalid.js b/test/language/statements/for-of/dstr/obj-prop-nested-obj-invalid.js index 58252521030..e30e578efa8 100644 --- a/test/language/statements/for-of/dstr/obj-prop-nested-obj-invalid.js +++ b/test/language/statements/for-of/dstr/obj-prop-nested-obj-invalid.js @@ -4,7 +4,6 @@ /*--- description: It is a Syntax Error if LeftHandSideExpression is either an ObjectLiteral or an ArrayLiteral and if the lexical token sequence matched by LeftHandSideExpression cannot be parsed with no tokens left over using AssignmentPattern as the goal symbol. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated] negative: diff --git a/test/language/statements/for-of/dstr/obj-prop-nested-obj-yield-ident-invalid.js b/test/language/statements/for-of/dstr/obj-prop-nested-obj-yield-ident-invalid.js index c8baa712eb5..e6bd2955f61 100644 --- a/test/language/statements/for-of/dstr/obj-prop-nested-obj-yield-ident-invalid.js +++ b/test/language/statements/for-of/dstr/obj-prop-nested-obj-yield-ident-invalid.js @@ -4,7 +4,6 @@ /*--- description: When a `yield` token appears within the Initializer of a nested destructuring assignment and outside of a generator function body, it should behave as an IdentifierReference. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [destructuring-binding] flags: [generated, onlyStrict] negative: diff --git a/test/language/statements/for-of/dstr/obj-rest-not-last-element-invalid.js b/test/language/statements/for-of/dstr/obj-rest-not-last-element-invalid.js index 4132866a59a..887e958bbb9 100644 --- a/test/language/statements/for-of/dstr/obj-rest-not-last-element-invalid.js +++ b/test/language/statements/for-of/dstr/obj-rest-not-last-element-invalid.js @@ -4,7 +4,6 @@ /*--- description: Object rest element needs to be the last AssignmenProperty in ObjectAssignmentPattern. (For..of statement) esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation -es6id: 13.7.5.11 features: [object-rest, destructuring-binding] flags: [generated] negative: