Correctly scope unwind handlers for try blocks
Make sure the unwind handler is always reset when leaving the try block. This exposes a couple of failures in the ECMAScript test suite that were before passing by pure luck. Task-number: QTBUG-72858 Change-Id: I014b1e37c2beff136ecd53a665a2f10933f7e12c Reviewed-by: Ulf Hermann <ulf.hermann@qt.io> Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
This commit is contained in:
parent
679a9972b4
commit
729b1ceb89
|
@ -3662,15 +3662,12 @@ void Codegen::handleTryCatch(TryStatement *ast)
|
|||
{
|
||||
Q_ASSERT(ast);
|
||||
RegisterScope scope(this);
|
||||
BytecodeGenerator::Label noException = bytecodeGenerator->newLabel();
|
||||
{
|
||||
ControlFlowCatch catchFlow(this, ast->catchExpression);
|
||||
RegisterScope scope(this);
|
||||
TailCallBlocker blockTailCalls(this); // IMPORTANT: destruction will unblock tail calls before catch is generated
|
||||
statement(ast->statement);
|
||||
bytecodeGenerator->jump().link(noException);
|
||||
}
|
||||
noException.link();
|
||||
}
|
||||
|
||||
void Codegen::handleTryFinally(TryStatement *ast)
|
||||
|
|
|
@ -38,14 +38,21 @@ built-ins/Array/prototype/concat/S15.4.4.4_A3_T1.js fails
|
|||
built-ins/Array/prototype/concat/S15.4.4.4_A3_T2.js fails
|
||||
built-ins/Array/prototype/concat/S15.4.4.4_A3_T3.js fails
|
||||
built-ins/Array/prototype/concat/create-ctor-non-object.js fails
|
||||
built-ins/Array/prototype/concat/create-ctor-poisoned.js fails
|
||||
built-ins/Array/prototype/concat/create-proxy.js fails
|
||||
built-ins/Array/prototype/concat/create-species-abrupt.js fails
|
||||
built-ins/Array/prototype/concat/create-species-non-ctor.js fails
|
||||
built-ins/Array/prototype/concat/create-species-poisoned.js fails
|
||||
built-ins/Array/prototype/concat/create-species.js fails
|
||||
built-ins/Array/prototype/concat/is-concat-spreadable-val-falsey.js fails
|
||||
built-ins/Array/prototype/copyWithin/return-abrupt-from-has-start.js fails
|
||||
built-ins/Array/prototype/every/15.4.4.16-3-29.js fails
|
||||
built-ins/Array/prototype/filter/create-ctor-non-object.js fails
|
||||
built-ins/Array/prototype/filter/create-ctor-poisoned.js fails
|
||||
built-ins/Array/prototype/filter/create-proxy.js fails
|
||||
built-ins/Array/prototype/filter/create-species-abrupt.js fails
|
||||
built-ins/Array/prototype/filter/create-species-non-ctor.js fails
|
||||
built-ins/Array/prototype/filter/create-species-poisoned.js fails
|
||||
built-ins/Array/prototype/filter/create-species.js fails
|
||||
built-ins/Array/prototype/includes/length-boundaries.js fails
|
||||
built-ins/Array/prototype/indexOf/15.4.4.14-3-28.js fails
|
||||
|
@ -53,8 +60,11 @@ built-ins/Array/prototype/indexOf/15.4.4.14-3-29.js fails
|
|||
built-ins/Array/prototype/join/S15.4.4.5_A4_T3.js fails
|
||||
built-ins/Array/prototype/lastIndexOf/15.4.4.15-3-28.js fails
|
||||
built-ins/Array/prototype/map/create-ctor-non-object.js fails
|
||||
built-ins/Array/prototype/map/create-ctor-poisoned.js fails
|
||||
built-ins/Array/prototype/map/create-proxy.js fails
|
||||
built-ins/Array/prototype/map/create-species-abrupt.js fails
|
||||
built-ins/Array/prototype/map/create-species-non-ctor.js fails
|
||||
built-ins/Array/prototype/map/create-species-poisoned.js fails
|
||||
built-ins/Array/prototype/map/create-species.js fails
|
||||
built-ins/Array/prototype/pop/S15.4.4.6_A2_T2.js fails
|
||||
built-ins/Array/prototype/pop/S15.4.4.6_A3_T1.js fails
|
||||
|
@ -69,11 +79,14 @@ built-ins/Array/prototype/reverse/length-exceeding-integer-limit-with-proxy.js f
|
|||
built-ins/Array/prototype/slice/S15.4.4.10_A3_T1.js fails
|
||||
built-ins/Array/prototype/slice/S15.4.4.10_A3_T2.js fails
|
||||
built-ins/Array/prototype/slice/create-ctor-non-object.js fails
|
||||
built-ins/Array/prototype/slice/create-ctor-poisoned.js fails
|
||||
built-ins/Array/prototype/slice/create-non-array-invalid-len.js fails
|
||||
built-ins/Array/prototype/slice/create-proxied-array-invalid-len.js fails
|
||||
built-ins/Array/prototype/slice/create-proxy.js fails
|
||||
built-ins/Array/prototype/slice/create-species-abrupt.js fails
|
||||
built-ins/Array/prototype/slice/create-species-neg-zero.js fails
|
||||
built-ins/Array/prototype/slice/create-species-non-ctor.js fails
|
||||
built-ins/Array/prototype/slice/create-species-poisoned.js fails
|
||||
built-ins/Array/prototype/slice/create-species.js fails
|
||||
built-ins/Array/prototype/slice/length-exceeding-integer-limit-proxied-array.js fails
|
||||
built-ins/Array/prototype/slice/length-exceeding-integer-limit.js fails
|
||||
|
@ -83,10 +96,13 @@ built-ins/Array/prototype/sort/comparefn-nonfunction-call-throws.js fails
|
|||
built-ins/Array/prototype/splice/S15.4.4.12_A3_T1.js fails
|
||||
built-ins/Array/prototype/splice/clamps-length-to-integer-limit.js fails
|
||||
built-ins/Array/prototype/splice/create-ctor-non-object.js fails
|
||||
built-ins/Array/prototype/splice/create-ctor-poisoned.js fails
|
||||
built-ins/Array/prototype/splice/create-proxy.js fails
|
||||
built-ins/Array/prototype/splice/create-species-abrupt.js fails
|
||||
built-ins/Array/prototype/splice/create-species-length-exceeding-integer-limit.js fails
|
||||
built-ins/Array/prototype/splice/create-species-neg-zero.js fails
|
||||
built-ins/Array/prototype/splice/create-species-non-ctor.js fails
|
||||
built-ins/Array/prototype/splice/create-species-poisoned.js fails
|
||||
built-ins/Array/prototype/splice/create-species.js fails
|
||||
built-ins/Array/prototype/splice/length-and-deleteCount-exceeding-integer-limit.js fails
|
||||
built-ins/Array/prototype/splice/length-exceeding-integer-limit-shrink-array.js fails
|
||||
|
@ -130,6 +146,7 @@ built-ins/Atomics/wake/wake-negative.js fails
|
|||
built-ins/Atomics/wake/wake-one.js fails
|
||||
built-ins/Atomics/wake/wake-two.js fails
|
||||
built-ins/Atomics/wake/wake-zero.js fails
|
||||
built-ins/DataView/custom-proto-access-throws.js fails
|
||||
built-ins/DataView/custom-proto-if-object-is-used.js fails
|
||||
built-ins/Date/prototype/toDateString/format.js fails
|
||||
built-ins/Date/prototype/toDateString/invalid-date.js fails
|
||||
|
@ -140,8 +157,10 @@ built-ins/Date/prototype/toUTCString/day-names.js fails
|
|||
built-ins/Date/prototype/toUTCString/format.js fails
|
||||
built-ins/Date/prototype/toUTCString/month-names.js fails
|
||||
built-ins/Function/internals/Construct/base-ctor-revoked-proxy.js fails
|
||||
built-ins/Function/prototype/Symbol.hasInstance/value-get-prototype-of-err.js fails
|
||||
built-ins/Function/prototype/bind/BoundFunction_restricted-properties.js fails
|
||||
built-ins/Function/prototype/bind/instance-name-chained.js fails
|
||||
built-ins/Function/prototype/bind/instance-name-error.js fails
|
||||
built-ins/Function/prototype/bind/instance-name-non-string.js fails
|
||||
built-ins/Function/prototype/bind/instance-name.js fails
|
||||
built-ins/Function/prototype/toString/AsyncFunction.js fails
|
||||
|
@ -156,6 +175,15 @@ built-ins/Function/prototype/toString/async-method-object.js fails
|
|||
built-ins/Function/prototype/toString/method-computed-property-name.js fails
|
||||
built-ins/JSON/parse/revived-proxy-revoked.js fails
|
||||
built-ins/JSON/parse/revived-proxy.js fails
|
||||
built-ins/JSON/parse/reviver-array-define-prop-err.js fails
|
||||
built-ins/JSON/parse/reviver-array-delete-err.js fails
|
||||
built-ins/JSON/parse/reviver-array-length-coerce-err.js fails
|
||||
built-ins/JSON/parse/reviver-array-length-get-err.js fails
|
||||
built-ins/JSON/parse/reviver-call-err.js fails
|
||||
built-ins/JSON/parse/reviver-get-name-err.js fails
|
||||
built-ins/JSON/parse/reviver-object-define-prop-err.js fails
|
||||
built-ins/JSON/parse/reviver-object-delete-err.js fails
|
||||
built-ins/JSON/parse/reviver-object-own-keys-err.js fails
|
||||
built-ins/JSON/stringify/replacer-proxy-revoked.js fails
|
||||
built-ins/JSON/stringify/replacer-proxy.js fails
|
||||
built-ins/JSON/stringify/value-proxy.js fails
|
||||
|
@ -179,6 +207,7 @@ built-ins/Object/values/observable-operations.js fails
|
|||
built-ins/Promise/prototype/catch/this-value-obj-coercible.js fails
|
||||
built-ins/Promise/prototype/then/capability-executor-not-callable.js fails
|
||||
built-ins/Promise/prototype/then/ctor-custom.js fails
|
||||
built-ins/Promise/prototype/then/ctor-throws.js fails
|
||||
built-ins/Promise/race/ctx-ctor.js fails
|
||||
built-ins/Proxy/ownKeys/return-duplicate-entries-throws.js fails
|
||||
built-ins/Proxy/ownKeys/return-duplicate-symbol-entries-throws.js fails
|
||||
|
@ -190,6 +219,7 @@ built-ins/RegExp/prototype/exec/failure-lastindex-access.js fails
|
|||
built-ins/RegExp/prototype/exec/success-lastindex-access.js fails
|
||||
built-ins/RegExp/prototype/source/value-line-terminator.js fails
|
||||
built-ins/RegExp/prototype/test/S15.10.6.3_A1_T22.js fails
|
||||
built-ins/RegExp/u180e.js fails
|
||||
built-ins/RegExp/unicode_restricted_brackets.js fails
|
||||
built-ins/RegExp/unicode_restricted_character_class_escape.js fails
|
||||
built-ins/RegExp/unicode_restricted_identity_escape.js fails
|
||||
|
@ -198,7 +228,6 @@ built-ins/RegExp/unicode_restricted_identity_escape_c.js fails
|
|||
built-ins/RegExp/unicode_restricted_incomple_quantifier.js fails
|
||||
built-ins/RegExp/unicode_restricted_octal_escape.js fails
|
||||
built-ins/RegExp/unicode_restricted_quantifiable_assertion.js fails
|
||||
built-ins/RegExp/u180e.js fails
|
||||
built-ins/Set/prototype/forEach/iterates-values-revisits-after-delete-re-add.js fails
|
||||
built-ins/SharedArrayBuffer/data-allocation-after-object-creation.js fails
|
||||
built-ins/SharedArrayBuffer/prototype-from-newtarget.js fails
|
||||
|
@ -207,12 +236,15 @@ built-ins/String/prototype/includes/return-abrupt-from-searchstring-regexp-test.
|
|||
built-ins/String/prototype/indexOf/position-tointeger-toprimitive.js fails
|
||||
built-ins/String/prototype/indexOf/position-tointeger.js fails
|
||||
built-ins/String/prototype/indexOf/searchstring-tostring-toprimitive.js fails
|
||||
built-ins/String/prototype/replace/cstm-replace-get-err.js fails
|
||||
built-ins/String/prototype/replace/cstm-replace-invocation.js fails
|
||||
built-ins/String/prototype/replace/this-value-not-obj-coercible.js fails
|
||||
built-ins/String/prototype/search/cstm-search-get-err.js fails
|
||||
built-ins/String/prototype/search/cstm-search-invocation.js fails
|
||||
built-ins/String/prototype/search/invoke-builtin-search-searcher-undef.js fails
|
||||
built-ins/String/prototype/search/invoke-builtin-search.js fails
|
||||
built-ins/String/prototype/slice/this-value-not-obj-coercible.js fails
|
||||
built-ins/String/prototype/split/cstm-split-get-err.js fails
|
||||
built-ins/String/prototype/split/cstm-split-invocation.js fails
|
||||
built-ins/String/prototype/startsWith/return-abrupt-from-searchstring-regexp-test.js fails
|
||||
built-ins/String/prototype/toLocaleLowerCase/Final_Sigma_U180E.js fails
|
||||
|
@ -246,14 +278,22 @@ built-ins/TypedArray/prototype/sort/sorted-values-nan.js fails
|
|||
built-ins/TypedArray/prototype/sort/sorted-values.js fails
|
||||
built-ins/TypedArrays/ctors/buffer-arg/defined-negative-length.js fails
|
||||
built-ins/TypedArrays/ctors/object-arg/as-generator-iterable-returns.js fails
|
||||
built-ins/TypedArrays/ctors/object-arg/iterating-throws.js fails
|
||||
built-ins/TypedArrays/ctors/object-arg/iterator-not-callable-throws.js fails
|
||||
built-ins/TypedArrays/ctors/object-arg/iterator-throws.js fails
|
||||
built-ins/TypedArrays/ctors/typedarray-arg/detached-when-species-retrieved-different-type.js fails
|
||||
built-ins/TypedArrays/ctors/typedarray-arg/detached-when-species-retrieved-same-type.js fails
|
||||
built-ins/TypedArrays/ctors/typedarray-arg/other-ctor-buffer-ctor-access-throws.js fails
|
||||
built-ins/TypedArrays/ctors/typedarray-arg/other-ctor-buffer-ctor-custom-species.js fails
|
||||
built-ins/TypedArrays/ctors/typedarray-arg/other-ctor-buffer-ctor-not-object-throws.js fails
|
||||
built-ins/TypedArrays/ctors/typedarray-arg/other-ctor-buffer-ctor-species-access-throws.js fails
|
||||
built-ins/TypedArrays/ctors/typedarray-arg/other-ctor-buffer-ctor-species-not-ctor-throws.js fails
|
||||
built-ins/TypedArrays/ctors/typedarray-arg/other-ctor-buffer-ctor-species-prototype-throws.js fails
|
||||
built-ins/TypedArrays/ctors/typedarray-arg/same-ctor-buffer-ctor-access-throws.js fails
|
||||
built-ins/TypedArrays/ctors/typedarray-arg/same-ctor-buffer-ctor-species-custom.js fails
|
||||
built-ins/TypedArrays/ctors/typedarray-arg/same-ctor-buffer-ctor-species-not-ctor.js fails
|
||||
built-ins/TypedArrays/ctors/typedarray-arg/same-ctor-buffer-ctor-species-prototype-throws.js fails
|
||||
built-ins/TypedArrays/ctors/typedarray-arg/same-ctor-buffer-ctor-species-throws.js fails
|
||||
built-ins/TypedArrays/ctors/typedarray-arg/same-ctor-buffer-ctor-value-not-obj-throws.js fails
|
||||
built-ins/TypedArrays/from/arylk-get-length-error.js fails
|
||||
built-ins/TypedArrays/from/arylk-to-length-error.js fails
|
||||
|
@ -282,7 +322,7 @@ built-ins/TypedArrays/internals/Get/key-is-not-integer.js fails
|
|||
built-ins/TypedArrays/internals/Get/key-is-not-minus-zero.js fails
|
||||
built-ins/TypedArrays/internals/Get/key-is-out-of-bounds.js fails
|
||||
built-ins/TypedArrays/internals/Set/detached-buffer.js fails
|
||||
built-ins/TypedArrays/internals/Set/tonumber-value-throws.js strictFails
|
||||
built-ins/TypedArrays/internals/Set/tonumber-value-throws.js fails
|
||||
built-ins/global/global-object.js fails
|
||||
built-ins/global/property-descriptor.js fails
|
||||
built-ins/isFinite/toprimitive-not-callable-throws.js fails
|
||||
|
@ -290,8 +330,8 @@ built-ins/isNaN/toprimitive-not-callable-throws.js fails
|
|||
language/computed-property-names/class/static/method-number.js fails
|
||||
language/computed-property-names/class/static/method-string.js fails
|
||||
language/computed-property-names/class/static/method-symbol.js fails
|
||||
language/eval-code/direct/new.target.js fails
|
||||
language/eval-code/direct/new.target-arrow.js fails
|
||||
language/eval-code/direct/new.target.js fails
|
||||
language/eval-code/direct/non-definable-function-with-function.js sloppyFails
|
||||
language/eval-code/direct/non-definable-function-with-variable.js sloppyFails
|
||||
language/eval-code/direct/non-definable-global-function.js sloppyFails
|
||||
|
@ -316,6 +356,7 @@ language/eval-code/indirect/non-definable-function-with-function.js sloppyFails
|
|||
language/eval-code/indirect/non-definable-function-with-variable.js sloppyFails
|
||||
language/eval-code/indirect/non-definable-global-function.js fails
|
||||
language/eval-code/indirect/non-definable-global-generator.js fails
|
||||
language/eval-code/indirect/non-definable-global-var.js strictFails
|
||||
language/eval-code/indirect/super-call.js fails
|
||||
language/eval-code/indirect/super-prop.js fails
|
||||
language/eval-code/indirect/this-value-func.js strictFails
|
||||
|
|
Loading…
Reference in New Issue