From b29573bdcec9e234c18a24428b73a42da4b6d912 Mon Sep 17 00:00:00 2001 From: Marko Lahma Date: Wed, 19 May 2021 20:04:50 +0300 Subject: [PATCH] Support optional catch binding (#900) --- .../Language/Statements/TryTests.cs | 15 ++++ .../language/statements/try/S12.14_A16_T1.js | 2 +- .../language/statements/try/S12.14_A16_T10.js | 2 +- .../language/statements/try/S12.14_A16_T11.js | 2 +- .../language/statements/try/S12.14_A16_T12.js | 2 +- .../language/statements/try/S12.14_A16_T13.js | 2 +- .../language/statements/try/S12.14_A16_T14.js | 4 +- .../language/statements/try/S12.14_A16_T15.js | 4 +- .../language/statements/try/S12.14_A16_T2.js | 2 +- .../language/statements/try/S12.14_A16_T3.js | 2 +- .../language/statements/try/S12.14_A16_T5.js | 2 +- .../language/statements/try/S12.14_A16_T6.js | 2 +- .../language/statements/try/S12.14_A16_T7.js | 2 +- .../language/statements/try/S12.14_A16_T8.js | 2 +- .../language/statements/try/S12.14_A16_T9.js | 2 +- ...es-restriction-arguments-negative-early.js | 2 +- ...ndnames-restriction-eval-negative-early.js | 2 +- .../completion-values-fn-finally-abrupt.js | 79 ++++++++++++++++++ .../completion-values-fn-finally-normal.js | 80 +++++++++++++++++++ .../completion-values-fn-finally-return.js | 80 +++++++++++++++++++ .../statements/try/completion-values.js | 65 +++++++++++++++ .../ary-init-iter-close.js} | 1 - .../ary-init-iter-get-err-array-prototype.js | 40 ++++++++++ .../ary-init-iter-get-err.js} | 1 - .../ary-init-iter-no-close.js} | 1 - .../ary-name-iter-val.js} | 1 - .../ary-ptrn-elem-ary-elem-init.js} | 1 - .../ary-ptrn-elem-ary-elem-iter.js} | 1 - .../ary-ptrn-elem-ary-elision-init.js} | 1 - .../ary-ptrn-elem-ary-elision-iter.js} | 1 - .../ary-ptrn-elem-ary-empty-init.js} | 1 - .../ary-ptrn-elem-ary-empty-iter.js} | 1 - .../ary-ptrn-elem-ary-rest-init.js} | 1 - .../ary-ptrn-elem-ary-rest-iter.js} | 1 - .../ary-ptrn-elem-ary-val-null.js} | 1 - .../ary-ptrn-elem-id-init-exhausted.js} | 1 - .../ary-ptrn-elem-id-init-fn-name-arrow.js} | 1 - .../ary-ptrn-elem-id-init-fn-name-class.js} | 1 - .../ary-ptrn-elem-id-init-fn-name-cover.js} | 1 - .../ary-ptrn-elem-id-init-fn-name-fn.js} | 1 - .../ary-ptrn-elem-id-init-fn-name-gen.js} | 1 - .../ary-ptrn-elem-id-init-hole.js} | 1 - .../ary-ptrn-elem-id-init-skipped.js} | 1 - .../ary-ptrn-elem-id-init-throws.js} | 1 - .../ary-ptrn-elem-id-init-undef.js} | 1 - .../ary-ptrn-elem-id-init-unresolvable.js} | 1 - .../ary-ptrn-elem-id-iter-complete.js} | 1 - .../ary-ptrn-elem-id-iter-done.js} | 1 - .../ary-ptrn-elem-id-iter-step-err.js} | 1 - ...y-ptrn-elem-id-iter-val-array-prototype.js | 59 ++++++++++++++ .../ary-ptrn-elem-id-iter-val-err.js} | 1 - .../ary-ptrn-elem-id-iter-val.js} | 1 - .../ary-ptrn-elem-obj-id-init.js} | 1 - .../ary-ptrn-elem-obj-id.js} | 1 - .../ary-ptrn-elem-obj-prop-id-init.js} | 1 - .../ary-ptrn-elem-obj-prop-id.js} | 1 - .../ary-ptrn-elem-obj-val-null.js} | 1 - .../ary-ptrn-elem-obj-val-undef.js} | 1 - .../ary-ptrn-elision-exhausted.js} | 1 - .../ary-ptrn-elision-step-err.js} | 1 - .../ary-ptrn-elision.js} | 1 - .../ary-ptrn-empty.js} | 1 - .../ary-ptrn-rest-ary-elem.js} | 1 - .../ary-ptrn-rest-ary-elision.js} | 1 - .../ary-ptrn-rest-ary-empty.js} | 1 - .../ary-ptrn-rest-ary-rest.js} | 1 - .../try/dstr/ary-ptrn-rest-id-direct.js | 42 ++++++++++ .../ary-ptrn-rest-id-elision-next-err.js} | 1 - .../ary-ptrn-rest-id-elision.js} | 1 - .../ary-ptrn-rest-id-exhausted.js} | 1 - .../ary-ptrn-rest-id-iter-step-err.js} | 1 - .../ary-ptrn-rest-id-iter-val-err.js} | 1 - .../ary-ptrn-rest-id.js} | 1 - .../ary-ptrn-rest-init-ary.js} | 5 +- .../ary-ptrn-rest-init-id.js} | 5 +- .../ary-ptrn-rest-init-obj.js} | 5 +- .../ary-ptrn-rest-not-final-ary.js} | 3 +- .../ary-ptrn-rest-not-final-id.js} | 3 +- .../ary-ptrn-rest-not-final-obj.js} | 3 +- .../ary-ptrn-rest-obj-id.js} | 1 - .../ary-ptrn-rest-obj-prop-id.js} | 1 - .../obj-init-null.js} | 1 - .../obj-init-undefined.js} | 1 - .../obj-ptrn-empty.js} | 1 - .../obj-ptrn-id-get-value-err.js} | 1 - .../obj-ptrn-id-init-fn-name-arrow.js} | 1 - .../obj-ptrn-id-init-fn-name-class.js} | 1 - .../obj-ptrn-id-init-fn-name-cover.js} | 1 - .../obj-ptrn-id-init-fn-name-fn.js} | 1 - .../obj-ptrn-id-init-fn-name-gen.js} | 1 - .../obj-ptrn-id-init-skipped.js} | 1 - .../obj-ptrn-id-init-throws.js} | 1 - .../obj-ptrn-id-init-unresolvable.js} | 1 - .../obj-ptrn-id-trailing-comma.js} | 1 - .../obj-ptrn-list-err.js} | 1 - .../obj-ptrn-prop-ary-init.js} | 1 - .../obj-ptrn-prop-ary-trailing-comma.js} | 1 - .../obj-ptrn-prop-ary-value-null.js} | 1 - .../obj-ptrn-prop-ary.js} | 1 - .../obj-ptrn-prop-eval-err.js} | 1 - .../obj-ptrn-prop-id-get-value-err.js} | 1 - .../obj-ptrn-prop-id-init-skipped.js} | 1 - .../obj-ptrn-prop-id-init-throws.js} | 1 - .../obj-ptrn-prop-id-init-unresolvable.js} | 1 - .../obj-ptrn-prop-id-init.js} | 1 - .../obj-ptrn-prop-id-trailing-comma.js} | 1 - .../obj-ptrn-prop-id.js} | 1 - .../obj-ptrn-prop-obj-init.js} | 1 - .../obj-ptrn-prop-obj-value-null.js} | 1 - .../obj-ptrn-prop-obj-value-undef.js} | 1 - .../obj-ptrn-prop-obj.js} | 1 - .../obj-ptrn-rest-getter.js} | 1 - .../obj-ptrn-rest-skip-non-enumerable.js} | 1 - .../obj-ptrn-rest-val-obj.js} | 1 - .../statements/try/early-catch-duplicates.js | 2 +- .../statements/try/early-catch-function.js | 2 +- .../statements/try/early-catch-lex.js | 2 +- .../statements/try/early-catch-var.js | 21 ----- .../try/optional-catch-binding-parens.js | 2 +- .../try/scope-catch-block-var-none.js | 2 +- .../try/scope-catch-param-var-none.js | 2 +- Jint.Tests/Runtime/PromiseTests.cs | 3 + Jint/EsprimaExtensions.cs | 22 +++++ Jint/Jint.csproj | 2 +- Jint/Native/Array/ArrayInstance.cs | 4 + Jint/Native/Object/ObjectInstance.cs | 3 + Jint/Runtime/Completion.cs | 13 +++ .../DeclarativeEnvironmentRecord.cs | 2 +- Jint/Runtime/Interop/ObjectWrapper.cs | 2 + .../BindingPatternAssignmentExpression.cs | 4 +- .../Interpreter/Expressions/JintExpression.cs | 4 +- .../Statements/JintTryStatement.cs | 43 ++++++---- 132 files changed, 575 insertions(+), 164 deletions(-) create mode 100644 Jint.Tests.Test262/Language/Statements/TryTests.cs create mode 100644 Jint.Tests.Test262/test/language/statements/try/completion-values-fn-finally-abrupt.js create mode 100644 Jint.Tests.Test262/test/language/statements/try/completion-values-fn-finally-normal.js create mode 100644 Jint.Tests.Test262/test/language/statements/try/completion-values-fn-finally-return.js create mode 100644 Jint.Tests.Test262/test/language/statements/try/completion-values.js rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-init-iter-close.js => dstr/ary-init-iter-close.js} (98%) create mode 100644 Jint.Tests.Test262/test/language/statements/try/dstr/ary-init-iter-get-err-array-prototype.js rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-init-iter-get-err.js => dstr/ary-init-iter-get-err.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-init-iter-no-close.js => dstr/ary-init-iter-no-close.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-name-iter-val.js => dstr/ary-name-iter-val.js} (99%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-ary-elem-init.js => dstr/ary-ptrn-elem-ary-elem-init.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-ary-elem-iter.js => dstr/ary-ptrn-elem-ary-elem-iter.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-ary-elision-init.js => dstr/ary-ptrn-elem-ary-elision-init.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-ary-elision-iter.js => dstr/ary-ptrn-elem-ary-elision-iter.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-ary-empty-init.js => dstr/ary-ptrn-elem-ary-empty-init.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-ary-empty-iter.js => dstr/ary-ptrn-elem-ary-empty-iter.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-ary-rest-init.js => dstr/ary-ptrn-elem-ary-rest-init.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-ary-rest-iter.js => dstr/ary-ptrn-elem-ary-rest-iter.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-ary-val-null.js => dstr/ary-ptrn-elem-ary-val-null.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-id-init-exhausted.js => dstr/ary-ptrn-elem-id-init-exhausted.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-id-init-fn-name-arrow.js => dstr/ary-ptrn-elem-id-init-fn-name-arrow.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-id-init-fn-name-class.js => dstr/ary-ptrn-elem-id-init-fn-name-class.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-id-init-fn-name-cover.js => dstr/ary-ptrn-elem-id-init-fn-name-cover.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-id-init-fn-name-fn.js => dstr/ary-ptrn-elem-id-init-fn-name-fn.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-id-init-fn-name-gen.js => dstr/ary-ptrn-elem-id-init-fn-name-gen.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-id-init-hole.js => dstr/ary-ptrn-elem-id-init-hole.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-id-init-skipped.js => dstr/ary-ptrn-elem-id-init-skipped.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-id-init-throws.js => dstr/ary-ptrn-elem-id-init-throws.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-id-init-undef.js => dstr/ary-ptrn-elem-id-init-undef.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-id-init-unresolvable.js => dstr/ary-ptrn-elem-id-init-unresolvable.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-id-iter-complete.js => dstr/ary-ptrn-elem-id-iter-complete.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-id-iter-done.js => dstr/ary-ptrn-elem-id-iter-done.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-id-iter-step-err.js => dstr/ary-ptrn-elem-id-iter-step-err.js} (98%) create mode 100644 Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-iter-val-array-prototype.js rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-id-iter-val-err.js => dstr/ary-ptrn-elem-id-iter-val-err.js} (99%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-id-iter-val.js => dstr/ary-ptrn-elem-id-iter-val.js} (99%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-obj-id-init.js => dstr/ary-ptrn-elem-obj-id-init.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-obj-id.js => dstr/ary-ptrn-elem-obj-id.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-obj-prop-id-init.js => dstr/ary-ptrn-elem-obj-prop-id-init.js} (99%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-obj-prop-id.js => dstr/ary-ptrn-elem-obj-prop-id.js} (99%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-obj-val-null.js => dstr/ary-ptrn-elem-obj-val-null.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elem-obj-val-undef.js => dstr/ary-ptrn-elem-obj-val-undef.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elision-exhausted.js => dstr/ary-ptrn-elision-exhausted.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elision-step-err.js => dstr/ary-ptrn-elision-step-err.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-elision.js => dstr/ary-ptrn-elision.js} (99%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-empty.js => dstr/ary-ptrn-empty.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-rest-ary-elem.js => dstr/ary-ptrn-rest-ary-elem.js} (99%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-rest-ary-elision.js => dstr/ary-ptrn-rest-ary-elision.js} (99%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-rest-ary-empty.js => dstr/ary-ptrn-rest-ary-empty.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-rest-ary-rest.js => dstr/ary-ptrn-rest-ary-rest.js} (98%) create mode 100644 Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-id-direct.js rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-rest-id-elision-next-err.js => dstr/ary-ptrn-rest-id-elision-next-err.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-rest-id-elision.js => dstr/ary-ptrn-rest-id-elision.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-rest-id-exhausted.js => dstr/ary-ptrn-rest-id-exhausted.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-rest-id-iter-step-err.js => dstr/ary-ptrn-rest-id-iter-step-err.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-rest-id-iter-val-err.js => dstr/ary-ptrn-rest-id-iter-val-err.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-rest-id.js => dstr/ary-ptrn-rest-id.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-rest-init-ary.js => dstr/ary-ptrn-rest-init-ary.js} (84%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-rest-init-id.js => dstr/ary-ptrn-rest-init-id.js} (85%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-rest-init-obj.js => dstr/ary-ptrn-rest-init-obj.js} (84%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-rest-not-final-ary.js => dstr/ary-ptrn-rest-not-final-ary.js} (93%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-rest-not-final-id.js => dstr/ary-ptrn-rest-not-final-id.js} (93%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-rest-not-final-obj.js => dstr/ary-ptrn-rest-not-final-obj.js} (93%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-rest-obj-id.js => dstr/ary-ptrn-rest-obj-id.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-ary-ptrn-rest-obj-prop-id.js => dstr/ary-ptrn-rest-obj-prop-id.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-init-null.js => dstr/obj-init-null.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-init-undefined.js => dstr/obj-init-undefined.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-empty.js => dstr/obj-ptrn-empty.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-id-get-value-err.js => dstr/obj-ptrn-id-get-value-err.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-id-init-fn-name-arrow.js => dstr/obj-ptrn-id-init-fn-name-arrow.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-id-init-fn-name-class.js => dstr/obj-ptrn-id-init-fn-name-class.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-id-init-fn-name-cover.js => dstr/obj-ptrn-id-init-fn-name-cover.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-id-init-fn-name-fn.js => dstr/obj-ptrn-id-init-fn-name-fn.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-id-init-fn-name-gen.js => dstr/obj-ptrn-id-init-fn-name-gen.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-id-init-skipped.js => dstr/obj-ptrn-id-init-skipped.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-id-init-throws.js => dstr/obj-ptrn-id-init-throws.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-id-init-unresolvable.js => dstr/obj-ptrn-id-init-unresolvable.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-id-trailing-comma.js => dstr/obj-ptrn-id-trailing-comma.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-list-err.js => dstr/obj-ptrn-list-err.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-prop-ary-init.js => dstr/obj-ptrn-prop-ary-init.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-prop-ary-trailing-comma.js => dstr/obj-ptrn-prop-ary-trailing-comma.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-prop-ary-value-null.js => dstr/obj-ptrn-prop-ary-value-null.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-prop-ary.js => dstr/obj-ptrn-prop-ary.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-prop-eval-err.js => dstr/obj-ptrn-prop-eval-err.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-prop-id-get-value-err.js => dstr/obj-ptrn-prop-id-get-value-err.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-prop-id-init-skipped.js => dstr/obj-ptrn-prop-id-init-skipped.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-prop-id-init-throws.js => dstr/obj-ptrn-prop-id-init-throws.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-prop-id-init-unresolvable.js => dstr/obj-ptrn-prop-id-init-unresolvable.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-prop-id-init.js => dstr/obj-ptrn-prop-id-init.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-prop-id-trailing-comma.js => dstr/obj-ptrn-prop-id-trailing-comma.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-prop-id.js => dstr/obj-ptrn-prop-id.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-prop-obj-init.js => dstr/obj-ptrn-prop-obj-init.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-prop-obj-value-null.js => dstr/obj-ptrn-prop-obj-value-null.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-prop-obj-value-undef.js => dstr/obj-ptrn-prop-obj-value-undef.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-prop-obj.js => dstr/obj-ptrn-prop-obj.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-rest-getter.js => dstr/obj-ptrn-rest-getter.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-rest-skip-non-enumerable.js => dstr/obj-ptrn-rest-skip-non-enumerable.js} (98%) rename Jint.Tests.Test262/test/language/statements/try/{dstr-obj-ptrn-rest-val-obj.js => dstr/obj-ptrn-rest-val-obj.js} (98%) delete mode 100644 Jint.Tests.Test262/test/language/statements/try/early-catch-var.js diff --git a/Jint.Tests.Test262/Language/Statements/TryTests.cs b/Jint.Tests.Test262/Language/Statements/TryTests.cs new file mode 100644 index 0000000000..6b9c9e96df --- /dev/null +++ b/Jint.Tests.Test262/Language/Statements/TryTests.cs @@ -0,0 +1,15 @@ +using Xunit; + +namespace Jint.Tests.Test262.Language.Statements +{ + public class TryTests : Test262Test + { + [Theory(DisplayName = "language\\statements\\try")] + [MemberData(nameof(SourceFiles), "language\\statements\\try", false)] + [MemberData(nameof(SourceFiles), "language\\statements\\try", true, Skip = "Skipped")] + protected void For(SourceFile sourceFile) + { + RunTestInternal(sourceFile); + } + } +} \ No newline at end of file diff --git a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T1.js b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T1.js index 8d12ee6fc1..32b72b362b 100644 --- a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T1.js +++ b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T1.js @@ -12,7 +12,7 @@ negative: type: SyntaxError ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); // CHECK#1 try diff --git a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T10.js b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T10.js index cf15f5a1f2..881c119e91 100644 --- a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T10.js +++ b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T10.js @@ -12,7 +12,7 @@ negative: type: SyntaxError ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); // CHECK#1 try{} diff --git a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T11.js b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T11.js index fca33d1528..436ed52c81 100644 --- a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T11.js +++ b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T11.js @@ -14,7 +14,7 @@ negative: type: SyntaxError ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); // CHECK#1 try{ diff --git a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T12.js b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T12.js index b1832c2525..e598416593 100644 --- a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T12.js +++ b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T12.js @@ -12,7 +12,7 @@ negative: type: SyntaxError ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); // CHECK#1 try diff --git a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T13.js b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T13.js index 982b70e8aa..6d85dcd26c 100644 --- a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T13.js +++ b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T13.js @@ -14,7 +14,7 @@ negative: type: SyntaxError ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); // CHECK#1 try diff --git a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T14.js b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T14.js index 1415d0b20e..cee097b199 100644 --- a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T14.js +++ b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T14.js @@ -12,9 +12,9 @@ negative: type: SyntaxError ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); // CHECK#1 -try(e1){ +try(e1){ } catch(e){} diff --git a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T15.js b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T15.js index a946dc57ea..31cb65dbac 100644 --- a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T15.js +++ b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T15.js @@ -14,9 +14,9 @@ negative: type: SyntaxError ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); // CHECK#1 -try{ +try{ } finally(e){} diff --git a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T2.js b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T2.js index c4dad886e7..de51c0d227 100644 --- a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T2.js +++ b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T2.js @@ -12,7 +12,7 @@ negative: type: SyntaxError ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); // CHECK#1 catch diff --git a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T3.js b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T3.js index 596dffe0ef..ae20d39cd7 100644 --- a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T3.js +++ b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T3.js @@ -12,7 +12,7 @@ negative: type: SyntaxError ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); // CHECK#1 finally diff --git a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T5.js b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T5.js index ad880284c8..d122a10943 100644 --- a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T5.js +++ b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T5.js @@ -14,7 +14,7 @@ negative: type: SyntaxError ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); // CHECK#1 try{} diff --git a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T6.js b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T6.js index e5a6842920..0f576a651b 100644 --- a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T6.js +++ b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T6.js @@ -14,7 +14,7 @@ negative: type: SyntaxError ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); // CHECK#1 try{ diff --git a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T7.js b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T7.js index 78b02fd9b4..68495630ff 100644 --- a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T7.js +++ b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T7.js @@ -14,7 +14,7 @@ negative: type: SyntaxError ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); // CHECK#1 try{} diff --git a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T8.js b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T8.js index 3db4eb49dc..ac994569a6 100644 --- a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T8.js +++ b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T8.js @@ -14,7 +14,7 @@ negative: type: SyntaxError ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); // CHECK#1 try{} diff --git a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T9.js b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T9.js index 7182aae75e..8e9e73f6ac 100644 --- a/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T9.js +++ b/Jint.Tests.Test262/test/language/statements/try/S12.14_A16_T9.js @@ -12,7 +12,7 @@ negative: type: SyntaxError ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); // CHECK#1 catch(){} diff --git a/Jint.Tests.Test262/test/language/statements/try/catch-parameter-boundnames-restriction-arguments-negative-early.js b/Jint.Tests.Test262/test/language/statements/try/catch-parameter-boundnames-restriction-arguments-negative-early.js index 4e62feb33c..dde3977123 100644 --- a/Jint.Tests.Test262/test/language/statements/try/catch-parameter-boundnames-restriction-arguments-negative-early.js +++ b/Jint.Tests.Test262/test/language/statements/try/catch-parameter-boundnames-restriction-arguments-negative-early.js @@ -11,6 +11,6 @@ negative: flags: [onlyStrict] ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); try { } catch (arguments) { } diff --git a/Jint.Tests.Test262/test/language/statements/try/catch-parameter-boundnames-restriction-eval-negative-early.js b/Jint.Tests.Test262/test/language/statements/try/catch-parameter-boundnames-restriction-eval-negative-early.js index 11547f2e9e..3e588e30aa 100644 --- a/Jint.Tests.Test262/test/language/statements/try/catch-parameter-boundnames-restriction-eval-negative-early.js +++ b/Jint.Tests.Test262/test/language/statements/try/catch-parameter-boundnames-restriction-eval-negative-early.js @@ -11,6 +11,6 @@ negative: flags: [onlyStrict] ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); try { } catch (eval) { } diff --git a/Jint.Tests.Test262/test/language/statements/try/completion-values-fn-finally-abrupt.js b/Jint.Tests.Test262/test/language/statements/try/completion-values-fn-finally-abrupt.js new file mode 100644 index 0000000000..4b6b706e68 --- /dev/null +++ b/Jint.Tests.Test262/test/language/statements/try/completion-values-fn-finally-abrupt.js @@ -0,0 +1,79 @@ +// Copyright (C) 2020 Salesforce.com. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-try-statement-runtime-semantics-evaluation +description: > + Returns the correct completion values of try-catch-finally(Abrupt) in functions +info: | + TryStatement : try Block Catch Finally + + Let B be the result of evaluating Block. + If B.[[Type]] is throw, let C be CatchClauseEvaluation of Catch with argument B.[[Value]]. + Else, let C be B. + Let F be the result of evaluating Finally. + If F.[[Type]] is normal, set F to C. + Return Completion(UpdateEmpty(F, undefined)). +---*/ + +var fn, count = {}; + +// 1: try Abrupt, catch Abrupt, finally Abrupt; Completion: finally +count.catch = 0; +count.finally = 0; +fn = function() { + try { + throw 'try'; + } catch(e) { + count.catch += 1; + throw 'catch'; + } finally { + count.finally += 1; + throw new Test262Error('finally'); // If F.[[Type]] is normal, set F to C. + } + return 'wat'; +}; + +assert.throws(Test262Error, fn, '1: try Abrupt, catch Abrupt, finally Abrupt; Completion: finally'); +assert.sameValue(count.catch, 1, '1: catch count'); +assert.sameValue(count.finally, 1, '1: finally count'); + +// 2: try Abrupt, catch Return, finally Abrupt; Completion: finally +count.catch = 0; +count.finally = 0; +fn = function() { + try { + throw 'try'; + } catch(e) { + count.catch += 1; + return 'catch'; + } finally { + count.finally += 1; + throw new Test262Error('finally'); // If F.[[Type]] is normal, set F to C. + } + return 'wat'; +}; + +assert.throws(Test262Error, fn, '2: try Abrupt, catch Return, finally Abrupt; Completion: finally'); +assert.sameValue(count.catch, 1, '2: catch count'); +assert.sameValue(count.finally, 1, '2: fiinally count'); + +// 3: try Return, catch Return, finally Abrupt; Completion: finally +count.catch = 0; +count.finally = 0; +fn = function() { + try { + return 'try'; + } catch(e) { + count.catch += 1; + return 'catch'; + } finally { + count.finally += 1; + throw new Test262Error('finally'); // If F.[[Type]] is normal, set F to C. + } + return 'wat'; +}; + +assert.throws(Test262Error, fn, '3: try Normal, catch Normal, finally Abrupt; Completion: finally'); +assert.sameValue(count.catch, 0, '3: catch count'); +assert.sameValue(count.finally, 1, '3: fiinally count'); diff --git a/Jint.Tests.Test262/test/language/statements/try/completion-values-fn-finally-normal.js b/Jint.Tests.Test262/test/language/statements/try/completion-values-fn-finally-normal.js new file mode 100644 index 0000000000..1de44fa1e2 --- /dev/null +++ b/Jint.Tests.Test262/test/language/statements/try/completion-values-fn-finally-normal.js @@ -0,0 +1,80 @@ +// Copyright (C) 2020 Salesforce.com. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-try-statement-runtime-semantics-evaluation +description: > + Returns the correct completion values of try-catch-finally(Normal) in functions +info: | + TryStatement : try Block Catch Finally + + Let B be the result of evaluating Block. + If B.[[Type]] is throw, let C be CatchClauseEvaluation of Catch with argument B.[[Value]]. + Else, let C be B. + Let F be the result of evaluating Finally. + If F.[[Type]] is normal, set F to C. + Return Completion(UpdateEmpty(F, undefined)). +---*/ + +// 1: try Return, catch Return, finally Normal; Completion: try +var count = { + catch: 0, + finally: 0 +}; + +var fn = function() { + try { + return 'try'; + } catch(e) { + count.catch += 1; + return 'catch'; + } finally { + count.finally += 1; + 'normal'; + } + return 'wat'; +}; + +assert.sameValue(fn(), 'try', '1: try Return, catch Return, finally Normal; Completion: try'); +assert.sameValue(count.catch, 0, '1'); +assert.sameValue(count.finally, 1, '1'); + +// 2: try Abrupt, catch Return, finally Normal; Completion: catch +count.catch = 0; +count.finally = 0; +fn = function() { + try { + throw 'try'; + } catch(e) { + count.catch += 1; + return 'catch'; + } finally { + count.finally += 1; + 'finally'; + } + return 'wat'; +}; + +assert.sameValue(fn(), 'catch', '2: try Abrupt, catch Return, finally Normal; Completion: catch'); +assert.sameValue(count.catch, 1, '2: catch count'); +assert.sameValue(count.finally, 1, '2: fiinally count'); + +// 3: try Abrupt, catch Abrupt, finally Normal; Completion: catch +count.catch = 0; +count.finally = 0; +fn = function() { + try { + throw 'try'; + } catch(e) { + count.catch += 1; + throw new Test262Error('catch'); + } finally { + count.finally += 1; + 'finally'; + } + return 'wat'; +}; + +assert.throws(Test262Error, fn, '3: try Abrupt, catch Abrupt, finally Normal; Completion: catch'); +assert.sameValue(count.catch, 1, '3: catch count'); +assert.sameValue(count.finally, 1, '3: fiinally count'); diff --git a/Jint.Tests.Test262/test/language/statements/try/completion-values-fn-finally-return.js b/Jint.Tests.Test262/test/language/statements/try/completion-values-fn-finally-return.js new file mode 100644 index 0000000000..5ef803968a --- /dev/null +++ b/Jint.Tests.Test262/test/language/statements/try/completion-values-fn-finally-return.js @@ -0,0 +1,80 @@ +// Copyright (C) 2020 Salesforce.com. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-try-statement-runtime-semantics-evaluation +description: > + Returns the correct completion values of try-catch-finally(Return) in functions +info: | + TryStatement : try Block Catch Finally + + Let B be the result of evaluating Block. + If B.[[Type]] is throw, let C be CatchClauseEvaluation of Catch with argument B.[[Value]]. + Else, let C be B. + Let F be the result of evaluating Finally. + If F.[[Type]] is normal, set F to C. + Return Completion(UpdateEmpty(F, undefined)). +---*/ + +// 1: try Return, catch Return, finally Return; Completion: finally +var count = { + catch: 0, + finally: 0 +}; + +var fn = function() { + try { + return 'try'; + } catch(e) { + count.catch += 1; + return 'catch'; + } finally { + count.finally += 1; + return 'finally'; + } + return 'wat'; +}; + +assert.sameValue(fn(), 'finally', '1: try Return, catch Return, finally Return; Completion: finally'); +assert.sameValue(count.catch, 0, '1'); +assert.sameValue(count.finally, 1, '1'); + +// 2: try Abrupt, catch Return, finally Return; Completion: finally +count.catch = 0; +count.finally = 0; +fn = function() { + try { + throw 'try'; + } catch(e) { + count.catch += 1; + return 'catch'; + } finally { + count.finally += 1; + return 'finally'; + } + return 'wat'; +}; + +assert.sameValue(fn(), 'finally', '2: try Abrupt, catch Return, finally Return; Completion: finally'); +assert.sameValue(count.catch, 1, '2: catch count'); +assert.sameValue(count.finally, 1, '2: fiinally count'); + +// 3: try Abrupt, catch Abrupt, finally Normal; Completion: finally +count.catch = 0; +count.finally = 0; +fn = function() { + try { + throw 'try'; + } catch(e) { + count.catch += 1; + throw 'catch'; + } finally { + count.finally += 1; + return 'finally'; + } + return 'wat'; +}; + +assert.sameValue(fn(), 'finally', fn, '3: try Abrupt, catch Abrupt, finally Normal; Completion: finally'); +assert.sameValue(count.catch, 1, '3: catch count'); +assert.sameValue(count.finally, 1, '3: fiinally count'); diff --git a/Jint.Tests.Test262/test/language/statements/try/completion-values.js b/Jint.Tests.Test262/test/language/statements/try/completion-values.js new file mode 100644 index 0000000000..d907478c24 --- /dev/null +++ b/Jint.Tests.Test262/test/language/statements/try/completion-values.js @@ -0,0 +1,65 @@ +// Copyright (C) 2020 Rick Waldron. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-try-statement-runtime-semantics-evaluation +description: > + Direct eval try/catch/finally for completion value +info: | + TryStatement : try Block Catch Finally + + Let B be the result of evaluating Block. + If B.[[Type]] is throw, let C be CatchClauseEvaluation of Catch with argument B.[[Value]]. + Else, let C be B. + Let F be the result of evaluating Finally. + If F.[[Type]] is normal, set F to C. + Return Completion(UpdateEmpty(F, undefined)). +---*/ + +assert.sameValue( + eval('99; do { -99; try { 39 } catch (e) { -1 } finally { 42; break; -2 }; } while (false);'), + 42 +); +assert.sameValue( + eval('99; do { -99; try { [].x.x } catch (e) { -1; } finally { 42; break; -3 }; } while (false);'), + 42 +); +assert.sameValue( + eval('99; do { -99; try { 39 } catch (e) { -1 } finally { break; -2 }; } while (false);'), + undefined +); +assert.sameValue( + eval('99; do { -99; try { [].x.x } catch (e) { -1; } finally { break; -3 }; } while (false);'), + undefined +); +assert.sameValue( + eval('99; do { -99; try { 39 } catch (e) { -1 } finally { 42; break; -3 }; -77 } while (false);'), + 42 +); +assert.sameValue( + eval('99; do { -99; try { [].x.x } catch (e) { -1; } finally { 42; break; -3 }; -77 } while (false);'), + 42 +); +assert.sameValue( + eval('99; do { -99; try { 39 } catch (e) { -1 } finally { break; -3 }; -77 } while (false);'), + undefined +); +assert.sameValue( + eval('99; do { -99; try { [].x.x } catch (e) { -1; } finally { break; -3 }; -77 } while (false);'), + undefined +); +assert.sameValue( + eval('99; do { -99; try { 39 } catch (e) { -1 } finally { 42; continue; -3 }; } while (false);'), + 42 +); +assert.sameValue( + eval('99; do { -99; try { [].x.x } catch (e) { -1; } finally { 42; continue; -3 }; } while (false);'), + 42 +); +assert.sameValue( + eval('99; do { -99; try { 39 } catch (e) { -1 } finally { 42; continue; -3 }; -77 } while (false);'), + 42 +); +assert.sameValue( + eval('99; do { -99; try { [].x.x } catch (e) { -1 } finally { 42; continue; -3 }; -77 } while (false);'), + 42 +); diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-init-iter-close.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-init-iter-close.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-init-iter-close.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-init-iter-close.js index a1896fff23..0ebcdd34ef 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-init-iter-close.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-init-iter-close.js @@ -4,7 +4,6 @@ /*--- description: Iterator is closed when not exhausted by pattern evaluation (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [Symbol.iterator, destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr/ary-init-iter-get-err-array-prototype.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-init-iter-get-err-array-prototype.js new file mode 100644 index 0000000000..c566c5a9e6 --- /dev/null +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-init-iter-get-err-array-prototype.js @@ -0,0 +1,40 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-binding/ary-init-iter-get-err-array-prototype.case +// - src/dstr-binding/error/try.template +/*--- +description: Abrupt completion returned by GetIterator (try statement) +esid: sec-runtime-semantics-catchclauseevaluation +features: [Symbol.iterator, destructuring-binding] +flags: [generated] +info: | + Catch : catch ( CatchParameter ) Block + + [...] + 5. Let status be the result of performing BindingInitialization for + CatchParameter passing thrownValue and catchEnv as arguments. + [...] + + Runtime Semantics: BindingInitialization + + BindingPattern : ArrayBindingPattern + + 1. Let iteratorRecord be ? GetIterator(value). + + GetIterator ( obj [ , hint [ , method ] ] ) + + [...] + 4. Let iterator be ? Call(method, obj). + + Call ( F, V [ , argumentsList ] ) + + [...] + 2. If IsCallable(F) is false, throw a TypeError exception. + +---*/ +delete Array.prototype[Symbol.iterator]; + +assert.throws(TypeError, function() { + try { + throw [1, 2, 3]; + } catch ([x, y, z]) {} +}); diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-init-iter-get-err.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-init-iter-get-err.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-init-iter-get-err.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-init-iter-get-err.js index 25aa8e4b9f..d91d6b03a7 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-init-iter-get-err.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-init-iter-get-err.js @@ -4,7 +4,6 @@ /*--- description: Abrupt completion returned by GetIterator (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [Symbol.iterator, destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-init-iter-no-close.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-init-iter-no-close.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-init-iter-no-close.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-init-iter-no-close.js index 1ef8e13733..66448ff13c 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-init-iter-no-close.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-init-iter-no-close.js @@ -4,7 +4,6 @@ /*--- description: Iterator is not closed when exhausted by pattern evaluation (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [Symbol.iterator, destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-name-iter-val.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-name-iter-val.js similarity index 99% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-name-iter-val.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-name-iter-val.js index c3fba50555..3715d56073 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-name-iter-val.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-name-iter-val.js @@ -4,7 +4,6 @@ /*--- description: SingleNameBinding with normal value iteration (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-elem-init.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-elem-init.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-elem-init.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-elem-init.js index 3c3946cfcc..e9c58cba6c 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-elem-init.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-elem-init.js @@ -4,7 +4,6 @@ /*--- description: BindingElement with array binding pattern and initializer is used (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-elem-iter.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-elem-iter.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-elem-iter.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-elem-iter.js index 2254dd12df..246b29cadc 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-elem-iter.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-elem-iter.js @@ -4,7 +4,6 @@ /*--- description: BindingElement with array binding pattern and initializer is not used (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-elision-init.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-elision-init.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-elision-init.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-elision-init.js index cec905a21a..84e22d6d1a 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-elision-init.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-elision-init.js @@ -4,7 +4,6 @@ /*--- description: BindingElement with array binding pattern and initializer is used (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [generators, destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-elision-iter.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-elision-iter.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-elision-iter.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-elision-iter.js index 32164d1ae1..1b9930ad89 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-elision-iter.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-elision-iter.js @@ -4,7 +4,6 @@ /*--- description: BindingElement with array binding pattern and initializer is not used (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [generators, destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-empty-init.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-empty-init.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-empty-init.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-empty-init.js index efafe7761a..3b45d8c049 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-empty-init.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-empty-init.js @@ -4,7 +4,6 @@ /*--- description: BindingElement with array binding pattern and initializer is used (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [generators, destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-empty-iter.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-empty-iter.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-empty-iter.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-empty-iter.js index 7559f350d6..a56ab7fae0 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-empty-iter.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-empty-iter.js @@ -4,7 +4,6 @@ /*--- description: BindingElement with array binding pattern and initializer is not used (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-rest-init.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-rest-init.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-rest-init.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-rest-init.js index 5d8b5e0548..5b5b3c0adb 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-rest-init.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-rest-init.js @@ -4,7 +4,6 @@ /*--- description: BindingElement with array binding pattern and initializer is used (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-rest-iter.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-rest-iter.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-rest-iter.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-rest-iter.js index 58d6eba28e..60ce364ed8 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-rest-iter.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-rest-iter.js @@ -4,7 +4,6 @@ /*--- description: BindingElement with array binding pattern and initializer is not used (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-val-null.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-val-null.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-val-null.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-val-null.js index 0b15a99cee..bb4b63d327 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-ary-val-null.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-ary-val-null.js @@ -4,7 +4,6 @@ /*--- description: Nested array destructuring with a null value (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-exhausted.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-exhausted.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-exhausted.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-exhausted.js index b53a50a100..86bbcbc4d3 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-exhausted.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-exhausted.js @@ -4,7 +4,6 @@ /*--- description: Destructuring initializer with an exhausted iterator (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-arrow.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-fn-name-arrow.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-arrow.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-fn-name-arrow.js index b43c1331d3..8a6b682cb1 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-arrow.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-fn-name-arrow.js @@ -4,7 +4,6 @@ /*--- description: SingleNameBinding does assign name to arrow functions (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-class.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-fn-name-class.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-class.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-fn-name-class.js index 6fbce483da..3070a4399b 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-class.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-fn-name-class.js @@ -4,7 +4,6 @@ /*--- description: SingleNameBinding assigns `name` to "anonymous" classes (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-cover.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-fn-name-cover.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-cover.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-fn-name-cover.js index cb218f5b05..0240de392a 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-cover.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-fn-name-cover.js @@ -4,7 +4,6 @@ /*--- description: SingleNameBinding does assign name to "anonymous" functions "through" cover grammar (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-fn.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-fn-name-fn.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-fn.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-fn-name-fn.js index f973a82f1c..24f7c326b2 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-fn.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-fn-name-fn.js @@ -4,7 +4,6 @@ /*--- description: SingleNameBinding assigns name to "anonymous" functions (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-gen.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-fn-name-gen.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-gen.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-fn-name-gen.js index 7c09fd2a10..b440b69d66 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-gen.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-fn-name-gen.js @@ -4,7 +4,6 @@ /*--- description: SingleNameBinding assigns name to "anonymous" generator functions (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [generators, destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-hole.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-hole.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-hole.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-hole.js index c7da723a70..83d3362e38 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-hole.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-hole.js @@ -4,7 +4,6 @@ /*--- description: Destructuring initializer with a "hole" (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-skipped.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-skipped.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-skipped.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-skipped.js index 27b4110a06..cdf7b0c15f 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-skipped.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-skipped.js @@ -4,7 +4,6 @@ /*--- description: Destructuring initializer is not evaluated when value is not `undefined` (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-throws.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-throws.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-throws.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-throws.js index 37cdd1b5f1..e5dc14ea02 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-throws.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-throws.js @@ -4,7 +4,6 @@ /*--- description: Destructuring initializer returns an abrupt completion (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-undef.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-undef.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-undef.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-undef.js index e8edee5459..b4df13cd4b 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-undef.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-undef.js @@ -4,7 +4,6 @@ /*--- description: Destructuring initializer with an undefined value (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-unresolvable.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-unresolvable.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-unresolvable.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-unresolvable.js index 1f2096d6bb..c26defd3ee 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-init-unresolvable.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-init-unresolvable.js @@ -4,7 +4,6 @@ /*--- description: Destructuring initializer is an unresolvable reference (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-iter-complete.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-iter-complete.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-iter-complete.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-iter-complete.js index f7f1a7a2cc..295917a713 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-iter-complete.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-iter-complete.js @@ -4,7 +4,6 @@ /*--- description: SingleNameBinding when value iteration completes (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-iter-done.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-iter-done.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-iter-done.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-iter-done.js index 0e914c74d9..bea58a85d5 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-iter-done.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-iter-done.js @@ -4,7 +4,6 @@ /*--- description: SingleNameBinding when value iteration was completed previously (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-iter-step-err.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-iter-step-err.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-iter-step-err.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-iter-step-err.js index 8616df5525..f5c2036658 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-iter-step-err.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-iter-step-err.js @@ -4,7 +4,6 @@ /*--- description: Error forwarding when IteratorStep returns an abrupt completion (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [Symbol.iterator, destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-iter-val-array-prototype.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-iter-val-array-prototype.js new file mode 100644 index 0000000000..f2ddaa360f --- /dev/null +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-iter-val-array-prototype.js @@ -0,0 +1,59 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-binding/ary-ptrn-elem-id-iter-val-array-prototype.case +// - src/dstr-binding/default/try.template +/*--- +description: Array destructuring uses overriden Array.prototype[Symbol.iterator] (try statement) +esid: sec-runtime-semantics-catchclauseevaluation +features: [Symbol.iterator, generators, destructuring-binding] +flags: [generated] +info: | + Catch : catch ( CatchParameter ) Block + + [...] + 5. Let status be the result of performing BindingInitialization for + CatchParameter passing thrownValue and catchEnv as arguments. + [...] + + Runtime Semantics: IteratorBindingInitialization + + SingleNameBinding : BindingIdentifier Initializer_opt + + 1. Let bindingId be StringValue of BindingIdentifier. + 2. Let lhs be ? ResolveBinding(bindingId, environment). + 3. If iteratorRecord.[[Done]] is false, then + a. Let next be IteratorStep(iteratorRecord). + b. If next is an abrupt completion, set iteratorRecord.[[Done]] to true. + c. ReturnIfAbrupt(next). + d. If next is false, set iteratorRecord.[[Done]] to true. + e. Else, + i. Let v be IteratorValue(next). + ii. If v is an abrupt completion, set iteratorRecord.[[Done]] to true. + iii. ReturnIfAbrupt(v). + [...] + 7. Return InitializeReferencedBinding(lhs, v). + +---*/ +Array.prototype[Symbol.iterator] = function* () { + if (this.length > 0) { + yield this[0]; + } + if (this.length > 1) { + yield this[1]; + } + if (this.length > 2) { + yield 42; + } +}; + +var ranCatch = false; + +try { + throw [1, 2, 3]; +} catch ([x, y, z]) { + assert.sameValue(x, 1); + assert.sameValue(y, 2); + assert.sameValue(z, 42); + ranCatch = true; +} + +assert(ranCatch, 'executed `catch` block'); diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-iter-val-err.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-iter-val-err.js similarity index 99% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-iter-val-err.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-iter-val-err.js index abdca264e7..bb5ec1367e 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-iter-val-err.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-iter-val-err.js @@ -4,7 +4,6 @@ /*--- description: Error forwarding when IteratorValue returns an abrupt completion (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [Symbol.iterator, destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-iter-val.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-iter-val.js similarity index 99% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-iter-val.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-iter-val.js index e1b2b6787e..886525d953 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-id-iter-val.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-id-iter-val.js @@ -4,7 +4,6 @@ /*--- description: SingleNameBinding when value iteration was completed previously (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-obj-id-init.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-obj-id-init.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-obj-id-init.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-obj-id-init.js index 74cb92d104..ee3cd9c650 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-obj-id-init.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-obj-id-init.js @@ -4,7 +4,6 @@ /*--- description: BindingElement with object binding pattern and initializer is used (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-obj-id.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-obj-id.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-obj-id.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-obj-id.js index 21cfed20d9..550d874822 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-obj-id.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-obj-id.js @@ -4,7 +4,6 @@ /*--- description: BindingElement with object binding pattern and initializer is not used (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-obj-prop-id-init.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-obj-prop-id-init.js similarity index 99% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-obj-prop-id-init.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-obj-prop-id-init.js index c9e01b8267..7faac9acf4 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-obj-prop-id-init.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-obj-prop-id-init.js @@ -4,7 +4,6 @@ /*--- description: BindingElement with object binding pattern and initializer is used (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-obj-prop-id.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-obj-prop-id.js similarity index 99% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-obj-prop-id.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-obj-prop-id.js index ed8116e26d..6de15a6677 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-obj-prop-id.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-obj-prop-id.js @@ -4,7 +4,6 @@ /*--- description: BindingElement with object binding pattern and initializer is not used (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-obj-val-null.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-obj-val-null.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-obj-val-null.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-obj-val-null.js index 0d413ed52f..f54b53608f 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-obj-val-null.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-obj-val-null.js @@ -4,7 +4,6 @@ /*--- description: Nested object destructuring with a null value (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-obj-val-undef.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-obj-val-undef.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-obj-val-undef.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-obj-val-undef.js index ea41f0079e..133e35ec13 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elem-obj-val-undef.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elem-obj-val-undef.js @@ -4,7 +4,6 @@ /*--- description: Nested object destructuring with a value of `undefined` (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elision-exhausted.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elision-exhausted.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elision-exhausted.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elision-exhausted.js index 429d983b60..35a619a46b 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elision-exhausted.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elision-exhausted.js @@ -4,7 +4,6 @@ /*--- description: Elision accepts exhausted iterator (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [generators, destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elision-step-err.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elision-step-err.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elision-step-err.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elision-step-err.js index a6dad3e22e..42c09a541a 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elision-step-err.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elision-step-err.js @@ -4,7 +4,6 @@ /*--- description: Elision advances iterator and forwards abrupt completions (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [generators, destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elision.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elision.js similarity index 99% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elision.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elision.js index fad0ed9ed7..4b65c9320c 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-elision.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-elision.js @@ -4,7 +4,6 @@ /*--- description: Elision advances iterator (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [generators, destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-empty.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-empty.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-empty.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-empty.js index 251761dee7..633bbb60ed 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-empty.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-empty.js @@ -4,7 +4,6 @@ /*--- description: No iteration occurs for an "empty" array binding pattern (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [generators, destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-ary-elem.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-ary-elem.js similarity index 99% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-ary-elem.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-ary-elem.js index ee1a552f0f..f1b9d4699f 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-ary-elem.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-ary-elem.js @@ -4,7 +4,6 @@ /*--- description: Rest element containing an array BindingElementList pattern (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-ary-elision.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-ary-elision.js similarity index 99% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-ary-elision.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-ary-elision.js index 25206c7a3a..3bb7963fdd 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-ary-elision.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-ary-elision.js @@ -4,7 +4,6 @@ /*--- description: Rest element containing an elision (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [generators, destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-ary-empty.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-ary-empty.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-ary-empty.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-ary-empty.js index 155d155cd1..a12c4d42ae 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-ary-empty.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-ary-empty.js @@ -4,7 +4,6 @@ /*--- description: Rest element containing an "empty" array pattern (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [generators, destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-ary-rest.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-ary-rest.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-ary-rest.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-ary-rest.js index 7a9bc1457d..6763583961 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-ary-rest.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-ary-rest.js @@ -4,7 +4,6 @@ /*--- description: Rest element containing a rest element (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-id-direct.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-id-direct.js new file mode 100644 index 0000000000..7030e7170e --- /dev/null +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-id-direct.js @@ -0,0 +1,42 @@ +// This file was procedurally generated from the following sources: +// - src/dstr-binding/ary-ptrn-rest-id-direct.case +// - src/dstr-binding/default/try.template +/*--- +description: Lone rest element (direct binding) (try statement) +esid: sec-runtime-semantics-catchclauseevaluation +features: [destructuring-binding] +flags: [generated] +includes: [compareArray.js] +info: | + Catch : catch ( CatchParameter ) Block + + [...] + 5. Let status be the result of performing BindingInitialization for + CatchParameter passing thrownValue and catchEnv as arguments. + [...] + + Runtime Semantics: IteratorBindingInitialization + + BindingRestElement : ... BindingIdentifier + + [...] + 2. Let A be ! ArrayCreate(0). + 3. Let n be 0. + 4. Repeat, + [...] + f. Perform ! CreateDataPropertyOrThrow(A, ! ToString(n), nextValue). + g. Set n to n + 1. + +---*/ + +var ranCatch = false; + +try { + throw [1]; +} catch ([...x]) { + assert(Array.isArray(x)); + assert.compareArray(x, [1]); + ranCatch = true; +} + +assert(ranCatch, 'executed `catch` block'); diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-id-elision-next-err.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-id-elision-next-err.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-id-elision-next-err.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-id-elision-next-err.js index ef720dd416..6efba645f7 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-id-elision-next-err.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-id-elision-next-err.js @@ -4,7 +4,6 @@ /*--- description: Rest element following elision elements (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [generators, destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-id-elision.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-id-elision.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-id-elision.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-id-elision.js index 26c22ab2dc..880d900ab7 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-id-elision.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-id-elision.js @@ -4,7 +4,6 @@ /*--- description: Rest element following elision elements (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-id-exhausted.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-id-exhausted.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-id-exhausted.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-id-exhausted.js index 8e8cc29d4b..8e09e9d62b 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-id-exhausted.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-id-exhausted.js @@ -4,7 +4,6 @@ /*--- description: RestElement applied to an exhausted iterator (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [Symbol.iterator, destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-id-iter-step-err.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-id-iter-step-err.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-id-iter-step-err.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-id-iter-step-err.js index 2278b798f5..1c4166f486 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-id-iter-step-err.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-id-iter-step-err.js @@ -4,7 +4,6 @@ /*--- description: Error forwarding when IteratorStep returns an abrupt completion (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [generators, destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-id-iter-val-err.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-id-iter-val-err.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-id-iter-val-err.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-id-iter-val-err.js index 6e1e84f17f..a39d0e1342 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-id-iter-val-err.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-id-iter-val-err.js @@ -4,7 +4,6 @@ /*--- description: Error forwarding when IteratorValue returns an abrupt completion (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [Symbol.iterator, destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-id.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-id.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-id.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-id.js index dc7c05b0b2..785791bf60 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-id.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-id.js @@ -4,7 +4,6 @@ /*--- description: Lone rest element (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-init-ary.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-init-ary.js similarity index 84% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-init-ary.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-init-ary.js index 541aa5573b..9855e1d4c5 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-init-ary.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-init-ary.js @@ -2,9 +2,8 @@ // - src/dstr-binding/ary-ptrn-rest-init-ary.case // - src/dstr-binding/default/try.template /*--- -description: Reset element (nested array pattern) does not support initializer (try statement) +description: Rest element (nested array pattern) does not support initializer (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] negative: @@ -24,7 +23,7 @@ info: | [ BindingElementList[?Yield] ] [ BindingElementList[?Yield] , Elisionopt BindingRestElement[?Yield]opt ] ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); var ranCatch = false; diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-init-id.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-init-id.js similarity index 85% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-init-id.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-init-id.js index eea990a296..3a56848b38 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-init-id.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-init-id.js @@ -2,9 +2,8 @@ // - src/dstr-binding/ary-ptrn-rest-init-id.case // - src/dstr-binding/default/try.template /*--- -description: Reset element (identifier) does not support initializer (try statement) +description: Rest element (identifier) does not support initializer (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] negative: @@ -24,7 +23,7 @@ info: | [ BindingElementList[?Yield] ] [ BindingElementList[?Yield] , Elisionopt BindingRestElement[?Yield]opt ] ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); var ranCatch = false; diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-init-obj.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-init-obj.js similarity index 84% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-init-obj.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-init-obj.js index ac465cad30..d3b3cf15d6 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-init-obj.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-init-obj.js @@ -2,9 +2,8 @@ // - src/dstr-binding/ary-ptrn-rest-init-obj.case // - src/dstr-binding/default/try.template /*--- -description: Reset element (nested object pattern) does not support initializer (try statement) +description: Rest element (nested object pattern) does not support initializer (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] negative: @@ -24,7 +23,7 @@ info: | [ BindingElementList[?Yield] ] [ BindingElementList[?Yield] , Elisionopt BindingRestElement[?Yield]opt ] ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); var ranCatch = false; diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-not-final-ary.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-not-final-ary.js similarity index 93% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-not-final-ary.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-not-final-ary.js index 053bdb075e..cab01e7041 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-not-final-ary.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-not-final-ary.js @@ -4,7 +4,6 @@ /*--- description: Rest element (array binding pattern) may not be followed by any element (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] negative: @@ -24,7 +23,7 @@ info: | [ BindingElementList[?Yield] ] [ BindingElementList[?Yield] , Elisionopt BindingRestElement[?Yield]opt ] ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); var ranCatch = false; diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-not-final-id.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-not-final-id.js similarity index 93% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-not-final-id.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-not-final-id.js index 8c601a4448..8576f2965f 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-not-final-id.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-not-final-id.js @@ -4,7 +4,6 @@ /*--- description: Rest element (identifier) may not be followed by any element (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] negative: @@ -24,7 +23,7 @@ info: | [ BindingElementList[?Yield] ] [ BindingElementList[?Yield] , Elisionopt BindingRestElement[?Yield]opt ] ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); var ranCatch = false; diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-not-final-obj.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-not-final-obj.js similarity index 93% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-not-final-obj.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-not-final-obj.js index 46c5119a53..8aa96a960b 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-not-final-obj.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-not-final-obj.js @@ -4,7 +4,6 @@ /*--- description: Rest element (object binding pattern) may not be followed by any element (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] negative: @@ -24,7 +23,7 @@ info: | [ BindingElementList[?Yield] ] [ BindingElementList[?Yield] , Elisionopt BindingRestElement[?Yield]opt ] ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); var ranCatch = false; diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-obj-id.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-obj-id.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-obj-id.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-obj-id.js index 5391b3d536..27a2d78ca6 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-obj-id.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-obj-id.js @@ -4,7 +4,6 @@ /*--- description: Rest element containing an object binding pattern (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-obj-prop-id.js b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-obj-prop-id.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-obj-prop-id.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-obj-prop-id.js index b5e7cd746e..f0183a28be 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-ary-ptrn-rest-obj-prop-id.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/ary-ptrn-rest-obj-prop-id.js @@ -4,7 +4,6 @@ /*--- description: Rest element containing an object binding pattern (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-init-null.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-init-null.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-init-null.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-init-null.js index 3ce65c0440..01d5c3c85d 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-init-null.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-init-null.js @@ -4,7 +4,6 @@ /*--- description: Value specifed for object binding pattern must be object coercible (null) (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-init-undefined.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-init-undefined.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-init-undefined.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-init-undefined.js index df3ab228ed..ce616be4e4 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-init-undefined.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-init-undefined.js @@ -4,7 +4,6 @@ /*--- description: Value specifed for object binding pattern must be object coercible (undefined) (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-empty.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-empty.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-empty.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-empty.js index 92e452cfe7..1cd918a1b4 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-empty.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-empty.js @@ -4,7 +4,6 @@ /*--- description: No property access occurs for an "empty" object binding pattern (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-get-value-err.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-get-value-err.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-get-value-err.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-get-value-err.js index 11a2f6b470..28dbe0065c 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-get-value-err.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-get-value-err.js @@ -4,7 +4,6 @@ /*--- description: Error thrown when accessing the corresponding property of the value object (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-init-fn-name-arrow.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-init-fn-name-arrow.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-init-fn-name-arrow.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-init-fn-name-arrow.js index d7a8cc107d..c143d6b4f5 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-init-fn-name-arrow.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-init-fn-name-arrow.js @@ -4,7 +4,6 @@ /*--- description: SingleNameBinding assigns `name` to arrow functions (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-init-fn-name-class.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-init-fn-name-class.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-init-fn-name-class.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-init-fn-name-class.js index 491fa4765d..74f11dad76 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-init-fn-name-class.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-init-fn-name-class.js @@ -4,7 +4,6 @@ /*--- description: SingleNameBinding assigns `name` to "anonymous" classes (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-init-fn-name-cover.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-init-fn-name-cover.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-init-fn-name-cover.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-init-fn-name-cover.js index 94c642d445..62e7c051e6 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-init-fn-name-cover.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-init-fn-name-cover.js @@ -4,7 +4,6 @@ /*--- description: SingleNameBinding assigns `name` to "anonymous" functions "through" cover grammar (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-init-fn-name-fn.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-init-fn-name-fn.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-init-fn-name-fn.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-init-fn-name-fn.js index bb268a1357..717f4f0b1d 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-init-fn-name-fn.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-init-fn-name-fn.js @@ -4,7 +4,6 @@ /*--- description: SingleNameBinding assigns name to "anonymous" functions (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-init-fn-name-gen.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-init-fn-name-gen.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-init-fn-name-gen.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-init-fn-name-gen.js index a2f5a2464f..7d05bfe4ec 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-init-fn-name-gen.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-init-fn-name-gen.js @@ -4,7 +4,6 @@ /*--- description: SingleNameBinding assigns name to "anonymous" generator functions (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [generators, destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-init-skipped.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-init-skipped.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-init-skipped.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-init-skipped.js index 925ea970ee..1d6fbbbfd8 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-init-skipped.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-init-skipped.js @@ -4,7 +4,6 @@ /*--- description: Destructuring initializer is not evaluated when value is not `undefined` (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-init-throws.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-init-throws.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-init-throws.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-init-throws.js index 2108542844..8d0f3d73dd 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-init-throws.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-init-throws.js @@ -4,7 +4,6 @@ /*--- description: Error thrown when evaluating the initializer (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-init-unresolvable.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-init-unresolvable.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-init-unresolvable.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-init-unresolvable.js index f1485b7233..df60c9e762 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-init-unresolvable.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-init-unresolvable.js @@ -4,7 +4,6 @@ /*--- description: Destructuring initializer is an unresolvable reference (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-trailing-comma.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-trailing-comma.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-trailing-comma.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-trailing-comma.js index 72e4fa8936..8badf691a9 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-id-trailing-comma.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-id-trailing-comma.js @@ -4,7 +4,6 @@ /*--- description: Trailing comma is allowed following BindingPropertyList (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-list-err.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-list-err.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-list-err.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-list-err.js index 1d59b40336..6ca778f932 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-list-err.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-list-err.js @@ -4,7 +4,6 @@ /*--- description: Binding property list evaluation is interrupted by an abrupt completion (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-ary-init.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-ary-init.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-ary-init.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-ary-init.js index 1406f0f6b0..76cd252431 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-ary-init.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-ary-init.js @@ -4,7 +4,6 @@ /*--- description: Object binding pattern with "nested" array binding pattern using initializer (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-ary-trailing-comma.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-ary-trailing-comma.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-ary-trailing-comma.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-ary-trailing-comma.js index 4470688ad0..e758426ab3 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-ary-trailing-comma.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-ary-trailing-comma.js @@ -4,7 +4,6 @@ /*--- description: Trailing comma is allowed following BindingPropertyList (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-ary-value-null.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-ary-value-null.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-ary-value-null.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-ary-value-null.js index d39615dbb2..dfe1d830b2 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-ary-value-null.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-ary-value-null.js @@ -4,7 +4,6 @@ /*--- description: Object binding pattern with "nested" array binding pattern taking the `null` value (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-ary.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-ary.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-ary.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-ary.js index b2bea8b1de..b8735f996a 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-ary.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-ary.js @@ -4,7 +4,6 @@ /*--- description: Object binding pattern with "nested" array binding pattern not using initializer (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-eval-err.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-eval-err.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-eval-err.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-eval-err.js index 9615f2fb9f..0e8b738aac 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-eval-err.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-eval-err.js @@ -4,7 +4,6 @@ /*--- description: Evaluation of property name returns an abrupt completion (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-id-get-value-err.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-id-get-value-err.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-id-get-value-err.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-id-get-value-err.js index c1d14ea6eb..b5bcafbd45 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-id-get-value-err.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-id-get-value-err.js @@ -4,7 +4,6 @@ /*--- description: Error thrown when accessing the corresponding property of the value object (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-id-init-skipped.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-id-init-skipped.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-id-init-skipped.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-id-init-skipped.js index 325a509a1c..50008e0d0d 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-id-init-skipped.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-id-init-skipped.js @@ -4,7 +4,6 @@ /*--- description: Destructuring initializer is not evaluated when value is not `undefined` (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-id-init-throws.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-id-init-throws.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-id-init-throws.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-id-init-throws.js index fff0d78c25..99337ee6a3 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-id-init-throws.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-id-init-throws.js @@ -4,7 +4,6 @@ /*--- description: Error thrown when evaluating the initializer (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-id-init-unresolvable.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-id-init-unresolvable.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-id-init-unresolvable.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-id-init-unresolvable.js index 4831d34e05..be02bbe851 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-id-init-unresolvable.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-id-init-unresolvable.js @@ -4,7 +4,6 @@ /*--- description: Destructuring initializer is an unresolvable reference (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-id-init.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-id-init.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-id-init.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-id-init.js index f836210348..2b8d907791 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-id-init.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-id-init.js @@ -4,7 +4,6 @@ /*--- description: Binding as specified via property name, identifier, and initializer (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-id-trailing-comma.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-id-trailing-comma.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-id-trailing-comma.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-id-trailing-comma.js index 424b683c6c..4294d1f117 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-id-trailing-comma.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-id-trailing-comma.js @@ -4,7 +4,6 @@ /*--- description: Trailing comma is allowed following BindingPropertyList (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-id.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-id.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-id.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-id.js index 8cfd91ea09..29009c9bfb 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-id.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-id.js @@ -4,7 +4,6 @@ /*--- description: Binding as specified via property name and identifier (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-obj-init.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-obj-init.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-obj-init.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-obj-init.js index d6cc2029e0..62b344aa51 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-obj-init.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-obj-init.js @@ -4,7 +4,6 @@ /*--- description: Object binding pattern with "nested" object binding pattern using initializer (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-obj-value-null.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-obj-value-null.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-obj-value-null.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-obj-value-null.js index 8ebc814289..3e0bb3f616 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-obj-value-null.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-obj-value-null.js @@ -4,7 +4,6 @@ /*--- description: Object binding pattern with "nested" object binding pattern taking the `null` value (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-obj-value-undef.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-obj-value-undef.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-obj-value-undef.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-obj-value-undef.js index 99b62dacbd..76198ca937 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-obj-value-undef.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-obj-value-undef.js @@ -4,7 +4,6 @@ /*--- description: Object binding pattern with "nested" object binding pattern taking the `null` value (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-obj.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-obj.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-obj.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-obj.js index e3f03562d8..1668e09e6c 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-prop-obj.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-prop-obj.js @@ -4,7 +4,6 @@ /*--- description: Object binding pattern with "nested" object binding pattern not using initializer (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [destructuring-binding] flags: [generated] info: | diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-rest-getter.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-rest-getter.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-rest-getter.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-rest-getter.js index d49c52b2c1..10431fa0fd 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-rest-getter.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-rest-getter.js @@ -4,7 +4,6 @@ /*--- description: Getter is called when obj is being deconstructed to a rest Object (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [object-rest, destructuring-binding] flags: [generated] includes: [propertyHelper.js] diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-rest-skip-non-enumerable.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-rest-skip-non-enumerable.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-rest-skip-non-enumerable.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-rest-skip-non-enumerable.js index 23ad196b05..23c2365e9e 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-rest-skip-non-enumerable.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-rest-skip-non-enumerable.js @@ -4,7 +4,6 @@ /*--- description: Rest object doesn't contain non-enumerable properties (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [object-rest, destructuring-binding] flags: [generated] includes: [propertyHelper.js] diff --git a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-rest-val-obj.js b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-rest-val-obj.js similarity index 98% rename from Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-rest-val-obj.js rename to Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-rest-val-obj.js index c829b48534..104396dc84 100644 --- a/Jint.Tests.Test262/test/language/statements/try/dstr-obj-ptrn-rest-val-obj.js +++ b/Jint.Tests.Test262/test/language/statements/try/dstr/obj-ptrn-rest-val-obj.js @@ -4,7 +4,6 @@ /*--- description: Rest object contains just unextracted data (try statement) esid: sec-runtime-semantics-catchclauseevaluation -es6id: 13.15.7 features: [object-rest, destructuring-binding] flags: [generated] includes: [propertyHelper.js] diff --git a/Jint.Tests.Test262/test/language/statements/try/early-catch-duplicates.js b/Jint.Tests.Test262/test/language/statements/try/early-catch-duplicates.js index e34d214804..de923e3a8c 100644 --- a/Jint.Tests.Test262/test/language/statements/try/early-catch-duplicates.js +++ b/Jint.Tests.Test262/test/language/statements/try/early-catch-duplicates.js @@ -11,6 +11,6 @@ negative: type: SyntaxError ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); try { } catch ([x, x]) {} diff --git a/Jint.Tests.Test262/test/language/statements/try/early-catch-function.js b/Jint.Tests.Test262/test/language/statements/try/early-catch-function.js index f51c16701a..8483447c9a 100644 --- a/Jint.Tests.Test262/test/language/statements/try/early-catch-function.js +++ b/Jint.Tests.Test262/test/language/statements/try/early-catch-function.js @@ -15,7 +15,7 @@ negative: type: SyntaxError ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); function f() { try { diff --git a/Jint.Tests.Test262/test/language/statements/try/early-catch-lex.js b/Jint.Tests.Test262/test/language/statements/try/early-catch-lex.js index 68e7e69212..4d12085419 100644 --- a/Jint.Tests.Test262/test/language/statements/try/early-catch-lex.js +++ b/Jint.Tests.Test262/test/language/statements/try/early-catch-lex.js @@ -12,6 +12,6 @@ negative: features: [let] ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); try { } catch (x) { let x; } diff --git a/Jint.Tests.Test262/test/language/statements/try/early-catch-var.js b/Jint.Tests.Test262/test/language/statements/try/early-catch-var.js deleted file mode 100644 index 45e3feb22a..0000000000 --- a/Jint.Tests.Test262/test/language/statements/try/early-catch-var.js +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (C) 2016 the V8 project authors. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. -/*--- -esid: sec-try-statement-static-semantics-early-errors -es6id: 13.15.1 -description: > - It is a Syntax Error if any element of the BoundNames of CatchParameter - also occurs in the VarDeclaredNames of Block. -info: | - Annex B extensions permit re-declarations from VariableStatement, the - VariableDeclarationList of a for statement, and the ForBinding of a for-of - statement. Bindings from the ForBinding of a for-in statement are - restricted regardless of the application of Annex B. -negative: - phase: parse - type: SyntaxError ----*/ - -throw "Test262: This statement should not be evaluated."; - -try { } catch (x) { for (var x of []) {} } diff --git a/Jint.Tests.Test262/test/language/statements/try/optional-catch-binding-parens.js b/Jint.Tests.Test262/test/language/statements/try/optional-catch-binding-parens.js index 5733210d13..7b05593c89 100644 --- a/Jint.Tests.Test262/test/language/statements/try/optional-catch-binding-parens.js +++ b/Jint.Tests.Test262/test/language/statements/try/optional-catch-binding-parens.js @@ -15,7 +15,7 @@ negative: type: SyntaxError ---*/ -throw "Test262: This statement should not be evaluated."; +$DONOTEVALUATE(); try {} catch () {} diff --git a/Jint.Tests.Test262/test/language/statements/try/scope-catch-block-var-none.js b/Jint.Tests.Test262/test/language/statements/try/scope-catch-block-var-none.js index de10923b93..33690d9ef8 100644 --- a/Jint.Tests.Test262/test/language/statements/try/scope-catch-block-var-none.js +++ b/Jint.Tests.Test262/test/language/statements/try/scope-catch-block-var-none.js @@ -20,6 +20,6 @@ try { probeInside = function() { return x; }; } -assert.sameValue(probeBefore(), 2, 'reference preceeding statement'); +assert.sameValue(probeBefore(), 2, 'reference preceding statement'); assert.sameValue(probeInside(), 2, 'reference within statement'); assert.sameValue(x, 2, 'reference following statement'); diff --git a/Jint.Tests.Test262/test/language/statements/try/scope-catch-param-var-none.js b/Jint.Tests.Test262/test/language/statements/try/scope-catch-param-var-none.js index 910eceea1a..8a6a3262ab 100644 --- a/Jint.Tests.Test262/test/language/statements/try/scope-catch-param-var-none.js +++ b/Jint.Tests.Test262/test/language/statements/try/scope-catch-param-var-none.js @@ -19,7 +19,7 @@ try { probeBlock = function() { return x; }; } -assert.sameValue(probeBefore(), 4, 'reference preceeding statement'); +assert.sameValue(probeBefore(), 4, 'reference preceding statement'); assert.sameValue(probeTry(), 4, 'reference from `try` block'); assert.sameValue(probeParam(), 4, 'reference within CatchParameter'); assert.sameValue(probeBlock(), 4, 'reference from `catch` block'); diff --git a/Jint.Tests/Runtime/PromiseTests.cs b/Jint.Tests/Runtime/PromiseTests.cs index 933fb08315..265b89b71f 100644 --- a/Jint.Tests/Runtime/PromiseTests.cs +++ b/Jint.Tests/Runtime/PromiseTests.cs @@ -4,6 +4,9 @@ using Jint.Runtime; using Xunit; +// obsolete GetCompletionValue +#pragma warning disable 618 + namespace Jint.Tests.Runtime { public class PromiseTests diff --git a/Jint/EsprimaExtensions.cs b/Jint/EsprimaExtensions.cs index 7b26ea1b7a..6c5a389036 100644 --- a/Jint/EsprimaExtensions.cs +++ b/Jint/EsprimaExtensions.cs @@ -8,6 +8,7 @@ using Jint.Native.Function; using Jint.Native.Object; using Jint.Runtime; +using Jint.Runtime.Environments; using Jint.Runtime.Interpreter; using Jint.Runtime.Interpreter.Expressions; @@ -174,6 +175,27 @@ internal static void GetBoundNames(this Node? parameter, List target) } } + internal static void BindingInitialization( + this Expression? expression, + Engine engine, + JsValue value, + LexicalEnvironment env) + { + if (expression is Identifier identifier) + { + var catchEnvRecord = (DeclarativeEnvironmentRecord) env._record; + catchEnvRecord.CreateMutableBindingAndInitialize(identifier.Name, canBeDeleted: false, value); + } + else if (expression is BindingPattern bindingPattern) + { + BindingPatternAssignmentExpression.ProcessPatterns( + engine, + bindingPattern, + value, + env); + } + } + /// /// https://tc39.es/ecma262/#sec-runtime-semantics-definemethod /// diff --git a/Jint/Jint.csproj b/Jint/Jint.csproj index e0952524f1..3482123d5a 100644 --- a/Jint/Jint.csproj +++ b/Jint/Jint.csproj @@ -8,7 +8,7 @@ true - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Jint/Native/Array/ArrayInstance.cs b/Jint/Native/Array/ArrayInstance.cs index fb15bd8678..16f040a641 100644 --- a/Jint/Native/Array/ArrayInstance.cs +++ b/Jint/Native/Array/ArrayInstance.cs @@ -2,6 +2,7 @@ using System.Runtime.CompilerServices; using Jint.Native.Object; +using Jint.Native.Symbol; using Jint.Runtime; using Jint.Runtime.Descriptors; @@ -59,6 +60,9 @@ public ArrayInstance(Engine engine, Dictionary items) public override bool IsArrayLike => true; + internal override bool HasOriginalIterator + => ReferenceEquals(Get(GlobalSymbolRegistry.Iterator), _engine.Array.PrototypeObject._originalIteratorFunction); + public override bool DefineOwnProperty(JsValue property, PropertyDescriptor desc) { var oldLenDesc = _length; diff --git a/Jint/Native/Object/ObjectInstance.cs b/Jint/Native/Object/ObjectInstance.cs index f15ac8e7af..f65e76600c 100644 --- a/Jint/Native/Object/ObjectInstance.cs +++ b/Jint/Native/Object/ObjectInstance.cs @@ -1093,6 +1093,9 @@ internal bool IsConcatSpreadable && lengthValue.IsNumber() && ((JsNumber) lengthValue)._value >= 0; + // safe default + internal virtual bool HasOriginalIterator => false; + internal override bool IsIntegerIndexedArray => false; public virtual uint Length => (uint) TypeConverter.ToLength(Get(CommonProperties.Length)); diff --git a/Jint/Runtime/Completion.cs b/Jint/Runtime/Completion.cs index 594762ba53..7d0a43aebb 100644 --- a/Jint/Runtime/Completion.cs +++ b/Jint/Runtime/Completion.cs @@ -42,5 +42,18 @@ public bool IsAbrupt() { return Type != CompletionType.Normal; } + + /// + /// https://tc39.es/ecma262/#sec-updateempty + /// + internal Completion UpdateEmpty(JsValue value) + { + if (Value is not null) + { + return this; + } + + return new Completion(Type, value, Identifier, Location); + } } } \ No newline at end of file diff --git a/Jint/Runtime/Environments/DeclarativeEnvironmentRecord.cs b/Jint/Runtime/Environments/DeclarativeEnvironmentRecord.cs index 9e783eb3f3..a705b3da28 100644 --- a/Jint/Runtime/Environments/DeclarativeEnvironmentRecord.cs +++ b/Jint/Runtime/Environments/DeclarativeEnvironmentRecord.cs @@ -12,7 +12,7 @@ internal class DeclarativeEnvironmentRecord : EnvironmentRecord { internal readonly HybridDictionary _dictionary = new HybridDictionary(); internal bool _hasBindings; - internal bool _catchEnvironment; + internal readonly bool _catchEnvironment; public DeclarativeEnvironmentRecord(Engine engine, bool catchEnvironment = false) : base(engine) { diff --git a/Jint/Runtime/Interop/ObjectWrapper.cs b/Jint/Runtime/Interop/ObjectWrapper.cs index f1d40cb7c5..bdd9474ba7 100644 --- a/Jint/Runtime/Interop/ObjectWrapper.cs +++ b/Jint/Runtime/Interop/ObjectWrapper.cs @@ -44,6 +44,8 @@ public ObjectWrapper(Engine engine, object obj) public override bool IsArrayLike => _typeDescriptor.IsArrayLike; + internal override bool HasOriginalIterator => IsArrayLike; + internal override bool IsIntegerIndexedArray => _typeDescriptor.IsIntegerIndexedArray; public override bool Set(JsValue property, JsValue value, JsValue receiver) diff --git a/Jint/Runtime/Interpreter/Expressions/BindingPatternAssignmentExpression.cs b/Jint/Runtime/Interpreter/Expressions/BindingPatternAssignmentExpression.cs index 0890cef89e..f5710cabfd 100644 --- a/Jint/Runtime/Interpreter/Expressions/BindingPatternAssignmentExpression.cs +++ b/Jint/Runtime/Interpreter/Expressions/BindingPatternAssignmentExpression.cs @@ -72,7 +72,9 @@ private static void HandleArrayPattern(Engine engine, ArrayPattern pattern, JsVa var obj = TypeConverter.ToObject(engine, argument); ArrayOperations arrayOperations = null; IIterator iterator = null; - if (obj.IsArrayLike) + + // optimize for array unless someone has touched the iterator + if (obj.IsArrayLike && obj.HasOriginalIterator) { arrayOperations = ArrayOperations.For(obj); } diff --git a/Jint/Runtime/Interpreter/Expressions/JintExpression.cs b/Jint/Runtime/Interpreter/Expressions/JintExpression.cs index 8ff0df723e..3c44f31c26 100644 --- a/Jint/Runtime/Interpreter/Expressions/JintExpression.cs +++ b/Jint/Runtime/Interpreter/Expressions/JintExpression.cs @@ -6,7 +6,6 @@ using Jint.Native.Array; using Jint.Native.Iterator; using Jint.Native.Number; -using Jint.Native.Symbol; namespace Jint.Runtime.Interpreter.Expressions { @@ -365,8 +364,7 @@ protected JsValue[] BuildArgumentsWithSpreads(JintExpression[] jintExpressions) { jse.GetValueAndCheckIterator(out var objectInstance, out var iterator); // optimize for array unless someone has touched the iterator - if (objectInstance is ArrayInstance ai - && ReferenceEquals(ai.Get(GlobalSymbolRegistry.Iterator), _engine.Array.PrototypeObject._originalIteratorFunction)) + if (objectInstance is ArrayInstance ai && ai.HasOriginalIterator) { var length = ai.GetLength(); for (uint j = 0; j < length; ++j) diff --git a/Jint/Runtime/Interpreter/Statements/JintTryStatement.cs b/Jint/Runtime/Interpreter/Statements/JintTryStatement.cs index 34900ff136..008c6297e9 100644 --- a/Jint/Runtime/Interpreter/Statements/JintTryStatement.cs +++ b/Jint/Runtime/Interpreter/Statements/JintTryStatement.cs @@ -1,4 +1,6 @@ +using System.Collections.Generic; using Esprima.Ast; +using Jint.Native; using Jint.Runtime.Environments; namespace Jint.Runtime.Interpreter.Statements @@ -9,19 +11,12 @@ namespace Jint.Runtime.Interpreter.Statements internal sealed class JintTryStatement : JintStatement { private readonly JintStatement _block; - private readonly JintStatement _catch; - private readonly Key _catchParamName; + private JintStatement _catch; private readonly JintStatement _finalizer; public JintTryStatement(Engine engine, TryStatement statement) : base(engine, statement) { _block = Build(engine, statement.Block); - if (_statement.Handler != null) - { - _catch = Build(engine, _statement.Handler.Body); - _catchParamName = ((Identifier) _statement.Handler.Param).Name; - } - if (statement.Finalizer != null) { _finalizer = Build(engine, _statement.Finalizer); @@ -35,8 +30,14 @@ protected override Completion ExecuteInternal() var b = _block.Execute(); if (b.Type == CompletionType.Throw) { + // initialize lazily + if (_statement.Handler is not null && _catch is null) + { + _catch = Build(_engine, _statement.Handler.Body); + } + // execute catch - if (_catch != null) + if (_statement.Handler is not null) { // Quick-patch for call stack not being unwinded when an exception is caught. // Ideally, this should instead be solved by always popping the stack when returning @@ -47,14 +48,28 @@ protected override Completion ExecuteInternal() { _engine.CallStack.Pop(); } - var c = b.Value; + + // https://tc39.es/ecma262/#sec-runtime-semantics-catchclauseevaluation + + var thrownValue = b.Value; var oldEnv = _engine.ExecutionContext.LexicalEnvironment; var catchEnv = LexicalEnvironment.NewDeclarativeEnvironment(_engine, oldEnv, catchEnvironment: true); - var catchEnvRecord = (DeclarativeEnvironmentRecord) catchEnv._record; - catchEnvRecord.CreateMutableBindingAndInitialize(_catchParamName, canBeDeleted: false, c); + + var boundNames = new List(); + _statement.Handler.Param.GetBoundNames(boundNames); + + foreach (var argName in boundNames) + { + catchEnv._record.CreateMutableBinding(argName, false); + } _engine.UpdateLexicalEnvironment(catchEnv); + + var catchParam = _statement.Handler?.Param; + catchParam.BindingInitialization(_engine, thrownValue, catchEnv); + b = _catch.Execute(); + _engine.UpdateLexicalEnvironment(oldEnv); } } @@ -67,10 +82,10 @@ protected override Completion ExecuteInternal() return b; } - return f; + return f.UpdateEmpty(Undefined.Instance); } - return b; + return b.UpdateEmpty(Undefined.Instance); } } } \ No newline at end of file