deps: V8: cherry-pick fa4cb172cde2

Original commit message:

    [runtime] Fix Promise.all context promise hooks

    We have to take the slow path in Promise.all if context promise hooks
    are set. The fast-path doesn't create intermediate promises by default.

    Bug: chromium:1204132, v8:11025
    Change-Id: Ide92de00a4f6df05e0ddbc8814f6673bd667f426
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2866771
    Reviewed-by: Victor Gomes <victorgomes@chromium.org>
    Commit-Queue: Camillo Bruni <cbruni@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#74326}

Refs: fa4cb172cd

PR-URL: https://github.com/nodejs/node/pull/38273
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Michael Dawson <midawson@redhat.com>
Reviewed-By: Mary Marchini <oss@mmarchini.me>
This commit is contained in:
Michaël Zasso 2021-05-17 19:56:59 +02:00
parent c678285498
commit becfad1e6d
No known key found for this signature in database
GPG Key ID: 770F7A9A5AE15600
3 changed files with 14 additions and 4 deletions

View File

@ -36,7 +36,7 @@
# Reset this number to 0 on major V8 upgrades. # Reset this number to 0 on major V8 upgrades.
# Increment by one for each non-official patch applied to deps/v8. # Increment by one for each non-official patch applied to deps/v8.
'v8_embedder_string': '-node.12', 'v8_embedder_string': '-node.13',
##### V8 defaults for Node.js ##### ##### V8 defaults for Node.js #####

View File

@ -231,8 +231,7 @@ Reject(Object) {
// the PromiseReaction (aka we can pass undefined to // the PromiseReaction (aka we can pass undefined to
// PerformPromiseThen), since this is only necessary for DevTools and // PerformPromiseThen), since this is only necessary for DevTools and
// PromiseHooks. // PromiseHooks.
if (promiseResolveFunction != Undefined || if (promiseResolveFunction != Undefined || NeedsAnyPromiseHooks() ||
IsIsolatePromiseHookEnabledOrDebugIsActiveOrHasAsyncEventDelegate() ||
IsPromiseSpeciesProtectorCellInvalid() || Is<Smi>(nextValue) || IsPromiseSpeciesProtectorCellInvalid() || Is<Smi>(nextValue) ||
!IsPromiseThenLookupChainIntact( !IsPromiseThenLookupChainIntact(
nativeContext, UnsafeCast<HeapObject>(nextValue).map)) { nativeContext, UnsafeCast<HeapObject>(nextValue).map)) {

View File

@ -262,3 +262,14 @@ exceptions();
%PerformMicrotaskCheckpoint(); %PerformMicrotaskCheckpoint();
d8.promise.setHooks(); d8.promise.setHooks();
})(); })();
(function promiseAll() {
let initCount = 0;
d8.promise.setHooks(() => { initCount++});
Promise.all([Promise.resolve(1)]);
%PerformMicrotaskCheckpoint();
assertEquals(initCount, 3);
d8.promise.setHooks();
})();