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:
@@ -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");
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user