Fix evaluation order in non-binding destructuring patterns (#4173)

JerryScript-DCO-1.0-Signed-off-by: Robert Fancsik frobert@inf.u-szeged.hu
This commit is contained in:
Robert Fancsik
2020-08-28 15:13:02 +02:00
committed by GitHub
parent 28c186c98f
commit 2f08d8ac08
11 changed files with 92 additions and 36 deletions
+48
View File
@@ -281,6 +281,54 @@ function __createIterableObject (arr, methods) {
assert (b === 2);
}) ();
(function () {
var value = { y: "42" };
var x = {};
var assignmentResult, iterationResult, iter;
iter = (function*() {
assignmentResult = { y: x[yield] } = value;
}());
iterationResult = iter.next();
assert (assignmentResult === undefined);
assert (iterationResult.value === undefined);
assert (iterationResult.done === false);
assert (x.prop === undefined);
iterationResult = iter.next('prop');
assert (assignmentResult === value);
assert (iterationResult.value === undefined);
assert (iterationResult.done === true);
assert (x.prop === "42");
}) ();
(function () {
var value = { foo: "42" };
var x = {};
var assignmentResult, iterationResult, iter;
iter = (function*() {
assignmentResult = { ['f' + 'o' + 'o']: x[yield] } = value;
}());
iterationResult = iter.next();
assert (assignmentResult === undefined);
assert (iterationResult.value === undefined);
assert (iterationResult.done === false);
assert (x.prop === undefined);
iterationResult = iter.next('prop');
assert (assignmentResult === value);
assert (iterationResult.value === undefined);
assert (iterationResult.done === true);
assert (x.prop === "42");
}) ();
mustThrow ("var iter = __createIterableObject([], "
+ "{ get 'return'() { throw new TypeError() }});"
+ "var [a] = iter");
+8
View File
@@ -226,6 +226,14 @@ mustThrow ("function f ({}) {}; f();");
assert (a === 7);
}) ();
(function () {
var o = {};
({ a : o.c } = { get a() { return 5.2 }})
assert(o.c == 5.2);
}) ();
try {
eval ("var a = 0; -{a} = {a:1}");
assert (false);
-4
View File
@@ -255,10 +255,6 @@
<test id="language/block-scope/syntax/redeclaration-in-block/attempt-to-redeclare-function-declaration-with-function-declaration.js"><reason>No longer a SyntaxError in ES11</reason></test>
<test id="language/default-parameters/function-length.js"><reason></reason></test>
<test id="language/expressions/arrow-function/lexical-super-call-from-within-constructor.js"><reason></reason></test>
<test id="language/expressions/assignment/destructuring/obj-prop-elem-target-yield-expr.js"><reason></reason></test>
<test id="language/expressions/assignment/destructuring/obj-prop-elem-target-yield-ident-valid.js"><reason></reason></test>
<test id="language/expressions/assignment/destructuring/obj-prop-put-prop-ref.js"><reason></reason></test>
<test id="language/expressions/assignment/destructuring/obj-prop-put-prop-ref-no-get.js"><reason></reason></test>
<test id="language/expressions/assignment/S11.13.1_A5_T1.js"><reason></reason></test>
<test id="language/expressions/assignment/S11.13.1_A5_T2.js"><reason></reason></test>
<test id="language/expressions/assignment/S11.13.1_A5_T3.js"><reason></reason></test>
-8
View File
@@ -3047,10 +3047,6 @@
<test id="language/expressions/assignment/dstr/obj-prop-elem-target-obj-literal-prop-ref-init-active.js"><reason></reason></test>
<test id="language/expressions/assignment/dstr/obj-prop-elem-target-obj-literal-prop-ref-init.js"><reason></reason></test>
<test id="language/expressions/assignment/dstr/obj-prop-elem-target-obj-literal-prop-ref.js"><reason></reason></test>
<test id="language/expressions/assignment/dstr/obj-prop-elem-target-yield-expr.js"><reason></reason></test>
<test id="language/expressions/assignment/dstr/obj-prop-elem-target-yield-ident-valid.js"><reason></reason></test>
<test id="language/expressions/assignment/dstr/obj-prop-put-prop-ref-no-get.js"><reason></reason></test>
<test id="language/expressions/assignment/dstr/obj-prop-put-prop-ref.js"><reason></reason></test>
<test id="language/expressions/assignment/dstr/obj-rest-computed-property-no-strict.js"><reason></reason></test>
<test id="language/expressions/assignment/dstr/obj-rest-computed-property.js"><reason></reason></test>
<test id="language/expressions/assignment/dstr/obj-rest-descriptors.js"><reason></reason></test>
@@ -4624,10 +4620,6 @@
<test id="language/statements/for-of/dstr/obj-prop-elem-target-obj-literal-prop-ref-init-active.js"><reason></reason></test>
<test id="language/statements/for-of/dstr/obj-prop-elem-target-obj-literal-prop-ref-init.js"><reason></reason></test>
<test id="language/statements/for-of/dstr/obj-prop-elem-target-obj-literal-prop-ref.js"><reason></reason></test>
<test id="language/statements/for-of/dstr/obj-prop-elem-target-yield-expr.js"><reason></reason></test>
<test id="language/statements/for-of/dstr/obj-prop-elem-target-yield-ident-valid.js"><reason></reason></test>
<test id="language/statements/for-of/dstr/obj-prop-put-prop-ref-no-get.js"><reason></reason></test>
<test id="language/statements/for-of/dstr/obj-prop-put-prop-ref.js"><reason></reason></test>
<test id="language/statements/for-of/dstr/obj-rest-computed-property-no-strict.js"><reason></reason></test>
<test id="language/statements/for-of/dstr/obj-rest-computed-property.js"><reason></reason></test>
<test id="language/statements/for-of/dstr/obj-rest-descriptors.js"><reason></reason></test>