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:
parent
c678285498
commit
becfad1e6d
@ -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 #####
|
||||||
|
|
||||||
|
3
deps/v8/src/builtins/promise-all.tq
vendored
3
deps/v8/src/builtins/promise-all.tq
vendored
@ -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)) {
|
||||||
|
13
deps/v8/test/mjsunit/promise-hooks.js
vendored
13
deps/v8/test/mjsunit/promise-hooks.js
vendored
@ -246,7 +246,7 @@ exceptions();
|
|||||||
(function regress1126309() {
|
(function regress1126309() {
|
||||||
function __f_16(test) {
|
function __f_16(test) {
|
||||||
test();
|
test();
|
||||||
d8.promise.setHooks( undefined, () => {});
|
d8.promise.setHooks(undefined, () => {});
|
||||||
%PerformMicrotaskCheckpoint();
|
%PerformMicrotaskCheckpoint();
|
||||||
d8.promise.setHooks();
|
d8.promise.setHooks();
|
||||||
}
|
}
|
||||||
@ -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();
|
||||||
|
})();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user