From c24a206511841e14f156b929005b9e5597c05965 Mon Sep 17 00:00:00 2001 From: Mike Pennisi <mike@mikepennisi.com> Date: Fri, 20 May 2016 18:58:23 -0400 Subject: [PATCH] Re-format destructuring assignment tests Utilize the test generation tool to increase coverage of destructuring assignment semantics. Previously, only destructuring assignment in the AssignmentExpression position was tested. With this change applied, the same tests will assert expected behavior for destructuring assignment in `for..of` statements, as well. A limited number of tests are applied to the `for..in` statement as well, but due to the iteration protocol observed by that statement, many destructuring tests are not relevant, and others cannot be automatically generated from this format. --- .../array-elem-init-assignment.case | 23 ++++++++ .../array-elem-init-evaluation.case | 20 +++++++ .../array-elem-init-fn-name-arrow.case | 12 +++-- .../array-elem-init-fn-name-class.case | 13 +++-- .../array-elem-init-fn-name-cover.case | 13 +++-- .../array-elem-init-fn-name-fn.case | 13 +++-- .../array-elem-init-fn-name-gen.case | 15 +++--- .../dstr-assignment/array-elem-init-in.case | 16 +++--- .../dstr-assignment/array-elem-init-let.case | 17 +++--- .../array-elem-init-order.case | 16 +++--- .../array-elem-init-simple-no-strict.case | 16 +++--- .../array-elem-init-simple-strict.case | 8 ++- .../array-elem-init-yield-expr.case | 15 +++--- .../array-elem-init-yield-ident-invalid.case | 9 ++-- .../array-elem-init-yield-ident-valid.case | 16 +++--- .../array-elem-iter-get-err.case | 16 +++--- .../array-elem-iter-nrml-close-err.case | 18 ++++--- .../array-elem-iter-nrml-close-null.case | 16 +++--- .../array-elem-iter-nrml-close-skip.case | 14 +++-- .../array-elem-iter-nrml-close.case | 14 +++-- .../array-elem-iter-rtrn-close-err.case | 13 +++-- .../array-elem-iter-rtrn-close-null.case | 11 +++- .../array-elem-iter-rtrn-close.case | 13 +++-- .../array-elem-iter-thrw-close-err.case | 16 +++--- .../array-elem-iter-thrw-close-skip.case | 18 ++++--- .../array-elem-iter-thrw-close.case | 16 +++--- .../array-elem-nested-array-invalid.case | 10 ++-- .../array-elem-nested-array-null.case | 16 +++--- ...rray-elem-nested-array-undefined-hole.case | 16 +++--- ...array-elem-nested-array-undefined-own.case | 16 +++--- .../array-elem-nested-array-undefined.case | 16 +++--- .../array-elem-nested-array-yield-expr.case | 14 +++-- ...elem-nested-array-yield-ident-invalid.case | 8 ++- ...y-elem-nested-array-yield-ident-valid.case | 15 +++--- .../array-elem-nested-array.case | 16 +++--- .../array-elem-nested-obj-invalid.case | 10 ++-- .../array-elem-nested-obj-null.case | 14 +++-- .../array-elem-nested-obj-undefined-hole.case | 14 +++-- .../array-elem-nested-obj-undefined-own.case | 14 +++-- .../array-elem-nested-obj-undefined.case | 14 +++-- .../array-elem-nested-obj-yield-expr.case | 15 +++--- ...y-elem-nested-obj-yield-ident-invalid.case | 8 ++- ...ray-elem-nested-obj-yield-ident-valid.case | 16 +++--- .../array-elem-nested-obj.case | 16 +++--- .../dstr-assignment/array-elem-put-const.case | 14 +++-- .../dstr-assignment/array-elem-put-let.case | 15 ++++-- .../array-elem-put-prop-ref-no-get.case | 16 +++--- .../array-elem-put-prop-ref-user-err.case | 15 +++--- .../array-elem-put-prop-ref.case | 15 +++--- ...array-elem-put-unresolvable-no-strict.case | 10 +++- .../array-elem-put-unresolvable-strict.case | 12 +++-- .../array-elem-target-identifier.case | 15 +++--- .../array-elem-target-simple-no-strict.case | 16 +++--- .../array-elem-target-simple-strict.case | 8 ++- .../array-elem-target-yield-expr.case | 14 +++-- .../array-elem-target-yield-invalid.case | 8 ++- .../array-elem-target-yield-valid.case | 15 +++--- ...rray-elem-trlg-iter-elision-iter-abpt.case | 15 ++++-- ...trlg-iter-elision-iter-nrml-close-err.case | 16 +++--- ...rlg-iter-elision-iter-nrml-close-null.case | 14 +++-- ...rlg-iter-elision-iter-nrml-close-skip.case | 12 +++-- ...lem-trlg-iter-elision-iter-nrml-close.case | 12 +++-- .../array-elem-trlg-iter-get-err.case | 14 +++-- ...ay-elem-trlg-iter-list-nrml-close-err.case | 16 +++--- ...y-elem-trlg-iter-list-nrml-close-null.case | 14 +++-- ...y-elem-trlg-iter-list-nrml-close-skip.case | 12 +++-- .../array-elem-trlg-iter-list-nrml-close.case | 12 +++-- ...ay-elem-trlg-iter-list-rtrn-close-err.case | 13 +++-- ...y-elem-trlg-iter-list-rtrn-close-null.case | 10 +++- .../array-elem-trlg-iter-list-rtrn-close.case | 11 +++- ...ay-elem-trlg-iter-list-thrw-close-err.case | 14 +++-- ...y-elem-trlg-iter-list-thrw-close-skip.case | 16 +++--- .../array-elem-trlg-iter-list-thrw-close.case | 16 +++--- ...y-elem-trlg-iter-rest-nrml-close-skip.case | 12 +++-- ...ay-elem-trlg-iter-rest-rtrn-close-err.case | 11 +++- ...y-elem-trlg-iter-rest-rtrn-close-null.case | 10 +++- .../array-elem-trlg-iter-rest-rtrn-close.case | 11 +++- ...ay-elem-trlg-iter-rest-thrw-close-err.case | 16 +++--- ...y-elem-trlg-iter-rest-thrw-close-skip.case | 16 +++--- .../array-elem-trlg-iter-rest-thrw-close.case | 16 +++--- .../array-elision-iter-abpt.case | 16 +++--- .../array-elision-iter-get-err.case | 14 +++-- .../array-elision-iter-nrml-close-err.case | 16 +++--- .../array-elision-iter-nrml-close-null.case | 14 +++-- .../array-elision-iter-nrml-close-skip.case | 12 +++-- .../array-elision-iter-nrml-close.case | 12 +++-- .../array-elision-val-array.case | 13 +++++ .../array-elision-val-bool.case | 16 ++++++ .../array-elision-val-null.case | 16 ++++++ .../array-elision-val-num.case | 16 ++++++ .../array-elision-val-string.case | 13 +++++ .../array-elision-val-symbol.case | 19 +++++++ .../array-elision-val-undef.case | 16 ++++++ .../array-empty-iter-close-err.case | 16 +++--- .../array-empty-iter-close-null.case | 14 +++-- .../array-empty-iter-close.case | 12 +++-- .../array-empty-iter-get-err.case | 14 +++-- .../array-empty-val-array.case | 15 ++++++ src/dstr-assignment/array-empty-val-bool.case | 17 ++++++ src/dstr-assignment/array-empty-val-null.case | 17 ++++++ src/dstr-assignment/array-empty-val-num.case | 17 ++++++ .../array-empty-val-string.case | 15 ++++++ .../array-empty-val-symbol.case | 19 +++++++ .../array-empty-val-undef.case | 17 ++++++ src/dstr-assignment/array-iteration.case | 27 ++++++++++ .../array-rest-after-element.case | 12 +++-- .../array-rest-after-elision.case | 12 +++-- .../array-rest-before-element.case | 10 ++-- .../array-rest-before-elision.case | 10 ++-- .../array-rest-before-rest.case | 10 ++-- .../array-rest-elision-invalid.case | 8 ++- .../array-rest-elision-iter-abpt.case | 16 +++--- .../dstr-assignment/array-rest-elision.case | 15 +++--- .../dstr-assignment/array-rest-init.case | 10 ++-- .../array-rest-iter-get-err.case | 14 +++-- .../array-rest-iter-nrml-close-skip.case | 12 +++-- .../array-rest-iter-rtrn-close-err.case | 13 +++-- .../array-rest-iter-rtrn-close-null.case | 10 +++- .../array-rest-iter-rtrn-close.case | 13 +++-- .../array-rest-iter-thrw-close-err.case | 15 ++++-- .../array-rest-iter-thrw-close-skip.case | 16 +++--- .../array-rest-iter-thrw-close.case | 16 +++--- .../dstr-assignment/array-rest-iteration.case | 16 +++--- .../dstr-assignment/array-rest-lref-err.case | 16 +++--- .../dstr-assignment/array-rest-lref.case | 12 +++-- .../array-rest-nested-array-invalid.case | 8 ++- ...est-nested-array-iter-thrw-close-skip.case | 16 +++--- .../array-rest-nested-array-null.case | 16 +++--- ...rray-rest-nested-array-undefined-hole.case | 16 +++--- ...array-rest-nested-array-undefined-own.case | 16 +++--- .../array-rest-nested-array-undefined.case | 16 +++--- .../array-rest-nested-array-yield-expr.case | 14 +++-- ...rest-nested-array-yield-ident-invalid.case | 9 ++-- ...y-rest-nested-array-yield-ident-valid.case | 15 +++--- .../array-rest-nested-array.case | 16 +++--- .../array-rest-nested-obj-invalid.case | 8 ++- .../array-rest-nested-obj-null.case | 16 +++--- .../array-rest-nested-obj-undefined-hole.case | 17 +++--- .../array-rest-nested-obj-undefined-own.case | 17 +++--- .../array-rest-nested-obj-undefined.case | 17 +++--- .../array-rest-nested-obj-yield-expr.case | 15 +++--- ...y-rest-nested-obj-yield-ident-invalid.case | 9 ++-- ...ray-rest-nested-obj-yield-ident-valid.case | 16 +++--- .../array-rest-nested-obj.case | 16 +++--- .../dstr-assignment/array-rest-put-const.case | 14 +++-- .../dstr-assignment/array-rest-put-let.case | 16 +++--- .../array-rest-put-prop-ref-no-get.case | 18 ++++--- ...put-prop-ref-user-err-iter-close-skip.case | 15 ++++-- .../array-rest-put-prop-ref-user-err.case | 15 +++--- .../array-rest-put-prop-ref.case | 15 +++--- ...array-rest-put-unresolvable-no-strict.case | 10 +++- .../array-rest-put-unresolvable-strict.case | 12 +++-- .../array-rest-yield-expr.case | 15 +++--- .../array-rest-yield-ident-invalid.case | 9 +++- .../array-rest-yield-ident-valid.case | 15 +++--- .../default/assignment-expr.template | 27 ++++++++++ src/dstr-assignment/default/for-of.template | 36 +++++++++++++ .../error/assignment-expr.template | 22 ++++++++ src/dstr-assignment/error/for-of.template | 38 +++++++++++++ src/dstr-assignment/obj-empty-bool.case | 15 ++++++ src/dstr-assignment/obj-empty-null.case | 17 ++++++ src/dstr-assignment/obj-empty-num.case | 15 ++++++ src/dstr-assignment/obj-empty-obj.case | 15 ++++++ src/dstr-assignment/obj-empty-string.case | 15 ++++++ src/dstr-assignment/obj-empty-symbol.case | 18 +++++++ src/dstr-assignment/obj-empty-undef.case | 17 ++++++ .../obj-id-identifier-resolution-first.case | 18 +++++++ .../obj-id-identifier-resolution-last.case | 18 +++++++ .../obj-id-identifier-resolution-lone.case | 17 ++++++ .../obj-id-identifier-resolution-middle.case | 18 +++++++ .../obj-id-identifier-resolution-trlng.case | 18 +++++++ .../obj-id-identifier-yield-expr.case | 14 +++-- ...obj-id-identifier-yield-ident-invalid.case | 12 +++-- .../obj-id-identifier-yield-ident-valid.case | 20 +++++++ .../obj-id-init-assignment-missing.case | 20 +++++++ .../obj-id-init-assignment-null.case | 20 +++++++ .../obj-id-init-assignment-truthy.case | 20 +++++++ .../obj-id-init-assignment-undef.case | 20 +++++++ .../obj-id-init-evaluation.case | 21 ++++++++ .../obj-id-init-fn-name-arrow.case | 12 +++-- .../obj-id-init-fn-name-class.case | 15 +++--- .../obj-id-init-fn-name-cover.case | 15 +++--- .../obj-id-init-fn-name-fn.case | 15 +++--- .../obj-id-init-fn-name-gen.case | 15 +++--- .../dstr-assignment/obj-id-init-in.case | 16 +++--- .../dstr-assignment/obj-id-init-let.case | 17 +++--- .../dstr-assignment/obj-id-init-order.case | 16 +++--- .../obj-id-init-simple-no-strict.case | 16 +++--- .../obj-id-init-simple-strict.case | 8 ++- .../obj-id-init-yield-expr.case | 15 +++--- .../obj-id-init-yield-ident-invalid.case | 9 ++-- .../obj-id-init-yield-ident-valid.case | 16 +++--- .../dstr-assignment/obj-id-put-const.case | 14 +++-- .../dstr-assignment/obj-id-put-let.case | 15 ++++-- .../obj-id-put-unresolvable-no-strict.case | 10 +++- .../obj-id-put-unresolvable-strict.case | 12 +++-- .../obj-id-simple-no-strict.case | 16 +++--- .../dstr-assignment/obj-id-simple-strict.case | 8 ++- ...obj-prop-elem-init-assignment-missing.case | 20 +++++++ .../obj-prop-elem-init-assignment-null.case | 19 +++++++ .../obj-prop-elem-init-assignment-truthy.case | 19 +++++++ .../obj-prop-elem-init-assignment-undef.case | 19 +++++++ .../obj-prop-elem-init-evaluation.case | 23 ++++++++ .../obj-prop-elem-init-fn-name-arrow.case | 12 +++-- .../obj-prop-elem-init-fn-name-class.case | 15 +++--- .../obj-prop-elem-init-fn-name-cover.case | 15 +++--- .../obj-prop-elem-init-fn-name-fn.case | 15 +++--- .../obj-prop-elem-init-fn-name-gen.case | 15 +++--- .../obj-prop-elem-init-in.case | 16 +++--- .../obj-prop-elem-init-let.case | 17 +++--- .../obj-prop-elem-init-yield-expr.case | 16 +++--- ...bj-prop-elem-init-yield-ident-invalid.case | 9 ++-- .../obj-prop-elem-init-yield-ident-valid.case | 14 ++--- .../obj-prop-elem-target-yield-expr.case | 15 +++--- ...-prop-elem-target-yield-ident-invalid.case | 9 ++-- ...bj-prop-elem-target-yield-ident-valid.case | 15 +++--- .../obj-prop-identifier-resolution-first.case | 19 +++++++ .../obj-prop-identifier-resolution-last.case | 19 +++++++ .../obj-prop-identifier-resolution-lone.case | 18 +++++++ ...obj-prop-identifier-resolution-middle.case | 19 +++++++ .../obj-prop-identifier-resolution-trlng.case | 19 +++++++ .../obj-prop-name-evaluation-error.case | 14 +++-- .../obj-prop-name-evaluation.case | 16 +++--- .../obj-prop-nested-array-invalid.case | 18 +++++++ .../obj-prop-nested-array-null.case | 14 +++-- .../obj-prop-nested-array-undefined-own.case | 14 +++-- .../obj-prop-nested-array-undefined.case | 14 +++-- .../obj-prop-nested-array-yield-expr.case | 15 +++--- ...prop-nested-array-yield-ident-invalid.case | 9 ++-- ...j-prop-nested-array-yield-ident-valid.case | 16 +++--- .../obj-prop-nested-array.case | 16 +++--- .../obj-prop-nested-obj-invalid.case | 8 ++- .../obj-prop-nested-obj-null.case | 14 +++-- .../obj-prop-nested-obj-undefined-own.case | 14 +++-- .../obj-prop-nested-obj-undefined.case | 14 +++-- .../obj-prop-nested-obj-yield-expr.case | 15 +++--- ...j-prop-nested-obj-yield-ident-invalid.case | 9 ++-- ...obj-prop-nested-obj-yield-ident-valid.case | 14 ++--- .../dstr-assignment/obj-prop-nested-obj.case | 14 ++--- .../dstr-assignment/obj-prop-put-const.case | 14 +++-- .../dstr-assignment/obj-prop-put-let.case | 15 ++++-- .../dstr-assignment/obj-prop-put-order.case | 16 +++--- .../obj-prop-put-prop-ref-no-get.case | 18 ++++--- .../obj-prop-put-prop-ref-user-err.case | 15 +++--- .../obj-prop-put-prop-ref.case | 15 +++--- .../obj-prop-put-unresolvable-no-strict.case | 10 +++- .../obj-prop-put-unresolvable-strict.case | 12 +++-- .../syntax/assignment-expr.template | 20 +++++++ src/dstr-assignment/syntax/for-in.template | 29 ++++++++++ src/dstr-assignment/syntax/for-of.template | 29 ++++++++++ .../destructuring/array-elem-elision.js | 19 ------- .../array-elem-init-assignment.js | 41 -------------- .../array-elem-init-evaluation.js | 24 --------- .../assignment/destructuring/array-elision.js | 40 -------------- .../assignment/destructuring/array-empty.js | 40 -------------- .../destructuring/array-iteration.js | 53 ------------------- .../obj-id-identifier-resolution.js | 45 ---------------- .../obj-id-identifier-yield-ident-valid.js | 18 ------- .../destructuring/obj-id-init-assignment.js | 35 ------------ .../destructuring/obj-id-init-evaluation.js | 24 --------- .../obj-prop-elem-init-assignment.js | 35 ------------ .../obj-prop-elem-init-evaluation.js | 24 --------- .../obj-prop-identifier-resolution.js | 45 ---------------- .../obj-prop-nested-array-invalid.js | 16 ------ .../assignment/destructuring/object-empty.js | 41 -------------- 265 files changed, 2737 insertions(+), 1505 deletions(-) create mode 100644 src/dstr-assignment/array-elem-init-assignment.case create mode 100644 src/dstr-assignment/array-elem-init-evaluation.case rename test/language/expressions/assignment/destructuring/array-elem-init-fn-name-arrow.js => src/dstr-assignment/array-elem-init-fn-name-arrow.case (85%) rename test/language/expressions/assignment/destructuring/array-elem-init-fn-name-class.js => src/dstr-assignment/array-elem-init-fn-name-class.case (84%) rename test/language/expressions/assignment/destructuring/array-elem-init-fn-name-cover.js => src/dstr-assignment/array-elem-init-fn-name-cover.case (88%) rename test/language/expressions/assignment/destructuring/array-elem-init-fn-name-fn.js => src/dstr-assignment/array-elem-init-fn-name-fn.case (83%) rename test/language/expressions/assignment/destructuring/array-elem-init-fn-name-gen.js => src/dstr-assignment/array-elem-init-fn-name-gen.case (79%) rename test/language/expressions/assignment/destructuring/array-elem-init-in.js => src/dstr-assignment/array-elem-init-in.case (69%) rename test/language/expressions/assignment/destructuring/array-elem-init-let.js => src/dstr-assignment/array-elem-init-let.case (69%) rename test/language/expressions/assignment/destructuring/array-elem-init-order.js => src/dstr-assignment/array-elem-init-order.case (71%) rename test/language/expressions/assignment/destructuring/array-elem-init-simple-no-strict.js => src/dstr-assignment/array-elem-init-simple-no-strict.case (76%) rename test/language/expressions/assignment/destructuring/array-elem-target-simple-strict.js => src/dstr-assignment/array-elem-init-simple-strict.case (86%) rename test/language/expressions/assignment/destructuring/array-elem-init-yield-expr.js => src/dstr-assignment/array-elem-init-yield-expr.case (78%) rename test/language/expressions/assignment/destructuring/array-elem-init-yield-ident-invalid.js => src/dstr-assignment/array-elem-init-yield-ident-invalid.case (85%) rename test/language/expressions/assignment/destructuring/array-elem-init-yield-ident-valid.js => src/dstr-assignment/array-elem-init-yield-ident-valid.case (77%) rename test/language/expressions/assignment/destructuring/array-elem-iter-get-err.js => src/dstr-assignment/array-elem-iter-get-err.case (77%) rename test/language/expressions/assignment/destructuring/array-elem-iter-nrml-close-err.js => src/dstr-assignment/array-elem-iter-nrml-close-err.case (85%) rename test/language/expressions/assignment/destructuring/array-elem-iter-nrml-close-null.js => src/dstr-assignment/array-elem-iter-nrml-close-null.case (92%) rename test/language/expressions/assignment/destructuring/array-elem-iter-nrml-close-skip.js => src/dstr-assignment/array-elem-iter-nrml-close-skip.case (91%) rename test/language/expressions/assignment/destructuring/array-elem-iter-nrml-close.js => src/dstr-assignment/array-elem-iter-nrml-close.case (94%) rename test/language/expressions/assignment/destructuring/array-elem-iter-rtrn-close-err.js => src/dstr-assignment/array-elem-iter-rtrn-close-err.case (91%) rename test/language/expressions/assignment/destructuring/array-elem-iter-rtrn-close-null.js => src/dstr-assignment/array-elem-iter-rtrn-close-null.case (92%) rename test/language/expressions/assignment/destructuring/array-elem-iter-rtrn-close.js => src/dstr-assignment/array-elem-iter-rtrn-close.case (92%) rename test/language/expressions/assignment/destructuring/array-elem-iter-thrw-close-err.js => src/dstr-assignment/array-elem-iter-thrw-close-err.case (89%) rename test/language/expressions/assignment/destructuring/array-elem-iter-thrw-close-skip.js => src/dstr-assignment/array-elem-iter-thrw-close-skip.case (88%) rename test/language/expressions/assignment/destructuring/array-elem-iter-thrw-close.js => src/dstr-assignment/array-elem-iter-thrw-close.case (91%) rename test/language/expressions/assignment/destructuring/array-rest-nested-array-invalid.js => src/dstr-assignment/array-elem-nested-array-invalid.case (88%) rename test/language/expressions/assignment/destructuring/array-elem-nested-array-null.js => src/dstr-assignment/array-elem-nested-array-null.case (75%) rename test/language/expressions/assignment/destructuring/array-elem-nested-array-undefined-hole.js => src/dstr-assignment/array-elem-nested-array-undefined-hole.case (75%) rename test/language/expressions/assignment/destructuring/array-elem-nested-array-undefined-own.js => src/dstr-assignment/array-elem-nested-array-undefined-own.case (74%) rename test/language/expressions/assignment/destructuring/array-elem-nested-array-undefined.js => src/dstr-assignment/array-elem-nested-array-undefined.case (75%) rename test/language/expressions/assignment/destructuring/array-elem-nested-array-yield-expr.js => src/dstr-assignment/array-elem-nested-array-yield-expr.case (80%) rename test/language/expressions/assignment/destructuring/array-elem-nested-array-yield-ident-invalid.js => src/dstr-assignment/array-elem-nested-array-yield-ident-invalid.case (86%) rename test/language/expressions/assignment/destructuring/array-elem-nested-array-yield-ident-valid.js => src/dstr-assignment/array-elem-nested-array-yield-ident-valid.case (79%) rename test/language/expressions/assignment/destructuring/array-elem-nested-array.js => src/dstr-assignment/array-elem-nested-array.case (77%) rename test/language/expressions/assignment/destructuring/array-elem-nested-array-invalid.js => src/dstr-assignment/array-elem-nested-obj-invalid.case (87%) rename test/language/expressions/assignment/destructuring/array-elem-nested-obj-null.js => src/dstr-assignment/array-elem-nested-obj-null.case (77%) rename test/language/expressions/assignment/destructuring/array-elem-nested-obj-undefined-hole.js => src/dstr-assignment/array-elem-nested-obj-undefined-hole.case (77%) rename test/language/expressions/assignment/destructuring/array-elem-nested-obj-undefined-own.js => src/dstr-assignment/array-elem-nested-obj-undefined-own.case (76%) rename test/language/expressions/assignment/destructuring/array-elem-nested-obj-undefined.js => src/dstr-assignment/array-elem-nested-obj-undefined.case (77%) rename test/language/expressions/assignment/destructuring/array-elem-nested-obj-yield-expr.js => src/dstr-assignment/array-elem-nested-obj-yield-expr.case (76%) rename test/language/expressions/assignment/destructuring/array-elem-nested-obj-yield-ident-invalid.js => src/dstr-assignment/array-elem-nested-obj-yield-ident-invalid.case (85%) rename test/language/expressions/assignment/destructuring/array-elem-nested-obj-yield-ident-valid.js => src/dstr-assignment/array-elem-nested-obj-yield-ident-valid.case (77%) rename test/language/expressions/assignment/destructuring/array-elem-nested-obj.js => src/dstr-assignment/array-elem-nested-obj.case (75%) rename test/language/expressions/assignment/destructuring/array-elem-put-const.js => src/dstr-assignment/array-elem-put-const.case (75%) rename test/language/expressions/assignment/destructuring/array-rest-put-let.js => src/dstr-assignment/array-elem-put-let.case (71%) rename test/language/expressions/assignment/destructuring/array-elem-put-prop-ref-no-get.js => src/dstr-assignment/array-elem-put-prop-ref-no-get.case (78%) rename test/language/expressions/assignment/destructuring/array-elem-put-prop-ref-user-err.js => src/dstr-assignment/array-elem-put-prop-ref-user-err.case (77%) rename test/language/expressions/assignment/destructuring/array-elem-put-prop-ref.js => src/dstr-assignment/array-elem-put-prop-ref.case (74%) rename test/language/expressions/assignment/destructuring/array-elem-put-unresolvable-no-strict.js => src/dstr-assignment/array-elem-put-unresolvable-no-strict.case (81%) rename test/language/expressions/assignment/destructuring/array-elem-put-unresolvable-strict.js => src/dstr-assignment/array-elem-put-unresolvable-strict.case (77%) rename test/language/expressions/assignment/destructuring/array-elem-target-identifier.js => src/dstr-assignment/array-elem-target-identifier.case (79%) rename test/language/expressions/assignment/destructuring/array-elem-target-simple-no-strict.js => src/dstr-assignment/array-elem-target-simple-no-strict.case (76%) rename test/language/expressions/assignment/destructuring/array-elem-init-simple-strict.js => src/dstr-assignment/array-elem-target-simple-strict.case (86%) rename test/language/expressions/assignment/destructuring/array-elem-target-yield-expr.js => src/dstr-assignment/array-elem-target-yield-expr.case (79%) rename test/language/expressions/assignment/destructuring/array-elem-target-yield-invalid.js => src/dstr-assignment/array-elem-target-yield-invalid.case (86%) rename test/language/expressions/assignment/destructuring/array-elem-target-yield-valid.js => src/dstr-assignment/array-elem-target-yield-valid.case (79%) rename test/language/expressions/assignment/destructuring/array-elem-trlg-iter-elision-iter-abpt.js => src/dstr-assignment/array-elem-trlg-iter-elision-iter-abpt.case (88%) rename test/language/expressions/assignment/destructuring/array-elem-trlg-iter-elision-iter-nrml-close-err.js => src/dstr-assignment/array-elem-trlg-iter-elision-iter-nrml-close-err.case (88%) rename test/language/expressions/assignment/destructuring/array-elem-trlg-iter-elision-iter-nrml-close-null.js => src/dstr-assignment/array-elem-trlg-iter-elision-iter-nrml-close-null.case (94%) rename test/language/expressions/assignment/destructuring/array-elem-trlg-iter-elision-iter-nrml-close-skip.js => src/dstr-assignment/array-elem-trlg-iter-elision-iter-nrml-close-skip.case (88%) rename test/language/expressions/assignment/destructuring/array-elem-trlg-iter-elision-iter-nrml-close.js => src/dstr-assignment/array-elem-trlg-iter-elision-iter-nrml-close.case (91%) rename test/language/expressions/assignment/destructuring/array-elem-trlg-iter-get-err.js => src/dstr-assignment/array-elem-trlg-iter-get-err.case (80%) rename test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-nrml-close-err.js => src/dstr-assignment/array-elem-trlg-iter-list-nrml-close-err.case (89%) rename test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-nrml-close-null.js => src/dstr-assignment/array-elem-trlg-iter-list-nrml-close-null.case (94%) rename test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-nrml-close-skip.js => src/dstr-assignment/array-elem-trlg-iter-list-nrml-close-skip.case (94%) rename test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-nrml-close.js => src/dstr-assignment/array-elem-trlg-iter-list-nrml-close.case (95%) rename test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-rtrn-close-err.js => src/dstr-assignment/array-elem-trlg-iter-list-rtrn-close-err.case (93%) rename test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-rtrn-close-null.js => src/dstr-assignment/array-elem-trlg-iter-list-rtrn-close-null.case (94%) rename test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-rtrn-close.js => src/dstr-assignment/array-elem-trlg-iter-list-rtrn-close.case (95%) rename test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-thrw-close-err.js => src/dstr-assignment/array-elem-trlg-iter-list-thrw-close-err.case (92%) rename test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-thrw-close-skip.js => src/dstr-assignment/array-elem-trlg-iter-list-thrw-close-skip.case (92%) rename test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-thrw-close.js => src/dstr-assignment/array-elem-trlg-iter-list-thrw-close.case (93%) rename test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-nrml-close-skip.js => src/dstr-assignment/array-elem-trlg-iter-rest-nrml-close-skip.case (93%) rename test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-rtrn-close-err.js => src/dstr-assignment/array-elem-trlg-iter-rest-rtrn-close-err.case (94%) rename test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-rtrn-close-null.js => src/dstr-assignment/array-elem-trlg-iter-rest-rtrn-close-null.case (94%) rename test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-rtrn-close.js => src/dstr-assignment/array-elem-trlg-iter-rest-rtrn-close.case (95%) rename test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-thrw-close-err.js => src/dstr-assignment/array-elem-trlg-iter-rest-thrw-close-err.case (92%) rename test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-thrw-close-skip.js => src/dstr-assignment/array-elem-trlg-iter-rest-thrw-close-skip.case (87%) rename test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-thrw-close.js => src/dstr-assignment/array-elem-trlg-iter-rest-thrw-close.case (93%) rename test/language/expressions/assignment/destructuring/array-elision-iter-abpt.js => src/dstr-assignment/array-elision-iter-abpt.case (89%) rename test/language/expressions/assignment/destructuring/array-elision-iter-get-err.js => src/dstr-assignment/array-elision-iter-get-err.case (78%) rename test/language/expressions/assignment/destructuring/array-elision-iter-nrml-close-err.js => src/dstr-assignment/array-elision-iter-nrml-close-err.case (90%) rename test/language/expressions/assignment/destructuring/array-elision-iter-nrml-close-null.js => src/dstr-assignment/array-elision-iter-nrml-close-null.case (93%) rename test/language/expressions/assignment/destructuring/array-elision-iter-nrml-close-skip.js => src/dstr-assignment/array-elision-iter-nrml-close-skip.case (91%) rename test/language/expressions/assignment/destructuring/array-elision-iter-nrml-close.js => src/dstr-assignment/array-elision-iter-nrml-close.case (94%) create mode 100644 src/dstr-assignment/array-elision-val-array.case create mode 100644 src/dstr-assignment/array-elision-val-bool.case create mode 100644 src/dstr-assignment/array-elision-val-null.case create mode 100644 src/dstr-assignment/array-elision-val-num.case create mode 100644 src/dstr-assignment/array-elision-val-string.case create mode 100644 src/dstr-assignment/array-elision-val-symbol.case create mode 100644 src/dstr-assignment/array-elision-val-undef.case rename test/language/expressions/assignment/destructuring/array-empty-iter-close-err.js => src/dstr-assignment/array-empty-iter-close-err.case (84%) rename test/language/expressions/assignment/destructuring/array-empty-iter-close-null.js => src/dstr-assignment/array-empty-iter-close-null.case (92%) rename test/language/expressions/assignment/destructuring/array-empty-iter-close.js => src/dstr-assignment/array-empty-iter-close.case (91%) rename test/language/expressions/assignment/destructuring/array-empty-iter-get-err.js => src/dstr-assignment/array-empty-iter-get-err.case (78%) create mode 100644 src/dstr-assignment/array-empty-val-array.case create mode 100644 src/dstr-assignment/array-empty-val-bool.case create mode 100644 src/dstr-assignment/array-empty-val-null.case create mode 100644 src/dstr-assignment/array-empty-val-num.case create mode 100644 src/dstr-assignment/array-empty-val-string.case create mode 100644 src/dstr-assignment/array-empty-val-symbol.case create mode 100644 src/dstr-assignment/array-empty-val-undef.case create mode 100644 src/dstr-assignment/array-iteration.case rename test/language/expressions/assignment/destructuring/array-rest-after-element.js => src/dstr-assignment/array-rest-after-element.case (82%) rename test/language/expressions/assignment/destructuring/array-rest-after-elision.js => src/dstr-assignment/array-rest-after-elision.case (81%) rename test/language/expressions/assignment/destructuring/array-rest-before-element.js => src/dstr-assignment/array-rest-before-element.case (83%) rename test/language/expressions/assignment/destructuring/array-rest-before-elision.js => src/dstr-assignment/array-rest-before-elision.case (83%) rename test/language/expressions/assignment/destructuring/array-rest-before-rest.js => src/dstr-assignment/array-rest-before-rest.case (83%) rename test/language/expressions/assignment/destructuring/array-rest-elision-invalid.js => src/dstr-assignment/array-rest-elision-invalid.case (84%) rename test/language/expressions/assignment/destructuring/array-rest-elision-iter-abpt.js => src/dstr-assignment/array-rest-elision-iter-abpt.case (91%) rename test/language/expressions/assignment/destructuring/array-rest-elision.js => src/dstr-assignment/array-rest-elision.case (76%) rename test/language/expressions/assignment/destructuring/array-rest-init.js => src/dstr-assignment/array-rest-init.case (79%) rename test/language/expressions/assignment/destructuring/array-rest-iter-get-err.js => src/dstr-assignment/array-rest-iter-get-err.case (79%) rename test/language/expressions/assignment/destructuring/array-rest-iter-nrml-close-skip.js => src/dstr-assignment/array-rest-iter-nrml-close-skip.case (92%) rename test/language/expressions/assignment/destructuring/array-rest-iter-rtrn-close-err.js => src/dstr-assignment/array-rest-iter-rtrn-close-err.case (93%) rename test/language/expressions/assignment/destructuring/array-rest-iter-rtrn-close-null.js => src/dstr-assignment/array-rest-iter-rtrn-close-null.case (94%) rename test/language/expressions/assignment/destructuring/array-rest-iter-rtrn-close.js => src/dstr-assignment/array-rest-iter-rtrn-close.case (94%) rename test/language/expressions/assignment/destructuring/array-rest-iter-thrw-close-err.js => src/dstr-assignment/array-rest-iter-thrw-close-err.case (93%) rename test/language/expressions/assignment/destructuring/array-rest-iter-thrw-close-skip.js => src/dstr-assignment/array-rest-iter-thrw-close-skip.case (90%) rename test/language/expressions/assignment/destructuring/array-rest-iter-thrw-close.js => src/dstr-assignment/array-rest-iter-thrw-close.case (94%) rename test/language/expressions/assignment/destructuring/array-rest-iteration.js => src/dstr-assignment/array-rest-iteration.case (79%) rename test/language/expressions/assignment/destructuring/array-rest-lref-err.js => src/dstr-assignment/array-rest-lref-err.case (92%) rename test/language/expressions/assignment/destructuring/array-rest-lref.js => src/dstr-assignment/array-rest-lref.case (90%) rename test/language/expressions/assignment/destructuring/array-elem-nested-obj-invalid.js => src/dstr-assignment/array-rest-nested-array-invalid.case (87%) rename test/language/expressions/assignment/destructuring/array-rest-nested-array-iter-thrw-close-skip.js => src/dstr-assignment/array-rest-nested-array-iter-thrw-close-skip.case (92%) rename test/language/expressions/assignment/destructuring/array-rest-nested-array-null.js => src/dstr-assignment/array-rest-nested-array-null.case (79%) rename test/language/expressions/assignment/destructuring/array-rest-nested-array-undefined-hole.js => src/dstr-assignment/array-rest-nested-array-undefined-hole.case (79%) rename test/language/expressions/assignment/destructuring/array-rest-nested-array-undefined-own.js => src/dstr-assignment/array-rest-nested-array-undefined-own.case (78%) rename test/language/expressions/assignment/destructuring/array-rest-nested-array-undefined.js => src/dstr-assignment/array-rest-nested-array-undefined.case (78%) rename test/language/expressions/assignment/destructuring/array-rest-nested-array-yield-expr.js => src/dstr-assignment/array-rest-nested-array-yield-expr.case (79%) rename test/language/expressions/assignment/destructuring/array-rest-nested-array-yield-ident-invalid.js => src/dstr-assignment/array-rest-nested-array-yield-ident-invalid.case (86%) rename test/language/expressions/assignment/destructuring/array-rest-nested-array-yield-ident-valid.js => src/dstr-assignment/array-rest-nested-array-yield-ident-valid.case (79%) rename test/language/expressions/assignment/destructuring/array-rest-nested-array.js => src/dstr-assignment/array-rest-nested-array.case (76%) rename test/language/expressions/assignment/destructuring/array-rest-nested-obj-invalid.js => src/dstr-assignment/array-rest-nested-obj-invalid.case (86%) rename test/language/expressions/assignment/destructuring/array-rest-nested-obj-null.js => src/dstr-assignment/array-rest-nested-obj-null.case (77%) rename test/language/expressions/assignment/destructuring/array-rest-nested-obj-undefined-hole.js => src/dstr-assignment/array-rest-nested-obj-undefined-hole.case (77%) rename test/language/expressions/assignment/destructuring/array-rest-nested-obj-undefined-own.js => src/dstr-assignment/array-rest-nested-obj-undefined-own.case (76%) rename test/language/expressions/assignment/destructuring/array-rest-nested-obj-undefined.js => src/dstr-assignment/array-rest-nested-obj-undefined.case (76%) rename test/language/expressions/assignment/destructuring/array-rest-nested-obj-yield-expr.js => src/dstr-assignment/array-rest-nested-obj-yield-expr.case (76%) rename test/language/expressions/assignment/destructuring/array-rest-nested-obj-yield-ident-invalid.js => src/dstr-assignment/array-rest-nested-obj-yield-ident-invalid.case (85%) rename test/language/expressions/assignment/destructuring/array-rest-nested-obj-yield-ident-valid.js => src/dstr-assignment/array-rest-nested-obj-yield-ident-valid.case (74%) rename test/language/expressions/assignment/destructuring/array-rest-nested-obj.js => src/dstr-assignment/array-rest-nested-obj.case (75%) rename test/language/expressions/assignment/destructuring/array-rest-put-const.js => src/dstr-assignment/array-rest-put-const.case (75%) rename test/language/expressions/assignment/destructuring/array-elem-put-let.js => src/dstr-assignment/array-rest-put-let.case (70%) rename test/language/expressions/assignment/destructuring/array-rest-put-prop-ref-no-get.js => src/dstr-assignment/array-rest-put-prop-ref-no-get.case (80%) rename test/language/expressions/assignment/destructuring/array-rest-put-prop-ref-user-err-iter-close-skip.js => src/dstr-assignment/array-rest-put-prop-ref-user-err-iter-close-skip.case (92%) rename test/language/expressions/assignment/destructuring/array-rest-put-prop-ref-user-err.js => src/dstr-assignment/array-rest-put-prop-ref-user-err.case (76%) rename test/language/expressions/assignment/destructuring/array-rest-put-prop-ref.js => src/dstr-assignment/array-rest-put-prop-ref.case (77%) rename test/language/expressions/assignment/destructuring/array-rest-put-unresolvable-no-strict.js => src/dstr-assignment/array-rest-put-unresolvable-no-strict.case (81%) rename test/language/expressions/assignment/destructuring/array-rest-put-unresolvable-strict.js => src/dstr-assignment/array-rest-put-unresolvable-strict.case (77%) rename test/language/expressions/assignment/destructuring/array-rest-yield-expr.js => src/dstr-assignment/array-rest-yield-expr.case (79%) rename test/language/expressions/assignment/destructuring/array-rest-yield-ident-invalid.js => src/dstr-assignment/array-rest-yield-ident-invalid.case (85%) rename test/language/expressions/assignment/destructuring/array-rest-yield-ident-valid.js => src/dstr-assignment/array-rest-yield-ident-valid.case (82%) create mode 100644 src/dstr-assignment/default/assignment-expr.template create mode 100644 src/dstr-assignment/default/for-of.template create mode 100644 src/dstr-assignment/error/assignment-expr.template create mode 100644 src/dstr-assignment/error/for-of.template create mode 100644 src/dstr-assignment/obj-empty-bool.case create mode 100644 src/dstr-assignment/obj-empty-null.case create mode 100644 src/dstr-assignment/obj-empty-num.case create mode 100644 src/dstr-assignment/obj-empty-obj.case create mode 100644 src/dstr-assignment/obj-empty-string.case create mode 100644 src/dstr-assignment/obj-empty-symbol.case create mode 100644 src/dstr-assignment/obj-empty-undef.case create mode 100644 src/dstr-assignment/obj-id-identifier-resolution-first.case create mode 100644 src/dstr-assignment/obj-id-identifier-resolution-last.case create mode 100644 src/dstr-assignment/obj-id-identifier-resolution-lone.case create mode 100644 src/dstr-assignment/obj-id-identifier-resolution-middle.case create mode 100644 src/dstr-assignment/obj-id-identifier-resolution-trlng.case rename test/language/expressions/assignment/destructuring/obj-id-identifier-yield-expr.js => src/dstr-assignment/obj-id-identifier-yield-expr.case (57%) rename test/language/expressions/assignment/destructuring/obj-id-identifier-yield-ident-invalid.js => src/dstr-assignment/obj-id-identifier-yield-ident-invalid.case (57%) create mode 100644 src/dstr-assignment/obj-id-identifier-yield-ident-valid.case create mode 100644 src/dstr-assignment/obj-id-init-assignment-missing.case create mode 100644 src/dstr-assignment/obj-id-init-assignment-null.case create mode 100644 src/dstr-assignment/obj-id-init-assignment-truthy.case create mode 100644 src/dstr-assignment/obj-id-init-assignment-undef.case create mode 100644 src/dstr-assignment/obj-id-init-evaluation.case rename test/language/expressions/assignment/destructuring/obj-id-init-fn-name-arrow.js => src/dstr-assignment/obj-id-init-fn-name-arrow.case (84%) rename test/language/expressions/assignment/destructuring/obj-id-init-fn-name-class.js => src/dstr-assignment/obj-id-init-fn-name-class.case (79%) rename test/language/expressions/assignment/destructuring/obj-id-init-fn-name-cover.js => src/dstr-assignment/obj-id-init-fn-name-cover.case (83%) rename test/language/expressions/assignment/destructuring/obj-id-init-fn-name-fn.js => src/dstr-assignment/obj-id-init-fn-name-fn.case (78%) rename test/language/expressions/assignment/destructuring/obj-id-init-fn-name-gen.js => src/dstr-assignment/obj-id-init-fn-name-gen.case (78%) rename test/language/expressions/assignment/destructuring/obj-id-init-in.js => src/dstr-assignment/obj-id-init-in.case (68%) rename test/language/expressions/assignment/destructuring/obj-prop-elem-init-let.js => src/dstr-assignment/obj-id-init-let.case (69%) rename test/language/expressions/assignment/destructuring/obj-id-init-order.js => src/dstr-assignment/obj-id-init-order.case (71%) rename test/language/expressions/assignment/destructuring/obj-id-init-simple-no-strict.js => src/dstr-assignment/obj-id-init-simple-no-strict.case (67%) rename test/language/expressions/assignment/destructuring/obj-id-init-simple-strict.js => src/dstr-assignment/obj-id-init-simple-strict.case (83%) rename test/language/expressions/assignment/destructuring/obj-id-init-yield-expr.js => src/dstr-assignment/obj-id-init-yield-expr.case (76%) rename test/language/expressions/assignment/destructuring/obj-id-init-yield-ident-invalid.js => src/dstr-assignment/obj-id-init-yield-ident-invalid.case (86%) rename test/language/expressions/assignment/destructuring/obj-id-init-yield-ident-valid.js => src/dstr-assignment/obj-id-init-yield-ident-valid.case (77%) rename test/language/expressions/assignment/destructuring/obj-id-put-const.js => src/dstr-assignment/obj-id-put-const.case (74%) rename test/language/expressions/assignment/destructuring/obj-prop-put-let.js => src/dstr-assignment/obj-id-put-let.case (71%) rename test/language/expressions/assignment/destructuring/obj-id-put-unresolvable-no-strict.js => src/dstr-assignment/obj-id-put-unresolvable-no-strict.case (81%) rename test/language/expressions/assignment/destructuring/obj-id-put-unresolvable-strict.js => src/dstr-assignment/obj-id-put-unresolvable-strict.case (77%) rename test/language/expressions/assignment/destructuring/obj-id-simple-no-strict.js => src/dstr-assignment/obj-id-simple-no-strict.case (65%) rename test/language/expressions/assignment/destructuring/obj-id-simple-strict.js => src/dstr-assignment/obj-id-simple-strict.case (84%) create mode 100644 src/dstr-assignment/obj-prop-elem-init-assignment-missing.case create mode 100644 src/dstr-assignment/obj-prop-elem-init-assignment-null.case create mode 100644 src/dstr-assignment/obj-prop-elem-init-assignment-truthy.case create mode 100644 src/dstr-assignment/obj-prop-elem-init-assignment-undef.case create mode 100644 src/dstr-assignment/obj-prop-elem-init-evaluation.case rename test/language/expressions/assignment/destructuring/obj-prop-elem-init-fn-name-arrow.js => src/dstr-assignment/obj-prop-elem-init-fn-name-arrow.case (85%) rename test/language/expressions/assignment/destructuring/obj-prop-elem-init-fn-name-class.js => src/dstr-assignment/obj-prop-elem-init-fn-name-class.case (80%) rename test/language/expressions/assignment/destructuring/obj-prop-elem-init-fn-name-cover.js => src/dstr-assignment/obj-prop-elem-init-fn-name-cover.case (84%) rename test/language/expressions/assignment/destructuring/obj-prop-elem-init-fn-name-fn.js => src/dstr-assignment/obj-prop-elem-init-fn-name-fn.case (79%) rename test/language/expressions/assignment/destructuring/obj-prop-elem-init-fn-name-gen.js => src/dstr-assignment/obj-prop-elem-init-fn-name-gen.case (79%) rename test/language/expressions/assignment/destructuring/obj-prop-elem-init-in.js => src/dstr-assignment/obj-prop-elem-init-in.case (68%) rename test/language/expressions/assignment/destructuring/obj-id-init-let.js => src/dstr-assignment/obj-prop-elem-init-let.case (68%) rename test/language/expressions/assignment/destructuring/obj-prop-elem-init-yield-expr.js => src/dstr-assignment/obj-prop-elem-init-yield-expr.case (76%) rename test/language/expressions/assignment/destructuring/obj-prop-elem-init-yield-ident-invalid.js => src/dstr-assignment/obj-prop-elem-init-yield-ident-invalid.case (85%) rename test/language/expressions/assignment/destructuring/obj-prop-elem-init-yield-ident-valid.js => src/dstr-assignment/obj-prop-elem-init-yield-ident-valid.case (77%) rename test/language/expressions/assignment/destructuring/obj-prop-elem-target-yield-expr.js => src/dstr-assignment/obj-prop-elem-target-yield-expr.case (77%) rename test/language/expressions/assignment/destructuring/obj-prop-elem-target-yield-ident-invalid.js => src/dstr-assignment/obj-prop-elem-target-yield-ident-invalid.case (86%) rename test/language/expressions/assignment/destructuring/obj-prop-elem-target-yield-ident-valid.js => src/dstr-assignment/obj-prop-elem-target-yield-ident-valid.case (78%) create mode 100644 src/dstr-assignment/obj-prop-identifier-resolution-first.case create mode 100644 src/dstr-assignment/obj-prop-identifier-resolution-last.case create mode 100644 src/dstr-assignment/obj-prop-identifier-resolution-lone.case create mode 100644 src/dstr-assignment/obj-prop-identifier-resolution-middle.case create mode 100644 src/dstr-assignment/obj-prop-identifier-resolution-trlng.case rename test/language/expressions/assignment/destructuring/obj-prop-name-evaluation-error.js => src/dstr-assignment/obj-prop-name-evaluation-error.case (75%) rename test/language/expressions/assignment/destructuring/obj-prop-name-evaluation.js => src/dstr-assignment/obj-prop-name-evaluation.case (69%) create mode 100644 src/dstr-assignment/obj-prop-nested-array-invalid.case rename test/language/expressions/assignment/destructuring/obj-prop-nested-array-null.js => src/dstr-assignment/obj-prop-nested-array-null.case (75%) rename test/language/expressions/assignment/destructuring/obj-prop-nested-array-undefined-own.js => src/dstr-assignment/obj-prop-nested-array-undefined-own.case (74%) rename test/language/expressions/assignment/destructuring/obj-prop-nested-array-undefined.js => src/dstr-assignment/obj-prop-nested-array-undefined.case (77%) rename test/language/expressions/assignment/destructuring/obj-prop-nested-array-yield-expr.js => src/dstr-assignment/obj-prop-nested-array-yield-expr.case (76%) rename test/language/expressions/assignment/destructuring/obj-prop-nested-array-yield-ident-invalid.js => src/dstr-assignment/obj-prop-nested-array-yield-ident-invalid.case (84%) rename test/language/expressions/assignment/destructuring/obj-prop-nested-array-yield-ident-valid.js => src/dstr-assignment/obj-prop-nested-array-yield-ident-valid.case (76%) rename test/language/expressions/assignment/destructuring/obj-prop-nested-array.js => src/dstr-assignment/obj-prop-nested-array.case (75%) rename test/language/expressions/assignment/destructuring/obj-prop-nested-obj-invalid.js => src/dstr-assignment/obj-prop-nested-obj-invalid.case (85%) rename test/language/expressions/assignment/destructuring/obj-prop-nested-obj-null.js => src/dstr-assignment/obj-prop-nested-obj-null.case (75%) rename test/language/expressions/assignment/destructuring/obj-prop-nested-obj-undefined-own.js => src/dstr-assignment/obj-prop-nested-obj-undefined-own.case (74%) rename test/language/expressions/assignment/destructuring/obj-prop-nested-obj-undefined.js => src/dstr-assignment/obj-prop-nested-obj-undefined.case (77%) rename test/language/expressions/assignment/destructuring/obj-prop-nested-obj-yield-expr.js => src/dstr-assignment/obj-prop-nested-obj-yield-expr.case (76%) rename test/language/expressions/assignment/destructuring/obj-prop-nested-obj-yield-ident-invalid.js => src/dstr-assignment/obj-prop-nested-obj-yield-ident-invalid.case (84%) rename test/language/expressions/assignment/destructuring/obj-prop-nested-obj-yield-ident-valid.js => src/dstr-assignment/obj-prop-nested-obj-yield-ident-valid.case (79%) rename test/language/expressions/assignment/destructuring/obj-prop-nested-obj.js => src/dstr-assignment/obj-prop-nested-obj.case (77%) rename test/language/expressions/assignment/destructuring/obj-prop-put-const.js => src/dstr-assignment/obj-prop-put-const.case (73%) rename test/language/expressions/assignment/destructuring/obj-id-put-let.js => src/dstr-assignment/obj-prop-put-let.case (70%) rename test/language/expressions/assignment/destructuring/obj-prop-put-order.js => src/dstr-assignment/obj-prop-put-order.case (69%) rename test/language/expressions/assignment/destructuring/obj-prop-put-prop-ref-no-get.js => src/dstr-assignment/obj-prop-put-prop-ref-no-get.case (76%) rename test/language/expressions/assignment/destructuring/obj-prop-put-prop-ref-user-err.js => src/dstr-assignment/obj-prop-put-prop-ref-user-err.case (75%) rename test/language/expressions/assignment/destructuring/obj-prop-put-prop-ref.js => src/dstr-assignment/obj-prop-put-prop-ref.case (72%) rename test/language/expressions/assignment/destructuring/obj-prop-put-unresolvable-no-strict.js => src/dstr-assignment/obj-prop-put-unresolvable-no-strict.case (81%) rename test/language/expressions/assignment/destructuring/obj-prop-put-unresolvable-strict.js => src/dstr-assignment/obj-prop-put-unresolvable-strict.case (76%) create mode 100644 src/dstr-assignment/syntax/assignment-expr.template create mode 100644 src/dstr-assignment/syntax/for-in.template create mode 100644 src/dstr-assignment/syntax/for-of.template delete mode 100644 test/language/expressions/assignment/destructuring/array-elem-elision.js delete mode 100644 test/language/expressions/assignment/destructuring/array-elem-init-assignment.js delete mode 100644 test/language/expressions/assignment/destructuring/array-elem-init-evaluation.js delete mode 100644 test/language/expressions/assignment/destructuring/array-elision.js delete mode 100644 test/language/expressions/assignment/destructuring/array-empty.js delete mode 100644 test/language/expressions/assignment/destructuring/array-iteration.js delete mode 100644 test/language/expressions/assignment/destructuring/obj-id-identifier-resolution.js delete mode 100644 test/language/expressions/assignment/destructuring/obj-id-identifier-yield-ident-valid.js delete mode 100644 test/language/expressions/assignment/destructuring/obj-id-init-assignment.js delete mode 100644 test/language/expressions/assignment/destructuring/obj-id-init-evaluation.js delete mode 100644 test/language/expressions/assignment/destructuring/obj-prop-elem-init-assignment.js delete mode 100644 test/language/expressions/assignment/destructuring/obj-prop-elem-init-evaluation.js delete mode 100644 test/language/expressions/assignment/destructuring/obj-prop-identifier-resolution.js delete mode 100644 test/language/expressions/assignment/destructuring/obj-prop-nested-array-invalid.js delete mode 100644 test/language/expressions/assignment/destructuring/object-empty.js diff --git a/src/dstr-assignment/array-elem-init-assignment.case b/src/dstr-assignment/array-elem-init-assignment.case new file mode 100644 index 0000000000..a03405902a --- /dev/null +++ b/src/dstr-assignment/array-elem-init-assignment.case @@ -0,0 +1,23 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + If the Initializer is present and v is undefined, the Initializer should be + evaluated and the result assigned to the target reference. +template: default +es6id: 12.14.5.3 +---*/ + +//- setup +var v2, vNull, vHole, vUndefined, vOob; +//- elems +[v2 = 10, vNull = 11, vHole = 12, vUndefined = 13, vOob = 14] +//- vals +[2, null, , undefined] +//- body +assert.sameValue(v2, 2); +assert.sameValue(vNull, null); +assert.sameValue(vHole, 12); +assert.sameValue(vUndefined, 13); +assert.sameValue(vOob, 14); diff --git a/src/dstr-assignment/array-elem-init-evaluation.case b/src/dstr-assignment/array-elem-init-evaluation.case new file mode 100644 index 0000000000..5feea93a8e --- /dev/null +++ b/src/dstr-assignment/array-elem-init-evaluation.case @@ -0,0 +1,20 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + The Initializer should only be evaluated if v is undefined. +template: default +es6id: 12.14.5.3 +---*/ + +//- setup +var flag1 = false, flag2 = false; +var _; +//- elems +[ _ = flag1 = true, _ = flag2 = true ] +//- vals +[14] +//- body +assert.sameValue(flag1, false); +assert.sameValue(flag2, true); diff --git a/test/language/expressions/assignment/destructuring/array-elem-init-fn-name-arrow.js b/src/dstr-assignment/array-elem-init-fn-name-arrow.case similarity index 85% rename from test/language/expressions/assignment/destructuring/array-elem-init-fn-name-arrow.js rename to src/dstr-assignment/array-elem-init-fn-name-arrow.case index d729c2a895..75d60e512a 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-init-fn-name-arrow.js +++ b/src/dstr-assignment/array-elem-init-fn-name-arrow.case @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Assignment of function `name` attribute (ArrowFunction) +desc: Assignment of function `name` attribute (ArrowFunction) +template: default es6id: 12.14.5.3 info: > AssignmentElement[Yield] : DestructuringAssignmentTarget Initializeropt @@ -18,10 +19,13 @@ info: > includes: [propertyHelper.js] ---*/ +//- setup var arrow; - -[ arrow = () => {} ] = []; - +//- elems +[ arrow = () => {} ] +//- vals +[] +//- body assert.sameValue(arrow.name, 'arrow'); verifyNotEnumerable(arrow, 'name'); verifyNotWritable(arrow, 'name'); diff --git a/test/language/expressions/assignment/destructuring/array-elem-init-fn-name-class.js b/src/dstr-assignment/array-elem-init-fn-name-class.case similarity index 84% rename from test/language/expressions/assignment/destructuring/array-elem-init-fn-name-class.js rename to src/dstr-assignment/array-elem-init-fn-name-class.case index d781dd593c..91be890976 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-init-fn-name-class.js +++ b/src/dstr-assignment/array-elem-init-fn-name-class.case @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Assignment of function `name` attribute (ClassExpression) +desc: Assignment of function `name` attribute (ClassExpression) +template: default es6id: 12.14.5.3 info: > AssignmentElement[Yield] : DestructuringAssignmentTarget Initializeropt @@ -19,11 +20,13 @@ includes: [propertyHelper.js] features: [class] ---*/ +//- setup var xCls, cls; - -[ xCls = class x {} ] = [];; -[ cls = class {} ] = []; - +//- elems +[ xCls = class x {},cls = class {} ] +//- vals +[] +//- body assert(xCls.name !== 'xCls'); assert.sameValue(cls.name, 'cls'); diff --git a/test/language/expressions/assignment/destructuring/array-elem-init-fn-name-cover.js b/src/dstr-assignment/array-elem-init-fn-name-cover.case similarity index 88% rename from test/language/expressions/assignment/destructuring/array-elem-init-fn-name-cover.js rename to src/dstr-assignment/array-elem-init-fn-name-cover.case index 4e4b393516..43cb369481 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-init-fn-name-cover.js +++ b/src/dstr-assignment/array-elem-init-fn-name-cover.case @@ -2,8 +2,9 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > Assignment of function `name` attribute (CoverParenthesizedExpression) +template: default es6id: 12.14.5.3 info: > AssignmentElement[Yield] : DestructuringAssignmentTarget Initializeropt @@ -19,11 +20,13 @@ info: > includes: [propertyHelper.js] ---*/ +//- setup var xCover, cover; - -[ xCover = (0, function() {}) ] = []; -[ cover = (function() {}) ] = []; - +//- elems +[ xCover = (0, function() {}), cover = (function() {}) ] +//- vals +[] +//- body assert(xCover.name !== 'xCover'); assert.sameValue(cover.name, 'cover'); diff --git a/test/language/expressions/assignment/destructuring/array-elem-init-fn-name-fn.js b/src/dstr-assignment/array-elem-init-fn-name-fn.case similarity index 83% rename from test/language/expressions/assignment/destructuring/array-elem-init-fn-name-fn.js rename to src/dstr-assignment/array-elem-init-fn-name-fn.case index 70e29b56ab..4493b8e043 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-init-fn-name-fn.js +++ b/src/dstr-assignment/array-elem-init-fn-name-fn.case @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Assignment of function `name` attribute (FunctionExpression) +desc: Assignment of function `name` attribute (FunctionExpression) +template: default es6id: 12.14.5.3 info: > AssignmentElement[Yield] : DestructuringAssignmentTarget Initializeropt @@ -19,11 +20,13 @@ includes: [propertyHelper.js] features: [class] ---*/ +//- setup var xFn, fn; - -[ xFn = function x() {} ] = [];; -[ fn = function() {} ] = []; - +//- elems +[ xFn = function x() {}, fn = function() {} ] +//- vals +[] +//- body assert(xFn.name !== 'xFn'); assert.sameValue(fn.name, 'fn'); diff --git a/test/language/expressions/assignment/destructuring/array-elem-init-fn-name-gen.js b/src/dstr-assignment/array-elem-init-fn-name-gen.case similarity index 79% rename from test/language/expressions/assignment/destructuring/array-elem-init-fn-name-gen.js rename to src/dstr-assignment/array-elem-init-fn-name-gen.case index 0d17fc6490..fea3bbaa2e 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-init-fn-name-gen.js +++ b/src/dstr-assignment/array-elem-init-fn-name-gen.case @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Assignment of function `name` attribute (GeneratorExpression) +desc: Assignment of function `name` attribute (GeneratorExpression) +template: default es6id: 12.14.5.3 info: > AssignmentElement[Yield] : DestructuringAssignmentTarget Initializeropt @@ -19,12 +20,14 @@ includes: [propertyHelper.js] features: [generators] ---*/ +//- setup var xGen, gen; - -[ xGen = function* x() {} ] = []; -[ gen = function*() {} ] = [];; - -assert(xGen.name !== 'xGen'); +//- elems +[ xGen = function* x() {}, gen = function*() {} ] +//- vals +[] +//- body +assert.notSameValue(xGen.name, 'xGen'); assert.sameValue(gen.name, 'gen'); verifyNotEnumerable(gen, 'name'); diff --git a/test/language/expressions/assignment/destructuring/array-elem-init-in.js b/src/dstr-assignment/array-elem-init-in.case similarity index 69% rename from test/language/expressions/assignment/destructuring/array-elem-init-in.js rename to src/dstr-assignment/array-elem-init-in.case index 8fddbff152..d3afbe2760 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-init-in.js +++ b/src/dstr-assignment/array-elem-init-in.case @@ -2,15 +2,17 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > The Initializer in an AssignmentElement may be an `in` expression. +template: default es6id: 12.14.5 ---*/ -var value = []; -var result, x; - -result = [ x = 'x' in {} ] = value; - -assert.sameValue(result, value); +//- setup +var x; +//- elems +[ x = 'x' in {} ] +//- vals +[] +//- body assert.sameValue(x, false); diff --git a/test/language/expressions/assignment/destructuring/array-elem-init-let.js b/src/dstr-assignment/array-elem-init-let.case similarity index 69% rename from test/language/expressions/assignment/destructuring/array-elem-init-let.js rename to src/dstr-assignment/array-elem-init-let.case index b11f14491f..b3b8aea289 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-init-let.js +++ b/src/dstr-assignment/array-elem-init-let.case @@ -2,15 +2,20 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > Value retrieval of Initializer obeys `let` semantics. +template: error es6id: 12.14.5.3 features: [let] ---*/ +//- error +ReferenceError +//- setup var x; - -assert.throws(ReferenceError, function() { - [ x = y ] = []; - let y; -}); +//- elems +[ x = y ] +//- vals +[] +//- teardown +let y; diff --git a/test/language/expressions/assignment/destructuring/array-elem-init-order.js b/src/dstr-assignment/array-elem-init-order.case similarity index 71% rename from test/language/expressions/assignment/destructuring/array-elem-init-order.js rename to src/dstr-assignment/array-elem-init-order.case index 43ff62a456..f6e4830241 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-init-order.js +++ b/src/dstr-assignment/array-elem-init-order.case @@ -2,18 +2,20 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > Initializer values should be assigned in left-to-right order. +template: default es6id: 12.14.5.3 ---*/ -var value = []; +//- setup var x = 0; -var a, b, result; - -result = [ a = x += 1, b = x *= 2 ] = value; - -assert.sameValue(result, value); +var a, b; +//- elems +[ a = x += 1, b = x *= 2 ] +//- vals +[] +//- body assert.sameValue(a, 1); assert.sameValue(b, 2); assert.sameValue(x, 2); diff --git a/test/language/expressions/assignment/destructuring/array-elem-init-simple-no-strict.js b/src/dstr-assignment/array-elem-init-simple-no-strict.case similarity index 76% rename from test/language/expressions/assignment/destructuring/array-elem-init-simple-no-strict.js rename to src/dstr-assignment/array-elem-init-simple-no-strict.case index b3a5e9c73c..200238d079 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-init-simple-no-strict.js +++ b/src/dstr-assignment/array-elem-init-simple-no-strict.case @@ -2,19 +2,21 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > Identifiers that appear as the DestructuringAssignmentTarget in an AssignmentElement should take on the iterated value corresponding to their position in the ArrayAssignmentPattern. +template: default es6id: 12.14.5.3 flags: [noStrict] ---*/ -var value = []; -var result, argument, eval; - -result = [arguments = 4, eval = 5] = value; - -assert.sameValue(result, value); +//- setup +var argument, eval; +//- elems +[arguments = 4, eval = 5] +//- vals +[] +//- body assert.sameValue(arguments, 4); assert.sameValue(eval, 5); diff --git a/test/language/expressions/assignment/destructuring/array-elem-target-simple-strict.js b/src/dstr-assignment/array-elem-init-simple-strict.case similarity index 86% rename from test/language/expressions/assignment/destructuring/array-elem-target-simple-strict.js rename to src/dstr-assignment/array-elem-init-simple-strict.case index 2d0659bf42..7158a328b8 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-target-simple-strict.js +++ b/src/dstr-assignment/array-elem-init-simple-strict.case @@ -2,14 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is false. +template: syntax es6id: 12.14.5.1 flags: [onlyStrict] negative: SyntaxError ---*/ -([arguments] = []); +//- elems +[arguments] +//- values +[] diff --git a/test/language/expressions/assignment/destructuring/array-elem-init-yield-expr.js b/src/dstr-assignment/array-elem-init-yield-expr.case similarity index 78% rename from test/language/expressions/assignment/destructuring/array-elem-init-yield-expr.js rename to src/dstr-assignment/array-elem-init-yield-expr.case index 8f4a5d8b24..6aa3a97ed7 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-init-yield-expr.js +++ b/src/dstr-assignment/array-elem-init-yield-expr.case @@ -2,31 +2,34 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the Initializer of an AssignmentElement within a generator function body, it behaves as a YieldExpression. +template: default es6id: 12.14.5.4 features: [generators] ---*/ +//- setup var value = []; -var assignmentResult, iterationResult, iter, x; - +var iterationResult, iter, x; iter = (function*() { - assignmentResult = [ x = yield ] = value; +//- elems +[ x = yield ] +//- vals +[] +//- teardown })(); iterationResult = iter.next(); -assert.sameValue(assignmentResult, undefined); assert.sameValue(iterationResult.value, undefined); assert.sameValue(iterationResult.done, false); assert.sameValue(x, undefined); iterationResult = iter.next(86); -assert.sameValue(assignmentResult, value); assert.sameValue(iterationResult.value, undefined); assert.sameValue(iterationResult.done, true); assert.sameValue(x, 86); diff --git a/test/language/expressions/assignment/destructuring/array-elem-init-yield-ident-invalid.js b/src/dstr-assignment/array-elem-init-yield-ident-invalid.case similarity index 85% rename from test/language/expressions/assignment/destructuring/array-elem-init-yield-ident-invalid.js rename to src/dstr-assignment/array-elem-init-yield-ident-invalid.case index 429eb26b89..c67ee2c344 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-init-yield-ident-invalid.js +++ b/src/dstr-assignment/array-elem-init-yield-ident-invalid.case @@ -2,13 +2,16 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the Initializer of an AssignmentElement outside of a generator function body, it behaves as an IdentifierReference. +template: syntax es6id: 12.14.5.4 flags: [onlyStrict] negative: SyntaxError ---*/ -var x; -[ x = yield ] = []; +//- elems +[ x = yield ] +//- vals +[] diff --git a/test/language/expressions/assignment/destructuring/array-elem-init-yield-ident-valid.js b/src/dstr-assignment/array-elem-init-yield-ident-valid.case similarity index 77% rename from test/language/expressions/assignment/destructuring/array-elem-init-yield-ident-valid.js rename to src/dstr-assignment/array-elem-init-yield-ident-valid.case index 3d8d87cc57..05b7baac63 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-init-yield-ident-valid.js +++ b/src/dstr-assignment/array-elem-init-yield-ident-valid.case @@ -2,18 +2,20 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the Initializer of an AssignmentElement outside of a generator function body, it behaves as an IdentifierReference. +template: default es6id: 12.14.5.4 flags: [noStrict] ---*/ -var value = []; +//- setup var yield = 4; -var result, x; - -result = [ x = yield ] = value; - -assert.sameValue(result, value); +var x; +//- elems +[ x = yield ] +//- vals +[] +//- body assert.sameValue(x, 4); diff --git a/test/language/expressions/assignment/destructuring/array-elem-iter-get-err.js b/src/dstr-assignment/array-elem-iter-get-err.case similarity index 77% rename from test/language/expressions/assignment/destructuring/array-elem-iter-get-err.js rename to src/dstr-assignment/array-elem-iter-get-err.case index 2f545842fd..ed4a51ffa1 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-iter-get-err.js +++ b/src/dstr-assignment/array-elem-iter-get-err.case @@ -1,23 +1,27 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Abrupt completion returned from GetIterator +desc: Abrupt completion returned from GetIterator info: | ArrayAssignmentPattern : [ AssignmentElementList ] 1. Let iterator be GetIterator(value). 2. ReturnIfAbrupt(iterator). features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var iterable = {}; iterable[Symbol.iterator] = function() { throw new Test262Error(); }; -var x; - -assert.throws(Test262Error, function() { - [ x ] = iterable; -}); +var _; +//- error +Test262Error +//- elems +[ _ ] +//- vals +iterable diff --git a/test/language/expressions/assignment/destructuring/array-elem-iter-nrml-close-err.js b/src/dstr-assignment/array-elem-iter-nrml-close-err.case similarity index 85% rename from test/language/expressions/assignment/destructuring/array-elem-iter-nrml-close-err.js rename to src/dstr-assignment/array-elem-iter-nrml-close-err.case index 414495122c..197b79a77d 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-iter-nrml-close-err.js +++ b/src/dstr-assignment/array-elem-iter-nrml-close-err.case @@ -1,20 +1,22 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Abrupt completion returned from IteratorClose +desc: Abrupt completion returned from IteratorClose info: | ArrayAssignmentPattern : [ AssignmentElementList ] [...] 5. If iteratorRecord.[[done]] is false, return IteratorClose(iterator, result). features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; -var x; +var _; var iterable = {}; var iterator = { next: function() { @@ -31,10 +33,12 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -assert.throws(Test262Error, function() { - [ x ] = iterable; -}); - +//- elems +[ _ ] +//- vals +iterable +//- error +Test262Error +//- teardown assert.sameValue(nextCount, 1); assert.sameValue(returnCount, 1); diff --git a/test/language/expressions/assignment/destructuring/array-elem-iter-nrml-close-null.js b/src/dstr-assignment/array-elem-iter-nrml-close-null.case similarity index 92% rename from test/language/expressions/assignment/destructuring/array-elem-iter-nrml-close-null.js rename to src/dstr-assignment/array-elem-iter-nrml-close-null.case index 67e3ead4d0..37314b7c17 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-iter-nrml-close-null.js +++ b/src/dstr-assignment/array-elem-iter-nrml-close-null.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose throws a TypeError when `return` returns a non-Object value info: | ArrayAssignmentPattern : [ AssignmentElementList ] @@ -20,11 +20,13 @@ info: | 9. If Type(innerResult.[[value]]) is not Object, throw a TypeError exception. features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ -var x; +//- setup +var _; var iterable = {}; var nextCount = 0; var iterator = { @@ -41,7 +43,9 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -assert.throws(TypeError, function() { - [ x ] = iterable; -}); +//- elems +[ _ ] +//- vals +iterable +//- error +TypeError diff --git a/test/language/expressions/assignment/destructuring/array-elem-iter-nrml-close-skip.js b/src/dstr-assignment/array-elem-iter-nrml-close-skip.case similarity index 91% rename from test/language/expressions/assignment/destructuring/array-elem-iter-nrml-close-skip.js rename to src/dstr-assignment/array-elem-iter-nrml-close-skip.case index c3b2087e8b..5ae2913345 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-iter-nrml-close-skip.js +++ b/src/dstr-assignment/array-elem-iter-nrml-close-skip.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is not called when assignment evaluation has exhausted the iterator info: | @@ -11,13 +11,15 @@ info: | 5. If iteratorRecord.[[done]] is false, return IteratorClose(iterator, result). 6. Return result. features: [Symbol.iterator] +template: default es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; -var x; +var _; var iterable = {}; var iterator = { next: function() { @@ -32,8 +34,10 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -[ x ] = iterable; - +//- elems +[ _ ] +//- vals +iterable +//- body assert.sameValue(nextCount, 1); assert.sameValue(returnCount, 0); diff --git a/test/language/expressions/assignment/destructuring/array-elem-iter-nrml-close.js b/src/dstr-assignment/array-elem-iter-nrml-close.case similarity index 94% rename from test/language/expressions/assignment/destructuring/array-elem-iter-nrml-close.js rename to src/dstr-assignment/array-elem-iter-nrml-close.case index 80f9902b03..f66f0ccda0 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-iter-nrml-close.js +++ b/src/dstr-assignment/array-elem-iter-nrml-close.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is called when assignment evaluation has not exhausted the iterator info: | @@ -18,15 +18,17 @@ info: | 6. Let innerResult be Call(return, iterator, « »). [...] features: [Symbol.iterator] +template: default es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var thisValue = null; var args = null; -var x; +var _; var iterable = {}; var iterator = { next: function() { @@ -45,9 +47,11 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -[ x ] = iterable; - +//- elems +[ _ ] +//- vals +iterable +//- body assert.sameValue(nextCount, 1); assert.sameValue(returnCount, 1); assert.sameValue(thisValue, iterator, 'correct `this` value'); diff --git a/test/language/expressions/assignment/destructuring/array-elem-iter-rtrn-close-err.js b/src/dstr-assignment/array-elem-iter-rtrn-close-err.case similarity index 91% rename from test/language/expressions/assignment/destructuring/array-elem-iter-rtrn-close-err.js rename to src/dstr-assignment/array-elem-iter-rtrn-close-err.case index 4b3b2a36ae..3742cf1509 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-iter-rtrn-close-err.js +++ b/src/dstr-assignment/array-elem-iter-rtrn-close-err.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is called when reference evaluation produces a "return" completion info: | @@ -19,10 +19,12 @@ info: | 7. If completion.[[type]] is throw, return Completion(completion). 8. If innerResult.[[type]] is throw, return Completion(innerResult). features: [Symbol.iterator, generators] +template: default es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var returnCount = 0; var unreachable = 0; var iterable = {}; @@ -38,8 +40,13 @@ iterable[Symbol.iterator] = function() { }; function* g() { - [ {}[yield] ] = iterable; - unreachable += 1; +//- elems +[ {}[ yield ] ] +//- vals +iterable +//- body +unreachable += 1; +//- teardown } iter = g(); iter.next(); diff --git a/test/language/expressions/assignment/destructuring/array-elem-iter-rtrn-close-null.js b/src/dstr-assignment/array-elem-iter-rtrn-close-null.case similarity index 92% rename from test/language/expressions/assignment/destructuring/array-elem-iter-rtrn-close-null.js rename to src/dstr-assignment/array-elem-iter-rtrn-close-null.case index 4e95868e8c..817ca7b6bb 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-iter-rtrn-close-null.js +++ b/src/dstr-assignment/array-elem-iter-rtrn-close-null.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose throws a TypeError when `return` returns a non-Object value info: | ArrayAssignmentPattern : [ AssignmentElementList ] @@ -20,10 +20,12 @@ info: | 9. If Type(innerResult.[[value]]) is not Object, throw a TypeError exception. features: [Symbol.iterator, generators] +template: default es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var iterable = {}; var iterator = { return: function() { @@ -35,8 +37,13 @@ iterable[Symbol.iterator] = function() { return iterator; }; function* g() { - [ {}[yield] ] = iterable; +//- elems +[ {}[yield] ] +//- vals +iterable +//- body unreachable += 1; +//- teardown } iter = g(); diff --git a/test/language/expressions/assignment/destructuring/array-elem-iter-rtrn-close.js b/src/dstr-assignment/array-elem-iter-rtrn-close.case similarity index 92% rename from test/language/expressions/assignment/destructuring/array-elem-iter-rtrn-close.js rename to src/dstr-assignment/array-elem-iter-rtrn-close.case index 2d9380de20..7f1c482fe5 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-iter-rtrn-close.js +++ b/src/dstr-assignment/array-elem-iter-rtrn-close.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is called when reference evaluation produces a "return" completion info: | @@ -19,10 +19,12 @@ info: | 7. If completion.[[type]] is throw, return Completion(completion). 8. If innerResult.[[type]] is throw, return Completion(innerResult). features: [Symbol.iterator, generators] +template: default es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var returnCount = 0; var unreachable = 0; var thisValue = null; @@ -42,8 +44,13 @@ iterable[Symbol.iterator] = function() { }; function* g() { - [ {}[yield] ] = iterable; - unreachable += 1; +//- elems +[ {}[yield] ] +//- vals +iterable +//- body +unreachable += 1; +//- teardown } iter = g(); iter.next(); diff --git a/test/language/expressions/assignment/destructuring/array-elem-iter-thrw-close-err.js b/src/dstr-assignment/array-elem-iter-thrw-close-err.case similarity index 89% rename from test/language/expressions/assignment/destructuring/array-elem-iter-thrw-close-err.js rename to src/dstr-assignment/array-elem-iter-thrw-close-err.case index d92f9a4359..04c4da8cc1 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-iter-thrw-close-err.js +++ b/src/dstr-assignment/array-elem-iter-thrw-close-err.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is called when reference evaluation produces a "throw" completion info: | @@ -12,10 +12,12 @@ info: | result). 6. Return result. features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; function ReturnError() {} @@ -38,10 +40,12 @@ var thrower = function() { iterable[Symbol.iterator] = function() { return iterator; }; - -assert.throws(Test262Error, function() { - [ {}[thrower()] ] = iterable; -}); - +//- error +Test262Error +//- elems +[ {}[thrower()] ] +//- vals +iterable +//- teardown assert.sameValue(nextCount, 0); assert.sameValue(returnCount, 1); diff --git a/test/language/expressions/assignment/destructuring/array-elem-iter-thrw-close-skip.js b/src/dstr-assignment/array-elem-iter-thrw-close-skip.case similarity index 88% rename from test/language/expressions/assignment/destructuring/array-elem-iter-thrw-close-skip.js rename to src/dstr-assignment/array-elem-iter-thrw-close-skip.case index fc27f58e38..7ac68788d2 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-iter-thrw-close-skip.js +++ b/src/dstr-assignment/array-elem-iter-thrw-close-skip.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is not called when iteration produces an abrupt completion info: | ArrayAssignmentPattern : [ AssignmentElementList ] @@ -11,10 +11,12 @@ info: | result). 6. Return result. features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var iterable = {}; @@ -30,11 +32,13 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; -var x; - -assert.throws(Test262Error, function() { - [ x ] = iterable; -}); - +var _; +//- error +Test262Error +//- elems +[ x ] +//- vals +iterable +//- teardown assert.sameValue(nextCount, 1); assert.sameValue(returnCount, 0); diff --git a/test/language/expressions/assignment/destructuring/array-elem-iter-thrw-close.js b/src/dstr-assignment/array-elem-iter-thrw-close.case similarity index 91% rename from test/language/expressions/assignment/destructuring/array-elem-iter-thrw-close.js rename to src/dstr-assignment/array-elem-iter-thrw-close.case index 4474c432fc..17129f09db 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-iter-thrw-close.js +++ b/src/dstr-assignment/array-elem-iter-thrw-close.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is called when reference evaluation produces a "throw" completion info: | @@ -18,10 +18,12 @@ info: | 6. Let innerResult be Call(return, iterator, « »). [...] features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var thisValue = null; @@ -44,11 +46,13 @@ var thrower = function() { iterable[Symbol.iterator] = function() { return iterator; }; - -assert.throws(Test262Error, function() { - [ {}[thrower()] ] = iterable; -}); - +//- error +Test262Error +//- elems +[ {}[thrower()] ] +//- vals +iterable +//- teardown assert.sameValue(nextCount, 0); assert.sameValue(returnCount, 1); assert.sameValue(thisValue, iterator, 'correct `this` value'); diff --git a/test/language/expressions/assignment/destructuring/array-rest-nested-array-invalid.js b/src/dstr-assignment/array-elem-nested-array-invalid.case similarity index 88% rename from test/language/expressions/assignment/destructuring/array-rest-nested-array-invalid.js rename to src/dstr-assignment/array-elem-nested-array-invalid.case index 1b0a2471ed..9cceb9f06f 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-nested-array-invalid.js +++ b/src/dstr-assignment/array-elem-nested-array-invalid.case @@ -2,15 +2,17 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > 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. +template: syntax es6id: 12.14.5.1 negative: SyntaxError ---*/ -var x, y; - -[...[(x, y)]] = [[]]; +//- elems +[[(x, y)]] +//- vals +[[]] diff --git a/test/language/expressions/assignment/destructuring/array-elem-nested-array-null.js b/src/dstr-assignment/array-elem-nested-array-null.case similarity index 75% rename from test/language/expressions/assignment/destructuring/array-elem-nested-array-null.js rename to src/dstr-assignment/array-elem-nested-array-null.case index 98362d693f..5910534f2b 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-nested-array-null.js +++ b/src/dstr-assignment/array-elem-nested-array-null.case @@ -2,14 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an array literal and the value is `null`, a TypeError should be thrown. +template: error es6id: 12.14.5.3 ---*/ -var x; - -assert.throws(TypeError, function() { - [[ x ]] = [null]; -}); +//- setup +var _; +//- error +TypeError +//- elems +[[ _ ]] +//- vals +[null] diff --git a/test/language/expressions/assignment/destructuring/array-elem-nested-array-undefined-hole.js b/src/dstr-assignment/array-elem-nested-array-undefined-hole.case similarity index 75% rename from test/language/expressions/assignment/destructuring/array-elem-nested-array-undefined-hole.js rename to src/dstr-assignment/array-elem-nested-array-undefined-hole.case index 047e093c2e..f0561b8be7 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-nested-array-undefined-hole.js +++ b/src/dstr-assignment/array-elem-nested-array-undefined-hole.case @@ -2,14 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an array literal and the value is a "hole", a TypeError should be thrown. +template: error es6id: 12.14.5.3 ---*/ -var x; - -assert.throws(TypeError, function() { - [[ x ]] = [ , ]; -}); +//- setup +var _; +//- error +TypeError +//- elems +[[ _ ]] +//- vals +[ , ] diff --git a/test/language/expressions/assignment/destructuring/array-elem-nested-array-undefined-own.js b/src/dstr-assignment/array-elem-nested-array-undefined-own.case similarity index 74% rename from test/language/expressions/assignment/destructuring/array-elem-nested-array-undefined-own.js rename to src/dstr-assignment/array-elem-nested-array-undefined-own.case index c9b72457c8..1972f02ee8 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-nested-array-undefined-own.js +++ b/src/dstr-assignment/array-elem-nested-array-undefined-own.case @@ -2,14 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an array literal and the value is `undefined`, a TypeError should be thrown. +template: error es6id: 12.14.5.3 ---*/ -var x; - -assert.throws(TypeError, function() { - [[ x ]] = [undefined]; -}); +//- setup +var _; +//- error +TypeError +//- elems +[[ x ]] +//- vals +[undefined] diff --git a/test/language/expressions/assignment/destructuring/array-elem-nested-array-undefined.js b/src/dstr-assignment/array-elem-nested-array-undefined.case similarity index 75% rename from test/language/expressions/assignment/destructuring/array-elem-nested-array-undefined.js rename to src/dstr-assignment/array-elem-nested-array-undefined.case index d280bf2697..6b07a4f03b 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-nested-array-undefined.js +++ b/src/dstr-assignment/array-elem-nested-array-undefined.case @@ -2,14 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an array literal and no value is defined, a TypeError should be thrown. +template: error es6id: 12.14.5.3 ---*/ -var x; - -assert.throws(TypeError, function() { - [[ x ]] = []; -}); +//- setup +var _; +//- error +TypeError +//- elems +[[ x ]] +//- vals +[] diff --git a/test/language/expressions/assignment/destructuring/array-elem-nested-array-yield-expr.js b/src/dstr-assignment/array-elem-nested-array-yield-expr.case similarity index 80% rename from test/language/expressions/assignment/destructuring/array-elem-nested-array-yield-expr.js rename to src/dstr-assignment/array-elem-nested-array-yield-expr.case index 5128f3774e..bd5d94ffab 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-nested-array-yield-expr.js +++ b/src/dstr-assignment/array-elem-nested-array-yield-expr.case @@ -2,32 +2,36 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the DestructuringAssignmentTarget of a nested destructuring assignment and within a generator function body, it behaves as a YieldExpression. +template: default es6id: 12.14.5.3 features: [generators] ---*/ +//- setup var value = [[22]]; var x = {}; -var assignmentResult, iterationResult, iter; +var iterationResult, iter; iter = (function*() { - assignmentResult = [[x[yield]]] = value; +//- elems +[[x[yield]]] +//- vals +value +//- teardown }()); iterationResult = iter.next(); -assert.sameValue(assignmentResult, undefined); assert.sameValue(iterationResult.value, undefined); assert.sameValue(iterationResult.done, false); assert.sameValue(x.prop, undefined); iterationResult = iter.next('prop'); -assert.sameValue(assignmentResult, value); assert.sameValue(iterationResult.value, undefined); assert.sameValue(iterationResult.done, true); assert.sameValue(x.prop, 22); diff --git a/test/language/expressions/assignment/destructuring/array-elem-nested-array-yield-ident-invalid.js b/src/dstr-assignment/array-elem-nested-array-yield-ident-invalid.case similarity index 86% rename from test/language/expressions/assignment/destructuring/array-elem-nested-array-yield-ident-invalid.js rename to src/dstr-assignment/array-elem-nested-array-yield-ident-invalid.case index bba32536e3..006428417b 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-nested-array-yield-ident-invalid.js +++ b/src/dstr-assignment/array-elem-nested-array-yield-ident-invalid.case @@ -2,13 +2,17 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the DestructuringAssignmentTarget of a nested destructuring assignment outside of strict mode, it behaves as an IdentifierReference. +template: syntax es6id: 12.14.5.3 flags: [onlyStrict] negative: SyntaxError ---*/ -[[x[yield]]] = value; +//- elems +[[x[yield]]] +//- vals +[[]] diff --git a/test/language/expressions/assignment/destructuring/array-elem-nested-array-yield-ident-valid.js b/src/dstr-assignment/array-elem-nested-array-yield-ident-valid.case similarity index 79% rename from test/language/expressions/assignment/destructuring/array-elem-nested-array-yield-ident-valid.js rename to src/dstr-assignment/array-elem-nested-array-yield-ident-valid.case index 01ea78ebae..c1bcd3c67b 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-nested-array-yield-ident-valid.js +++ b/src/dstr-assignment/array-elem-nested-array-yield-ident-valid.case @@ -2,20 +2,21 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the DestructuringAssignmentTarget of a nested destructuring assignment outside of strict mode, it behaves as an IdentifierReference. +template: default es6id: 12.14.5.3 flags: [noStrict] ---*/ -var value = [[22]]; +//- setup var yield = 'prop'; var x = {}; -var result; - -result = [[x[yield]]] = value; - -assert.sameValue(result, value); +//- elems +[[x[yield]]] +//- vals +[[22]] +//- body assert.sameValue(x.prop, 22); diff --git a/test/language/expressions/assignment/destructuring/array-elem-nested-array.js b/src/dstr-assignment/array-elem-nested-array.case similarity index 77% rename from test/language/expressions/assignment/destructuring/array-elem-nested-array.js rename to src/dstr-assignment/array-elem-nested-array.case index 0fb07e27b1..7c5902abfc 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-nested-array.js +++ b/src/dstr-assignment/array-elem-nested-array.case @@ -2,17 +2,19 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an array literal, it should be parsed parsed as a DestructuringAssignmentPattern and evaluated as a destructuring assignment. +template: default es6id: 12.14.5.3 ---*/ -var value = [[1]]; -var x, result; - -result = [[x]] = value; - -assert.sameValue(result, value); +//- setup +var x; +//- elems +[[x]] +//- vals +[[1]] +//- body assert.sameValue(x, 1); diff --git a/test/language/expressions/assignment/destructuring/array-elem-nested-array-invalid.js b/src/dstr-assignment/array-elem-nested-obj-invalid.case similarity index 87% rename from test/language/expressions/assignment/destructuring/array-elem-nested-array-invalid.js rename to src/dstr-assignment/array-elem-nested-obj-invalid.case index 8c5e183190..3bf2ec0f31 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-nested-array-invalid.js +++ b/src/dstr-assignment/array-elem-nested-obj-invalid.case @@ -2,15 +2,17 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > 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. +template: syntax es6id: 12.14.5.1 negative: SyntaxError ---*/ -var x, y; - -[[(x, y)]] = [[]]; +//- elems +[{ get x() {} }] +//- vals +[{}] diff --git a/test/language/expressions/assignment/destructuring/array-elem-nested-obj-null.js b/src/dstr-assignment/array-elem-nested-obj-null.case similarity index 77% rename from test/language/expressions/assignment/destructuring/array-elem-nested-obj-null.js rename to src/dstr-assignment/array-elem-nested-obj-null.case index 5485fde736..fb72843814 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-nested-obj-null.js +++ b/src/dstr-assignment/array-elem-nested-obj-null.case @@ -2,14 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an object literal and the value is `null`, a TypeError should be thrown. +template: error es6id: 12.14.5.3 ---*/ +//- setup var x; - -assert.throws(TypeError, function() { - [{ x }] = [null]; -}); +//- error +TypeError +//- elems +[{ x }] +//- vals +[null] diff --git a/test/language/expressions/assignment/destructuring/array-elem-nested-obj-undefined-hole.js b/src/dstr-assignment/array-elem-nested-obj-undefined-hole.case similarity index 77% rename from test/language/expressions/assignment/destructuring/array-elem-nested-obj-undefined-hole.js rename to src/dstr-assignment/array-elem-nested-obj-undefined-hole.case index 3984ff7a31..dc463ec815 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-nested-obj-undefined-hole.js +++ b/src/dstr-assignment/array-elem-nested-obj-undefined-hole.case @@ -2,14 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an object literal and the value is a "hole", a TypeError should be thrown. +template: error es6id: 12.14.5.3 ---*/ +//- setup var x; - -assert.throws(TypeError, function() { - [{ x }] = [ , ]; -}); +//- error +TypeError +//- elems +[{ x }] +//- vals +[ , ] diff --git a/test/language/expressions/assignment/destructuring/array-elem-nested-obj-undefined-own.js b/src/dstr-assignment/array-elem-nested-obj-undefined-own.case similarity index 76% rename from test/language/expressions/assignment/destructuring/array-elem-nested-obj-undefined-own.js rename to src/dstr-assignment/array-elem-nested-obj-undefined-own.case index 39614e4bdf..179ae08e89 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-nested-obj-undefined-own.js +++ b/src/dstr-assignment/array-elem-nested-obj-undefined-own.case @@ -2,14 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an object literal and the value is `undefined`, a TypeError should be thrown. +template: error es6id: 12.14.5.3 ---*/ +//- setup var x; - -assert.throws(TypeError, function() { - [{ x }] = [undefined]; -}); +//- error +TypeError +//- elems +[{ x }] +//- vals +[undefined] diff --git a/test/language/expressions/assignment/destructuring/array-elem-nested-obj-undefined.js b/src/dstr-assignment/array-elem-nested-obj-undefined.case similarity index 77% rename from test/language/expressions/assignment/destructuring/array-elem-nested-obj-undefined.js rename to src/dstr-assignment/array-elem-nested-obj-undefined.case index 8326c339aa..016d0590be 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-nested-obj-undefined.js +++ b/src/dstr-assignment/array-elem-nested-obj-undefined.case @@ -2,14 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an object literal and no value is defined, a TypeError should be thrown. +template: error es6id: 12.14.5.3 ---*/ +//- setup var x; - -assert.throws(TypeError, function() { - [{ x }] = []; -}); +//- error +TypeError +//- elems +[{ x }] +//- vals +[] diff --git a/test/language/expressions/assignment/destructuring/array-elem-nested-obj-yield-expr.js b/src/dstr-assignment/array-elem-nested-obj-yield-expr.case similarity index 76% rename from test/language/expressions/assignment/destructuring/array-elem-nested-obj-yield-expr.js rename to src/dstr-assignment/array-elem-nested-obj-yield-expr.case index 3d72841db9..4622b03b72 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-nested-obj-yield-expr.js +++ b/src/dstr-assignment/array-elem-nested-obj-yield-expr.case @@ -2,31 +2,34 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the Initializer of a nested destructuring assignment and within a generator function body, it behaves as a YieldExpression. +template: default es6id: 12.14.5.3 features: [generators] ---*/ -var value = [{}]; -var assignmentResult, iterationResult, iter, x; +//- setup +var iterationResult, iter, x; iter = (function*() { - assignmentResult = [{ x = yield }] = value; +//- elems +[{ x = yield }] +//- vals +[{}] +//- teardown }()); iterationResult = iter.next(); -assert.sameValue(assignmentResult, undefined); assert.sameValue(iterationResult.value, undefined); assert.sameValue(iterationResult.done, false); assert.sameValue(x, undefined); iterationResult = iter.next(4); -assert.sameValue(assignmentResult, value); assert.sameValue(iterationResult.value, undefined); assert.sameValue(iterationResult.done, true); assert.sameValue(x, 4); diff --git a/test/language/expressions/assignment/destructuring/array-elem-nested-obj-yield-ident-invalid.js b/src/dstr-assignment/array-elem-nested-obj-yield-ident-invalid.case similarity index 85% rename from test/language/expressions/assignment/destructuring/array-elem-nested-obj-yield-ident-invalid.js rename to src/dstr-assignment/array-elem-nested-obj-yield-ident-invalid.case index 39a024f393..ce9db76419 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-nested-obj-yield-ident-invalid.js +++ b/src/dstr-assignment/array-elem-nested-obj-yield-ident-invalid.case @@ -2,13 +2,17 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the Initializer of a nested destructuring assignment outside of a generator function body, it behaves as a IdentifierReference. +template: syntax es6id: 12.14.5.3 flags: [onlyStrict] negative: SyntaxError ---*/ -[{ x = yield }] = [{}]; +//- elems +[{ x = yield }] +//- vals +[{}] diff --git a/test/language/expressions/assignment/destructuring/array-elem-nested-obj-yield-ident-valid.js b/src/dstr-assignment/array-elem-nested-obj-yield-ident-valid.case similarity index 77% rename from test/language/expressions/assignment/destructuring/array-elem-nested-obj-yield-ident-valid.js rename to src/dstr-assignment/array-elem-nested-obj-yield-ident-valid.case index 6837411f45..d0caa64d4d 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-nested-obj-yield-ident-valid.js +++ b/src/dstr-assignment/array-elem-nested-obj-yield-ident-valid.case @@ -2,19 +2,21 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the Initializer of a nested destructuring assignment outside of a generator function body, it behaves as an IdentifierReference. +template: default es6id: 12.14.5.3 flags: [noStrict] ---*/ -var value = [{}]; +//- setup var yield = 2; -var result, x; - -result = [{ x = yield }] = value; - -assert.sameValue(result, value); +var x; +//- elems +[{ x = yield }] +//- vals +[{}] +//- body assert.sameValue(x, 2); diff --git a/test/language/expressions/assignment/destructuring/array-elem-nested-obj.js b/src/dstr-assignment/array-elem-nested-obj.case similarity index 75% rename from test/language/expressions/assignment/destructuring/array-elem-nested-obj.js rename to src/dstr-assignment/array-elem-nested-obj.case index 94778a614e..bcb9877600 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-nested-obj.js +++ b/src/dstr-assignment/array-elem-nested-obj.case @@ -2,17 +2,19 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an object literal, it should be parsed as a DestructuringAssignmentPattern and evaluated as a destructuring assignment. +template: default es6id: 12.14.5.3 ---*/ -var value = [{ x: 2 }]; -var result, x; - -result = [{ x }] = value; - -assert.sameValue(result, value); +//- setup +var x; +//- elems +[{ x }] +//- vals +[{ x: 2 }] +//- body assert.sameValue(x, 2); diff --git a/test/language/expressions/assignment/destructuring/array-elem-put-const.js b/src/dstr-assignment/array-elem-put-const.case similarity index 75% rename from test/language/expressions/assignment/destructuring/array-elem-put-const.js rename to src/dstr-assignment/array-elem-put-const.case index 44f8985b57..cbd2841782 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-put-const.js +++ b/src/dstr-assignment/array-elem-put-const.case @@ -2,14 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > The assignment target should obey `const` semantics. +template: error es6id: 12.14.5.3 features: [const] ---*/ +//- setup const c = null; - -assert.throws(TypeError, function() { - [ c ] = [1]; -}); +//- error +TypeError +//- elems +[ c ] +//- vals +[1] diff --git a/test/language/expressions/assignment/destructuring/array-rest-put-let.js b/src/dstr-assignment/array-elem-put-let.case similarity index 71% rename from test/language/expressions/assignment/destructuring/array-rest-put-let.js rename to src/dstr-assignment/array-elem-put-let.case index a150723461..54dbfb4c4f 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-put-let.js +++ b/src/dstr-assignment/array-elem-put-let.case @@ -2,13 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > The assignment target should obey `let` semantics. +template: error es6id: 12.14.5.3 features: [let] ---*/ -assert.throws(ReferenceError, function() { - [ ...x ] = []; - let x; -}); +//- elems +[ x ] +//- vals +[] +//- error +ReferenceError +//- teardown +let x; diff --git a/test/language/expressions/assignment/destructuring/array-elem-put-prop-ref-no-get.js b/src/dstr-assignment/array-elem-put-prop-ref-no-get.case similarity index 78% rename from test/language/expressions/assignment/destructuring/array-elem-put-prop-ref-no-get.js rename to src/dstr-assignment/array-elem-put-prop-ref-no-get.case index 4bd7a8a8ad..6763ca4fcf 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-put-prop-ref-no-get.js +++ b/src/dstr-assignment/array-elem-put-prop-ref-no-get.case @@ -2,14 +2,15 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > If the DestructuringAssignmentTarget of an AssignmentElement is a PropertyReference, it should not be evaluated. +template: default es6id: 12.14.5.3 ---*/ -var value = [23]; -var x, setValue, result; +//- setup +var x, setValue; x = { get y() { $ERROR('The property should not be accessed.'); @@ -18,8 +19,9 @@ x = { setValue = val; } }; - -result = [x.y] = value; - -assert.sameValue(result, value); +//- elems +[x.y] +//- vals +[23] +//- body assert.sameValue(setValue, 23); diff --git a/test/language/expressions/assignment/destructuring/array-elem-put-prop-ref-user-err.js b/src/dstr-assignment/array-elem-put-prop-ref-user-err.case similarity index 77% rename from test/language/expressions/assignment/destructuring/array-elem-put-prop-ref-user-err.js rename to src/dstr-assignment/array-elem-put-prop-ref-user-err.case index 00c43f2656..4f4792b43f 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-put-prop-ref-user-err.js +++ b/src/dstr-assignment/array-elem-put-prop-ref-user-err.case @@ -2,19 +2,22 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > Any error raised as a result of setting the value should be forwarded to the runtime. +template: error es6id: 12.14.5.3 ---*/ -var value = [23]; +//- setup var x = { set y(val) { throw new Test262Error(); } }; - -assert.throws(Test262Error, function() { - [x.y] = value; -}); +//- error +Test262Error +//- elems +[x.y] +//- vals +[23] diff --git a/test/language/expressions/assignment/destructuring/array-elem-put-prop-ref.js b/src/dstr-assignment/array-elem-put-prop-ref.case similarity index 74% rename from test/language/expressions/assignment/destructuring/array-elem-put-prop-ref.js rename to src/dstr-assignment/array-elem-put-prop-ref.case index b0b419c7bd..983bcfc57c 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-put-prop-ref.js +++ b/src/dstr-assignment/array-elem-put-prop-ref.case @@ -2,17 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > The DestructuringAssignmentTarget of an AssignmentElement may be a PropertyReference. +template: default es6id: 12.14.5.3 ---*/ -var value = [4]; +//- setup var x = {}; -var result; - -result = [x.y] = value; - -assert.sameValue(result, value); +//- elems +[x.y] +//- vals +[4] +//- body assert.sameValue(x.y, 4); diff --git a/test/language/expressions/assignment/destructuring/array-elem-put-unresolvable-no-strict.js b/src/dstr-assignment/array-elem-put-unresolvable-no-strict.case similarity index 81% rename from test/language/expressions/assignment/destructuring/array-elem-put-unresolvable-no-strict.js rename to src/dstr-assignment/array-elem-put-unresolvable-no-strict.case index 41fc5d4153..fe7be7c70e 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-put-unresolvable-no-strict.js +++ b/src/dstr-assignment/array-elem-put-unresolvable-no-strict.case @@ -2,15 +2,21 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > Outside of strict mode, if the the assignment target is an unresolvable reference, a new `var` binding should be created in the environment record. +template: default es6id: 12.14.5.3 flags: [noStrict] ---*/ +//- setup { - [ unresolvable ] = []; +//- elems +[ unresolvable ] +//- vals +[] +//- teardown } assert.sameValue(unresolvable, undefined); diff --git a/test/language/expressions/assignment/destructuring/array-elem-put-unresolvable-strict.js b/src/dstr-assignment/array-elem-put-unresolvable-strict.case similarity index 77% rename from test/language/expressions/assignment/destructuring/array-elem-put-unresolvable-strict.js rename to src/dstr-assignment/array-elem-put-unresolvable-strict.case index b06bac9c55..98dbacc75f 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-put-unresolvable-strict.js +++ b/src/dstr-assignment/array-elem-put-unresolvable-strict.case @@ -2,13 +2,17 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > In strict mode, if the the assignment target is an unresolvable reference, a ReferenceError should be thrown. +template: error es6id: 12.14.5.3 flags: [onlyStrict] ---*/ -assert.throws(ReferenceError, function() { - [ unresolvable ] = []; -}); +//- error +ReferenceError +//- elems +[ unresolvable ] +//- vals +[] diff --git a/test/language/expressions/assignment/destructuring/array-elem-target-identifier.js b/src/dstr-assignment/array-elem-target-identifier.case similarity index 79% rename from test/language/expressions/assignment/destructuring/array-elem-target-identifier.js rename to src/dstr-assignment/array-elem-target-identifier.case index 17e1e403d9..c45bbc8ac6 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-target-identifier.js +++ b/src/dstr-assignment/array-elem-target-identifier.case @@ -2,20 +2,21 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > Identifiers that appear as the DestructuringAssignmentTarget in an AssignmentElement should take on the iterated value corresponding to their position in the ArrayAssignmentPattern. +template: default es6id: 12.14.5.3 ---*/ -var value = [1, 2, 3]; +//- setup var x, y, z; -var result; - -result = [x, y, z] = value; - -assert.sameValue(result, value); +//- elems +[x, y, z] +//- vals +[1, 2, 3] +//- body assert.sameValue(x, 1); assert.sameValue(y, 2); assert.sameValue(z, 3); diff --git a/test/language/expressions/assignment/destructuring/array-elem-target-simple-no-strict.js b/src/dstr-assignment/array-elem-target-simple-no-strict.case similarity index 76% rename from test/language/expressions/assignment/destructuring/array-elem-target-simple-no-strict.js rename to src/dstr-assignment/array-elem-target-simple-no-strict.case index 93421ae7ef..6c442211b1 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-target-simple-no-strict.js +++ b/src/dstr-assignment/array-elem-target-simple-no-strict.case @@ -2,19 +2,21 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > Identifiers that appear as the DestructuringAssignmentTarget in an AssignmentElement should take on the iterated value corresponding to their position in the ArrayAssignmentPattern. +template: default es6id: 12.14.5.3 flags: [noStrict] ---*/ -var value = [2, 3]; -var result, argument, eval; - -result = [arguments, eval] = value; - -assert.sameValue(result, value); +//- setup +var argument, eval; +//- elems +[arguments, eval] +//- vals +[2, 3] +//- body assert.sameValue(arguments, 2); assert.sameValue(eval, 3); diff --git a/test/language/expressions/assignment/destructuring/array-elem-init-simple-strict.js b/src/dstr-assignment/array-elem-target-simple-strict.case similarity index 86% rename from test/language/expressions/assignment/destructuring/array-elem-init-simple-strict.js rename to src/dstr-assignment/array-elem-target-simple-strict.case index 2d0659bf42..b9a8adf770 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-init-simple-strict.js +++ b/src/dstr-assignment/array-elem-target-simple-strict.case @@ -2,14 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression) is false. +template: syntax es6id: 12.14.5.1 flags: [onlyStrict] negative: SyntaxError ---*/ -([arguments] = []); +//- elems +[arguments] +//- vals +[] diff --git a/test/language/expressions/assignment/destructuring/array-elem-target-yield-expr.js b/src/dstr-assignment/array-elem-target-yield-expr.case similarity index 79% rename from test/language/expressions/assignment/destructuring/array-elem-target-yield-expr.js rename to src/dstr-assignment/array-elem-target-yield-expr.case index 6505a39694..316af932ba 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-target-yield-expr.js +++ b/src/dstr-assignment/array-elem-target-yield-expr.case @@ -2,32 +2,36 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the DestructuringAssignmentTarget of an AssignmentElement within a generator function body, it behaves as a YieldExpression. +template: default es6id: 12.14.5.4 features: [generators] ---*/ +//- setup var value = [33]; var x = {}; -var assignmentResult, iterationResult, iter; +var iterationResult, iter; iter = (function*() { - assignmentResult = [ x[yield] ] = value; +//- elems +[ x[yield] ] +//- vals +[33] +//- teardown }()); iterationResult = iter.next(); -assert.sameValue(assignmentResult, undefined); assert.sameValue(iterationResult.value, undefined); assert.sameValue(iterationResult.done, false); assert.sameValue(x.prop, undefined); iterationResult = iter.next('prop'); -assert.sameValue(assignmentResult, value); assert.sameValue(iterationResult.value, undefined); assert.sameValue(iterationResult.done, true); assert.sameValue(x.prop, 33); diff --git a/test/language/expressions/assignment/destructuring/array-elem-target-yield-invalid.js b/src/dstr-assignment/array-elem-target-yield-invalid.case similarity index 86% rename from test/language/expressions/assignment/destructuring/array-elem-target-yield-invalid.js rename to src/dstr-assignment/array-elem-target-yield-invalid.case index f03f598683..0ff8247068 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-target-yield-invalid.js +++ b/src/dstr-assignment/array-elem-target-yield-invalid.case @@ -2,13 +2,17 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the DestructuringAssignmentTarget of an AssignmentElement and outside of a generator function body, it behaves as an IdentifierReference. +template: syntax es6id: 12.14.5.4 flags: [onlyStrict] negative: SyntaxError ---*/ -[ x[yield] ] = []; +//- elems +[ x[yield] ] +//- vals +[] diff --git a/test/language/expressions/assignment/destructuring/array-elem-target-yield-valid.js b/src/dstr-assignment/array-elem-target-yield-valid.case similarity index 79% rename from test/language/expressions/assignment/destructuring/array-elem-target-yield-valid.js rename to src/dstr-assignment/array-elem-target-yield-valid.case index 0363d1d3c6..8b3263fabd 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-target-yield-valid.js +++ b/src/dstr-assignment/array-elem-target-yield-valid.case @@ -2,20 +2,21 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the DestructuringAssignmentTarget of an AssignmentElement outside of a generator function body, it behaves as an IdentifierReference. +template: default es6id: 12.14.5.4 flags: [noStrict] ---*/ -var value = [33]; +//- setup var yield = 'prop'; var x = {}; -var result; - -result = [ x[yield] ] = value; - -assert.sameValue(result, value); +//- elems +[ x[yield] ] +//- vals +[33] +//- body assert.sameValue(x.prop, 33); diff --git a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-elision-iter-abpt.js b/src/dstr-assignment/array-elem-trlg-iter-elision-iter-abpt.case similarity index 88% rename from test/language/expressions/assignment/destructuring/array-elem-trlg-iter-elision-iter-abpt.js rename to src/dstr-assignment/array-elem-trlg-iter-elision-iter-abpt.case index c4624b2c48..9994695515 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-elision-iter-abpt.js +++ b/src/dstr-assignment/array-elem-trlg-iter-elision-iter-abpt.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Abrupt completion returned during evaluation of elision +desc: Abrupt completion returned during evaluation of elision info: | ArrayAssignmentPattern : [ AssignmentElementList , Elisionopt AssignmentRestElementopt ] @@ -16,10 +16,12 @@ info: | IteratorClose(iterator, status). ii. Return Completion(status). features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var iterable = {}; @@ -44,9 +46,12 @@ iterable[Symbol.iterator] = function() { return iterator; }; -assert.throws(Test262Error, function() { - [ x , , ] = iterable; -}); - +//- error +Test262Error +//- elems +[ x , , ] +//- vals +iterable +//- teardown assert.sameValue(nextCount, 2); assert.sameValue(returnCount, 0); diff --git a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-elision-iter-nrml-close-err.js b/src/dstr-assignment/array-elem-trlg-iter-elision-iter-nrml-close-err.case similarity index 88% rename from test/language/expressions/assignment/destructuring/array-elem-trlg-iter-elision-iter-nrml-close-err.js rename to src/dstr-assignment/array-elem-trlg-iter-elision-iter-nrml-close-err.case index abb0aa22bb..554f0662f8 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-elision-iter-nrml-close-err.js +++ b/src/dstr-assignment/array-elem-trlg-iter-elision-iter-nrml-close-err.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Abrupt completion returned from IteratorClose +desc: Abrupt completion returned from IteratorClose info: | ArrayAssignmentPattern : [ AssignmentElementList , Elisionopt AssignmentRestElementopt ] @@ -16,10 +16,12 @@ info: | 8. If iteratorRecord.[[done]] is false, return IteratorClose(iterator, status). features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var iterable = {}; @@ -40,10 +42,12 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -assert.throws(Test262Error, function() { - [ x , , ] = iterable; -}); - +//- error +Test262Error +//- elems +[ x , , ] +//- vals +iterable +//- teardown assert.sameValue(nextCount, 2); assert.sameValue(returnCount, 1); diff --git a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-elision-iter-nrml-close-null.js b/src/dstr-assignment/array-elem-trlg-iter-elision-iter-nrml-close-null.case similarity index 94% rename from test/language/expressions/assignment/destructuring/array-elem-trlg-iter-elision-iter-nrml-close-null.js rename to src/dstr-assignment/array-elem-trlg-iter-elision-iter-nrml-close-null.case index edb875d5e6..8b67b0f7b7 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-elision-iter-nrml-close-null.js +++ b/src/dstr-assignment/array-elem-trlg-iter-elision-iter-nrml-close-null.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose throws a TypeError when `return` returns a non-Object value info: | ArrayAssignmentPattern : @@ -26,10 +26,12 @@ info: | 9. If Type(innerResult.[[value]]) is not Object, throw a TypeError exception. features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var iterable = {}; var x; var nextCount = 0; @@ -47,7 +49,9 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -assert.throws(TypeError, function() { - [ x , , ] = iterable; -}); +//- error +TypeError +//- elems +[ x , , ] +//- vals +iterable diff --git a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-elision-iter-nrml-close-skip.js b/src/dstr-assignment/array-elem-trlg-iter-elision-iter-nrml-close-skip.case similarity index 88% rename from test/language/expressions/assignment/destructuring/array-elem-trlg-iter-elision-iter-nrml-close-skip.js rename to src/dstr-assignment/array-elem-trlg-iter-elision-iter-nrml-close-skip.case index e1ba46661f..537491d49a 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-elision-iter-nrml-close-skip.js +++ b/src/dstr-assignment/array-elem-trlg-iter-elision-iter-nrml-close-skip.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: IteratorClose not invoked when elision exhausts the iterator +desc: IteratorClose not invoked when elision exhausts the iterator info: | ArrayAssignmentPattern : [ AssignmentElementList , Elisionopt AssignmentRestElementopt ] @@ -17,10 +17,12 @@ info: | status). 9. Return Completion(status). features: [Symbol.iterator] +template: default es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var iterable = {}; @@ -38,8 +40,10 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -[ x , , ] = iterable; - +//- elems +[ x , , ] +//- vals +iterable +//- body assert.sameValue(nextCount, 2); assert.sameValue(returnCount, 0); diff --git a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-elision-iter-nrml-close.js b/src/dstr-assignment/array-elem-trlg-iter-elision-iter-nrml-close.case similarity index 91% rename from test/language/expressions/assignment/destructuring/array-elem-trlg-iter-elision-iter-nrml-close.js rename to src/dstr-assignment/array-elem-trlg-iter-elision-iter-nrml-close.case index b7846bb1ab..9c99e7d2b2 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-elision-iter-nrml-close.js +++ b/src/dstr-assignment/array-elem-trlg-iter-elision-iter-nrml-close.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: IteratorClose invoked when elision does not exhaust the iterator +desc: IteratorClose invoked when elision does not exhaust the iterator info: | ArrayAssignmentPattern : [ AssignmentElementList , Elisionopt AssignmentRestElementopt ] @@ -22,10 +22,12 @@ info: | 6. Let innerResult be Call(return, iterator, « »). [...] features: [Symbol.iterator] +template: default es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var thisValue = null; @@ -50,9 +52,11 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -[ x , , ] = iterable; - +//- elems +[ x , , ] +//- vals +iterable +//- body assert.sameValue(nextCount, 2); assert.sameValue(returnCount, 1); assert.sameValue(thisValue, iterator, 'correct `this` value'); diff --git a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-get-err.js b/src/dstr-assignment/array-elem-trlg-iter-get-err.case similarity index 80% rename from test/language/expressions/assignment/destructuring/array-elem-trlg-iter-get-err.js rename to src/dstr-assignment/array-elem-trlg-iter-get-err.case index 7a3e3a9a3a..b47c3ae4bc 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-get-err.js +++ b/src/dstr-assignment/array-elem-trlg-iter-get-err.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Abrupt completion returned from GetIterator +desc: Abrupt completion returned from GetIterator info: | ArrayAssignmentPattern : [ AssignmentElementList , Elisionopt AssignmentRestElementopt ] @@ -9,16 +9,20 @@ info: | 1. Let iterator be GetIterator(value). 2. ReturnIfAbrupt(iterator). features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var iterable = {}; iterable[Symbol.iterator] = function() { throw new Test262Error(); }; var x; - -assert.throws(Test262Error, function() { - [ x , ] = iterable; -}); +//- error +Test262Error +//- elems +[ x , ] +//- vals +iterable diff --git a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-nrml-close-err.js b/src/dstr-assignment/array-elem-trlg-iter-list-nrml-close-err.case similarity index 89% rename from test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-nrml-close-err.js rename to src/dstr-assignment/array-elem-trlg-iter-list-nrml-close-err.case index 491d91e86c..c432ef0334 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-nrml-close-err.js +++ b/src/dstr-assignment/array-elem-trlg-iter-list-nrml-close-err.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Abrupt completion returned from IteratorClose +desc: Abrupt completion returned from IteratorClose info: | ArrayAssignmentPattern : [ AssignmentElementList , Elisionopt AssignmentRestElementopt ] @@ -16,10 +16,12 @@ info: | status). b. Return Completion(status). features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var iterable = {}; @@ -40,10 +42,12 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -assert.throws(Test262Error, function() { - [ x , ] = iterable; -}); - +//- error +Test262Error +//- elems +[ x , ] +//- vals +iterable +//- teardown assert.sameValue(nextCount, 1); assert.sameValue(returnCount, 1); diff --git a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-nrml-close-null.js b/src/dstr-assignment/array-elem-trlg-iter-list-nrml-close-null.case similarity index 94% rename from test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-nrml-close-null.js rename to src/dstr-assignment/array-elem-trlg-iter-list-nrml-close-null.case index daa2b227b3..2f2bf8995b 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-nrml-close-null.js +++ b/src/dstr-assignment/array-elem-trlg-iter-list-nrml-close-null.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose throws a TypeError when `return` returns a non-Object value info: | ArrayAssignmentPattern : @@ -26,10 +26,12 @@ info: | 9. If Type(innerResult.[[value]]) is not Object, throw a TypeError exception. features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var iterable = {}; var x; var nextCount = 0; @@ -47,7 +49,9 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -assert.throws(TypeError, function() { - [ x , ] = iterable; -}); +//- error +TypeError +//- elems +[ x , ] +//- vals +iterable diff --git a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-nrml-close-skip.js b/src/dstr-assignment/array-elem-trlg-iter-list-nrml-close-skip.case similarity index 94% rename from test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-nrml-close-skip.js rename to src/dstr-assignment/array-elem-trlg-iter-list-nrml-close-skip.case index a7b0f41c06..6ecaf2ebc1 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-nrml-close-skip.js +++ b/src/dstr-assignment/array-elem-trlg-iter-list-nrml-close-skip.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is not invoked when evaluation of AssignmentElementList exhausts the iterator info: | @@ -18,10 +18,12 @@ info: | status). b. Return Completion(status). features: [Symbol.iterator] +template: default es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var iterable = {}; @@ -41,8 +43,10 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -[ x , ] = iterable; - +//- elems +[ x , ] +//- vals +iterable +//- body assert.sameValue(nextCount, 1); assert.sameValue(returnCount, 0); diff --git a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-nrml-close.js b/src/dstr-assignment/array-elem-trlg-iter-list-nrml-close.case similarity index 95% rename from test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-nrml-close.js rename to src/dstr-assignment/array-elem-trlg-iter-list-nrml-close.case index 76582ec71b..519f63baa0 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-nrml-close.js +++ b/src/dstr-assignment/array-elem-trlg-iter-list-nrml-close.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is invoked when evaluation of AssignmentElementList completes without exhausting the iterator info: | @@ -24,10 +24,12 @@ info: | 6. Let innerResult be Call(return, iterator, « »). [...] features: [Symbol.iterator] +template: default es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var thisValue = null; @@ -51,9 +53,11 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -[ x , ] = iterable; - +//- elems +[ x , ] +//- vals +iterable +//- body assert.sameValue(nextCount, 1); assert.sameValue(returnCount, 1); assert.sameValue(thisValue, iterator, 'correct `this` value'); diff --git a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-rtrn-close-err.js b/src/dstr-assignment/array-elem-trlg-iter-list-rtrn-close-err.case similarity index 93% rename from test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-rtrn-close-err.js rename to src/dstr-assignment/array-elem-trlg-iter-list-rtrn-close-err.case index 7591e15c5e..628e827e4b 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-rtrn-close-err.js +++ b/src/dstr-assignment/array-elem-trlg-iter-list-rtrn-close-err.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is invoked when evaluation of AssignmentElementList returns a "return" completion and the iterator has not been marked as "done" info: | @@ -24,10 +24,12 @@ info: | 7. If completion.[[type]] is throw, return Completion(completion). 8. If innerResult.[[type]] is throw, return Completion(innerResult). features: [Symbol.iterator, generators] +template: default es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var returnCount = 0; var unreachable = 0; var iterable = {}; @@ -44,8 +46,13 @@ iterable[Symbol.iterator] = function() { }; function* g() { - [ {}[yield] , ] = iterable; - unreachable += 1; +//- elems +[ {}[yield] , ] +//- vals +iterable +//- body +unreachable += 1; +//- teardown } iter = g(); diff --git a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-rtrn-close-null.js b/src/dstr-assignment/array-elem-trlg-iter-list-rtrn-close-null.case similarity index 94% rename from test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-rtrn-close-null.js rename to src/dstr-assignment/array-elem-trlg-iter-list-rtrn-close-null.case index c635b1b130..8a807a3156 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-rtrn-close-null.js +++ b/src/dstr-assignment/array-elem-trlg-iter-list-rtrn-close-null.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose throws a TypeError when `return` returns a non-Object value info: | ArrayAssignmentPattern : @@ -26,10 +26,12 @@ info: | 9. If Type(innerResult.[[value]]) is not Object, throw a TypeError exception. features: [Symbol.iterator, generators] +template: default es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var iterable = {}; var iterator = { return: function() { @@ -42,7 +44,11 @@ iterable[Symbol.iterator] = function() { }; function* g() { - [ {}[yield] , ] = iterable; +//- elems + [ {}[yield] , ] +//- vals +iterable +//- teardown } iter = g(); diff --git a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-rtrn-close.js b/src/dstr-assignment/array-elem-trlg-iter-list-rtrn-close.case similarity index 95% rename from test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-rtrn-close.js rename to src/dstr-assignment/array-elem-trlg-iter-list-rtrn-close.case index 076dfeacca..c7c10a93cb 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-rtrn-close.js +++ b/src/dstr-assignment/array-elem-trlg-iter-list-rtrn-close.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is invoked when evaluation of AssignmentElementList returns a "return" completion and the iterator has not been marked as "done" info: | @@ -25,10 +25,12 @@ info: | 7. If completion.[[type]] is throw, return Completion(completion). 8. If innerResult.[[type]] is throw, return Completion(innerResult). features: [Symbol.iterator, generators] +template: default es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var returnCount = 0; var unreachable = 0; var thisValue = null; @@ -49,8 +51,13 @@ iterable[Symbol.iterator] = function() { }; function* g() { - [ {}[yield] , ] = iterable; +//- elems +[ {}[yield] , ] +//- vals +iterable +//- body unreachable += 1; +//- teardown }; iter = g(); diff --git a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-thrw-close-err.js b/src/dstr-assignment/array-elem-trlg-iter-list-thrw-close-err.case similarity index 92% rename from test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-thrw-close-err.js rename to src/dstr-assignment/array-elem-trlg-iter-list-thrw-close-err.case index 6580d3f941..683b386b9d 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-thrw-close-err.js +++ b/src/dstr-assignment/array-elem-trlg-iter-list-thrw-close-err.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is invoked when evaluation of AssignmentElementList returns a "throw" completion and the iterator has not been marked as "done" info: | @@ -23,10 +23,12 @@ info: | 7. If completion.[[type]] is throw, return Completion(completion). features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var iterable = {}; @@ -50,9 +52,13 @@ iterable[Symbol.iterator] = function() { return iterator; }; -assert.throws(Test262Error, function() { - [ {}[thrower()] , ] = iterable; -}); +//- error +Test262Error +//- elems +[ {}[thrower()] , ] +//- vals +iterable +//- teardown assert.sameValue(nextCount, 0); assert.sameValue(returnCount, 1); diff --git a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-thrw-close-skip.js b/src/dstr-assignment/array-elem-trlg-iter-list-thrw-close-skip.case similarity index 92% rename from test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-thrw-close-skip.js rename to src/dstr-assignment/array-elem-trlg-iter-list-thrw-close-skip.case index f07335161d..28d98902f7 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-thrw-close-skip.js +++ b/src/dstr-assignment/array-elem-trlg-iter-list-thrw-close-skip.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is not invoked when evaluation of AssignmentElementList returns an abrupt completion and the iterator has been marked as "done" info: | @@ -18,10 +18,12 @@ info: | status). b. Return Completion(status). features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var iterable = {}; @@ -41,10 +43,12 @@ iterable[Symbol.iterator] = function() { return iterator; }; var x; - -assert.throws(Test262Error, function() { - [ x , ] = iterable; -}); - +//- error +Test262Error +//- elems +[ x , ] +//- vals +iterable +//- teardown assert.sameValue(nextCount, 1); assert.sameValue(returnCount, 0); diff --git a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-thrw-close.js b/src/dstr-assignment/array-elem-trlg-iter-list-thrw-close.case similarity index 93% rename from test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-thrw-close.js rename to src/dstr-assignment/array-elem-trlg-iter-list-thrw-close.case index d0b18b6d9d..b55284f19c 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-list-thrw-close.js +++ b/src/dstr-assignment/array-elem-trlg-iter-list-thrw-close.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is invoked when evaluation of AssignmentElementList returns a "throw" completion and the iterator has not been marked as "done" info: | @@ -24,10 +24,12 @@ info: | 6. Let innerResult be Call(return, iterator, « »). [...] features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var thisValue = null; @@ -50,11 +52,13 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -assert.throws(Test262Error, function() { - [ {}[thrower()] , ] = iterable; -}); - +//- error +Test262Error +//- elems +[ {}[thrower()] , ] +//- vals +iterable +//- teardown assert.sameValue(nextCount, 0); assert.sameValue(returnCount, 1); assert.sameValue(thisValue, iterator, 'correct `this` value'); diff --git a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-nrml-close-skip.js b/src/dstr-assignment/array-elem-trlg-iter-rest-nrml-close-skip.case similarity index 93% rename from test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-nrml-close-skip.js rename to src/dstr-assignment/array-elem-trlg-iter-rest-nrml-close-skip.case index 4f4cf16281..5499774223 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-nrml-close-skip.js +++ b/src/dstr-assignment/array-elem-trlg-iter-rest-nrml-close-skip.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is not called when rest element evaluation has exhausted the iterator info: | @@ -17,10 +17,12 @@ info: | status). 9. Return Completion(status). features: [Symbol.iterator] +template: default es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var iterable = {}; @@ -37,9 +39,11 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -[ x , ...y ] = iterable; - +//- elems +[ x , ...y ] +//- vals +iterable +//- teardown assert.sameValue(nextCount, 2, 'nextCount'); assert.sameValue(returnCount, 0, 'returnCount'); assert.sameValue(x, 1, 'x'); diff --git a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-rtrn-close-err.js b/src/dstr-assignment/array-elem-trlg-iter-rest-rtrn-close-err.case similarity index 94% rename from test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-rtrn-close-err.js rename to src/dstr-assignment/array-elem-trlg-iter-rest-rtrn-close-err.case index ce2189ac37..e2635d742d 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-rtrn-close-err.js +++ b/src/dstr-assignment/array-elem-trlg-iter-rest-rtrn-close-err.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is called when AssignmentRestEvaluation produces a "return" completion due to reference evaluation info: | @@ -24,10 +24,12 @@ info: | 7. If completion.[[type]] is throw, return Completion(completion). 8. If innerResult.[[type]] is throw, return Completion(innerResult). features: [Symbol.iterator, generators] +template: default es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var unreachable = 0; @@ -51,8 +53,13 @@ iterable[Symbol.iterator] = function() { return iterator; }; function* g() { - [ x , ...{}[yield] ] = iterable; +//- elems +[ x , ...{}[yield] ] +//- vals +iterable +//- body unreachable += 1; +//- teardown } iter = g(); diff --git a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-rtrn-close-null.js b/src/dstr-assignment/array-elem-trlg-iter-rest-rtrn-close-null.case similarity index 94% rename from test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-rtrn-close-null.js rename to src/dstr-assignment/array-elem-trlg-iter-rest-rtrn-close-null.case index f25ec5b79a..d241f14801 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-rtrn-close-null.js +++ b/src/dstr-assignment/array-elem-trlg-iter-rest-rtrn-close-null.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose throws a TypeError when `return` returns a non-Object value info: | ArrayAssignmentPattern : @@ -23,10 +23,12 @@ info: | 7. If completion.[[type]] is throw, return Completion(completion). 8. If innerResult.[[type]] is throw, return Completion(innerResult). features: [Symbol.iterator, generators] +template: default es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var iterable = {}; var x; @@ -47,7 +49,11 @@ iterable[Symbol.iterator] = function() { }; function* g() { - [ x , ...{}[yield] ] = iterable; +//- elems +[ x , ...{}[yield] ] +//- vals +iterable +//- teardown } iter = g(); diff --git a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-rtrn-close.js b/src/dstr-assignment/array-elem-trlg-iter-rest-rtrn-close.case similarity index 95% rename from test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-rtrn-close.js rename to src/dstr-assignment/array-elem-trlg-iter-rest-rtrn-close.case index da1e805331..c573c53fae 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-rtrn-close.js +++ b/src/dstr-assignment/array-elem-trlg-iter-rest-rtrn-close.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is called when AssignmentRestEvaluation produces a "return" completion due to reference evaluation info: | @@ -24,10 +24,12 @@ info: | 7. If completion.[[type]] is throw, return Completion(completion). 8. If innerResult.[[type]] is throw, return Completion(innerResult). features: [Symbol.iterator, generators] +template: default es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var unreachable = 0; @@ -55,8 +57,13 @@ iterable[Symbol.iterator] = function() { }; function* g() { - [ x , ...{}[yield] ] = iterable; +//- elems +[ x , ...{}[yield] ] +//- vals +iterable +//- body unreachable += 1; +//- teardown } iter = g(); diff --git a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-thrw-close-err.js b/src/dstr-assignment/array-elem-trlg-iter-rest-thrw-close-err.case similarity index 92% rename from test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-thrw-close-err.js rename to src/dstr-assignment/array-elem-trlg-iter-rest-thrw-close-err.case index beea275ccc..79ae32edb1 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-thrw-close-err.js +++ b/src/dstr-assignment/array-elem-trlg-iter-rest-thrw-close-err.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is called when AssignmentRestEvaluation produces a "throw" completion due to reference evaluation info: | @@ -22,10 +22,12 @@ info: | [...] 7. If completion.[[type]] is throw, return Completion(completion) features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var x; @@ -51,10 +53,12 @@ var thrower = function() { iterable[Symbol.iterator] = function() { return iterator; }; - -assert.throws(Test262Error, function() { - [ x , ...{}[thrower()] ] = iterable; -}); - +//- error +Test262Error +//- elems +[ x , ...{}[thrower()] ] +//- vals +iterable +//- teardown assert.sameValue(nextCount, 1); assert.sameValue(returnCount, 1); diff --git a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-thrw-close-skip.js b/src/dstr-assignment/array-elem-trlg-iter-rest-thrw-close-skip.case similarity index 87% rename from test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-thrw-close-skip.js rename to src/dstr-assignment/array-elem-trlg-iter-rest-thrw-close-skip.case index 4619bc0738..5d53e48717 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-thrw-close-skip.js +++ b/src/dstr-assignment/array-elem-trlg-iter-rest-thrw-close-skip.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Abrupt completion returned during iteration for rest element +desc: Abrupt completion returned during iteration for rest element info: | ArrayAssignmentPattern : [ AssignmentElementList , Elisionopt AssignmentRestElementopt ] @@ -15,10 +15,12 @@ info: | status). 9. Return Completion(status). features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var iterable = {}; @@ -42,10 +44,12 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -assert.throws(Test262Error, function() { - [ x , ...x ] = iterable; -}); - +//- error +Test262Error +//- elems +[ x , ...x ] +//- vals +iterable +//- teardown assert.sameValue(nextCount, 2); assert.sameValue(returnCount, 0); diff --git a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-thrw-close.js b/src/dstr-assignment/array-elem-trlg-iter-rest-thrw-close.case similarity index 93% rename from test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-thrw-close.js rename to src/dstr-assignment/array-elem-trlg-iter-rest-thrw-close.case index eefc3e1466..1908579446 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-trlg-iter-rest-thrw-close.js +++ b/src/dstr-assignment/array-elem-trlg-iter-rest-thrw-close.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is called when AssignmentRestEvaluation produces a "throw" completion due to reference evaluation info: | @@ -23,10 +23,12 @@ info: | 6. Let innerResult be Call(return, iterator, « »). [...] features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var thisValue = null; @@ -52,11 +54,13 @@ var thrower = function() { iterable[Symbol.iterator] = function() { return iterator; }; - -assert.throws(Test262Error, function() { - [ x , ...{}[thrower()] ] = iterable; -}); - +//- error +Test262Error +//- elems +[ x , ...{}[thrower()] ] +//- vals +iterable +//- teardown assert.sameValue(nextCount, 1); assert.sameValue(returnCount, 1); assert.sameValue(thisValue, iterator, 'correct `this` value'); diff --git a/test/language/expressions/assignment/destructuring/array-elision-iter-abpt.js b/src/dstr-assignment/array-elision-iter-abpt.case similarity index 89% rename from test/language/expressions/assignment/destructuring/array-elision-iter-abpt.js rename to src/dstr-assignment/array-elision-iter-abpt.case index 82d43234bc..3ae10f4790 100644 --- a/test/language/expressions/assignment/destructuring/array-elision-iter-abpt.js +++ b/src/dstr-assignment/array-elision-iter-abpt.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is not called when iteration produces an abrupt completion info: | ArrayAssignmentPattern : [ Elision ] @@ -12,10 +12,12 @@ info: | result). [...] features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var iterable = {}; @@ -31,10 +33,12 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -assert.throws(Test262Error, function() { - [ , ] = iterable; -}); - +//- error +Test262Error +//- elems +[ , ] +//- vals +iterable +//- teardown assert.sameValue(nextCount, 1); assert.sameValue(returnCount, 0); diff --git a/test/language/expressions/assignment/destructuring/array-elision-iter-get-err.js b/src/dstr-assignment/array-elision-iter-get-err.case similarity index 78% rename from test/language/expressions/assignment/destructuring/array-elision-iter-get-err.js rename to src/dstr-assignment/array-elision-iter-get-err.case index 8900065f15..d623ab6907 100644 --- a/test/language/expressions/assignment/destructuring/array-elision-iter-get-err.js +++ b/src/dstr-assignment/array-elision-iter-get-err.case @@ -1,22 +1,26 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Abrupt completion returned from GetIterator +desc: Abrupt completion returned from GetIterator info: | ArrayAssignmentPattern : [ Elision ] 1. Let iterator be GetIterator(value). 2. ReturnIfAbrupt(iterator). features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var iterable = {}; iterable[Symbol.iterator] = function() { throw new Test262Error(); }; - -assert.throws(Test262Error, function() { - [ , ] = iterable; -}); +//- error +Test262Error +//- elems +[ , ] +//- vals +iterable diff --git a/test/language/expressions/assignment/destructuring/array-elision-iter-nrml-close-err.js b/src/dstr-assignment/array-elision-iter-nrml-close-err.case similarity index 90% rename from test/language/expressions/assignment/destructuring/array-elision-iter-nrml-close-err.js rename to src/dstr-assignment/array-elision-iter-nrml-close-err.case index ad5fb2da51..e6ea53ee72 100644 --- a/test/language/expressions/assignment/destructuring/array-elision-iter-nrml-close-err.js +++ b/src/dstr-assignment/array-elision-iter-nrml-close-err.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > Abrupt completion returned from IteratorClose info: | ArrayAssignmentPattern : [ Elision ] @@ -12,10 +12,12 @@ info: | result). 6. Return result. features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var iterable = {}; @@ -34,10 +36,12 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -assert.throws(Test262Error, function() { - [ , ] = iterable; -}); - +//- error +Test262Error +//- elems +[ , ] +//- vals +iterable +//- teardown assert.sameValue(nextCount, 1); assert.sameValue(returnCount, 1); diff --git a/test/language/expressions/assignment/destructuring/array-elision-iter-nrml-close-null.js b/src/dstr-assignment/array-elision-iter-nrml-close-null.case similarity index 93% rename from test/language/expressions/assignment/destructuring/array-elision-iter-nrml-close-null.js rename to src/dstr-assignment/array-elision-iter-nrml-close-null.case index 528c0eaf19..e91c29fcf5 100644 --- a/test/language/expressions/assignment/destructuring/array-elision-iter-nrml-close-null.js +++ b/src/dstr-assignment/array-elision-iter-nrml-close-null.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose throws a TypeError when `return` returns a non-Object value info: | ArrayAssignmentPattern : [ Elision ] @@ -21,10 +21,12 @@ info: | 9. If Type(innerResult.[[value]]) is not Object, throw a TypeError exception. features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var iterable = {}; var nextCount = 0; var iterator = { @@ -41,7 +43,9 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -assert.throws(TypeError, function() { - [ , ] = iterable; -}); +//- error +TypeError +//- elems +[ , ] +//- vals +iterable diff --git a/test/language/expressions/assignment/destructuring/array-elision-iter-nrml-close-skip.js b/src/dstr-assignment/array-elision-iter-nrml-close-skip.case similarity index 91% rename from test/language/expressions/assignment/destructuring/array-elision-iter-nrml-close-skip.js rename to src/dstr-assignment/array-elision-iter-nrml-close-skip.case index ecff815338..17d7c97baf 100644 --- a/test/language/expressions/assignment/destructuring/array-elision-iter-nrml-close-skip.js +++ b/src/dstr-assignment/array-elision-iter-nrml-close-skip.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is not called when iteration has exhausted the iterator info: | ArrayAssignmentPattern : [ Elision ] @@ -12,10 +12,12 @@ info: | result). [...] features: [Symbol.iterator] +template: default es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var iterable = {}; @@ -32,8 +34,10 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -[ , ] = iterable; - +//- elems +[ , ] +//- vals +iterable +//- body assert.sameValue(nextCount, 1); assert.sameValue(returnCount, 0); diff --git a/test/language/expressions/assignment/destructuring/array-elision-iter-nrml-close.js b/src/dstr-assignment/array-elision-iter-nrml-close.case similarity index 94% rename from test/language/expressions/assignment/destructuring/array-elision-iter-nrml-close.js rename to src/dstr-assignment/array-elision-iter-nrml-close.case index eba1f3cef4..71c75a2d56 100644 --- a/test/language/expressions/assignment/destructuring/array-elision-iter-nrml-close.js +++ b/src/dstr-assignment/array-elision-iter-nrml-close.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is called when assignment evaluation has not exhausted the iterator info: | @@ -19,10 +19,12 @@ info: | 6. Let innerResult be Call(return, iterator, « »). [...] features: [Symbol.iterator] +template: default es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var thisValue = null; @@ -45,9 +47,11 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -[ , ] = iterable; - +//- elems +[ , ] +//- vals +iterable +//- body assert.sameValue(nextCount, 1); assert.sameValue(returnCount, 1); assert.sameValue(thisValue, iterator, 'correct `this` value'); diff --git a/src/dstr-assignment/array-elision-val-array.case b/src/dstr-assignment/array-elision-val-array.case new file mode 100644 index 0000000000..70895eeef6 --- /dev/null +++ b/src/dstr-assignment/array-elision-val-array.case @@ -0,0 +1,13 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +desc: > + An ArrayAssignmentPattern containing only Elisions requires iterable values +template: default +es6id: 12.14.5.2 +---*/ + +//- elems +[,] +//- vals +[] diff --git a/src/dstr-assignment/array-elision-val-bool.case b/src/dstr-assignment/array-elision-val-bool.case new file mode 100644 index 0000000000..e9cbc6dd09 --- /dev/null +++ b/src/dstr-assignment/array-elision-val-bool.case @@ -0,0 +1,16 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +desc: > + An ArrayAssignmentPattern containing only Elisions requires iterable values + and throws for boolean values. +template: error +es6id: 12.14.5.2 +---*/ + +//- error +TypeError +//- elems +[,] +//- vals +true diff --git a/src/dstr-assignment/array-elision-val-null.case b/src/dstr-assignment/array-elision-val-null.case new file mode 100644 index 0000000000..3f4b644468 --- /dev/null +++ b/src/dstr-assignment/array-elision-val-null.case @@ -0,0 +1,16 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +desc: > + An ArrayAssignmentPattern containing only Elisions requires iterable values + and throws for `null`. +template: error +es6id: 12.14.5.2 +---*/ + +//- error +TypeError +//- elems +[,] +//- vals +null diff --git a/src/dstr-assignment/array-elision-val-num.case b/src/dstr-assignment/array-elision-val-num.case new file mode 100644 index 0000000000..99f14215d2 --- /dev/null +++ b/src/dstr-assignment/array-elision-val-num.case @@ -0,0 +1,16 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +desc: > + An ArrayAssignmentPattern containing only Elisions requires iterable values + and throws for number values. +template: error +es6id: 12.14.5.2 +---*/ + +//- error +TypeError +//- elems +[,] +//- vals +1 diff --git a/src/dstr-assignment/array-elision-val-string.case b/src/dstr-assignment/array-elision-val-string.case new file mode 100644 index 0000000000..4072011b8c --- /dev/null +++ b/src/dstr-assignment/array-elision-val-string.case @@ -0,0 +1,13 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +desc: > + An ArrayAssignmentPattern containing only Elisions requires iterable values +template: default +es6id: 12.14.5.2 +---*/ + +//- elems +[,] +//- vals +'string literal' diff --git a/src/dstr-assignment/array-elision-val-symbol.case b/src/dstr-assignment/array-elision-val-symbol.case new file mode 100644 index 0000000000..7b80f19b82 --- /dev/null +++ b/src/dstr-assignment/array-elision-val-symbol.case @@ -0,0 +1,19 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +desc: > + An ArrayAssignmentPattern containing only Elisions requires iterable values + and throws for symbol values. +template: error +es6id: 12.14.5.2 +features: [Symbol] +---*/ + +//- setup +var s = Symbol(); +//- error +TypeError +//- elems +[,] +//- vals +s diff --git a/src/dstr-assignment/array-elision-val-undef.case b/src/dstr-assignment/array-elision-val-undef.case new file mode 100644 index 0000000000..4c7bf69fc7 --- /dev/null +++ b/src/dstr-assignment/array-elision-val-undef.case @@ -0,0 +1,16 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +desc: > + An ArrayAssignmentPattern containing only Elisions requires iterable values + and throws for `undefined`. +template: error +es6id: 12.14.5.2 +---*/ + +//- error +TypeError +//- elems +[,] +//- vals +undefined diff --git a/test/language/expressions/assignment/destructuring/array-empty-iter-close-err.js b/src/dstr-assignment/array-empty-iter-close-err.case similarity index 84% rename from test/language/expressions/assignment/destructuring/array-empty-iter-close-err.js rename to src/dstr-assignment/array-empty-iter-close-err.case index a7e1d225fd..8d33d030d1 100644 --- a/test/language/expressions/assignment/destructuring/array-empty-iter-close-err.js +++ b/src/dstr-assignment/array-empty-iter-close-err.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Abrupt completion returned from IteratorClose +desc: Abrupt completion returned from IteratorClose info: | ArrayAssignmentPattern : [ ] @@ -9,10 +9,12 @@ info: | 2. ReturnIfAbrupt(iterator). 3. Return IteratorClose(iterator, NormalCompletion(empty)). features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var iterable = {}; @@ -29,10 +31,12 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -assert.throws(Test262Error, function() { - [] = iterable; -}); - +//- error +Test262Error +//- elems +[] +//- vals +iterable +//- teardown assert.sameValue(nextCount, 0); assert.sameValue(returnCount, 1); diff --git a/test/language/expressions/assignment/destructuring/array-empty-iter-close-null.js b/src/dstr-assignment/array-empty-iter-close-null.case similarity index 92% rename from test/language/expressions/assignment/destructuring/array-empty-iter-close-null.js rename to src/dstr-assignment/array-empty-iter-close-null.case index 1ef76906be..42cef194a3 100644 --- a/test/language/expressions/assignment/destructuring/array-empty-iter-close-null.js +++ b/src/dstr-assignment/array-empty-iter-close-null.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose throws a TypeError when `return` returns a non-Object value info: | ArrayAssignmentPattern : [ ] @@ -19,10 +19,12 @@ info: | 9. If Type(innerResult.[[value]]) is not Object, throw a TypeError exception. features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var iterable = {}; var iterator = { next: function() { @@ -35,7 +37,9 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -assert.throws(TypeError, function() { - [] = iterable; -}); +//- error +TypeError +//- elems +[] +//- vals +iterable diff --git a/test/language/expressions/assignment/destructuring/array-empty-iter-close.js b/src/dstr-assignment/array-empty-iter-close.case similarity index 91% rename from test/language/expressions/assignment/destructuring/array-empty-iter-close.js rename to src/dstr-assignment/array-empty-iter-close.case index c9a70d9c9a..abd0f57908 100644 --- a/test/language/expressions/assignment/destructuring/array-empty-iter-close.js +++ b/src/dstr-assignment/array-empty-iter-close.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Iterator is closed without iterating +desc: Iterator is closed without iterating info: | ArrayAssignmentPattern : [ ] @@ -15,10 +15,12 @@ info: | 6. Let innerResult be Call(return, iterator, « »). [...] features: [Symbol.iterator] +template: default es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var thisValue = null; @@ -39,9 +41,11 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -[] = iterable; - +//- elems +[] +//- vals +iterable +//- body assert.sameValue(nextCount, 0); assert.sameValue(returnCount, 1); assert.sameValue(thisValue, iterator, 'correct `this` value'); diff --git a/test/language/expressions/assignment/destructuring/array-empty-iter-get-err.js b/src/dstr-assignment/array-empty-iter-get-err.case similarity index 78% rename from test/language/expressions/assignment/destructuring/array-empty-iter-get-err.js rename to src/dstr-assignment/array-empty-iter-get-err.case index efd5b21d4a..2a66e18b82 100644 --- a/test/language/expressions/assignment/destructuring/array-empty-iter-get-err.js +++ b/src/dstr-assignment/array-empty-iter-get-err.case @@ -1,22 +1,26 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Abrupt completion returned from GetIterator +desc: Abrupt completion returned from GetIterator info: | ArrayAssignmentPattern : [ ] 1. Let iterator be GetIterator(value). 2. ReturnIfAbrupt(iterator). features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var iterable = {}; iterable[Symbol.iterator] = function() { throw new Test262Error(); }; - -assert.throws(Test262Error, function() { - [] = iterable; -}); +//- error +Test262Error +//- elems +[] +//- vals +iterable diff --git a/src/dstr-assignment/array-empty-val-array.case b/src/dstr-assignment/array-empty-val-array.case new file mode 100644 index 0000000000..5820b7175b --- /dev/null +++ b/src/dstr-assignment/array-empty-val-array.case @@ -0,0 +1,15 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + An ArrayAssignmentPattern without an AssignmentElementList requires + iterable values. +template: default +es6id: 12.14.5.2 +---*/ + +//- elems +[] +//- vals +[] diff --git a/src/dstr-assignment/array-empty-val-bool.case b/src/dstr-assignment/array-empty-val-bool.case new file mode 100644 index 0000000000..327085e164 --- /dev/null +++ b/src/dstr-assignment/array-empty-val-bool.case @@ -0,0 +1,17 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + An ArrayAssignmentPattern without an AssignmentElementList requires + iterable values and throws for boolean values +template: error +es6id: 12.14.5.2 +---*/ + +//- error +TypeError +//- elems +[] +//- vals +true diff --git a/src/dstr-assignment/array-empty-val-null.case b/src/dstr-assignment/array-empty-val-null.case new file mode 100644 index 0000000000..d42b89aca6 --- /dev/null +++ b/src/dstr-assignment/array-empty-val-null.case @@ -0,0 +1,17 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + An ArrayAssignmentPattern without an AssignmentElementList requires + iterable values and throws for `null`. +template: error +es6id: 12.14.5.2 +---*/ + +//- error +TypeError +//- elems +[] +//- vals +null diff --git a/src/dstr-assignment/array-empty-val-num.case b/src/dstr-assignment/array-empty-val-num.case new file mode 100644 index 0000000000..8adbc65262 --- /dev/null +++ b/src/dstr-assignment/array-empty-val-num.case @@ -0,0 +1,17 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + An ArrayAssignmentPattern without an AssignmentElementList requires + iterable values and throws for number values. +template: error +es6id: 12.14.5.2 +---*/ + +//- error +TypeError +//- elems +[] +//- vals +1 diff --git a/src/dstr-assignment/array-empty-val-string.case b/src/dstr-assignment/array-empty-val-string.case new file mode 100644 index 0000000000..102c9c37ae --- /dev/null +++ b/src/dstr-assignment/array-empty-val-string.case @@ -0,0 +1,15 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + An ArrayAssignmentPattern without an AssignmentElementList requires + iterable values. +template: default +es6id: 12.14.5.2 +---*/ + +//- elems +[] +//- vals +'string literal' diff --git a/src/dstr-assignment/array-empty-val-symbol.case b/src/dstr-assignment/array-empty-val-symbol.case new file mode 100644 index 0000000000..723fc7eed5 --- /dev/null +++ b/src/dstr-assignment/array-empty-val-symbol.case @@ -0,0 +1,19 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + An ArrayAssignmentPattern without an AssignmentElementList requires + iterable values and throws for Symbol values. +template: error +es6id: 12.14.5.2 +---*/ + +//- setup +var s = Symbol(); +//- error +TypeError +//- elems +[] +//- vals +s diff --git a/src/dstr-assignment/array-empty-val-undef.case b/src/dstr-assignment/array-empty-val-undef.case new file mode 100644 index 0000000000..b2af204310 --- /dev/null +++ b/src/dstr-assignment/array-empty-val-undef.case @@ -0,0 +1,17 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + An ArrayAssignmentPattern without an AssignmentElementList requires + iterable values and throws for `undefined`. +template: error +es6id: 12.14.5.2 +---*/ + +//- error +TypeError +//- elems +[] +//- vals +undefined diff --git a/src/dstr-assignment/array-iteration.case b/src/dstr-assignment/array-iteration.case new file mode 100644 index 0000000000..be62fb2729 --- /dev/null +++ b/src/dstr-assignment/array-iteration.case @@ -0,0 +1,27 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + Value iteration only proceeds for the number of elements in the + ArrayAssignmentPattern. +template: default +es6id: 12.14.5.3 +features: [generators] +---*/ + +//- setup +var count = 0; +var g = function*() { + count += 1; + yield; + count += 1; + yield; + count += 1; +} +//- elems +[,,] +//- vals +g() +//- body +assert.sameValue(count, 2); diff --git a/test/language/expressions/assignment/destructuring/array-rest-after-element.js b/src/dstr-assignment/array-rest-after-element.case similarity index 82% rename from test/language/expressions/assignment/destructuring/array-rest-after-element.js rename to src/dstr-assignment/array-rest-after-element.case index 4bfbcb6255..bb80557b08 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-after-element.js +++ b/src/dstr-assignment/array-rest-after-element.case @@ -2,16 +2,20 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > An AssignmentRestElement following an AssignmentElement consumes all remaining iterable values. +template: default es6id: 12.14.5.3 ---*/ +//- setup var x, y; - -[x, ...y] = [1, 2, 3]; - +//- elems +[x, ...y] +//- vals +[1, 2, 3] +//- body assert.sameValue(x, 1); assert.sameValue(y.length, 2); assert.sameValue(y[0], 2); diff --git a/test/language/expressions/assignment/destructuring/array-rest-after-elision.js b/src/dstr-assignment/array-rest-after-elision.case similarity index 81% rename from test/language/expressions/assignment/destructuring/array-rest-after-elision.js rename to src/dstr-assignment/array-rest-after-elision.case index 379683ed0f..48d06d5e14 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-after-elision.js +++ b/src/dstr-assignment/array-rest-after-elision.case @@ -2,16 +2,20 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > An AssignmentRestElement following an elision consumes all remaining iterable values. +template: default es6id: 12.14.5.3 ---*/ +//- setup var x; - -[, ...x] = [1, 2, 3]; - +//- elems +[, ...x] +//- vals +[1, 2, 3] +//- body assert.sameValue(x.length, 2); assert.sameValue(x[0], 2); assert.sameValue(x[1], 3); diff --git a/test/language/expressions/assignment/destructuring/array-rest-before-element.js b/src/dstr-assignment/array-rest-before-element.case similarity index 83% rename from test/language/expressions/assignment/destructuring/array-rest-before-element.js rename to src/dstr-assignment/array-rest-before-element.case index 8c53b9b655..fda8d7721f 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-before-element.js +++ b/src/dstr-assignment/array-rest-before-element.case @@ -2,13 +2,15 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > An AssignmentElement may not follow an AssignmentRestElement in an AssignmentElementList. +template: syntax es6id: 12.14.5 negative: SyntaxError ---*/ -var x, y; - -[...x, y] = []; +//- elems +[...x, y] +//- vals +[] diff --git a/test/language/expressions/assignment/destructuring/array-rest-before-elision.js b/src/dstr-assignment/array-rest-before-elision.case similarity index 83% rename from test/language/expressions/assignment/destructuring/array-rest-before-elision.js rename to src/dstr-assignment/array-rest-before-elision.case index 6480747165..501f9ac1e6 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-before-elision.js +++ b/src/dstr-assignment/array-rest-before-elision.case @@ -2,13 +2,15 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > An elision may not follow an AssignmentRestElement in an AssignmentElementList. +template: syntax es6id: 12.14.5 negative: SyntaxError ---*/ -var x; - -[...x,] = []; +//- elems +[...x,] +//- vals +[] diff --git a/test/language/expressions/assignment/destructuring/array-rest-before-rest.js b/src/dstr-assignment/array-rest-before-rest.case similarity index 83% rename from test/language/expressions/assignment/destructuring/array-rest-before-rest.js rename to src/dstr-assignment/array-rest-before-rest.case index 207cb39ba8..a86de5f458 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-before-rest.js +++ b/src/dstr-assignment/array-rest-before-rest.case @@ -2,13 +2,15 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > An AssignmentRestElement may not follow another AssignmentRestElement in an AssignmentElementList. +template: syntax es6id: 12.14.5 negative: SyntaxError ---*/ -var x, y; - -[...x, ...y] = []; +//- elems +[...x, ...y] +//- vals +[] diff --git a/test/language/expressions/assignment/destructuring/array-rest-elision-invalid.js b/src/dstr-assignment/array-rest-elision-invalid.case similarity index 84% rename from test/language/expressions/assignment/destructuring/array-rest-elision-invalid.js rename to src/dstr-assignment/array-rest-elision-invalid.case index e26ebff599..f002f7169a 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-elision-invalid.js +++ b/src/dstr-assignment/array-rest-elision-invalid.case @@ -2,11 +2,15 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > ArrayAssignmentPattern may not include elisions following an AssignmentRestElement in a AssignmentElementList. +template: syntax es6id: 12.14.5 negative: SyntaxError ---*/ -[...x,] = []; +//- elems +[...x,] +//- vals +[] diff --git a/test/language/expressions/assignment/destructuring/array-rest-elision-iter-abpt.js b/src/dstr-assignment/array-rest-elision-iter-abpt.case similarity index 91% rename from test/language/expressions/assignment/destructuring/array-rest-elision-iter-abpt.js rename to src/dstr-assignment/array-rest-elision-iter-abpt.case index 367cc892fe..a84bab56fd 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-elision-iter-abpt.js +++ b/src/dstr-assignment/array-rest-elision-iter-abpt.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is not called when assignment evaluation produces an abrupt completion info: | @@ -17,10 +17,12 @@ info: | IteratorClose(iterator, status). ii. Return Completion(status). features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var iterable = {}; @@ -37,10 +39,12 @@ iterable[Symbol.iterator] = function() { return iterator; }; var x; - -assert.throws(Test262Error, function() { - [ , ...x] = iterable; -}); - +//- error +Test262Error +//- elems +[ , ...x] +//- vals +iterable +//- teardown assert.sameValue(nextCount, 1); assert.sameValue(returnCount, 0); diff --git a/test/language/expressions/assignment/destructuring/array-rest-elision.js b/src/dstr-assignment/array-rest-elision.case similarity index 76% rename from test/language/expressions/assignment/destructuring/array-rest-elision.js rename to src/dstr-assignment/array-rest-elision.case index 4a0bc1cc61..09a814007e 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-elision.js +++ b/src/dstr-assignment/array-rest-elision.case @@ -2,19 +2,20 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > ArrayAssignmentPattern may include elisions at any position preceeding a AssignmentRestElement in a AssignmentElementList. +template: default es6id: 12.14.5 ---*/ -var value = [1, 2, 3, 4, 5, 6]; +//- setup var x, y; -var result; - -result = [, , x, , ...y] = value; - -assert.sameValue(result, value); +//- elems +[, , x, , ...y] +//- vals +[1, 2, 3, 4, 5, 6] +//- body assert.sameValue(x, 3); assert.sameValue(y.length, 2); assert.sameValue(y[0], 5); diff --git a/test/language/expressions/assignment/destructuring/array-rest-init.js b/src/dstr-assignment/array-rest-init.case similarity index 79% rename from test/language/expressions/assignment/destructuring/array-rest-init.js rename to src/dstr-assignment/array-rest-init.case index 2fbe698d94..02c329e209 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-init.js +++ b/src/dstr-assignment/array-rest-init.case @@ -2,12 +2,16 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > The AssignmentRestElement does not support an initializer. +template: syntax es6id: 12.14.5 negative: SyntaxError ---*/ +//- setup var x; - -[...x = 1] = []; +//- elems +[...x = 1] +//- vals +[] diff --git a/test/language/expressions/assignment/destructuring/array-rest-iter-get-err.js b/src/dstr-assignment/array-rest-iter-get-err.case similarity index 79% rename from test/language/expressions/assignment/destructuring/array-rest-iter-get-err.js rename to src/dstr-assignment/array-rest-iter-get-err.case index 6cf2f2d45e..7693c779db 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-iter-get-err.js +++ b/src/dstr-assignment/array-rest-iter-get-err.case @@ -1,23 +1,27 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Abrupt completion returned from GetIterator +desc: Abrupt completion returned from GetIterator info: | ArrayAssignmentPattern : [ Elisionopt AssignmentRestElement ] 1. Let iterator be GetIterator(value). 2. ReturnIfAbrupt(iterator). features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var iterable = {}; var x; iterable[Symbol.iterator] = function() { throw new Test262Error(); }; - -assert.throws(Test262Error, function() { - [...x] = iterable; -}); +//- error +Test262Error +//- elems +[...x] +//- vals +iterable diff --git a/test/language/expressions/assignment/destructuring/array-rest-iter-nrml-close-skip.js b/src/dstr-assignment/array-rest-iter-nrml-close-skip.case similarity index 92% rename from test/language/expressions/assignment/destructuring/array-rest-iter-nrml-close-skip.js rename to src/dstr-assignment/array-rest-iter-nrml-close-skip.case index 5bb22af60b..627731aa60 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-iter-nrml-close-skip.js +++ b/src/dstr-assignment/array-rest-iter-nrml-close-skip.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is not called when assignment evaluation has exhausted the iterator info: | @@ -15,10 +15,12 @@ info: | result). 7. Return result. features: [Symbol.iterator] +template: default es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var x; @@ -35,8 +37,10 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -[ ...x ] = iterable; - +//- elems +[ ...x ] +//- vals +iterable +//- body assert.sameValue(nextCount, 1); assert.sameValue(returnCount, 0); diff --git a/test/language/expressions/assignment/destructuring/array-rest-iter-rtrn-close-err.js b/src/dstr-assignment/array-rest-iter-rtrn-close-err.case similarity index 93% rename from test/language/expressions/assignment/destructuring/array-rest-iter-rtrn-close-err.js rename to src/dstr-assignment/array-rest-iter-rtrn-close-err.case index b86607956f..aaeb47a8dd 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-iter-rtrn-close-err.js +++ b/src/dstr-assignment/array-rest-iter-rtrn-close-err.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is called when reference evaluation produces a "return" completion info: | @@ -28,10 +28,12 @@ info: | 7. If completion.[[type]] is throw, return Completion(completion). 8. If innerResult.[[type]] is throw, return Completion(innerResult). features: [Symbol.iterator, generators] +template: default es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var returnCount = 0; var unreachable = 0; function ReturnError() {} @@ -49,8 +51,13 @@ iterable[Symbol.iterator] = function() { }; function* g() { - [...{}[yield]] = iterable; - unreachable += 1; +//- elems +[...{}[yield]] +//- vals +iterable +//- body +unreachable += 1; +//- teardown } iter = g(); diff --git a/test/language/expressions/assignment/destructuring/array-rest-iter-rtrn-close-null.js b/src/dstr-assignment/array-rest-iter-rtrn-close-null.case similarity index 94% rename from test/language/expressions/assignment/destructuring/array-rest-iter-rtrn-close-null.js rename to src/dstr-assignment/array-rest-iter-rtrn-close-null.case index 4b37e9f599..f911aea3f8 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-iter-rtrn-close-null.js +++ b/src/dstr-assignment/array-rest-iter-rtrn-close-null.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose throws a TypeError when `return` returns a non-Object value info: | ArrayAssignmentPattern : [ Elisionopt AssignmentRestElement ] @@ -33,10 +33,12 @@ info: | 7. If completion.[[type]] is throw, return Completion(completion). 8. If innerResult.[[type]] is throw, return Completion(innerResult). features: [Symbol.iterator, generators] +template: default es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var iterable = {}; var iterator = { return: function() { @@ -49,7 +51,11 @@ iterable[Symbol.iterator] = function() { }; function* g() { - [...{}[yield]] = iterable; +//- elems +[...{}[yield]] +//- vals +iterable +//- teardown } iter = g(); diff --git a/test/language/expressions/assignment/destructuring/array-rest-iter-rtrn-close.js b/src/dstr-assignment/array-rest-iter-rtrn-close.case similarity index 94% rename from test/language/expressions/assignment/destructuring/array-rest-iter-rtrn-close.js rename to src/dstr-assignment/array-rest-iter-rtrn-close.case index da30120406..35366c2aa2 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-iter-rtrn-close.js +++ b/src/dstr-assignment/array-rest-iter-rtrn-close.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is called when reference evaluation produces a "return" completion info: | @@ -34,10 +34,12 @@ info: | 7. If completion.[[type]] is throw, return Completion(completion). 8. If innerResult.[[type]] is throw, return Completion(innerResult). features: [Symbol.iterator, generators] +template: default es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var returnCount = 0; var unreachable = 0; var thisValue = null; @@ -57,8 +59,13 @@ iterable[Symbol.iterator] = function() { }; function* g() { - [...{}[yield]] = iterable; - unreachable += 1; +//- elems +[...{}[yield]] +//- vals +iterable +//- body +unreachable += 1; +//- teardown } iter = g(); diff --git a/test/language/expressions/assignment/destructuring/array-rest-iter-thrw-close-err.js b/src/dstr-assignment/array-rest-iter-thrw-close-err.case similarity index 93% rename from test/language/expressions/assignment/destructuring/array-rest-iter-thrw-close-err.js rename to src/dstr-assignment/array-rest-iter-thrw-close-err.case index f39a146523..4c98fb20f5 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-iter-thrw-close-err.js +++ b/src/dstr-assignment/array-rest-iter-thrw-close-err.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is called when reference evaluation produces a "throw" completion info: | @@ -21,10 +21,12 @@ info: | a. Let lref be the result of evaluating DestructuringAssignmentTarget. b. ReturnIfAbrupt(lref). features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var x; @@ -51,9 +53,12 @@ iterable[Symbol.iterator] = function() { return iterator; }; -assert.throws(Test262Error, function() { - [...{}[thrower()]] = iterable; -}); - +//- error +Test262Error +//- elems +[...{}[thrower()]] +//- vals +iterable +//- teardown assert.sameValue(nextCount, 0); assert.sameValue(returnCount, 1); diff --git a/test/language/expressions/assignment/destructuring/array-rest-iter-thrw-close-skip.js b/src/dstr-assignment/array-rest-iter-thrw-close-skip.case similarity index 90% rename from test/language/expressions/assignment/destructuring/array-rest-iter-thrw-close-skip.js rename to src/dstr-assignment/array-rest-iter-thrw-close-skip.case index 84a4cac820..d95493775c 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-iter-thrw-close-skip.js +++ b/src/dstr-assignment/array-rest-iter-thrw-close-skip.case @@ -1,6 +1,6 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is not called when iteration produces an abrupt completion info: | ArrayAssignmentPattern : [ Elisionopt AssignmentRestElement ] @@ -12,10 +12,12 @@ info: | 6. If iteratorRecord.[[done]] is false, return IteratorClose(iterator, result). features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var x; @@ -32,10 +34,12 @@ var iterator = { iterable[Symbol.iterator] = function() { return iterator; }; - -assert.throws(Test262Error, function() { - [...x] = iterable; -}); - +//- error +Test262Error +//- elems +[...x] +//- vals +iterable +//- teardown assert.sameValue(nextCount, 1); assert.sameValue(returnCount, 0); diff --git a/test/language/expressions/assignment/destructuring/array-rest-iter-thrw-close.js b/src/dstr-assignment/array-rest-iter-thrw-close.case similarity index 94% rename from test/language/expressions/assignment/destructuring/array-rest-iter-thrw-close.js rename to src/dstr-assignment/array-rest-iter-thrw-close.case index 8e5b4e634c..3028c1afe0 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-iter-thrw-close.js +++ b/src/dstr-assignment/array-rest-iter-thrw-close.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is called when reference evaluation produces a "throw" completion info: | @@ -27,10 +27,12 @@ info: | 6. Let innerResult be Call(return, iterator, « »). [...] features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var thisValue = null; @@ -56,11 +58,13 @@ var thrower = function() { iterable[Symbol.iterator] = function() { return iterator; }; - -assert.throws(Test262Error, function() { - [...{}[thrower()]] = iterable; -}); - +//- error +Test262Error +//- elems +[...{}[thrower()]] +//- vals +iterable +//- teardown assert.sameValue(nextCount, 0); assert.sameValue(returnCount, 1); assert.sameValue(thisValue, iterator, 'correct `this` value'); diff --git a/test/language/expressions/assignment/destructuring/array-rest-iteration.js b/src/dstr-assignment/array-rest-iteration.case similarity index 79% rename from test/language/expressions/assignment/destructuring/array-rest-iteration.js rename to src/dstr-assignment/array-rest-iteration.case index 735ee9914e..8f1a8d2d30 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-iteration.js +++ b/src/dstr-assignment/array-rest-iteration.case @@ -2,13 +2,15 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > In the presense of an AssignmentRestElement, value iteration exhausts the iterable value; +template: default es6id: 12.14.5.3 features: [generators] ---*/ +//- setup var count = 0; var g = function*() { count += 1; @@ -17,10 +19,10 @@ var g = function*() { yield; count += 1; } -var iter, result, x; - -iter = g(); -result = [...x] = iter; - -assert.sameValue(result, iter); +var x; +//- elems +[...x] +//- vals +g() +//- body assert.sameValue(count, 3); diff --git a/test/language/expressions/assignment/destructuring/array-rest-lref-err.js b/src/dstr-assignment/array-rest-lref-err.case similarity index 92% rename from test/language/expressions/assignment/destructuring/array-rest-lref-err.js rename to src/dstr-assignment/array-rest-lref-err.case index 2a083bdcee..56f4712052 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-lref-err.js +++ b/src/dstr-assignment/array-rest-lref-err.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is called when reference evaluation produces an abrupt completion info: | @@ -21,10 +21,12 @@ info: | a. Let lref be the result of evaluating DestructuringAssignmentTarget. b. ReturnIfAbrupt(lref). features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var iterable = {}; @@ -43,10 +45,12 @@ var thrower = function() { iterable[Symbol.iterator] = function() { return iterator; }; - -assert.throws(Test262Error, function() { - [...{}[thrower()]] = iterable; -}); - +//- error +Test262Error +//- elems +[...{}[thrower()]] +//- vals +iterable +//- teardown assert.sameValue(nextCount, 0); assert.sameValue(returnCount, 1); diff --git a/test/language/expressions/assignment/destructuring/array-rest-lref.js b/src/dstr-assignment/array-rest-lref.case similarity index 90% rename from test/language/expressions/assignment/destructuring/array-rest-lref.js rename to src/dstr-assignment/array-rest-lref.case index 68161c48e8..b16315041c 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-lref.js +++ b/src/dstr-assignment/array-rest-lref.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Reference is evaluated during assignment +desc: Reference is evaluated during assignment info: | ArrayAssignmentPattern : [ Elisionopt AssignmentRestElement ] @@ -20,10 +20,12 @@ info: | b. ReturnIfAbrupt(lref). [...] features: [Symbol.iterator] +template: default es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var iterable = {}; @@ -40,9 +42,11 @@ var obj = {}; iterable[Symbol.iterator] = function() { return iterator; }; - -[...obj['a' + 'b']] = iterable; - +//- elems +[...obj['a' + 'b']] +//- vals +iterable +//- body assert.sameValue(nextCount, 1); assert.sameValue(returnCount, 0); assert(!!obj.ab); diff --git a/test/language/expressions/assignment/destructuring/array-elem-nested-obj-invalid.js b/src/dstr-assignment/array-rest-nested-array-invalid.case similarity index 87% rename from test/language/expressions/assignment/destructuring/array-elem-nested-obj-invalid.js rename to src/dstr-assignment/array-rest-nested-array-invalid.case index 1f771e07ad..08eff54e22 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-nested-obj-invalid.js +++ b/src/dstr-assignment/array-rest-nested-array-invalid.case @@ -2,13 +2,17 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > 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. +template: syntax es6id: 12.14.5.1 negative: SyntaxError ---*/ -[{ get x() {} }] = [{}]; +//- elems +[...[(x, y)]] +//- vals +[[]] diff --git a/test/language/expressions/assignment/destructuring/array-rest-nested-array-iter-thrw-close-skip.js b/src/dstr-assignment/array-rest-nested-array-iter-thrw-close-skip.case similarity index 92% rename from test/language/expressions/assignment/destructuring/array-rest-nested-array-iter-thrw-close-skip.js rename to src/dstr-assignment/array-rest-nested-array-iter-thrw-close-skip.case index 8d5749624b..c569539803 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-nested-array-iter-thrw-close-skip.js +++ b/src/dstr-assignment/array-rest-nested-array-iter-thrw-close-skip.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is not called when nested array pattern evaluation produces an abrupt completion info: | @@ -24,10 +24,12 @@ info: | 7. Return the result of performing DestructuringAssignmentEvaluation of nestedAssignmentPattern with A as the argument. features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var iterable = {}; @@ -46,10 +48,12 @@ var thrower = function() { iterable[Symbol.iterator] = function() { return iterator; }; - -assert.throws(Test262Error, function() { - [...[...{}[thrower()]]] = iterable; -}); - +//- error +Test262Error +//- elems +[...[...{}[thrower()]]] +//- vals +iterable +//- teardown assert.sameValue(nextCount, 1); assert.sameValue(returnCount, 0); diff --git a/test/language/expressions/assignment/destructuring/array-rest-nested-array-null.js b/src/dstr-assignment/array-rest-nested-array-null.case similarity index 79% rename from test/language/expressions/assignment/destructuring/array-rest-nested-array-null.js rename to src/dstr-assignment/array-rest-nested-array-null.case index 73e2a81420..9b68c38f65 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-nested-array-null.js +++ b/src/dstr-assignment/array-rest-nested-array-null.case @@ -2,18 +2,20 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an array literal and the iterable emits `null` as the only value, an array with a single `null` element should be used as the value of the nested DestructuringAssignment. +template: default es6id: 12.14.5.3 ---*/ -var value = [null]; -var result, x, y; - -result = [...[x, y]] = value; - -assert.sameValue(result, value); +//- setup +var x, y; +//- elems +[...[x, y]] +//- vals +[null] +//- body assert.sameValue(x, null); assert.sameValue(y, undefined); diff --git a/test/language/expressions/assignment/destructuring/array-rest-nested-array-undefined-hole.js b/src/dstr-assignment/array-rest-nested-array-undefined-hole.case similarity index 79% rename from test/language/expressions/assignment/destructuring/array-rest-nested-array-undefined-hole.js rename to src/dstr-assignment/array-rest-nested-array-undefined-hole.case index a01b0b84eb..0b4566e8b4 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-nested-array-undefined-hole.js +++ b/src/dstr-assignment/array-rest-nested-array-undefined-hole.case @@ -2,17 +2,19 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an array literal and the iterable is an array with a "hole", an array with a single `undefined` element should be used as the value of the nested DestructuringAssignment. +template: default es6id: 12.14.5.3 ---*/ -var value = [ , ]; -var result, x; - -result = [...[x]] = value; - -assert.sameValue(result, value); +//- setup +var x = null; +//- elems +[...[x]] +//- vals +[ , ] +//- body assert.sameValue(x, undefined); diff --git a/test/language/expressions/assignment/destructuring/array-rest-nested-array-undefined-own.js b/src/dstr-assignment/array-rest-nested-array-undefined-own.case similarity index 78% rename from test/language/expressions/assignment/destructuring/array-rest-nested-array-undefined-own.js rename to src/dstr-assignment/array-rest-nested-array-undefined-own.case index 1ba0a502fb..5da0f9982f 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-nested-array-undefined-own.js +++ b/src/dstr-assignment/array-rest-nested-array-undefined-own.case @@ -2,17 +2,19 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an array literal and the iterable emits `undefined` as the only value, an array with a single `undefined` element should be used as the value of the nested DestructuringAssignment. +template: default es6id: 12.14.5.3 ---*/ -var value = [undefined]; -var result, x; - -result = [...[x]] = value; - -assert.sameValue(result, value); +//- setup +var x = null; +//- elems +[...[x]] +//- vals +[undefined] +//- body assert.sameValue(x, undefined); diff --git a/test/language/expressions/assignment/destructuring/array-rest-nested-array-undefined.js b/src/dstr-assignment/array-rest-nested-array-undefined.case similarity index 78% rename from test/language/expressions/assignment/destructuring/array-rest-nested-array-undefined.js rename to src/dstr-assignment/array-rest-nested-array-undefined.case index d8c743a03b..b4662b2b43 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-nested-array-undefined.js +++ b/src/dstr-assignment/array-rest-nested-array-undefined.case @@ -2,17 +2,19 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an array literal and the iterable is emits no values, an empty array should be used as the value of the nested DestructuringAssignment. +template: default es6id: 12.14.5.3 ---*/ -var value = []; -var result, x; - -result = [...[x]] = value; - -assert.sameValue(result, value); +//- setup +var x = null; +//- elems +[...[x]] +//- vals +[] +//- body assert.sameValue(x, undefined); diff --git a/test/language/expressions/assignment/destructuring/array-rest-nested-array-yield-expr.js b/src/dstr-assignment/array-rest-nested-array-yield-expr.case similarity index 79% rename from test/language/expressions/assignment/destructuring/array-rest-nested-array-yield-expr.js rename to src/dstr-assignment/array-rest-nested-array-yield-expr.case index 89578a84a5..75b97caf06 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-nested-array-yield-expr.js +++ b/src/dstr-assignment/array-rest-nested-array-yield-expr.case @@ -2,32 +2,36 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the DestructuringAssignmentTarget of a nested destructuring assignment and within a generator function body, it should behave as a YieldExpression. +template: default es6id: 12.14.5.3 features: [generators] ---*/ +//- setup var value = [86]; var x = {}; -var assignmentResult, iterationResult, iter; +var iterationResult, iter; iter = (function*() { - assignmentResult = [...[x[yield]]] = value; +//- elems +[...[x[yield]]] +//- vals +[86] +//- teardown }()); iterationResult = iter.next(); -assert.sameValue(assignmentResult, undefined); assert.sameValue(iterationResult.value, undefined); assert.sameValue(iterationResult.done, false); assert.sameValue(x.prop, undefined); iterationResult = iter.next('prop'); -assert.sameValue(assignmentResult, value); assert.sameValue(iterationResult.value, undefined); assert.sameValue(iterationResult.done, true); assert.sameValue(x.prop, 86); diff --git a/test/language/expressions/assignment/destructuring/array-rest-nested-array-yield-ident-invalid.js b/src/dstr-assignment/array-rest-nested-array-yield-ident-invalid.case similarity index 86% rename from test/language/expressions/assignment/destructuring/array-rest-nested-array-yield-ident-invalid.js rename to src/dstr-assignment/array-rest-nested-array-yield-ident-invalid.case index dc34b696e8..995a7f9ff3 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-nested-array-yield-ident-invalid.js +++ b/src/dstr-assignment/array-rest-nested-array-yield-ident-invalid.case @@ -2,14 +2,17 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > 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. +template: syntax es6id: 12.14.5.3 flags: [onlyStrict] negative: SyntaxError ---*/ -var x; -[...[x[yield]]] = []; +//- elems +[...[x[yield]]] +//- vals +[] diff --git a/test/language/expressions/assignment/destructuring/array-rest-nested-array-yield-ident-valid.js b/src/dstr-assignment/array-rest-nested-array-yield-ident-valid.case similarity index 79% rename from test/language/expressions/assignment/destructuring/array-rest-nested-array-yield-ident-valid.js rename to src/dstr-assignment/array-rest-nested-array-yield-ident-valid.case index d60b4ccd11..fd5eff61d8 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-nested-array-yield-ident-valid.js +++ b/src/dstr-assignment/array-rest-nested-array-yield-ident-valid.case @@ -2,20 +2,21 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > 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. +template: default es6id: 12.14.5.3 flags: [noStrict] ---*/ -var value = [86]; +//- setup var yield = 'prop'; var x = {}; -var result; - -result = [...[x[yield]]] = value; - -assert.sameValue(result, value); +//- elems +[...[x[yield]]] +//- vals +[86] +//- body assert.sameValue(x.prop, 86); diff --git a/test/language/expressions/assignment/destructuring/array-rest-nested-array.js b/src/dstr-assignment/array-rest-nested-array.case similarity index 76% rename from test/language/expressions/assignment/destructuring/array-rest-nested-array.js rename to src/dstr-assignment/array-rest-nested-array.case index fd77214f42..7f6f6562ac 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-nested-array.js +++ b/src/dstr-assignment/array-rest-nested-array.case @@ -2,17 +2,19 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an array literal, it should be parsed parsed as a DestructuringAssignmentPattern and evaluated as a destructuring assignment. +template: default es6id: 12.14.5.3 ---*/ -var value = [1, 2, 3]; -var x, result; - -result = [...[x]] = value; - -assert.sameValue(result, value); +//- setup +var x; +//- elems +[...[x]] +//- vals +[1, 2, 3] +//- body assert.sameValue(x, 1); diff --git a/test/language/expressions/assignment/destructuring/array-rest-nested-obj-invalid.js b/src/dstr-assignment/array-rest-nested-obj-invalid.case similarity index 86% rename from test/language/expressions/assignment/destructuring/array-rest-nested-obj-invalid.js rename to src/dstr-assignment/array-rest-nested-obj-invalid.case index 35d467839d..ee38be20ea 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-nested-obj-invalid.js +++ b/src/dstr-assignment/array-rest-nested-obj-invalid.case @@ -2,13 +2,17 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > 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. +template: syntax es6id: 12.14.5.1 negative: SyntaxError ---*/ -[...{ get x() {} }] = [[]]; +//- elems +[...{ get x() {} }] +//- vals +[[]] diff --git a/test/language/expressions/assignment/destructuring/array-rest-nested-obj-null.js b/src/dstr-assignment/array-rest-nested-obj-null.case similarity index 77% rename from test/language/expressions/assignment/destructuring/array-rest-nested-obj-null.js rename to src/dstr-assignment/array-rest-nested-obj-null.case index b5efac41ca..4c4eb45c20 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-nested-obj-null.js +++ b/src/dstr-assignment/array-rest-nested-obj-null.case @@ -2,18 +2,20 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an object literal and the iterable emits `null` as the only value, an array with a single `null` element should be used as the value of the nested DestructuringAssignment. +template: default es6id: 12.14.5.3 ---*/ -var value = [null]; -var result, x, length; - -result = [...{ 0: x, length }] = value; - -assert.sameValue(result, value); +//- setup +var x, length; +//- elems +[...{ 0: x, length }] +//- vals +[null] +//- body assert.sameValue(x, null); assert.sameValue(length, 1); diff --git a/test/language/expressions/assignment/destructuring/array-rest-nested-obj-undefined-hole.js b/src/dstr-assignment/array-rest-nested-obj-undefined-hole.case similarity index 77% rename from test/language/expressions/assignment/destructuring/array-rest-nested-obj-undefined-hole.js rename to src/dstr-assignment/array-rest-nested-obj-undefined-hole.case index e01715a39e..54b078e8ca 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-nested-obj-undefined-hole.js +++ b/src/dstr-assignment/array-rest-nested-obj-undefined-hole.case @@ -2,18 +2,21 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an array literal and the iterable is an array with a "hole", an array with a single `undefined` element should be used as the value of the nested DestructuringAssignment. +template: default es6id: 12.14.5.3 ---*/ -var value = [ , ]; -var result, x, length; - -result = [...{ 0: x, length }] = value; - -assert.sameValue(result, value); +//- setup +var x = null; +var length; +//- elems +[...{ 0: x, length }] +//- vals +[ , ] +//- body assert.sameValue(x, undefined); assert.sameValue(length, 1); diff --git a/test/language/expressions/assignment/destructuring/array-rest-nested-obj-undefined-own.js b/src/dstr-assignment/array-rest-nested-obj-undefined-own.case similarity index 76% rename from test/language/expressions/assignment/destructuring/array-rest-nested-obj-undefined-own.js rename to src/dstr-assignment/array-rest-nested-obj-undefined-own.case index 70735f34ff..2a6aa15f00 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-nested-obj-undefined-own.js +++ b/src/dstr-assignment/array-rest-nested-obj-undefined-own.case @@ -2,18 +2,21 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an array literal and the iterable emits `undefined` as the only value, an array with a single `undefined` element should be used as the value of the nested DestructuringAssignment. +template: default es6id: 12.14.5.3 ---*/ -var value = [undefined]; -var result, x, length; - -result = [...{ 0: x, length }] = value; - -assert.sameValue(result, value); +//- setup +var x = null; +var length; +//- elems +[...{ 0: x, length }] +//- vals +[undefined] +//- body assert.sameValue(x, undefined); assert.sameValue(length, 1); diff --git a/test/language/expressions/assignment/destructuring/array-rest-nested-obj-undefined.js b/src/dstr-assignment/array-rest-nested-obj-undefined.case similarity index 76% rename from test/language/expressions/assignment/destructuring/array-rest-nested-obj-undefined.js rename to src/dstr-assignment/array-rest-nested-obj-undefined.case index 53425d44f8..200ab543d6 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-nested-obj-undefined.js +++ b/src/dstr-assignment/array-rest-nested-obj-undefined.case @@ -2,18 +2,21 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an obect literal and the iterable is emits no values, an empty array should be used as the value of the nested DestructuringAssignment. +template: default es6id: 12.14.5.3 ---*/ -var value = []; -var result, x, length; - -result = [...{ 0: x, length }] = value; - -assert.sameValue(result, value); +//- setup +var x = null; +var length; +//- elems +[...{ 0: x, length }] +//- vals +[] +//- body assert.sameValue(x, undefined); assert.sameValue(length, 0); diff --git a/test/language/expressions/assignment/destructuring/array-rest-nested-obj-yield-expr.js b/src/dstr-assignment/array-rest-nested-obj-yield-expr.case similarity index 76% rename from test/language/expressions/assignment/destructuring/array-rest-nested-obj-yield-expr.js rename to src/dstr-assignment/array-rest-nested-obj-yield-expr.case index 0daf86e0c2..c867b58cc3 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-nested-obj-yield-expr.js +++ b/src/dstr-assignment/array-rest-nested-obj-yield-expr.case @@ -2,31 +2,34 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the Initializer of a nested destructuring assignment and within a generator function body, it should behave as a YieldExpression. +template: default es6id: 12.14.5.3 features: [generators] ---*/ -var value = [{}]; -var assignmentResult, iterationResult, iter, x; +//- setup +var iterationResult, iter, x; iter = (function*() { - assignmentResult = [...{ x = yield }] = value; +//- elems +[...{ x = yield }] +//- vals +[{}] +//- teardown }()); iterationResult = iter.next(); -assert.sameValue(assignmentResult, undefined); assert.sameValue(iterationResult.value, undefined); assert.sameValue(iterationResult.done, false); assert.sameValue(x, undefined); iterationResult = iter.next(4); -assert.sameValue(assignmentResult, value); assert.sameValue(iterationResult.value, undefined); assert.sameValue(iterationResult.done, true); assert.sameValue(x, 4); diff --git a/test/language/expressions/assignment/destructuring/array-rest-nested-obj-yield-ident-invalid.js b/src/dstr-assignment/array-rest-nested-obj-yield-ident-invalid.case similarity index 85% rename from test/language/expressions/assignment/destructuring/array-rest-nested-obj-yield-ident-invalid.js rename to src/dstr-assignment/array-rest-nested-obj-yield-ident-invalid.case index ebb79b4314..9759c626ca 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-nested-obj-yield-ident-invalid.js +++ b/src/dstr-assignment/array-rest-nested-obj-yield-ident-invalid.case @@ -2,14 +2,17 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > 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. +template: syntax es6id: 12.14.5.3 flags: [onlyStrict] negative: SyntaxError ---*/ -var value = [{}]; -[...{ x = yield }] = value; +//- elems +[...{ x = yield }] +//- vals +[{}] diff --git a/test/language/expressions/assignment/destructuring/array-rest-nested-obj-yield-ident-valid.js b/src/dstr-assignment/array-rest-nested-obj-yield-ident-valid.case similarity index 74% rename from test/language/expressions/assignment/destructuring/array-rest-nested-obj-yield-ident-valid.js rename to src/dstr-assignment/array-rest-nested-obj-yield-ident-valid.case index b220b0dd54..2d67dd4514 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-nested-obj-yield-ident-valid.js +++ b/src/dstr-assignment/array-rest-nested-obj-yield-ident-valid.case @@ -2,19 +2,21 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > 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. +template: default es6id: 12.14.5.3 flags: [noStrict] ---*/ -var value = [{}]; +//- setup var yield = 2; -var result, iterationResult, iter, x; - -result = [...{ x = yield }] = value; - -assert.sameValue(result, value); +var x; +//- elems +[...{ x = yield }] +//- vals +[{}] +//- body assert.sameValue(x, 2); diff --git a/test/language/expressions/assignment/destructuring/array-rest-nested-obj.js b/src/dstr-assignment/array-rest-nested-obj.case similarity index 75% rename from test/language/expressions/assignment/destructuring/array-rest-nested-obj.js rename to src/dstr-assignment/array-rest-nested-obj.case index f5812ba5f0..f3ac3e7ab9 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-nested-obj.js +++ b/src/dstr-assignment/array-rest-nested-obj.case @@ -2,17 +2,19 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an object literal, it should be parsed as a DestructuringAssignmentPattern and evaluated as a destructuring assignment. +template: default es6id: 12.14.5.3 ---*/ -var value = [1, 2, 3]; -var result, x; - -result = [...{ 1: x }] = value; - -assert.sameValue(result, value); +//- setup +var x; +//- elems +[...{ 1: x }] +//- vals +[1, 2, 3] +//- body assert.sameValue(x, 2); diff --git a/test/language/expressions/assignment/destructuring/array-rest-put-const.js b/src/dstr-assignment/array-rest-put-const.case similarity index 75% rename from test/language/expressions/assignment/destructuring/array-rest-put-const.js rename to src/dstr-assignment/array-rest-put-const.case index 96bf0d9e8a..67eb6eda54 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-put-const.js +++ b/src/dstr-assignment/array-rest-put-const.case @@ -2,14 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > The assignment target should obey `const` semantics. +template: error es6id: 12.14.5.3 features: [const] ---*/ +//- setup const c = null; - -assert.throws(TypeError, function() { - [ ...c ] = [1]; -}); +//- error +TypeError +//- elems +[ ...c ] +//- vals +[1] diff --git a/test/language/expressions/assignment/destructuring/array-elem-put-let.js b/src/dstr-assignment/array-rest-put-let.case similarity index 70% rename from test/language/expressions/assignment/destructuring/array-elem-put-let.js rename to src/dstr-assignment/array-rest-put-let.case index 018d8b1a6e..9cc0cff482 100644 --- a/test/language/expressions/assignment/destructuring/array-elem-put-let.js +++ b/src/dstr-assignment/array-rest-put-let.case @@ -2,14 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > The assignment target should obey `let` semantics. +template: error es6id: 12.14.5.3 features: [let] ---*/ -assert.throws(ReferenceError, function() { - 'use strict'; - [ x ] = []; - let x; -}); +//- error +ReferenceError +//- elems +[ ...x ] +//- vals +[] +//- teardown +let x; diff --git a/test/language/expressions/assignment/destructuring/array-rest-put-prop-ref-no-get.js b/src/dstr-assignment/array-rest-put-prop-ref-no-get.case similarity index 80% rename from test/language/expressions/assignment/destructuring/array-rest-put-prop-ref-no-get.js rename to src/dstr-assignment/array-rest-put-prop-ref-no-get.case index d57bf425f3..1adb2c2e07 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-put-prop-ref-no-get.js +++ b/src/dstr-assignment/array-rest-put-prop-ref-no-get.case @@ -2,15 +2,16 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > If the DestructuringAssignmentTarget of an AssignmentElement is a PropertyReference, it should not be evaluated. +template: default es6id: 12.14.5.3 ---*/ -var value = [23, 45, 99]; -var x, setValue, result; -x = { +//- setup +var setValue; +var x = { get y() { $ERROR('The property should not be accessed.'); }, @@ -18,10 +19,11 @@ x = { setValue = val; } }; - -result = [...x.y] = value; - -assert.sameValue(result, value); +//- elems +[...x.y] +//- vals +[23, 45, 99] +//- body assert.sameValue(setValue.length, 3); assert.sameValue(setValue[0], 23); assert.sameValue(setValue[1], 45); diff --git a/test/language/expressions/assignment/destructuring/array-rest-put-prop-ref-user-err-iter-close-skip.js b/src/dstr-assignment/array-rest-put-prop-ref-user-err-iter-close-skip.case similarity index 92% rename from test/language/expressions/assignment/destructuring/array-rest-put-prop-ref-user-err-iter-close-skip.js rename to src/dstr-assignment/array-rest-put-prop-ref-user-err-iter-close-skip.case index 513f433032..b82be99fe1 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-put-prop-ref-user-err-iter-close-skip.js +++ b/src/dstr-assignment/array-rest-put-prop-ref-user-err-iter-close-skip.case @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > IteratorClose is not called when value assignment produces an abrupt completion. info: | @@ -25,10 +25,12 @@ info: | ArrayLiteral, then a. Return PutValue(lref, A). features: [Symbol.iterator] +template: error es6id: 12.14.5.2 esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ +//- setup var nextCount = 0; var returnCount = 0; var iterable = {}; @@ -49,9 +51,12 @@ var obj = Object.defineProperty({}, 'poisoned', { iterable[Symbol.iterator] = function() { return iterator; }; -assert.throws(Test262Error, function() { - [...obj.poisoned] = iterable; -}); - +//- error +Test262Error +//- elems +[...obj.poisoned] +//- vals +iterable +//- teardown assert.sameValue(nextCount, 1); assert.sameValue(returnCount, 0); diff --git a/test/language/expressions/assignment/destructuring/array-rest-put-prop-ref-user-err.js b/src/dstr-assignment/array-rest-put-prop-ref-user-err.case similarity index 76% rename from test/language/expressions/assignment/destructuring/array-rest-put-prop-ref-user-err.js rename to src/dstr-assignment/array-rest-put-prop-ref-user-err.case index 1b03ef780e..0f4cc41d6c 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-put-prop-ref-user-err.js +++ b/src/dstr-assignment/array-rest-put-prop-ref-user-err.case @@ -2,19 +2,22 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > Any error raised as a result of setting the value should be forwarded to the runtime. +template: error es6id: 12.14.5.3 ---*/ -var value = [23]; +//- setup var x = { set y(val) { throw new Test262Error(); } }; - -assert.throws(Test262Error, function() { - [...x.y] = value; -}); +//- error +Test262Error +//- elems +[...x.y] +//- vals +[23] diff --git a/test/language/expressions/assignment/destructuring/array-rest-put-prop-ref.js b/src/dstr-assignment/array-rest-put-prop-ref.case similarity index 77% rename from test/language/expressions/assignment/destructuring/array-rest-put-prop-ref.js rename to src/dstr-assignment/array-rest-put-prop-ref.case index bdc04a8200..fda1af6dc0 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-put-prop-ref.js +++ b/src/dstr-assignment/array-rest-put-prop-ref.case @@ -2,19 +2,20 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > The DestructuringAssignmentTarget of an AssignmentElement may be a PropertyReference. +template: default es6id: 12.14.5.3 ---*/ -var value = [4, 3, 2]; +//- setup var x = {}; -var result; - -result = [...x.y] = value; - -assert.sameValue(result, value); +//- elems +[...x.y] +//- vals +[4, 3, 2] +//- body assert.sameValue(x.y.length, 3); assert.sameValue(x.y[0], 4); assert.sameValue(x.y[1], 3); diff --git a/test/language/expressions/assignment/destructuring/array-rest-put-unresolvable-no-strict.js b/src/dstr-assignment/array-rest-put-unresolvable-no-strict.case similarity index 81% rename from test/language/expressions/assignment/destructuring/array-rest-put-unresolvable-no-strict.js rename to src/dstr-assignment/array-rest-put-unresolvable-no-strict.case index d904f55f2a..9c95a9b9d1 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-put-unresolvable-no-strict.js +++ b/src/dstr-assignment/array-rest-put-unresolvable-no-strict.case @@ -2,15 +2,21 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > Outside of strict mode, if the the assignment target is an unresolvable reference, a new `var` binding should be created in the environment record. +template: default es6id: 12.14.5.3 flags: [noStrict] ---*/ +//- setup { - [ ...unresolvable ] = []; +//- elems +[ ...unresolvable ] +//- vals +[] +//- teardown } assert.sameValue(unresolvable.length, 0); diff --git a/test/language/expressions/assignment/destructuring/array-rest-put-unresolvable-strict.js b/src/dstr-assignment/array-rest-put-unresolvable-strict.case similarity index 77% rename from test/language/expressions/assignment/destructuring/array-rest-put-unresolvable-strict.js rename to src/dstr-assignment/array-rest-put-unresolvable-strict.case index 43bad4b253..52cc2305a4 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-put-unresolvable-strict.js +++ b/src/dstr-assignment/array-rest-put-unresolvable-strict.case @@ -2,13 +2,17 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > In strict mode, if the the assignment target is an unresolvable reference, a ReferenceError should be thrown. +template: error es6id: 12.14.5.3 flags: [onlyStrict] ---*/ -assert.throws(ReferenceError, function() { - [ ...unresolvable ] = []; -}); +//- error +ReferenceError +//- elems +[ ...unresolvable ] +//- vals +[] diff --git a/test/language/expressions/assignment/destructuring/array-rest-yield-expr.js b/src/dstr-assignment/array-rest-yield-expr.case similarity index 79% rename from test/language/expressions/assignment/destructuring/array-rest-yield-expr.js rename to src/dstr-assignment/array-rest-yield-expr.case index e373478de8..533800254b 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-yield-expr.js +++ b/src/dstr-assignment/array-rest-yield-expr.case @@ -2,32 +2,35 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the DestructuringAssignmentTarget of an AssignmentRestElement and within the body of a generator function, it should behave as a YieldExpression. +template: default es6id: 12.14.5 features: [generators] ---*/ -var value = [33, 44, 55]; +//- setup var x = {}; -var assignmentResult, iterationResult, iter; +var iterationResult, iter; iter = (function*() { - assignmentResult = [...x[yield]] = value; +//- elems +[...x[yield]] +//- vals +[33, 44, 55] +//- teardown }()); iterationResult = iter.next(); -assert.sameValue(assignmentResult, undefined); assert.sameValue(iterationResult.value, undefined); assert.sameValue(iterationResult.done, false); assert.sameValue(x.prop, undefined); iterationResult = iter.next('prop'); -assert.sameValue(assignmentResult, value); assert.sameValue(iterationResult.value, undefined); assert.sameValue(iterationResult.done, true); assert.sameValue(x.prop.length, 3); diff --git a/test/language/expressions/assignment/destructuring/array-rest-yield-ident-invalid.js b/src/dstr-assignment/array-rest-yield-ident-invalid.case similarity index 85% rename from test/language/expressions/assignment/destructuring/array-rest-yield-ident-invalid.js rename to src/dstr-assignment/array-rest-yield-ident-invalid.case index 427fe68038..d635a7c5a6 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-yield-ident-invalid.js +++ b/src/dstr-assignment/array-rest-yield-ident-invalid.case @@ -2,14 +2,19 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the DestructuringAssignmentTarget of an AssignmentRestElement and outside of a generator function body, it should behave as an IdentifierReference. +template: syntax es6id: 12.14.5 flags: [onlyStrict] negative: SyntaxError ---*/ +//- setup var x = {}; -[...x[yield]] = []; +//- elems +[...x[yield]] +//- vals +[] diff --git a/test/language/expressions/assignment/destructuring/array-rest-yield-ident-valid.js b/src/dstr-assignment/array-rest-yield-ident-valid.case similarity index 82% rename from test/language/expressions/assignment/destructuring/array-rest-yield-ident-valid.js rename to src/dstr-assignment/array-rest-yield-ident-valid.case index 4f56b9abe8..8168c4e81d 100644 --- a/test/language/expressions/assignment/destructuring/array-rest-yield-ident-valid.js +++ b/src/dstr-assignment/array-rest-yield-ident-valid.case @@ -2,22 +2,23 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the DestructuringAssignmentTarget of an AssignmentRestElement and outside of a generator function body, it should behave as an IdentifierReference. +template: default es6id: 12.14.5 flags: [noStrict] ---*/ -var value = [33, 44, 55]; +//- setup var yield = 'prop'; var x = {}; -var result; - -result = [...x[yield]] = value; - -assert.sameValue(result, value); +//- elems +[...x[yield]] +//- vals +[33, 44, 55] +//- body assert.sameValue(x.prop.length, 3); assert.sameValue(x.prop[0], 33); assert.sameValue(x.prop[1], 44); diff --git a/src/dstr-assignment/default/assignment-expr.template b/src/dstr-assignment/default/assignment-expr.template new file mode 100644 index 0000000000..17c6a03870 --- /dev/null +++ b/src/dstr-assignment/default/assignment-expr.template @@ -0,0 +1,27 @@ +// Copyright (C) 2016 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +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 + + 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. +---*/ + +var result; +var vals = /*{ vals }*/; + +result = /*{ elems }*/ = vals; + +/*{ body }*/ + +assert.sameValue(result, vals); diff --git a/src/dstr-assignment/default/for-of.template b/src/dstr-assignment/default/for-of.template new file mode 100644 index 0000000000..36446c0af3 --- /dev/null +++ b/src/dstr-assignment/default/for-of.template @@ -0,0 +1,36 @@ +// Copyright (C) 2016 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +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 : + 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. + [...] +---*/ + +var counter = 0; + +for (/*{ elems }*/ of [/*{ vals }*/]) { + /*{ body }*/ + counter += 1; +} + +assert.sameValue(counter, 1); diff --git a/src/dstr-assignment/error/assignment-expr.template b/src/dstr-assignment/error/assignment-expr.template new file mode 100644 index 0000000000..4d9ece3757 --- /dev/null +++ b/src/dstr-assignment/error/assignment-expr.template @@ -0,0 +1,22 @@ +// Copyright (C) 2016 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +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 + + 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. +---*/ + +assert.throws(/*{ error }*/, function() { + 0, /*{ elems }*/ = /*{ vals }*/; +}); diff --git a/src/dstr-assignment/error/for-of.template b/src/dstr-assignment/error/for-of.template new file mode 100644 index 0000000000..8484d87135 --- /dev/null +++ b/src/dstr-assignment/error/for-of.template @@ -0,0 +1,38 @@ +// Copyright (C) 2016 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +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 : + 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. + [...] +---*/ + +var counter = 0; + +assert.throws(/*{ error }*/, function() { + for (/*{ elems }*/ of [/*{ vals }*/]) { + counter += 1; + } + counter += 1; +}); + +assert.sameValue(counter, 0); diff --git a/src/dstr-assignment/obj-empty-bool.case b/src/dstr-assignment/obj-empty-bool.case new file mode 100644 index 0000000000..5e10c238a9 --- /dev/null +++ b/src/dstr-assignment/obj-empty-bool.case @@ -0,0 +1,15 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + An ObjectAssignmentPattern without an AssignmentPropertyList requires an + object-coercible value (boolean value) +template: default +es6id: 12.14.5.2 +---*/ + +//- elems +{} +//- vals +false diff --git a/src/dstr-assignment/obj-empty-null.case b/src/dstr-assignment/obj-empty-null.case new file mode 100644 index 0000000000..0d0c6dd2e5 --- /dev/null +++ b/src/dstr-assignment/obj-empty-null.case @@ -0,0 +1,17 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + An ObjectAssignmentPattern without an AssignmentPropertyList requires an + object-coercible value (null value) +template: error +es6id: 12.14.5.2 +---*/ + +//- error +TypeError +//- elems +{} +//- vals +null diff --git a/src/dstr-assignment/obj-empty-num.case b/src/dstr-assignment/obj-empty-num.case new file mode 100644 index 0000000000..582044a4a5 --- /dev/null +++ b/src/dstr-assignment/obj-empty-num.case @@ -0,0 +1,15 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + An ObjectAssignmentPattern without an AssignmentPropertyList requires an + object-coercible value (number value) +template: default +es6id: 12.14.5.2 +---*/ + +//- elems +{} +//- vals +0 diff --git a/src/dstr-assignment/obj-empty-obj.case b/src/dstr-assignment/obj-empty-obj.case new file mode 100644 index 0000000000..f4fae61480 --- /dev/null +++ b/src/dstr-assignment/obj-empty-obj.case @@ -0,0 +1,15 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + An ObjectAssignmentPattern without an AssignmentPropertyList requires an + object-coercible value (object value) +template: default +es6id: 12.14.5.2 +---*/ + +//- elems +{} +//- vals +{} diff --git a/src/dstr-assignment/obj-empty-string.case b/src/dstr-assignment/obj-empty-string.case new file mode 100644 index 0000000000..97542fe7ee --- /dev/null +++ b/src/dstr-assignment/obj-empty-string.case @@ -0,0 +1,15 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + An ObjectAssignmentPattern without an AssignmentPropertyList requires an + object-coercible value (string value) +template: default +es6id: 12.14.5.2 +---*/ + +//- elems +{} +//- vals +'' diff --git a/src/dstr-assignment/obj-empty-symbol.case b/src/dstr-assignment/obj-empty-symbol.case new file mode 100644 index 0000000000..4297589407 --- /dev/null +++ b/src/dstr-assignment/obj-empty-symbol.case @@ -0,0 +1,18 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + An ObjectAssignmentPattern without an AssignmentPropertyList requires an + object-coercible value (symbol value) +template: default +es6id: 12.14.5.2 +features: [Symbol] +---*/ + +//- setup +var s = Symbol(); +//- elems +{} +//- vals +s diff --git a/src/dstr-assignment/obj-empty-undef.case b/src/dstr-assignment/obj-empty-undef.case new file mode 100644 index 0000000000..7c35e66be7 --- /dev/null +++ b/src/dstr-assignment/obj-empty-undef.case @@ -0,0 +1,17 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + An ObjectAssignmentPattern without an AssignmentPropertyList requires an + object-coercible value (undefined value) +template: error +es6id: 12.14.5.2 +---*/ + +//- error +TypeError +//- elems +{} +//- vals +undefined diff --git a/src/dstr-assignment/obj-id-identifier-resolution-first.case b/src/dstr-assignment/obj-id-identifier-resolution-first.case new file mode 100644 index 0000000000..c4398ae47c --- /dev/null +++ b/src/dstr-assignment/obj-id-identifier-resolution-first.case @@ -0,0 +1,18 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +desc: > + Evaluation of DestructuringAssignmentTarget (first of many) +template: default +es6id: 12.14.5.4 +---*/ + +//- setup +var x = null; +var y; +//- elems +{ x, y } +//- vals +{ x: 3 } +//- body +assert.sameValue(x, 3); diff --git a/src/dstr-assignment/obj-id-identifier-resolution-last.case b/src/dstr-assignment/obj-id-identifier-resolution-last.case new file mode 100644 index 0000000000..0997e5411f --- /dev/null +++ b/src/dstr-assignment/obj-id-identifier-resolution-last.case @@ -0,0 +1,18 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +desc: > + Evaluation of DestructuringAssignmentTarget (last of many) +template: default +es6id: 12.14.5.4 +---*/ + +//- setup +var x = null; +var w; +//- elems +{ w, x } +//- vals +{ x: 4 } +//- body +assert.sameValue(x, 4); diff --git a/src/dstr-assignment/obj-id-identifier-resolution-lone.case b/src/dstr-assignment/obj-id-identifier-resolution-lone.case new file mode 100644 index 0000000000..80e684f057 --- /dev/null +++ b/src/dstr-assignment/obj-id-identifier-resolution-lone.case @@ -0,0 +1,17 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +desc: > + Evaluation of DestructuringAssignmentTarget (lone identifier) +template: default +es6id: 12.14.5.4 +---*/ + +//- setup +var x = null; +//- elems +{ x, } +//- vals +{ x: 2 } +//- body +assert.sameValue(x, 2); diff --git a/src/dstr-assignment/obj-id-identifier-resolution-middle.case b/src/dstr-assignment/obj-id-identifier-resolution-middle.case new file mode 100644 index 0000000000..8dece135d6 --- /dev/null +++ b/src/dstr-assignment/obj-id-identifier-resolution-middle.case @@ -0,0 +1,18 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +desc: > + Evaluation of DestructuringAssignmentTarget (within many) +template: default +es6id: 12.14.5.4 +---*/ + +//- setup +var x = null; +var w, y; +//- elems +{ w, x, y } +//- vals +{ x: 5 } +//- body +assert.sameValue(x, 5); diff --git a/src/dstr-assignment/obj-id-identifier-resolution-trlng.case b/src/dstr-assignment/obj-id-identifier-resolution-trlng.case new file mode 100644 index 0000000000..ed959bbd9c --- /dev/null +++ b/src/dstr-assignment/obj-id-identifier-resolution-trlng.case @@ -0,0 +1,18 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +desc: > + Evaluation of DestructuringAssignmentTarget (lone identifier with trailing + comma) +template: default +es6id: 12.14.5.4 +---*/ + +//- setup +var x = null; +//- elems +{ x } +//- vals +{ x: 1 } +//- body +assert.sameValue(x, 1); diff --git a/test/language/expressions/assignment/destructuring/obj-id-identifier-yield-expr.js b/src/dstr-assignment/obj-id-identifier-yield-expr.case similarity index 57% rename from test/language/expressions/assignment/destructuring/obj-id-identifier-yield-expr.js rename to src/dstr-assignment/obj-id-identifier-yield-expr.case index 3ec7986c31..8dc18230f5 100644 --- a/test/language/expressions/assignment/destructuring/obj-id-identifier-yield-expr.js +++ b/src/dstr-assignment/obj-id-identifier-yield-expr.case @@ -2,15 +2,21 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > - `yield` is not a valid IdentifierReference in an AssignmentProperty within - generator function bodies. +desc: > + yield is not a valid IdentifierReference in an AssignmentProperty within + generator function bodies. +template: syntax es6id: 12.14.5 flags: [noStrict] features: [generators] negative: SyntaxError ---*/ +//- setup (function*() { - { yield } = {}; +//- elems +{ yield } +//- vals +{} +//- teardown }); diff --git a/test/language/expressions/assignment/destructuring/obj-id-identifier-yield-ident-invalid.js b/src/dstr-assignment/obj-id-identifier-yield-ident-invalid.case similarity index 57% rename from test/language/expressions/assignment/destructuring/obj-id-identifier-yield-ident-invalid.js rename to src/dstr-assignment/obj-id-identifier-yield-ident-invalid.case index c5846e5bb3..83c135da48 100644 --- a/test/language/expressions/assignment/destructuring/obj-id-identifier-yield-ident-invalid.js +++ b/src/dstr-assignment/obj-id-identifier-yield-ident-invalid.case @@ -2,12 +2,16 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > - `yield` is not a valid IdentifierReference in an AssignmentProperty within - strict mode code. +desc: > + yield is not a valid IdentifierReference in an AssignmentProperty within + strict mode code. +template: syntax es6id: 12.14.5 flags: [onlyStrict] negative: SyntaxError ---*/ -var { yield } = {}; +//- elems +{ yield } +//- vals +{} diff --git a/src/dstr-assignment/obj-id-identifier-yield-ident-valid.case b/src/dstr-assignment/obj-id-identifier-yield-ident-valid.case new file mode 100644 index 0000000000..fb7ce1808c --- /dev/null +++ b/src/dstr-assignment/obj-id-identifier-yield-ident-valid.case @@ -0,0 +1,20 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + yield is a valid IdentifierReference in an AssignmentProperty outside of + strict mode and generator functions. +template: default +es6id: 12.14.5 +flags: [noStrict] +---*/ + +//- setup +var yield; +//- elems +{ yield } +//- vals +{ yield: 3 } +//- body +assert.sameValue(yield, 3); diff --git a/src/dstr-assignment/obj-id-init-assignment-missing.case b/src/dstr-assignment/obj-id-init-assignment-missing.case new file mode 100644 index 0000000000..7ef57ff0f6 --- /dev/null +++ b/src/dstr-assignment/obj-id-init-assignment-missing.case @@ -0,0 +1,20 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + If the Initializer is present and v is undefined, the Initializer should be + evaluated and the result assigned to the target reference (no corresponding + property defined). +template: default +es6id: 12.14.5.4 +---*/ + +//- setup +var x; +//- elems +{ x = 1 } +//- vals +{} +//- body +assert.sameValue(x, 1); diff --git a/src/dstr-assignment/obj-id-init-assignment-null.case b/src/dstr-assignment/obj-id-init-assignment-null.case new file mode 100644 index 0000000000..698a2377fc --- /dev/null +++ b/src/dstr-assignment/obj-id-init-assignment-null.case @@ -0,0 +1,20 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + If the Initializer is present and v is undefined, the Initializer should be + evaluated and the result assigned to the target reference (null property + value defined). +template: default +es6id: 12.14.5.4 +---*/ + +//- setup +var x; +//- elems +{ x = 1 } +//- vals +{ x: null } +//- body +assert.sameValue(x, null); diff --git a/src/dstr-assignment/obj-id-init-assignment-truthy.case b/src/dstr-assignment/obj-id-init-assignment-truthy.case new file mode 100644 index 0000000000..9ee34246c4 --- /dev/null +++ b/src/dstr-assignment/obj-id-init-assignment-truthy.case @@ -0,0 +1,20 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + If the Initializer is present and v is undefined, the Initializer should be + evaluated and the result assigned to the target reference (truthy property + value defined). +template: default +es6id: 12.14.5.4 +---*/ + +//- setup +var x; +//- elems +{ x = 1 } +//- vals +{ x: 2 } +//- body +assert.sameValue(x, 2); diff --git a/src/dstr-assignment/obj-id-init-assignment-undef.case b/src/dstr-assignment/obj-id-init-assignment-undef.case new file mode 100644 index 0000000000..beb088f126 --- /dev/null +++ b/src/dstr-assignment/obj-id-init-assignment-undef.case @@ -0,0 +1,20 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + If the Initializer is present and v is undefined, the Initializer should be + evaluated and the result assigned to the target reference ("undefined" + property value defined). +template: default +es6id: 12.14.5.4 +---*/ + +//- setup +var x; +//- elems +{ x = 1 } +//- vals +{ x: undefined } +//- body +assert.sameValue(x, 1); diff --git a/src/dstr-assignment/obj-id-init-evaluation.case b/src/dstr-assignment/obj-id-init-evaluation.case new file mode 100644 index 0000000000..c5892ff536 --- /dev/null +++ b/src/dstr-assignment/obj-id-init-evaluation.case @@ -0,0 +1,21 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + The Initializer should only be evaluated if v is undefined. +template: default +es6id: 12.14.5.4 +---*/ + +//- setup +var flag1 = false; +var flag2 = false; +var x, y; +//- elems +{ x = flag1 = true, y = flag2 = true } +//- vals +{ y: 1 } +//- body +assert.sameValue(flag1, true); +assert.sameValue(flag2, false); diff --git a/test/language/expressions/assignment/destructuring/obj-id-init-fn-name-arrow.js b/src/dstr-assignment/obj-id-init-fn-name-arrow.case similarity index 84% rename from test/language/expressions/assignment/destructuring/obj-id-init-fn-name-arrow.js rename to src/dstr-assignment/obj-id-init-fn-name-arrow.case index 53075d76e6..ba923bacb7 100644 --- a/test/language/expressions/assignment/destructuring/obj-id-init-fn-name-arrow.js +++ b/src/dstr-assignment/obj-id-init-fn-name-arrow.case @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Assignment of function `name` attribute (ArrowFunction) +desc: Assignment of function `name` attribute (ArrowFunction) +template: default es6id: 12.14.5.2 info: > AssignmentProperty : IdentifierReference Initializeropt @@ -17,10 +18,13 @@ info: > includes: [propertyHelper.js] ---*/ +//- setup var arrow; - -({ arrow = () => {} } = {}); - +//- elems +{ arrow = () => {} } +//- vals +{} +//- body assert.sameValue(arrow.name, 'arrow'); verifyNotEnumerable(arrow, 'name'); verifyNotWritable(arrow, 'name'); diff --git a/test/language/expressions/assignment/destructuring/obj-id-init-fn-name-class.js b/src/dstr-assignment/obj-id-init-fn-name-class.case similarity index 79% rename from test/language/expressions/assignment/destructuring/obj-id-init-fn-name-class.js rename to src/dstr-assignment/obj-id-init-fn-name-class.case index 3c20598cb5..69598a6754 100644 --- a/test/language/expressions/assignment/destructuring/obj-id-init-fn-name-class.js +++ b/src/dstr-assignment/obj-id-init-fn-name-class.case @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Assignment of function `name` attribute (ClassExpression) +desc: Assignment of function `name` attribute (ClassExpression) +template: default es6id: 12.14.5.2 info: > AssignmentProperty : IdentifierReference Initializeropt @@ -18,12 +19,14 @@ includes: [propertyHelper.js] features: [class] ---*/ +//- setup var xCls, cls; - -({ xCls = class x {} } = {}); -({ cls = class {} } = {}); - -assert(xCls.name !== 'xCls'); +//- elems +{ xCls = class x {}, cls = class {} } +//- vals +{} +//- body +assert.notSameValue(xCls.name, 'xCls'); assert.sameValue(cls.name, 'cls'); verifyNotEnumerable(cls, 'name'); diff --git a/test/language/expressions/assignment/destructuring/obj-id-init-fn-name-cover.js b/src/dstr-assignment/obj-id-init-fn-name-cover.case similarity index 83% rename from test/language/expressions/assignment/destructuring/obj-id-init-fn-name-cover.js rename to src/dstr-assignment/obj-id-init-fn-name-cover.case index c220f37408..b0d92b229f 100644 --- a/test/language/expressions/assignment/destructuring/obj-id-init-fn-name-cover.js +++ b/src/dstr-assignment/obj-id-init-fn-name-cover.case @@ -2,8 +2,9 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > Assignment of function `name` attribute (CoverParenthesizedExpression) +template: default es6id: 12.14.5.2 info: > AssignmentProperty : IdentifierReference Initializeropt @@ -18,12 +19,14 @@ info: > includes: [propertyHelper.js] ---*/ +//- setup var xCover, cover; - -({ xCover = (0, function() {}) } = {}); -({ cover = (function() {}) } = {}); - -assert(xCover.name !== 'xCover'); +//- elems +{ xCover = (0, function() {}), cover = (function() {}) } +//- vals +{} +//- body +assert.notSameValue(xCover.name, 'xCover'); assert.sameValue(cover.name, 'cover'); verifyNotEnumerable(cover, 'name'); diff --git a/test/language/expressions/assignment/destructuring/obj-id-init-fn-name-fn.js b/src/dstr-assignment/obj-id-init-fn-name-fn.case similarity index 78% rename from test/language/expressions/assignment/destructuring/obj-id-init-fn-name-fn.js rename to src/dstr-assignment/obj-id-init-fn-name-fn.case index 269960e3bb..28729746ac 100644 --- a/test/language/expressions/assignment/destructuring/obj-id-init-fn-name-fn.js +++ b/src/dstr-assignment/obj-id-init-fn-name-fn.case @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Assignment of function `name` attribute (FunctionExpression) +desc: Assignment of function `name` attribute (FunctionExpression) +template: default es6id: 12.14.5.2 info: > AssignmentProperty : IdentifierReference Initializeropt @@ -17,12 +18,14 @@ info: > includes: [propertyHelper.js] ---*/ +//- setup var xFn, fn; - -({ xFn = function x() {} } = {}); -({ fn = function() {} } = {}); - -assert(xFn.name !== 'xFn'); +//- elems +{ xFn = function x() {}, fn = function() {} } +//- vals +{} +//- body +assert.notSameValue(xFn.name, 'xFn'); assert.sameValue(fn.name, 'fn'); verifyNotEnumerable(fn, 'name'); diff --git a/test/language/expressions/assignment/destructuring/obj-id-init-fn-name-gen.js b/src/dstr-assignment/obj-id-init-fn-name-gen.case similarity index 78% rename from test/language/expressions/assignment/destructuring/obj-id-init-fn-name-gen.js rename to src/dstr-assignment/obj-id-init-fn-name-gen.case index 9ae0f31a76..712672024b 100644 --- a/test/language/expressions/assignment/destructuring/obj-id-init-fn-name-gen.js +++ b/src/dstr-assignment/obj-id-init-fn-name-gen.case @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Assignment of function `name` attribute (GeneratorExpression) +desc: Assignment of function `name` attribute (GeneratorExpression) +template: default es6id: 12.14.5.2 info: > AssignmentProperty : IdentifierReference Initializeropt @@ -18,12 +19,14 @@ includes: [propertyHelper.js] features: [generators] ---*/ +//- setup var xGen, gen; - -({ xGen = function* x() {} } = {}); -({ gen = function*() {} } = {}); - -assert(xGen.name !== 'xGen'); +//- elems +{ xGen = function* x() {}, gen = function*() {} } +//- vals +{} +//- body +assert.notSameValue(xGen.name, 'xGen'); assert.sameValue(gen.name, 'gen'); verifyNotEnumerable(gen, 'name'); diff --git a/test/language/expressions/assignment/destructuring/obj-id-init-in.js b/src/dstr-assignment/obj-id-init-in.case similarity index 68% rename from test/language/expressions/assignment/destructuring/obj-id-init-in.js rename to src/dstr-assignment/obj-id-init-in.case index 5626c44b3a..fd5f36c78b 100644 --- a/test/language/expressions/assignment/destructuring/obj-id-init-in.js +++ b/src/dstr-assignment/obj-id-init-in.case @@ -2,15 +2,17 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > The Initializer in an AssignmentProperty may be an `in` expression. +template: default es6id: 12.14.5 ---*/ -var value = {}; -var result, prop; - -result = { prop = 'x' in {} } = value; - -assert.sameValue(result, value); +//- setup +var prop; +//- elems +{ prop = 'x' in {} } +//- vals +{} +//- body assert.sameValue(prop, false); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-elem-init-let.js b/src/dstr-assignment/obj-id-init-let.case similarity index 69% rename from test/language/expressions/assignment/destructuring/obj-prop-elem-init-let.js rename to src/dstr-assignment/obj-id-init-let.case index 492454ba16..8581905f16 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-elem-init-let.js +++ b/src/dstr-assignment/obj-id-init-let.case @@ -2,15 +2,20 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > Value retrieval of Initializer obeys `let` semantics. +template: error es6id: 12.14.5.4 features: [let] ---*/ +//- setup var x; - -assert.throws(ReferenceError, function() { - ({ x: x = y } = {}); - let y; -}); +//- error +ReferenceError +//- elems +{ x = y } +//- vals +{} +//- teardown +let y; diff --git a/test/language/expressions/assignment/destructuring/obj-id-init-order.js b/src/dstr-assignment/obj-id-init-order.case similarity index 71% rename from test/language/expressions/assignment/destructuring/obj-id-init-order.js rename to src/dstr-assignment/obj-id-init-order.case index cdec7decf0..a65a566512 100644 --- a/test/language/expressions/assignment/destructuring/obj-id-init-order.js +++ b/src/dstr-assignment/obj-id-init-order.case @@ -2,18 +2,20 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > Initializer values should be assigned in left-to-right order. +template: default es6id: 12.14.5.4 ---*/ -var value = {}; +//- setup var x = 0; -var a, b, result; - -result = { a = x += 1, b = x *= 2 } = value; - -assert.sameValue(result, value); +var a, b; +//- elems +{ a = x += 1, b = x *= 2 } +//- vals +{} +//- body assert.sameValue(a, 1); assert.sameValue(b, 2); assert.sameValue(x, 2); diff --git a/test/language/expressions/assignment/destructuring/obj-id-init-simple-no-strict.js b/src/dstr-assignment/obj-id-init-simple-no-strict.case similarity index 67% rename from test/language/expressions/assignment/destructuring/obj-id-init-simple-no-strict.js rename to src/dstr-assignment/obj-id-init-simple-no-strict.case index 79b976fad4..b44e5bd094 100644 --- a/test/language/expressions/assignment/destructuring/obj-id-init-simple-no-strict.js +++ b/src/dstr-assignment/obj-id-init-simple-no-strict.case @@ -2,17 +2,19 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > Evaluation of DestructuringAssignmentTarget. +template: default es6id: 12.14.5.4 flags: [noStrict] ---*/ -var value = {}; -var eval, arguments, result; - -result = { eval = 3, arguments = 4 } = value; - -assert.sameValue(result, value); +//- setup +var eval, arguments; +//- elems +{ eval = 3, arguments = 4 } +//- vals +{} +//- body assert.sameValue(eval, 3); assert.sameValue(arguments, 4); diff --git a/test/language/expressions/assignment/destructuring/obj-id-init-simple-strict.js b/src/dstr-assignment/obj-id-init-simple-strict.case similarity index 83% rename from test/language/expressions/assignment/destructuring/obj-id-init-simple-strict.js rename to src/dstr-assignment/obj-id-init-simple-strict.case index da9c5f017e..b2faabe699 100644 --- a/test/language/expressions/assignment/destructuring/obj-id-init-simple-strict.js +++ b/src/dstr-assignment/obj-id-init-simple-strict.case @@ -2,12 +2,16 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > It is a Syntax Error if IsValidSimpleAssignmentTarget of IdentifierReference is false. +template: syntax es6id: 12.14.5.1 flags: [onlyStrict] negative: SyntaxError ---*/ -({ eval = 0 } = {}); +//- elems +{ eval = 0 } +//- vals +{} diff --git a/test/language/expressions/assignment/destructuring/obj-id-init-yield-expr.js b/src/dstr-assignment/obj-id-init-yield-expr.case similarity index 76% rename from test/language/expressions/assignment/destructuring/obj-id-init-yield-expr.js rename to src/dstr-assignment/obj-id-init-yield-expr.case index 2991a435e9..38e44e7e7f 100644 --- a/test/language/expressions/assignment/destructuring/obj-id-init-yield-expr.js +++ b/src/dstr-assignment/obj-id-init-yield-expr.case @@ -2,19 +2,24 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the Initializer of an AssignmentProperty and within a generator function body, it should behave as a YieldExpression. +template: default es6id: 12.14.5 features: [generators] ---*/ -var value = {}; -var assignmentResult, iterationResult, x, iter; +//- setup +var iterationResult, x, iter; iter = (function*() { - assignmentResult = { x = yield } = value; +//- elems +{ x = yield } +//- vals +{} +//- teardown }()); iterationResult = iter.next(); @@ -22,11 +27,9 @@ iterationResult = iter.next(); assert.sameValue(iterationResult.value, undefined); assert.sameValue(iterationResult.done, false); assert.sameValue(x, undefined); -assert.sameValue(assignmentResult, undefined); iterationResult = iter.next(3); assert.sameValue(iterationResult.value, undefined); assert.sameValue(iterationResult.done, true); assert.sameValue(x, 3); -assert.sameValue(assignmentResult, value); diff --git a/test/language/expressions/assignment/destructuring/obj-id-init-yield-ident-invalid.js b/src/dstr-assignment/obj-id-init-yield-ident-invalid.case similarity index 86% rename from test/language/expressions/assignment/destructuring/obj-id-init-yield-ident-invalid.js rename to src/dstr-assignment/obj-id-init-yield-ident-invalid.case index 3edd831389..3d8d12f933 100644 --- a/test/language/expressions/assignment/destructuring/obj-id-init-yield-ident-invalid.js +++ b/src/dstr-assignment/obj-id-init-yield-ident-invalid.case @@ -2,14 +2,17 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the Initializer of an AssignmentProperty and outside of a generator function body, it should behave as an IdentifierReference. +template: syntax es6id: 12.14.5 flags: [onlyStrict] negative: SyntaxError ---*/ -var x; -0, { x = yield } = {}; +//- elems +{ x = yield } +//- vals +{} diff --git a/test/language/expressions/assignment/destructuring/obj-id-init-yield-ident-valid.js b/src/dstr-assignment/obj-id-init-yield-ident-valid.case similarity index 77% rename from test/language/expressions/assignment/destructuring/obj-id-init-yield-ident-valid.js rename to src/dstr-assignment/obj-id-init-yield-ident-valid.case index 4759be1e29..93c9bc6af8 100644 --- a/test/language/expressions/assignment/destructuring/obj-id-init-yield-ident-valid.js +++ b/src/dstr-assignment/obj-id-init-yield-ident-valid.case @@ -2,19 +2,21 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the Initializer of an AssignmentProperty and outside of a generator function body, it should behave as an IdentifierReference. +template: default es6id: 12.14.5 flags: [noStrict] ---*/ -var value = {}; +//- setup var yield = 3; -var result, x; - -result = { x = yield } = value; - -assert.sameValue(result, value); +var x; +//- elems +{ x = yield } +//- vals +{} +//- body assert.sameValue(x, 3); diff --git a/test/language/expressions/assignment/destructuring/obj-id-put-const.js b/src/dstr-assignment/obj-id-put-const.case similarity index 74% rename from test/language/expressions/assignment/destructuring/obj-id-put-const.js rename to src/dstr-assignment/obj-id-put-const.case index 79c801d261..a6905afde8 100644 --- a/test/language/expressions/assignment/destructuring/obj-id-put-const.js +++ b/src/dstr-assignment/obj-id-put-const.case @@ -2,14 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > The assignment target should obey `const` semantics. +template: error es6id: 12.14.5.4 features: [const] ---*/ +//- setup const c = null; - -assert.throws(TypeError, function() { - ({ c } = { c: 1 }); -}); +//- error +TypeError +//- elems +{ c } +//- vals +{ c: 1 } diff --git a/test/language/expressions/assignment/destructuring/obj-prop-put-let.js b/src/dstr-assignment/obj-id-put-let.case similarity index 71% rename from test/language/expressions/assignment/destructuring/obj-prop-put-let.js rename to src/dstr-assignment/obj-id-put-let.case index 98080dced9..751878afe6 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-put-let.js +++ b/src/dstr-assignment/obj-id-put-let.case @@ -2,13 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > The assignment target should obey `let` semantics. +template: error es6id: 12.14.5.4 features: [let] ---*/ -assert.throws(ReferenceError, function() { - ({ a: x } = {}); - let x; -}); +//- error +ReferenceError +//- elems +{ x } +//- vals +{} +//- teardown +let x; diff --git a/test/language/expressions/assignment/destructuring/obj-id-put-unresolvable-no-strict.js b/src/dstr-assignment/obj-id-put-unresolvable-no-strict.case similarity index 81% rename from test/language/expressions/assignment/destructuring/obj-id-put-unresolvable-no-strict.js rename to src/dstr-assignment/obj-id-put-unresolvable-no-strict.case index e98a59f6f2..250d500a52 100644 --- a/test/language/expressions/assignment/destructuring/obj-id-put-unresolvable-no-strict.js +++ b/src/dstr-assignment/obj-id-put-unresolvable-no-strict.case @@ -2,15 +2,21 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > Outside of strict mode, if the the assignment target is an unresolvable reference, a new `var` binding should be created in the environment record. +template: default es6id: 12.14.5.4 flags: [noStrict] ---*/ +//- setup { - ({ unresolvable } = {}); +//- elems +{ unresolvable } +//- vals +{} +//- teardown } assert.sameValue(unresolvable, undefined); diff --git a/test/language/expressions/assignment/destructuring/obj-id-put-unresolvable-strict.js b/src/dstr-assignment/obj-id-put-unresolvable-strict.case similarity index 77% rename from test/language/expressions/assignment/destructuring/obj-id-put-unresolvable-strict.js rename to src/dstr-assignment/obj-id-put-unresolvable-strict.case index d205e5f035..6dd866725c 100644 --- a/test/language/expressions/assignment/destructuring/obj-id-put-unresolvable-strict.js +++ b/src/dstr-assignment/obj-id-put-unresolvable-strict.case @@ -2,13 +2,17 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > In strict mode, if the the assignment target is an unresolvable reference, a ReferenceError should be thrown. +template: error es6id: 12.14.5.4 flags: [onlyStrict] ---*/ -assert.throws(ReferenceError, function() { - ({ unresolvable } = {}); -}); +//- error +ReferenceError +//- elems +{ unresolvable } +//- vals +{} diff --git a/test/language/expressions/assignment/destructuring/obj-id-simple-no-strict.js b/src/dstr-assignment/obj-id-simple-no-strict.case similarity index 65% rename from test/language/expressions/assignment/destructuring/obj-id-simple-no-strict.js rename to src/dstr-assignment/obj-id-simple-no-strict.case index f2e924ab47..a191f22533 100644 --- a/test/language/expressions/assignment/destructuring/obj-id-simple-no-strict.js +++ b/src/dstr-assignment/obj-id-simple-no-strict.case @@ -2,17 +2,19 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > Evaluation of DestructuringAssignmentTarget. +template: default es6id: 12.14.5.4 flags: [noStrict] ---*/ -var value = { eval: 1, arguments: 2 }; -var eval, arguments, result; - -result = { eval, arguments } = value; - -assert.sameValue(result, value); +//- setup +var eval, arguments; +//- elems +{ eval, arguments } +//- vals +{ eval: 1, arguments: 2 } +//- teardown assert.sameValue(eval, 1); assert.sameValue(arguments, 2); diff --git a/test/language/expressions/assignment/destructuring/obj-id-simple-strict.js b/src/dstr-assignment/obj-id-simple-strict.case similarity index 84% rename from test/language/expressions/assignment/destructuring/obj-id-simple-strict.js rename to src/dstr-assignment/obj-id-simple-strict.case index af7d5a1eeb..19e92bb621 100644 --- a/test/language/expressions/assignment/destructuring/obj-id-simple-strict.js +++ b/src/dstr-assignment/obj-id-simple-strict.case @@ -2,12 +2,16 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > It is a Syntax Error if IsValidSimpleAssignmentTarget of IdentifierReference is false. +template: syntax es6id: 12.14.5.1 flags: [onlyStrict] negative: SyntaxError ---*/ -({ eval } = {}); +//- elems +{ eval } +//- vals +{} diff --git a/src/dstr-assignment/obj-prop-elem-init-assignment-missing.case b/src/dstr-assignment/obj-prop-elem-init-assignment-missing.case new file mode 100644 index 0000000000..36b99b38d9 --- /dev/null +++ b/src/dstr-assignment/obj-prop-elem-init-assignment-missing.case @@ -0,0 +1,20 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + If the Initializer is present and v is undefined, the Initializer should be + evaluated and the result assigned to the target reference (non-existent + property) +template: default +es6id: 12.14.5.4 +---*/ + +//- setup +var x; +//- elems +{ y: x = 1 } +//- vals +{} +//- body +assert.sameValue(x, 1); diff --git a/src/dstr-assignment/obj-prop-elem-init-assignment-null.case b/src/dstr-assignment/obj-prop-elem-init-assignment-null.case new file mode 100644 index 0000000000..aac88b6d00 --- /dev/null +++ b/src/dstr-assignment/obj-prop-elem-init-assignment-null.case @@ -0,0 +1,19 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + If the Initializer is present and v is not undefined, the Initializer should + be evaluated and the result assigned to the target reference (null value) +template: default +es6id: 12.14.5.4 +---*/ + +//- setup +var x; +//- elems +{ y: x = 1 } +//- vals +{ y: null } +//- body +assert.sameValue(x, null); diff --git a/src/dstr-assignment/obj-prop-elem-init-assignment-truthy.case b/src/dstr-assignment/obj-prop-elem-init-assignment-truthy.case new file mode 100644 index 0000000000..668c0a0b6f --- /dev/null +++ b/src/dstr-assignment/obj-prop-elem-init-assignment-truthy.case @@ -0,0 +1,19 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + If the Initializer is present and v is not undefined, the Initializer should + be evaluated and the result assigned to the target reference (truthy value) +template: default +es6id: 12.14.5.4 +---*/ + +//- setup +var x; +//- elems +{ y: x = 1 } +//- vals +{ y: 2 } +//- body +assert.sameValue(x, 2); diff --git a/src/dstr-assignment/obj-prop-elem-init-assignment-undef.case b/src/dstr-assignment/obj-prop-elem-init-assignment-undef.case new file mode 100644 index 0000000000..abf1f527bc --- /dev/null +++ b/src/dstr-assignment/obj-prop-elem-init-assignment-undef.case @@ -0,0 +1,19 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + If the Initializer is present and v is undefined, the Initializer should be + evaluated and the result assigned to the target reference (undefined value) +template: default +es6id: 12.14.5.4 +---*/ + +//- setup +var x; +//- elems +{ y: x = 1 } +//- vals +{ y: undefined } +//- body +assert.sameValue(x, 1); diff --git a/src/dstr-assignment/obj-prop-elem-init-evaluation.case b/src/dstr-assignment/obj-prop-elem-init-evaluation.case new file mode 100644 index 0000000000..47430121d2 --- /dev/null +++ b/src/dstr-assignment/obj-prop-elem-init-evaluation.case @@ -0,0 +1,23 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + The Initializer should only be evaluated if v is undefined. +template: default +es6id: 12.14.5.4 +---*/ + +//- setup +var flag1 = false; +var flag2 = false; +var x, y; +//- elems +{ x: x = flag1 = true, y: y = flag2 = true } +//- vals +{ y: 1 } +//- body +assert.sameValue(x, true, 'value of `x`'); +assert.sameValue(flag1, true, 'value of `flag1`'); +assert.sameValue(y, 1, 'value of `y`'); +assert.sameValue(flag2, false, 'value of `flag2`'); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-elem-init-fn-name-arrow.js b/src/dstr-assignment/obj-prop-elem-init-fn-name-arrow.case similarity index 85% rename from test/language/expressions/assignment/destructuring/obj-prop-elem-init-fn-name-arrow.js rename to src/dstr-assignment/obj-prop-elem-init-fn-name-arrow.case index a089de2b73..3cfff7b2a5 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-elem-init-fn-name-arrow.js +++ b/src/dstr-assignment/obj-prop-elem-init-fn-name-arrow.case @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Assignment of function `name` attribute (ArrowFunction) +desc: Assignment of function `name` attribute (ArrowFunction) +template: default es6id: 12.14.5.4 info: > AssignmentElement[Yield] : DestructuringAssignmentTarget Initializeropt @@ -18,10 +19,13 @@ info: > includes: [propertyHelper.js] ---*/ +//- setup var arrow; - -({ x: arrow = () => {} } = {}); - +//- elems +{ x: arrow = () => {} } +//- vals +{} +//- body assert.sameValue(arrow.name, 'arrow'); verifyNotEnumerable(arrow, 'name'); verifyNotWritable(arrow, 'name'); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-elem-init-fn-name-class.js b/src/dstr-assignment/obj-prop-elem-init-fn-name-class.case similarity index 80% rename from test/language/expressions/assignment/destructuring/obj-prop-elem-init-fn-name-class.js rename to src/dstr-assignment/obj-prop-elem-init-fn-name-class.case index 43b0ddafb7..5652358615 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-elem-init-fn-name-class.js +++ b/src/dstr-assignment/obj-prop-elem-init-fn-name-class.case @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Assignment of function `name` attribute (ClassExpression) +desc: Assignment of function `name` attribute (ClassExpression) +template: default es6id: 12.14.5.4 info: > AssignmentElement[Yield] : DestructuringAssignmentTarget Initializeropt @@ -19,12 +20,14 @@ includes: [propertyHelper.js] features: [class] ---*/ +//- setup var xCls, cls; - -({ x: xCls = class x {} } = {}); -({ x: cls = class {} } = {}); - -assert(xCls.name !== 'xCls'); +//- elems +{ x: xCls = class x {}, x: cls = class {} } +//- vals +{} +//- body +assert.notSameValue(xCls.name, 'xCls'); assert.sameValue(cls.name, 'cls'); verifyNotEnumerable(cls, 'name'); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-elem-init-fn-name-cover.js b/src/dstr-assignment/obj-prop-elem-init-fn-name-cover.case similarity index 84% rename from test/language/expressions/assignment/destructuring/obj-prop-elem-init-fn-name-cover.js rename to src/dstr-assignment/obj-prop-elem-init-fn-name-cover.case index 5e4f473426..6e6afc4898 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-elem-init-fn-name-cover.js +++ b/src/dstr-assignment/obj-prop-elem-init-fn-name-cover.case @@ -2,8 +2,9 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > Assignment of function `name` attribute (CoverParenthesizedExpression) +template: default es6id: 12.14.5.4 info: > AssignmentElement[Yield] : DestructuringAssignmentTarget Initializeropt @@ -19,12 +20,14 @@ info: > includes: [propertyHelper.js] ---*/ +//- setup var xCover, cover; - -({ x: xCover = (0, function() {}) } = {}); -({ x: cover = (function() {}) } = {}); - -assert(xCover.name !== 'xCover'); +//- elems +{ x: xCover = (0, function() {}), x: cover = (function() {}) } +//- vals +{} +//- body +assert.notSameValue(xCover.name, 'xCover'); assert.sameValue(cover.name, 'cover'); verifyNotEnumerable(cover, 'name'); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-elem-init-fn-name-fn.js b/src/dstr-assignment/obj-prop-elem-init-fn-name-fn.case similarity index 79% rename from test/language/expressions/assignment/destructuring/obj-prop-elem-init-fn-name-fn.js rename to src/dstr-assignment/obj-prop-elem-init-fn-name-fn.case index 79111de8ca..7a2290ac60 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-elem-init-fn-name-fn.js +++ b/src/dstr-assignment/obj-prop-elem-init-fn-name-fn.case @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Assignment of function `name` attribute (FunctionExpression) +desc: Assignment of function `name` attribute (FunctionExpression) +template: default es6id: 12.14.5.4 info: > AssignmentElement[Yield] : DestructuringAssignmentTarget Initializeropt @@ -18,12 +19,14 @@ info: > includes: [propertyHelper.js] ---*/ +//- setup var xFn, fn; - -({ x: xFn = function x() {} } = {}); -({ x: fn = function() {} } = {}); - -assert(xFn.name !== 'xFn'); +//- elems +{ x: xFn = function x() {}, x: fn = function() {} } +//- vals +{} +//- body +assert.notSameValue(xFn.name, 'xFn'); assert.sameValue(fn.name, 'fn'); verifyNotEnumerable(fn, 'name'); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-elem-init-fn-name-gen.js b/src/dstr-assignment/obj-prop-elem-init-fn-name-gen.case similarity index 79% rename from test/language/expressions/assignment/destructuring/obj-prop-elem-init-fn-name-gen.js rename to src/dstr-assignment/obj-prop-elem-init-fn-name-gen.case index c65a81683c..292e8c615d 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-elem-init-fn-name-gen.js +++ b/src/dstr-assignment/obj-prop-elem-init-fn-name-gen.case @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: Assignment of function `name` attribute (GeneratorExpression) +desc: Assignment of function `name` attribute (GeneratorExpression) +template: default es6id: 12.14.5.4 info: > AssignmentElement[Yield] : DestructuringAssignmentTarget Initializeropt @@ -19,12 +20,14 @@ includes: [propertyHelper.js] features: [generators] ---*/ +//- setup var xGen, gen; - -({ x: xGen = function* x() {} } = {}); -({ x: gen = function*() {} } = {}); - -assert(xGen.name !== 'xGen'); +//- elems +{ x: xGen = function* x() {}, x: gen = function*() {} } +//- vals +{} +//- body +assert.notSameValue(xGen.name, 'xGen'); assert.sameValue(gen.name, 'gen'); verifyNotEnumerable(gen, 'name'); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-elem-init-in.js b/src/dstr-assignment/obj-prop-elem-init-in.case similarity index 68% rename from test/language/expressions/assignment/destructuring/obj-prop-elem-init-in.js rename to src/dstr-assignment/obj-prop-elem-init-in.case index c8d724717d..c55ce6a828 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-elem-init-in.js +++ b/src/dstr-assignment/obj-prop-elem-init-in.case @@ -2,15 +2,17 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > The Initializer in an AssignmentElement may be an `in` expression. +template: default es6id: 12.14.5 ---*/ -var value = {}; -var result, prop; - -result = { x: prop = 'x' in {} } = value; - -assert.sameValue(result, value); +//- setup +var prop; +//- elems +{ x: prop = 'x' in {} } +//- vals +{} +//- body assert.sameValue(prop, false); diff --git a/test/language/expressions/assignment/destructuring/obj-id-init-let.js b/src/dstr-assignment/obj-prop-elem-init-let.case similarity index 68% rename from test/language/expressions/assignment/destructuring/obj-id-init-let.js rename to src/dstr-assignment/obj-prop-elem-init-let.case index 0cae52ea93..75186a9f5f 100644 --- a/test/language/expressions/assignment/destructuring/obj-id-init-let.js +++ b/src/dstr-assignment/obj-prop-elem-init-let.case @@ -2,15 +2,20 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > Value retrieval of Initializer obeys `let` semantics. +template: error es6id: 12.14.5.4 features: [let] ---*/ +//- setup var x; - -assert.throws(ReferenceError, function() { - ({ x = y } = {}); - let y; -}); +//- error +ReferenceError +//- elems +{ x: x = y } +//- vals +{} +//- teardown +let y; diff --git a/test/language/expressions/assignment/destructuring/obj-prop-elem-init-yield-expr.js b/src/dstr-assignment/obj-prop-elem-init-yield-expr.case similarity index 76% rename from test/language/expressions/assignment/destructuring/obj-prop-elem-init-yield-expr.js rename to src/dstr-assignment/obj-prop-elem-init-yield-expr.case index df69c2a2ad..9295443bcb 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-elem-init-yield-expr.js +++ b/src/dstr-assignment/obj-prop-elem-init-yield-expr.case @@ -2,31 +2,33 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the Initializer of an AssignmentElement and within a generator function body, it should behave as a YieldExpression. +template: default es6id: 12.14.5.4 features: [generators] ---*/ -var value = {}; -var assignmentResult, iterationResult, iter, x; - +//- setup +var iterationResult, iter, x; iter = (function*() { - assignmentResult = { x: x = yield } = value; +//- elems +{ x: x = yield } +//- vals +{} +//- teardown }()); iterationResult = iter.next(); -assert.sameValue(assignmentResult, undefined); assert.sameValue(iterationResult.value, undefined); assert.sameValue(iterationResult.done, false); assert.sameValue(x, undefined); iterationResult = iter.next(86); -assert.sameValue(assignmentResult, value); assert.sameValue(iterationResult.value, undefined); assert.sameValue(iterationResult.done, true); assert.sameValue(x, 86); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-elem-init-yield-ident-invalid.js b/src/dstr-assignment/obj-prop-elem-init-yield-ident-invalid.case similarity index 85% rename from test/language/expressions/assignment/destructuring/obj-prop-elem-init-yield-ident-invalid.js rename to src/dstr-assignment/obj-prop-elem-init-yield-ident-invalid.case index 51f730df26..9c127af0ee 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-elem-init-yield-ident-invalid.js +++ b/src/dstr-assignment/obj-prop-elem-init-yield-ident-invalid.case @@ -2,14 +2,17 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the Initializer of an AssignmentElement and outside of a generator function body, it should behave as an IdentifierReference. +template: syntax es6id: 12.14.5.4 flags: [onlyStrict] negative: SyntaxError ---*/ -var x; -0, { x: x = yield } = {}; +//- elems +{ x: x = yield } +//- vals +{} diff --git a/test/language/expressions/assignment/destructuring/obj-prop-elem-init-yield-ident-valid.js b/src/dstr-assignment/obj-prop-elem-init-yield-ident-valid.case similarity index 77% rename from test/language/expressions/assignment/destructuring/obj-prop-elem-init-yield-ident-valid.js rename to src/dstr-assignment/obj-prop-elem-init-yield-ident-valid.case index a197faea09..6ebaf3718f 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-elem-init-yield-ident-valid.js +++ b/src/dstr-assignment/obj-prop-elem-init-yield-ident-valid.case @@ -2,19 +2,21 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the Initializer of an AssignmentElement and outside of a generator function body, it should behave as an IdentifierReference. +template: default es6id: 12.14.5.4 flags: [noStrict] ---*/ -var value = {}; +//- setup var yield = 4; var x; - -assignmentResult = { x: x = yield } = value; - -assert.sameValue(assignmentResult, value); +//- elems +{ x: x = yield } +//- vals +{} +//- body assert.sameValue(x, 4); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-elem-target-yield-expr.js b/src/dstr-assignment/obj-prop-elem-target-yield-expr.case similarity index 77% rename from test/language/expressions/assignment/destructuring/obj-prop-elem-target-yield-expr.js rename to src/dstr-assignment/obj-prop-elem-target-yield-expr.case index 644634311c..2cc4cc9e33 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-elem-target-yield-expr.js +++ b/src/dstr-assignment/obj-prop-elem-target-yield-expr.case @@ -2,32 +2,35 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the DestructuringAssignmentTarget of an AssignmentElement and within a generator function body, it should behave as a YieldExpression. +template: default es6id: 12.14.5.4 features: [generators] ---*/ -var value = { x: 23 }; +//- setup var x = {}; -var assignmentResult, iterationResult, iter; +var iterationResult, iter; iter = (function*() { - assignmentResult = { x: x[yield] } = value; +//- elems +{ x: x[yield] } +//- vals +{ x: 23 } +//- teardown }()); iterationResult = iter.next(); -assert.sameValue(assignmentResult, undefined); assert.sameValue(iterationResult.value, undefined); assert.sameValue(iterationResult.done, false); assert.sameValue(x.prop, undefined); iterationResult = iter.next('prop'); -assert.sameValue(assignmentResult, value); assert.sameValue(iterationResult.value, undefined); assert.sameValue(iterationResult.done, true); assert.sameValue(x.prop, 23); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-elem-target-yield-ident-invalid.js b/src/dstr-assignment/obj-prop-elem-target-yield-ident-invalid.case similarity index 86% rename from test/language/expressions/assignment/destructuring/obj-prop-elem-target-yield-ident-invalid.js rename to src/dstr-assignment/obj-prop-elem-target-yield-ident-invalid.case index c48c1289a7..75503db0e8 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-elem-target-yield-ident-invalid.js +++ b/src/dstr-assignment/obj-prop-elem-target-yield-ident-invalid.case @@ -2,14 +2,17 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the DestructuringAssignmentTarget of an AssignmentElement and outside of a generator function body, it should behave as an IdentifierReference. +template: syntax es6id: 12.14.5.4 flags: [onlyStrict] negative: SyntaxError ---*/ -var x = {}; -0, { x: x[yield] } = {}; +//- elems +{ x: x[yield] } +//- vals +{} diff --git a/test/language/expressions/assignment/destructuring/obj-prop-elem-target-yield-ident-valid.js b/src/dstr-assignment/obj-prop-elem-target-yield-ident-valid.case similarity index 78% rename from test/language/expressions/assignment/destructuring/obj-prop-elem-target-yield-ident-valid.js rename to src/dstr-assignment/obj-prop-elem-target-yield-ident-valid.case index fe0d3aeb6f..597769a9f4 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-elem-target-yield-ident-valid.js +++ b/src/dstr-assignment/obj-prop-elem-target-yield-ident-valid.case @@ -2,20 +2,21 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the DestructuringAssignmentTarget of an AssignmentElement and outside of a generator function body, it should behave as an IdentifierReference. +template: default es6id: 12.14.5.4 flags: [noStrict] ---*/ -var value = { x: 23 }; +//- setup var yield = 'prop'; var x = {}; -var result; - -result = { x: x[yield] } = value; - -assert.sameValue(result, value); +//- elems +{ x: x[yield] } +//- vals +{ x: 23 } +//- body assert.sameValue(x.prop, 23); diff --git a/src/dstr-assignment/obj-prop-identifier-resolution-first.case b/src/dstr-assignment/obj-prop-identifier-resolution-first.case new file mode 100644 index 0000000000..267b49e16b --- /dev/null +++ b/src/dstr-assignment/obj-prop-identifier-resolution-first.case @@ -0,0 +1,19 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + Evaluation of DestructuringAssignmentTarget (first of many). +template: default +es6id: 12.14.5.4 +---*/ + +//- setup +var x = null; +var y; +//- elems +{ a: x, y } +//- vals +{ a: 3 } +//- body +assert.sameValue(x, 3); diff --git a/src/dstr-assignment/obj-prop-identifier-resolution-last.case b/src/dstr-assignment/obj-prop-identifier-resolution-last.case new file mode 100644 index 0000000000..4209cdfbd3 --- /dev/null +++ b/src/dstr-assignment/obj-prop-identifier-resolution-last.case @@ -0,0 +1,19 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + Evaluation of DestructuringAssignmentTarget (last of many). +template: default +es6id: 12.14.5.4 +---*/ + +//- setup +var x = null; +var w; +//- elems +{ w, a: x } +//- vals +{ a: 4 } +//- body +assert.sameValue(x, 4); diff --git a/src/dstr-assignment/obj-prop-identifier-resolution-lone.case b/src/dstr-assignment/obj-prop-identifier-resolution-lone.case new file mode 100644 index 0000000000..ba2142a3d7 --- /dev/null +++ b/src/dstr-assignment/obj-prop-identifier-resolution-lone.case @@ -0,0 +1,18 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + Evaluation of DestructuringAssignmentTarget (lone element). +template: default +es6id: 12.14.5.4 +---*/ + +//- setup +var x = null; +//- elems +{ a: x } +//- vals +{ a: 1 } +//- body +assert.sameValue(x, 1); diff --git a/src/dstr-assignment/obj-prop-identifier-resolution-middle.case b/src/dstr-assignment/obj-prop-identifier-resolution-middle.case new file mode 100644 index 0000000000..651969b1b7 --- /dev/null +++ b/src/dstr-assignment/obj-prop-identifier-resolution-middle.case @@ -0,0 +1,19 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + Evaluation of DestructuringAssignmentTarget (within many). +template: default +es6id: 12.14.5.4 +---*/ + +//- setup +var x = null; +var w, y; +//- elems +{ w, a: x, y } +//- vals +{ a: 5 } +//- body +assert.sameValue(x, 5); diff --git a/src/dstr-assignment/obj-prop-identifier-resolution-trlng.case b/src/dstr-assignment/obj-prop-identifier-resolution-trlng.case new file mode 100644 index 0000000000..6cf90f42ba --- /dev/null +++ b/src/dstr-assignment/obj-prop-identifier-resolution-trlng.case @@ -0,0 +1,19 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + Evaluation of DestructuringAssignmentTarget (lone element with trailing + comma). +template: default +es6id: 12.14.5.4 +---*/ + +//- setup +var x = null; +//- elems +{ a: x, } +//- vals +{ a: 2 } +//- body +assert.sameValue(x, 2); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-name-evaluation-error.js b/src/dstr-assignment/obj-prop-name-evaluation-error.case similarity index 75% rename from test/language/expressions/assignment/destructuring/obj-prop-name-evaluation-error.js rename to src/dstr-assignment/obj-prop-name-evaluation-error.case index 854c6b9c59..16861461ba 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-name-evaluation-error.js +++ b/src/dstr-assignment/obj-prop-name-evaluation-error.case @@ -2,14 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > Any error raised as a result of evaluating PropertyName should be forwarded to the runtime. +template: error es6id: 12.14.5.2 ---*/ +//- setup var a, x; - -assert.throws(TypeError, function() { - ({ [a.b]: x } = {}); -}); +//- error +TypeError +//- elems +{ [a.b]: x } +//- vals +{} diff --git a/test/language/expressions/assignment/destructuring/obj-prop-name-evaluation.js b/src/dstr-assignment/obj-prop-name-evaluation.case similarity index 69% rename from test/language/expressions/assignment/destructuring/obj-prop-name-evaluation.js rename to src/dstr-assignment/obj-prop-name-evaluation.case index 52d4b6ef69..2316d6d09c 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-name-evaluation.js +++ b/src/dstr-assignment/obj-prop-name-evaluation.case @@ -2,17 +2,19 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > PropertyName of an AssignmentProperty may be a ComputedPropertyName. +template: default es6id: 12.14.5.2 ---*/ -var value = { x: 1, xy: 23, y: 2 }; -var result, x, y, xy; - -result = { ['x' + 'y']: x } = value; - -assert.sameValue(result, value); +//- setup +var x, y, xy; +//- elems +{ ['x' + 'y']: x } +//- vals +{ x: 1, xy: 23, y: 2 } +//- body assert.sameValue(x, 23); assert.sameValue(y, undefined); assert.sameValue(xy, undefined); diff --git a/src/dstr-assignment/obj-prop-nested-array-invalid.case b/src/dstr-assignment/obj-prop-nested-array-invalid.case new file mode 100644 index 0000000000..b4321822d3 --- /dev/null +++ b/src/dstr-assignment/obj-prop-nested-array-invalid.case @@ -0,0 +1,18 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: > + 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. +template: syntax +es6id: 12.14.5.1 +negative: SyntaxError +---*/ + +//- elems +{ x: [(x, y)] } +//- vals +{ x: [] } diff --git a/test/language/expressions/assignment/destructuring/obj-prop-nested-array-null.js b/src/dstr-assignment/obj-prop-nested-array-null.case similarity index 75% rename from test/language/expressions/assignment/destructuring/obj-prop-nested-array-null.js rename to src/dstr-assignment/obj-prop-nested-array-null.case index 7a40d1fb78..e893e8aa05 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-nested-array-null.js +++ b/src/dstr-assignment/obj-prop-nested-array-null.case @@ -2,14 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an array literal and the value is `null`, a TypeError should be thrown. +template: error es6id: 12.14.5.4 ---*/ +//- setup var x; - -assert.throws(TypeError, function() { - ({ x: [ x ] } = { x: null }); -}); +//- error +TypeError +//- elems +{ x: [ x ] } +//- vals +{ x: null } diff --git a/test/language/expressions/assignment/destructuring/obj-prop-nested-array-undefined-own.js b/src/dstr-assignment/obj-prop-nested-array-undefined-own.case similarity index 74% rename from test/language/expressions/assignment/destructuring/obj-prop-nested-array-undefined-own.js rename to src/dstr-assignment/obj-prop-nested-array-undefined-own.case index e1f0dd63c7..415c4d9997 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-nested-array-undefined-own.js +++ b/src/dstr-assignment/obj-prop-nested-array-undefined-own.case @@ -2,14 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an array literal and the value is `undefined`, a TypeError should be thrown. +template: error es6id: 12.14.5.4 ---*/ +//- setup var x; - -assert.throws(TypeError, function() { - ({ x: [ x ] } = { x: undefined }); -}); +//- error +TypeError +//- elems +{ x: [ x ] } +//- vals +{ x: undefined } diff --git a/test/language/expressions/assignment/destructuring/obj-prop-nested-array-undefined.js b/src/dstr-assignment/obj-prop-nested-array-undefined.case similarity index 77% rename from test/language/expressions/assignment/destructuring/obj-prop-nested-array-undefined.js rename to src/dstr-assignment/obj-prop-nested-array-undefined.case index 95554b9165..1e4230ae53 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-nested-array-undefined.js +++ b/src/dstr-assignment/obj-prop-nested-array-undefined.case @@ -2,14 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an array literal and the value is not defined, a TypeError should be thrown. +template: error es6id: 12.14.5.4 ---*/ +//- setup var x; - -assert.throws(TypeError, function() { - ({ x: [ x ] } = {}); -}); +//- error +TypeError +//- elems +{ x: [ x ] } +//- vals +{} diff --git a/test/language/expressions/assignment/destructuring/obj-prop-nested-array-yield-expr.js b/src/dstr-assignment/obj-prop-nested-array-yield-expr.case similarity index 76% rename from test/language/expressions/assignment/destructuring/obj-prop-nested-array-yield-expr.js rename to src/dstr-assignment/obj-prop-nested-array-yield-expr.case index 4e1e142e23..fba8a40ada 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-nested-array-yield-expr.js +++ b/src/dstr-assignment/obj-prop-nested-array-yield-expr.case @@ -2,31 +2,34 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the Initializer of a nested destructuring assignment and within a generator function body, it should behave as a YieldExpression. +template: default es6id: 12.14.5.4 features: [generators] ---*/ -var value = { x: [] }; -var assignmentResult, iterationResult, iter, x; +//- setup +var iterationResult, iter, x; iter = (function*() { - assignmentResult = { x: [x = yield] } = value; +//- elems +{ x: [x = yield] } +//- vals +{ x: [] } +//- teardown }()); iterationResult = iter.next(); -assert.sameValue(assignmentResult = undefined); assert.sameValue(iterationResult.value, undefined); assert.sameValue(iterationResult.done, false); assert.sameValue(x, undefined); iterationResult = iter.next(24601); -assert.sameValue(assignmentResult, value); assert.sameValue(iterationResult.value, undefined); assert.sameValue(iterationResult.done, true); assert.sameValue(x, 24601); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-nested-array-yield-ident-invalid.js b/src/dstr-assignment/obj-prop-nested-array-yield-ident-invalid.case similarity index 84% rename from test/language/expressions/assignment/destructuring/obj-prop-nested-array-yield-ident-invalid.js rename to src/dstr-assignment/obj-prop-nested-array-yield-ident-invalid.case index 29a8e9c6c4..addafc3b40 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-nested-array-yield-ident-invalid.js +++ b/src/dstr-assignment/obj-prop-nested-array-yield-ident-invalid.case @@ -2,14 +2,17 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > 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. +template: syntax es6id: 12.14.5.4 flags: [onlyStrict] negative: SyntaxError ---*/ -var x; -0, { x: [x = yield] } = { x: [] }; +//- elems +{ x: [x = yield] } +//- vals +{ x: [] } diff --git a/test/language/expressions/assignment/destructuring/obj-prop-nested-array-yield-ident-valid.js b/src/dstr-assignment/obj-prop-nested-array-yield-ident-valid.case similarity index 76% rename from test/language/expressions/assignment/destructuring/obj-prop-nested-array-yield-ident-valid.js rename to src/dstr-assignment/obj-prop-nested-array-yield-ident-valid.case index 83df76722c..19b82bbe5a 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-nested-array-yield-ident-valid.js +++ b/src/dstr-assignment/obj-prop-nested-array-yield-ident-valid.case @@ -2,19 +2,21 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > 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. +template: default es6id: 12.14.5.4 flags: [noStrict] ---*/ -var value = { x: [] }; +//- setup var yield = 22; -var result, x; - -result = { x: [x = yield] } = value; - -assert.sameValue(result, value); +var x; +//- elems +{ x: [x = yield] } +//- vals +{ x: [] } +//- body assert.sameValue(x, 22); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-nested-array.js b/src/dstr-assignment/obj-prop-nested-array.case similarity index 75% rename from test/language/expressions/assignment/destructuring/obj-prop-nested-array.js rename to src/dstr-assignment/obj-prop-nested-array.case index a28cc299c8..3aabe634cc 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-nested-array.js +++ b/src/dstr-assignment/obj-prop-nested-array.case @@ -2,17 +2,19 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an array literal, it should be parsed parsed as a DestructuringAssignmentPattern and evaluated as a destructuring assignment. +template: default es6id: 12.14.5.4 ---*/ -var value = { x: [321] }; -var result, y; - -result = { x: [y] } = value; - -assert.sameValue(result, value); +//- setup +var y; +//- elems +{ x: [y] } +//- vals +{ x: [321] } +//- body assert.sameValue(y, 321); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-nested-obj-invalid.js b/src/dstr-assignment/obj-prop-nested-obj-invalid.case similarity index 85% rename from test/language/expressions/assignment/destructuring/obj-prop-nested-obj-invalid.js rename to src/dstr-assignment/obj-prop-nested-obj-invalid.case index e1388ff867..9bf46e92cd 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-nested-obj-invalid.js +++ b/src/dstr-assignment/obj-prop-nested-obj-invalid.case @@ -2,14 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > 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. +template: syntax es6id: 12.14.5.1 negative: SyntaxError ---*/ -({ x: { get x() {} } } = { x: {} }); +//- elems +{ x: { get x() {} } } +//- vals +{ x: {} } diff --git a/test/language/expressions/assignment/destructuring/obj-prop-nested-obj-null.js b/src/dstr-assignment/obj-prop-nested-obj-null.case similarity index 75% rename from test/language/expressions/assignment/destructuring/obj-prop-nested-obj-null.js rename to src/dstr-assignment/obj-prop-nested-obj-null.case index 7806305a64..d0f88aad7e 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-nested-obj-null.js +++ b/src/dstr-assignment/obj-prop-nested-obj-null.case @@ -2,14 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an object literal and the value is `null`, a TypeError should be thrown. +template: error es6id: 12.14.5.4 ---*/ +//- setup var x; - -assert.throws(TypeError, function() { - ({ x: { x } } = { x: null }); -}); +//- error +TypeError +//- elems +{ x: { x } } +//- vals +{ x: null } diff --git a/test/language/expressions/assignment/destructuring/obj-prop-nested-obj-undefined-own.js b/src/dstr-assignment/obj-prop-nested-obj-undefined-own.case similarity index 74% rename from test/language/expressions/assignment/destructuring/obj-prop-nested-obj-undefined-own.js rename to src/dstr-assignment/obj-prop-nested-obj-undefined-own.case index 771e90e4ec..506879addd 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-nested-obj-undefined-own.js +++ b/src/dstr-assignment/obj-prop-nested-obj-undefined-own.case @@ -2,14 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an object literal and the value is `undefined`, a TypeError should be thrown. +template: error es6id: 12.14.5.4 ---*/ +//- setup var x; - -assert.throws(TypeError, function() { - ({ x: { x } } = { x: undefined }); -}); +//- error +TypeError +//- elems +{ x: { x } } +//- vals +{ x: undefined } diff --git a/test/language/expressions/assignment/destructuring/obj-prop-nested-obj-undefined.js b/src/dstr-assignment/obj-prop-nested-obj-undefined.case similarity index 77% rename from test/language/expressions/assignment/destructuring/obj-prop-nested-obj-undefined.js rename to src/dstr-assignment/obj-prop-nested-obj-undefined.case index ac0ff673a0..742d2d99d9 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-nested-obj-undefined.js +++ b/src/dstr-assignment/obj-prop-nested-obj-undefined.case @@ -2,14 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an object literal and the value is not defined, a TypeError should be thrown. +template: error es6id: 12.14.5.4 ---*/ +//- setup var x; - -assert.throws(TypeError, function() { - ({ x: { x } } = {}); -}); +//- error +TypeError +//- elems +{ x: { x } } +//- vals +{} diff --git a/test/language/expressions/assignment/destructuring/obj-prop-nested-obj-yield-expr.js b/src/dstr-assignment/obj-prop-nested-obj-yield-expr.case similarity index 76% rename from test/language/expressions/assignment/destructuring/obj-prop-nested-obj-yield-expr.js rename to src/dstr-assignment/obj-prop-nested-obj-yield-expr.case index 3d89a89736..34bb01f8cc 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-nested-obj-yield-expr.js +++ b/src/dstr-assignment/obj-prop-nested-obj-yield-expr.case @@ -2,31 +2,34 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When a `yield` token appears within the Initializer of a nested destructuring assignment and within a generator function body, it should behave as a YieldExpression. +template: default es6id: 12.14.5.4 features: [generators] ---*/ -var value = { x: {} }; -var assignmentResult, iterationResult, iter, x; +//- setup +var iterationResult, iter, x = undefined; iter = (function*() { - assignmentResult = { x: { x = yield } } = value; +//- elems +{ x: { x = yield } } +//- vals +{ x: {} } +//- teardown }()); iterationResult = iter.next(); -assert.sameValue(assignmentResult, undefined); assert.sameValue(iterationResult.value, undefined); assert.sameValue(iterationResult.done, false); assert.sameValue(x, undefined); iterationResult = iter.next(4); -assert.sameValue(assignmentResult, value); assert.sameValue(iterationResult.value, undefined); assert.sameValue(iterationResult.done, true); assert.sameValue(x, 4); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-nested-obj-yield-ident-invalid.js b/src/dstr-assignment/obj-prop-nested-obj-yield-ident-invalid.case similarity index 84% rename from test/language/expressions/assignment/destructuring/obj-prop-nested-obj-yield-ident-invalid.js rename to src/dstr-assignment/obj-prop-nested-obj-yield-ident-invalid.case index 3a4b44df7d..c37458e46d 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-nested-obj-yield-ident-invalid.js +++ b/src/dstr-assignment/obj-prop-nested-obj-yield-ident-invalid.case @@ -2,14 +2,17 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > 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. +template: syntax es6id: 12.14.5.4 flags: [onlyStrict] negative: SyntaxError ---*/ -var x; -0, { x: { x = yield } } = { x: {} }; +//- elems +{ x: { x = yield } } +//- vals +{ x: {} } diff --git a/test/language/expressions/assignment/destructuring/obj-prop-nested-obj-yield-ident-valid.js b/src/dstr-assignment/obj-prop-nested-obj-yield-ident-valid.case similarity index 79% rename from test/language/expressions/assignment/destructuring/obj-prop-nested-obj-yield-ident-valid.js rename to src/dstr-assignment/obj-prop-nested-obj-yield-ident-valid.case index 7261d722e1..5e30d0cb26 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-nested-obj-yield-ident-valid.js +++ b/src/dstr-assignment/obj-prop-nested-obj-yield-ident-valid.case @@ -2,19 +2,21 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > 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. +template: default es6id: 12.14.5.4 flags: [noStrict] ---*/ -var value = { x: {} }; +//- setup var yield = 2; var result, x; - -result = { x: { x = yield } } = value; - -assert.sameValue(result, value); +//- elems +{ x: { x = yield } } +//- vals +{ x: {} } +//- body assert.sameValue(x, 2); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-nested-obj.js b/src/dstr-assignment/obj-prop-nested-obj.case similarity index 77% rename from test/language/expressions/assignment/destructuring/obj-prop-nested-obj.js rename to src/dstr-assignment/obj-prop-nested-obj.case index a47fdaccb2..2391e49b38 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-nested-obj.js +++ b/src/dstr-assignment/obj-prop-nested-obj.case @@ -2,17 +2,19 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > When DestructuringAssignmentTarget is an object literal, it should be parsed as a DestructuringAssignmentPattern and evaluated as a destructuring assignment. +template: default es6id: 12.14.5.4 ---*/ -var value = { x: { y: 2 } }; +//- setup var result, y; - -result = { x: { y } } = value; - -assert.sameValue(result, value); +//- elems +{ x: { y } } +//- vals +{ x: { y: 2 } } +//- body assert.sameValue(y, 2); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-put-const.js b/src/dstr-assignment/obj-prop-put-const.case similarity index 73% rename from test/language/expressions/assignment/destructuring/obj-prop-put-const.js rename to src/dstr-assignment/obj-prop-put-const.case index d17289a0ac..fd34765933 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-put-const.js +++ b/src/dstr-assignment/obj-prop-put-const.case @@ -2,14 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > The assignment target should obey `const` semantics. +template: error es6id: 12.14.5.4 features: [const] ---*/ +//- setup const c = 1; - -assert.throws(TypeError, function() { - ({ a: c } = { a: 2 }); -}); +//- error +TypeError +//- elems +{ a: c } +//- vals +{ a: 2 } diff --git a/test/language/expressions/assignment/destructuring/obj-id-put-let.js b/src/dstr-assignment/obj-prop-put-let.case similarity index 70% rename from test/language/expressions/assignment/destructuring/obj-id-put-let.js rename to src/dstr-assignment/obj-prop-put-let.case index 28c1145de0..358c9d0055 100644 --- a/test/language/expressions/assignment/destructuring/obj-id-put-let.js +++ b/src/dstr-assignment/obj-prop-put-let.case @@ -2,13 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > The assignment target should obey `let` semantics. +template: error es6id: 12.14.5.4 features: [let] ---*/ -assert.throws(ReferenceError, function() { - ({ x } = {}); - let x; -}); +//- error +ReferenceError +//- elems +{ a: x } +//- vals +{} +//- teardown +let x; diff --git a/test/language/expressions/assignment/destructuring/obj-prop-put-order.js b/src/dstr-assignment/obj-prop-put-order.case similarity index 69% rename from test/language/expressions/assignment/destructuring/obj-prop-put-order.js rename to src/dstr-assignment/obj-prop-put-order.case index e6e360f878..6f4ca4faf6 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-put-order.js +++ b/src/dstr-assignment/obj-prop-put-order.case @@ -2,16 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > The AssignmentElements in an AssignmentElementList are evaluated in left- to-right order. +template: default es6id: 12.14.5.4 ---*/ -var value = { a: 2, z: 1 }; -var x, result; - -result = { z: x, a: x } = value; - -assert.sameValue(result, value); +//- setup +var x; +//- elems +{ z: x, a: x } +//- vals +{ a: 2, z: 1 } +//- body assert.sameValue(x, 2); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-put-prop-ref-no-get.js b/src/dstr-assignment/obj-prop-put-prop-ref-no-get.case similarity index 76% rename from test/language/expressions/assignment/destructuring/obj-prop-put-prop-ref-no-get.js rename to src/dstr-assignment/obj-prop-put-prop-ref-no-get.case index 9f036e6c7d..2b5b83ec5f 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-put-prop-ref-no-get.js +++ b/src/dstr-assignment/obj-prop-put-prop-ref-no-get.case @@ -2,15 +2,16 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > If the DestructuringAssignmentTarget of an AssignmentElement is a PropertyReference, it should not be evaluated. +template: default es6id: 12.14.5.4 ---*/ -var value = { a: 23 }; -var x, setValue, result; -x = { +//- setup +var setValue; +var x = { get y() { $ERROR('The property should not be accessed.'); }, @@ -18,8 +19,9 @@ x = { setValue = val; } }; - -result = { a: x.y } = value; - -assert.sameValue(result, value); +//- elems +{ a: x.y } +//- vals +{ a: 23 } +//- body assert.sameValue(setValue, 23); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-put-prop-ref-user-err.js b/src/dstr-assignment/obj-prop-put-prop-ref-user-err.case similarity index 75% rename from test/language/expressions/assignment/destructuring/obj-prop-put-prop-ref-user-err.js rename to src/dstr-assignment/obj-prop-put-prop-ref-user-err.case index dafa8026c0..1e119134f7 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-put-prop-ref-user-err.js +++ b/src/dstr-assignment/obj-prop-put-prop-ref-user-err.case @@ -2,19 +2,22 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > Any error raised as a result of setting the value should be forwarded to the runtime. +template: error es6id: 12.14.5.4 ---*/ -var value = { a: 23 }; +//- setup var x = { set y(val) { throw new Test262Error(); } }; - -assert.throws(Test262Error, function() { - ({ a: x.y } = value); -}); +//- error +Test262Error +//- elems +{ a: x.y } +//- vals +{ a: 23 } diff --git a/test/language/expressions/assignment/destructuring/obj-prop-put-prop-ref.js b/src/dstr-assignment/obj-prop-put-prop-ref.case similarity index 72% rename from test/language/expressions/assignment/destructuring/obj-prop-put-prop-ref.js rename to src/dstr-assignment/obj-prop-put-prop-ref.case index 163cc9ff8c..6a78d80ff8 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-put-prop-ref.js +++ b/src/dstr-assignment/obj-prop-put-prop-ref.case @@ -2,17 +2,18 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > The DestructuringAssignmentTarget of an AssignmentElement may be a PropertyReference. +template: default es6id: 12.14.5.4 ---*/ -var value = { xy: 4 }; +//- setup var x = {}; -var result; - -result = { xy: x.y } = value; - -assert.sameValue(result, value); +//- elems +{ xy: x.y } +//- vals +{ xy: 4 } +//- body assert.sameValue(x.y, 4); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-put-unresolvable-no-strict.js b/src/dstr-assignment/obj-prop-put-unresolvable-no-strict.case similarity index 81% rename from test/language/expressions/assignment/destructuring/obj-prop-put-unresolvable-no-strict.js rename to src/dstr-assignment/obj-prop-put-unresolvable-no-strict.case index 0ed8651228..c2dff5c904 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-put-unresolvable-no-strict.js +++ b/src/dstr-assignment/obj-prop-put-unresolvable-no-strict.case @@ -2,15 +2,21 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > Outside of strict mode, if the the assignment target is an unresolvable reference, a new `var` binding should be created in the environment record. +template: default es6id: 12.14.5.4 flags: [noStrict] ---*/ +//- setup { - ({ x: unresolvable } = {}); +//- elems +{ x: unresolvable } +//- vals +{} +//- teardown } assert.sameValue(unresolvable, undefined); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-put-unresolvable-strict.js b/src/dstr-assignment/obj-prop-put-unresolvable-strict.case similarity index 76% rename from test/language/expressions/assignment/destructuring/obj-prop-put-unresolvable-strict.js rename to src/dstr-assignment/obj-prop-put-unresolvable-strict.case index f75a6927c5..52cbdd565d 100644 --- a/test/language/expressions/assignment/destructuring/obj-prop-put-unresolvable-strict.js +++ b/src/dstr-assignment/obj-prop-put-unresolvable-strict.case @@ -2,13 +2,17 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: > +desc: > In strict mode, if the the assignment target is an unresolvable reference, a ReferenceError should be thrown. +template: error es6id: 12.14.5.4 flags: [onlyStrict] ---*/ -assert.throws(ReferenceError, function() { - ({ x: unresolvable } = {}); -}); +//- error +ReferenceError +//- elems +{ x: unresolvable } +//- vals +{} diff --git a/src/dstr-assignment/syntax/assignment-expr.template b/src/dstr-assignment/syntax/assignment-expr.template new file mode 100644 index 0000000000..a93edd3e64 --- /dev/null +++ b/src/dstr-assignment/syntax/assignment-expr.template @@ -0,0 +1,20 @@ +// Copyright (C) 2016 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +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 + + 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. +---*/ + +0, /*{ elems }*/ = /*{ vals }*/; diff --git a/src/dstr-assignment/syntax/for-in.template b/src/dstr-assignment/syntax/for-in.template new file mode 100644 index 0000000000..279b319960 --- /dev/null +++ b/src/dstr-assignment/syntax/for-in.template @@ -0,0 +1,29 @@ +// Copyright (C) 2016 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +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 : + 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. + [...] +---*/ + +for (/*{ elems }*/ in [/*{ vals }*/]) ; diff --git a/src/dstr-assignment/syntax/for-of.template b/src/dstr-assignment/syntax/for-of.template new file mode 100644 index 0000000000..430550dd3c --- /dev/null +++ b/src/dstr-assignment/syntax/for-of.template @@ -0,0 +1,29 @@ +// Copyright (C) 2016 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +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 : + 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. + [...] +---*/ + +for (/*{ elems }*/ of [/*{ vals }*/]) ; diff --git a/test/language/expressions/assignment/destructuring/array-elem-elision.js b/test/language/expressions/assignment/destructuring/array-elem-elision.js deleted file mode 100644 index dd7c6dd612..0000000000 --- a/test/language/expressions/assignment/destructuring/array-elem-elision.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (C) 2015 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: > - ArrayAssignmentPattern may include elisions at any position in a - AssignmentElementList that does not contain an AssignmentRestElement. -es6id: 12.14.5 ----*/ - -var value = [1, 2, 3, 4, 5, 6]; -var x, y; -var result; - -result = [, x, , y, ,] = value; - -assert.sameValue(result, value); -assert.sameValue(x, 2); -assert.sameValue(y, 4); diff --git a/test/language/expressions/assignment/destructuring/array-elem-init-assignment.js b/test/language/expressions/assignment/destructuring/array-elem-init-assignment.js deleted file mode 100644 index 3eea1f6863..0000000000 --- a/test/language/expressions/assignment/destructuring/array-elem-init-assignment.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2015 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: > - If the Initializer is present and v is undefined, the Initializer should be - evaluated and the result assigned to the target reference. -es6id: 12.14.5.3 ----*/ - -var result, value, x; - -value = []; -result = [ x = 10 ] = value; - -assert.sameValue(result, value); -assert.sameValue(x, 10, 'no element at index'); - -value = [2]; -result = [ x = 11 ] = value; - -assert.sameValue(result, value); -assert.sameValue(x, 2, 'element at index (truthy value)'); - -value = [ null ]; -result = [ x = 12 ] = value; - -assert.sameValue(result, value); -assert.sameValue(x, null, 'element at index (`null`)'); - -value = [ undefined ]; -result = [ x = 13 ] = value; - -assert.sameValue(result, value); -assert.sameValue(x, 13, 'element at index (`undefined`)'); - -value = [ , ]; -result = [ x = 14 ] = value; - -assert.sameValue(result, value); -assert.sameValue(x, 14, 'element at index (sparse array)'); diff --git a/test/language/expressions/assignment/destructuring/array-elem-init-evaluation.js b/test/language/expressions/assignment/destructuring/array-elem-init-evaluation.js deleted file mode 100644 index 0e5198eeac..0000000000 --- a/test/language/expressions/assignment/destructuring/array-elem-init-evaluation.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2015 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: > - The Initializer should only be evaluated if v is undefined. -es6id: 12.14.5.3 ----*/ - -var result, value, x, flag; - -value = []; -flag = false; -result = [ x = flag = true ] = value; -assert.sameValue(result, value); -assert.sameValue(x, true); -assert.sameValue(flag, true); - -value = [14]; -flag = false; -result = [ x = flag = true ] = value; -assert.sameValue(result, value); -assert.sameValue(x, 14); -assert.sameValue(flag, false); diff --git a/test/language/expressions/assignment/destructuring/array-elision.js b/test/language/expressions/assignment/destructuring/array-elision.js deleted file mode 100644 index 8933cb5a14..0000000000 --- a/test/language/expressions/assignment/destructuring/array-elision.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (C) 2015 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: > - An ArrayAssignmentPattern containing only Elisions requires iterable values - and throws for other values. -es6id: 12.14.5.2 ----*/ - -var value, result; - -assert.throws(TypeError, function() { - [,] = undefined; -}); - -assert.throws(TypeError, function() { - [,] = null; -}); - -assert.throws(TypeError, function() { - [,] = true; -}); - -assert.throws(TypeError, function() { - [,] = 1; -}); - -result = [,] = 'string literal'; - -assert.sameValue(result, 'string literal'); - -assert.throws(TypeError, function() { - [,] = Symbol('s'); -}); - -value = []; -result = [,] = value; - -assert.sameValue(result, value); diff --git a/test/language/expressions/assignment/destructuring/array-empty.js b/test/language/expressions/assignment/destructuring/array-empty.js deleted file mode 100644 index 524f73f8fd..0000000000 --- a/test/language/expressions/assignment/destructuring/array-empty.js +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (C) 2015 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: > - An ArrayAssignmentPattern without an AssignmentElementList requires - iterable values and throws for other values. -es6id: 12.14.5.2 ----*/ - -var value, result; - -assert.throws(TypeError, function() { - [] = undefined; -}); - -assert.throws(TypeError, function() { - [] = null; -}); - -assert.throws(TypeError, function() { - [] = true; -}); - -assert.throws(TypeError, function() { - [] = 1; -}); - -result = [] = 'string literal'; - -assert.sameValue(result, 'string literal'); - -assert.throws(TypeError, function() { - [] = Symbol('s'); -}); - -value = []; -result = [] = value; - -assert.sameValue(result, value); diff --git a/test/language/expressions/assignment/destructuring/array-iteration.js b/test/language/expressions/assignment/destructuring/array-iteration.js deleted file mode 100644 index bbaa568a87..0000000000 --- a/test/language/expressions/assignment/destructuring/array-iteration.js +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (C) 2015 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: > - Value iteration only proceeds for the number of elements in the - ArrayAssignmentPattern. -es6id: 12.14.5.3 -features: [generators] ----*/ - -var count, iter, result; -var g = function*() { - count += 1; - yield; - count += 1; - yield; - count += 1; -} - -count = 0; -iter = g(); -result = [] = iter; - -assert.sameValue(result, iter); -assert.sameValue(count, 0); - -iter = g(); -result = [,] = iter; - -assert.sameValue(result, iter); -assert.sameValue(count, 1); - -count = 0; -iter = g(); -result = [,,] = iter; - -assert.sameValue(result, iter); -assert.sameValue(count, 2); - -count = 0; -iter = g(); -result = [,,,] = iter; - -assert.sameValue(result, iter); -assert.sameValue(count, 3); - -count = 0; -iter = g(); -result = [,,,,] = iter; - -assert.sameValue(result, iter); -assert.sameValue(count, 3); diff --git a/test/language/expressions/assignment/destructuring/obj-id-identifier-resolution.js b/test/language/expressions/assignment/destructuring/obj-id-identifier-resolution.js deleted file mode 100644 index ff3dd5a201..0000000000 --- a/test/language/expressions/assignment/destructuring/obj-id-identifier-resolution.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (C) 2015 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: > - Evaluation of DestructuringAssignmentTarget. -es6id: 12.14.5.4 ----*/ - -var result, value, w, x, y; - -x = null; -value = { x: 1 }; -result = { x } = value; - -assert.sameValue(result, value); -assert.sameValue(x, 1); - -x = null; -value = { x: 2 }; -result = { x, } = value; - -assert.sameValue(result, value); -assert.sameValue(x, 2); - -x = null; -value = { x: 3 }; -result = { x, y } = value; - -assert.sameValue(result, value); -assert.sameValue(x, 3); - -x = null; -value = { x: 4 }; -result = { w, x } = value; - -assert.sameValue(result, value); -assert.sameValue(x, 4); - -x = null; -value = { x: 5 }; -result = { w, x, y } = value; - -assert.sameValue(result, value); -assert.sameValue(x, 5); diff --git a/test/language/expressions/assignment/destructuring/obj-id-identifier-yield-ident-valid.js b/test/language/expressions/assignment/destructuring/obj-id-identifier-yield-ident-valid.js deleted file mode 100644 index 4d4b5c8363..0000000000 --- a/test/language/expressions/assignment/destructuring/obj-id-identifier-yield-ident-valid.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2015 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: > - `yield` is a valid IdentifierReference in an AssignmentProperty outside of - strict mode and generator functions. -es6id: 12.14.5 -flags: [noStrict] ----*/ - -var value = { yield: 3 }; -var result, yield; - -result = { yield } = value; - -assert.sameValue(result, value); -assert.sameValue(yield, 3); diff --git a/test/language/expressions/assignment/destructuring/obj-id-init-assignment.js b/test/language/expressions/assignment/destructuring/obj-id-init-assignment.js deleted file mode 100644 index 5e9da802e4..0000000000 --- a/test/language/expressions/assignment/destructuring/obj-id-init-assignment.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (C) 2015 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: > - If the Initializer is present and v is undefined, the Initializer should be - evaluated and the result assigned to the target reference. -es6id: 12.14.5.4 ----*/ - -var result, value, x; - -value = {}; -result = { x = 1 } = value; - -assert.sameValue(result, value); -assert.sameValue(x, 1, 'no property defined'); - -value = { x: 2 }; -result = { x = 1 } = value; - -assert.sameValue(result, value); -assert.sameValue(x, 2, 'own property defined (truthy value)'); - -value = { x: null }; -result = { x = 1 } = value; - -assert.sameValue(result, value); -assert.sameValue(x, null, 'own property defined (`null`)'); - -value = { x: undefined }; -result = { x = 1 } = value; - -assert.sameValue(result, value); -assert.sameValue(x, 1, 'own property defined (`undefined`)'); diff --git a/test/language/expressions/assignment/destructuring/obj-id-init-evaluation.js b/test/language/expressions/assignment/destructuring/obj-id-init-evaluation.js deleted file mode 100644 index af03125bd2..0000000000 --- a/test/language/expressions/assignment/destructuring/obj-id-init-evaluation.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2015 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: > - The Initializer should only be evaluated if v is undefined. -es6id: 12.14.5.4 ----*/ - -var result, value, x, flag; - -value = {}; -flag = false; -result = { x = flag = true } = value; -assert.sameValue(result, value); -assert.sameValue(x, true); -assert.sameValue(flag, true); - -value = { x: 1 }; -flag = false; -result = { x = flag = true } = value; -assert.sameValue(result, value); -assert.sameValue(x, 1); -assert.sameValue(flag, false); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-elem-init-assignment.js b/test/language/expressions/assignment/destructuring/obj-prop-elem-init-assignment.js deleted file mode 100644 index 85c013feae..0000000000 --- a/test/language/expressions/assignment/destructuring/obj-prop-elem-init-assignment.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (C) 2015 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: > - If the Initializer is present and v is undefined, the Initializer should be - evaluated and the result assigned to the target reference. -es6id: 12.14.5.4 ----*/ - -var result, value, x; - -value = {}; -result = { y: x = 1 } = value; - -assert.sameValue(result, value); -assert.sameValue(x, 1, 'no property defined'); - -value = { y: 2 }; -result = { y: x = 1 } = value; - -assert.sameValue(result, value); -assert.sameValue(x, 2, 'own property defined (truthy value)'); - -value = { y: null }; -result = { y: x = 1 } = value; - -assert.sameValue(result, value); -assert.sameValue(x, null, 'own property defined (`null`)'); - -value = { y: undefined }; -result = { y: x = 1 } = value; - -assert.sameValue(result, value); -assert.sameValue(x, 1, 'own property defined (`undefined`)'); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-elem-init-evaluation.js b/test/language/expressions/assignment/destructuring/obj-prop-elem-init-evaluation.js deleted file mode 100644 index efd1237e31..0000000000 --- a/test/language/expressions/assignment/destructuring/obj-prop-elem-init-evaluation.js +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2015 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: > - The Initializer should only be evaluated if v is undefined. -es6id: 12.14.5.4 ----*/ - -var result, value, x, flag; - -value = {}; -flag = false; -result = { x: x = flag = true } = value; -assert.sameValue(result, value); -assert.sameValue(x, true); -assert.sameValue(flag, true); - -value = { y: 1 }; -flag = false; -result = { y: x = flag = true } = value; -assert.sameValue(result, value); -assert.sameValue(x, 1); -assert.sameValue(flag, false); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-identifier-resolution.js b/test/language/expressions/assignment/destructuring/obj-prop-identifier-resolution.js deleted file mode 100644 index 2798828162..0000000000 --- a/test/language/expressions/assignment/destructuring/obj-prop-identifier-resolution.js +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (C) 2015 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: > - Evaluation of DestructuringAssignmentTarget. -es6id: 12.14.5.4 ----*/ - -var result, value, w, x, y; - -x = null; -value = { a: 1 }; -result = { a: x } = value; - -assert.sameValue(result, value); -assert.sameValue(x, 1); - -x = null; -value = { a: 2 }; -result = { a: x, } = value; - -assert.sameValue(result, value); -assert.sameValue(x, 2); - -x = null; -value = { a: 3 }; -result = { a: x, y } = value; - -assert.sameValue(result, value); -assert.sameValue(x, 3); - -x = null; -value = { a: 4 }; -result = { w, a: x } = value; - -assert.sameValue(result, value); -assert.sameValue(x, 4); - -x = null; -value = { a: 5 }; -result = { w, a: x, y } = value; - -assert.sameValue(result, value); -assert.sameValue(x, 5); diff --git a/test/language/expressions/assignment/destructuring/obj-prop-nested-array-invalid.js b/test/language/expressions/assignment/destructuring/obj-prop-nested-array-invalid.js deleted file mode 100644 index 011b8291df..0000000000 --- a/test/language/expressions/assignment/destructuring/obj-prop-nested-array-invalid.js +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (C) 2015 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -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. -es6id: 12.14.5.1 -negative: SyntaxError ----*/ - -var x, y; - -({ x: [(x, y)] } = { x: [] }); diff --git a/test/language/expressions/assignment/destructuring/object-empty.js b/test/language/expressions/assignment/destructuring/object-empty.js deleted file mode 100644 index 9658156eb7..0000000000 --- a/test/language/expressions/assignment/destructuring/object-empty.js +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2015 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -description: > - An ObjectAssignmentPattern without an AssignmentPropertyList requires - object-coercible values and throws for other values. -es6id: 12.14.5.2 ----*/ - -var value, result; - -assert.throws(TypeError, function() { - 0, {} = undefined; -}); - -assert.throws(TypeError, function() { - 0, {} = null; -}); - -result = {} = true; - -assert.sameValue(result, true); - -result = {} = 1; - -assert.sameValue(result, 1); - -result = {} = 'string literal'; - -assert.sameValue(result, 'string literal'); - -value = Symbol('s'); -result = {} = value; - -assert.sameValue(result, value); - -value = {}; -result = {} = value; - -assert.sameValue(result, value); -- GitLab