From 2a15c5d660f72390183e0321067551f63fa1297a Mon Sep 17 00:00:00 2001 From: j60033653 Date: Sun, 29 Sep 2024 15:18:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dissue1479104=20=EF=BC=88cherr?= =?UTF-8?q?y=20picked=20commit=20from=20Signed-?= =?UTF-8?q?off-by:=20xurui=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/builtins/promise-any.tq | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/builtins/promise-any.tq b/src/builtins/promise-any.tq index 7e707e649..da629a1f5 100644 --- a/src/builtins/promise-any.tq +++ b/src/builtins/promise-any.tq @@ -106,9 +106,10 @@ PromiseAnyRejectElementClosure( const index = identityHash - 1; // 6. Let errors be F.[[Errors]]. - let errors = *ContextSlot( + let errorsRef:&FixedArray = ContextSlot( context, PromiseAnyRejectElementContextSlots::kPromiseAnyRejectElementErrorsSlot); + let errors = *errorsRef; // 7. Let promiseCapability be F.[[Capability]]. @@ -134,10 +135,7 @@ PromiseAnyRejectElementClosure( IntPtrMax(SmiUntag(remainingElementsCount) - 1, index + 1); if (newCapacity > errors.length_intptr) deferred { errors = ExtractFixedArray(errors, 0, errors.length_intptr, newCapacity); - *ContextSlot( - context, - PromiseAnyRejectElementContextSlots:: - kPromiseAnyRejectElementErrorsSlot) = errors; + *errorsRef = errors; } errors.objects[index] = value; @@ -155,6 +153,10 @@ PromiseAnyRejectElementClosure( // b. Set error.[[AggregateErrors]] to errors. const error = ConstructAggregateError(errors); + + // After this point, errors escapes to user code. Clear the slot. + *errorsRef = kEmptyFixedArray; + // c. Return ? Call(promiseCapability.[[Reject]], undefined, « error »). const capability = *ContextSlot( context, -- Gitee