diff --git a/features.txt b/features.txt index 764e39746b..0f20a1b61c 100644 --- a/features.txt +++ b/features.txt @@ -166,6 +166,10 @@ String.prototype.replaceAll # https://github.com/tc39/proposal-for-in-order for-in-order +# Logical Assignment Operators +# https://github.com/tc39/proposal-logical-assignment +logical-assignment-operators + ## Standard language features # # Language features that have been included in a published version of the diff --git a/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-bigint.js b/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-bigint.js index f211488898..bdbc94a952 100644 --- a/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-bigint.js +++ b/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-bigint.js @@ -4,7 +4,7 @@ /*--- esid: sec-assignment-operators-runtime-semantics-evaluation description: Logical And Assignment Operator -features: [BigInt] +features: [BigInt, logical-assignment-operators] info: | AssignmentExpression: LeftHandSideExpression &&= AssignmentExpression diff --git a/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-lhs-before-rhs.js b/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-lhs-before-rhs.js index 1260bf011b..4b858151d9 100644 --- a/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-lhs-before-rhs.js +++ b/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-lhs-before-rhs.js @@ -5,6 +5,7 @@ esid: sec-assignment-operators-runtime-semantics-evaluation description: > The LeftHandSideExpression is evaluated before the AssignmentExpression. +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-no-set-put.js b/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-no-set-put.js index f4aef21b24..73344c77dc 100644 --- a/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-no-set-put.js +++ b/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-no-set-put.js @@ -8,6 +8,7 @@ description: > Assignment operator(&&=) is a reference to a data property with the attribute value {[[Set]]:undefined} and PutValue step is reached. flags: [onlyStrict] +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-no-set.js b/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-no-set.js index 5a7422c389..67da0a5614 100644 --- a/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-no-set.js +++ b/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-no-set.js @@ -8,6 +8,7 @@ description: > Assignment operator(&&=) is a reference to a data property with the attribute value {[[Set]]:undefined} and PutValue step is not reached. flags: [onlyStrict] +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-non-extensible.js b/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-non-extensible.js index 3eb07bacb9..b1e3cf05ea 100644 --- a/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-non-extensible.js +++ b/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-non-extensible.js @@ -8,6 +8,7 @@ description: > Assignment operator(&&=) is a reference to a non-existent property of an object whose [[Extensible]] internal property is false. flags: [onlyStrict] +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-non-simple-lhs.js b/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-non-simple-lhs.js index edbf690944..de37734ee2 100644 --- a/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-non-simple-lhs.js +++ b/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-non-simple-lhs.js @@ -9,6 +9,7 @@ description: > negative: phase: parse type: SyntaxError +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-non-writeable-put.js b/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-non-writeable-put.js index c4273da859..39daa927a0 100644 --- a/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-non-writeable-put.js +++ b/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-non-writeable-put.js @@ -8,6 +8,7 @@ description: > Assignment operator(&&=) is a reference to a data property with the attribute value {[[Writable]]:false} and PutValue step is reached. flags: [onlyStrict] +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-non-writeable.js b/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-non-writeable.js index 54d4eed678..d9c67defaa 100644 --- a/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-non-writeable.js +++ b/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-non-writeable.js @@ -8,6 +8,7 @@ description: > Assignment operator(&&=) is a reference to a data property with the attribute value {[[Writable]]:false} and PutValue step is not reached. flags: [onlyStrict] +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-unresolved-lhs.js b/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-unresolved-lhs.js index 596805130f..984df2abcf 100644 --- a/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-unresolved-lhs.js +++ b/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-unresolved-lhs.js @@ -7,6 +7,7 @@ description: > ReferenceError is thrown if the LeftHandSideExpression of a Logical Assignment operator(&&=) evaluates to an unresolvable reference flags: [onlyStrict] +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-unresolved-rhs-put.js b/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-unresolved-rhs-put.js index 156960b4a3..f59a32eaa7 100644 --- a/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-unresolved-rhs-put.js +++ b/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-unresolved-rhs-put.js @@ -7,6 +7,7 @@ description: > ReferenceError is thrown if the AssignmentExpression of a Logical Assignment operator(&&=) evaluates to an unresolvable reference and the AssignmentExpression is evaluated. +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-unresolved-rhs.js b/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-unresolved-rhs.js index 8443ad3186..b86c6c47f1 100644 --- a/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-unresolved-rhs.js +++ b/test/language/expressions/logical-assignment/lgcl-and-assignment-operator-unresolved-rhs.js @@ -7,6 +7,7 @@ description: > ReferenceError is not thrown if the AssignmentExpression of a Logical Assignment operator(&&=) evaluates to an unresolvable reference and the AssignmentExpression is not evaluated. +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-and-assignment-operator.js b/test/language/expressions/logical-assignment/lgcl-and-assignment-operator.js index ed2ec69fb4..71765a0415 100644 --- a/test/language/expressions/logical-assignment/lgcl-and-assignment-operator.js +++ b/test/language/expressions/logical-assignment/lgcl-and-assignment-operator.js @@ -16,6 +16,7 @@ info: | 6. Let rval be ? GetValue(rref). 7. Perform ? PutValue(lref, rval). 8. Return rval. +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-bigint.js b/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-bigint.js index 85cdf851f1..3269418815 100644 --- a/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-bigint.js +++ b/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-bigint.js @@ -4,7 +4,7 @@ /*--- esid: sec-assignment-operators-runtime-semantics-evaluation description: Logical Nullish Assignment Operator -features: [BigInt] +features: [BigInt, logical-assignment-operators] info: | AssignmentExpression: LeftHandSideExpression ??= AssignmentExpression diff --git a/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-lhs-before-rhs.js b/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-lhs-before-rhs.js index bfc46cf10b..b5be4a4b0e 100644 --- a/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-lhs-before-rhs.js +++ b/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-lhs-before-rhs.js @@ -5,6 +5,7 @@ esid: sec-assignment-operators-runtime-semantics-evaluation description: > The LeftHandSideExpression is evaluated before the AssignmentExpression. +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-no-set-put.js b/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-no-set-put.js index c191a5ac0e..f3d9c8be93 100644 --- a/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-no-set-put.js +++ b/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-no-set-put.js @@ -8,6 +8,7 @@ description: > Assignment operator(??=) is a reference to a data property with the attribute value {[[Set]]:undefined} and PutValue step is reached. flags: [onlyStrict] +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-no-set.js b/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-no-set.js index ab574dc708..788f276a75 100644 --- a/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-no-set.js +++ b/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-no-set.js @@ -8,6 +8,7 @@ description: > Assignment operator(??=) is a reference to a data property with the attribute value {[[Set]]:undefined} and PutValue step is not reached. flags: [onlyStrict] +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-non-extensible.js b/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-non-extensible.js index fceb861c6a..1ea0b52f36 100644 --- a/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-non-extensible.js +++ b/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-non-extensible.js @@ -8,6 +8,7 @@ description: > Assignment operator(??=) is a reference to a non-existent property of an object whose [[Extensible]] internal property is false. flags: [onlyStrict] +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-non-simple-lhs.js b/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-non-simple-lhs.js index c1cedf69f3..ff2dd530ad 100644 --- a/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-non-simple-lhs.js +++ b/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-non-simple-lhs.js @@ -9,6 +9,7 @@ description: > negative: phase: parse type: SyntaxError +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-non-writeable-put.js b/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-non-writeable-put.js index be55ca97e7..9cb612b89d 100644 --- a/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-non-writeable-put.js +++ b/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-non-writeable-put.js @@ -8,6 +8,7 @@ description: > Assignment operator(??=) is a reference to a data property with the attribute value {[[Writable]]:false} and PutValue step is reached. flags: [onlyStrict] +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-non-writeable.js b/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-non-writeable.js index 04ec6a926d..6589a43474 100644 --- a/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-non-writeable.js +++ b/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-non-writeable.js @@ -8,6 +8,7 @@ description: > Assignment operator(??=) is a reference to a data property with the attribute value {[[Writable]]:false} and PutValue step is not reached. flags: [onlyStrict] +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-unresolved-lhs.js b/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-unresolved-lhs.js index 28d5ca8f6f..f0663234d2 100644 --- a/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-unresolved-lhs.js +++ b/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-unresolved-lhs.js @@ -7,6 +7,7 @@ description: > ReferenceError is thrown if the LeftHandSideExpression of a Logical Assignment operator(??=) evaluates to an unresolvable reference flags: [onlyStrict] +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-unresolved-rhs-put.js b/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-unresolved-rhs-put.js index b522ea58a5..e91c973f04 100644 --- a/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-unresolved-rhs-put.js +++ b/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-unresolved-rhs-put.js @@ -7,6 +7,7 @@ description: > ReferenceError is thrown if the AssignmentExpression of a Logical Assignment operator(??=) evaluates to an unresolvable reference and the AssignmentExpression is evaluated. +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-unresolved-rhs.js b/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-unresolved-rhs.js index 543f068185..b330413856 100644 --- a/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-unresolved-rhs.js +++ b/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator-unresolved-rhs.js @@ -7,6 +7,7 @@ description: > ReferenceError is not thrown if the AssignmentExpression of a Logical Assignment operator(??=) evaluates to an unresolvable reference and the AssignmentExpression is not evaluated. +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator.js b/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator.js index d35f973dc8..8d94ecc3ae 100644 --- a/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator.js +++ b/test/language/expressions/logical-assignment/lgcl-nullish-assignment-operator.js @@ -15,6 +15,7 @@ info: | 5. Let rval be ? GetValue(rref). 6. Perform ? PutValue(lref, rval). 7. Return rval. +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-bigint.js b/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-bigint.js index 750793d4b0..bf86322620 100644 --- a/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-bigint.js +++ b/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-bigint.js @@ -4,7 +4,7 @@ /*--- esid: sec-assignment-operators-runtime-semantics-evaluation description: Logical Or Assignment Operator -features: [BigInt] +features: [BigInt, logical-assignment-operators] info: | AssignmentExpression: LeftHandSideExpression ||= AssignmentExpression diff --git a/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-lhs-before-rhs.js b/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-lhs-before-rhs.js index 01132f2dae..65b9603a18 100644 --- a/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-lhs-before-rhs.js +++ b/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-lhs-before-rhs.js @@ -5,6 +5,7 @@ esid: sec-assignment-operators-runtime-semantics-evaluation description: > The LeftHandSideExpression is evaluated before the AssignmentExpression. +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-no-set-put.js b/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-no-set-put.js index f4fddb49d4..80528aa14a 100644 --- a/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-no-set-put.js +++ b/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-no-set-put.js @@ -8,6 +8,7 @@ description: > Assignment operator(||=) is a reference to a data property with the attribute value {[[Set]]:undefined} and PutValue step is reached. flags: [onlyStrict] +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-no-set.js b/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-no-set.js index 8aeeb8a8da..dcab72277f 100644 --- a/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-no-set.js +++ b/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-no-set.js @@ -8,6 +8,7 @@ description: > Assignment operator(||=) is a reference to a data property with the attribute value {[[Set]]:undefined} and PutValue step is not reached. flags: [onlyStrict] +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-non-extensible.js b/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-non-extensible.js index 71241ab076..2ec575c721 100644 --- a/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-non-extensible.js +++ b/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-non-extensible.js @@ -8,6 +8,7 @@ description: > Assignment operator(||=) is a reference to a non-existent property of an object whose [[Extensible]] internal property is false. flags: [onlyStrict] +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-non-simple-lhs.js b/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-non-simple-lhs.js index 7dcc8bc563..ba35c8964b 100644 --- a/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-non-simple-lhs.js +++ b/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-non-simple-lhs.js @@ -9,6 +9,7 @@ description: > negative: phase: parse type: SyntaxError +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-non-writeable-put.js b/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-non-writeable-put.js index 23e5631a1b..a4233c6db9 100644 --- a/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-non-writeable-put.js +++ b/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-non-writeable-put.js @@ -8,6 +8,7 @@ description: > Assignment operator(||=) is a reference to a data property with the attribute value {[[Writable]]:false} and PutValue step is reached. flags: [onlyStrict] +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-non-writeable.js b/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-non-writeable.js index 05fc7a798d..ca43cd6b1b 100644 --- a/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-non-writeable.js +++ b/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-non-writeable.js @@ -8,6 +8,7 @@ description: > Assignment operator(||=) is a reference to a data property with the attribute value {[[Writable]]:false} and PutValue step is not reached. flags: [onlyStrict] +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-unresolved-lhs.js b/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-unresolved-lhs.js index 33bf2e3648..5c66a54d37 100644 --- a/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-unresolved-lhs.js +++ b/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-unresolved-lhs.js @@ -7,6 +7,7 @@ description: > ReferenceError is thrown if the LeftHandSideExpression of a Logical Assignment operator(||=) evaluates to an unresolvable reference flags: [onlyStrict] +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-unresolved-rhs-put.js b/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-unresolved-rhs-put.js index fc0993d759..ee291919b2 100644 --- a/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-unresolved-rhs-put.js +++ b/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-unresolved-rhs-put.js @@ -7,6 +7,7 @@ description: > ReferenceError is thrown if the AssignmentExpression of a Logical Assignment operator(||=) evaluates to an unresolvable reference and the AssignmentExpression is evaluated. +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-unresolved-rhs.js b/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-unresolved-rhs.js index 501b897e95..653ac81d9b 100644 --- a/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-unresolved-rhs.js +++ b/test/language/expressions/logical-assignment/lgcl-or-assignment-operator-unresolved-rhs.js @@ -7,6 +7,7 @@ description: > ReferenceError is not thrown if the AssignmentExpression of a Logical Assignment operator(||=) evaluates to an unresolvable reference and the AssignmentExpression is not evaluated. +features: [logical-assignment-operators] ---*/ diff --git a/test/language/expressions/logical-assignment/lgcl-or-assignment-operator.js b/test/language/expressions/logical-assignment/lgcl-or-assignment-operator.js index a34bbd124c..3a0648f8e9 100644 --- a/test/language/expressions/logical-assignment/lgcl-or-assignment-operator.js +++ b/test/language/expressions/logical-assignment/lgcl-or-assignment-operator.js @@ -16,6 +16,7 @@ info: | 6. Let rval be ? GetValue(rref). 7. Perform ? PutValue(lref, rval). 8. Return rval. +features: [logical-assignment-operators] ---*/