Skip to content

Commit 5db8b35

Browse files
Qardaddaleax
authored andcommitted
deps: V8: cherry-pick eec10a2fd8fa
Original commit message: [promisehook] Add before/after hooks to thenable tasks This will allow Node.js to properly track async context in thenables. Change-Id: If441423789a78307a57ad7e645daabf551cddb57 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2215624 Reviewed-by: Camillo Bruni <[email protected]> Reviewed-by: Sathya Gunasekaran <[email protected]> Commit-Queue: Gus Caplan <[email protected]> Cr-Commit-Position: refs/heads/master@{#68207} Refs: v8/v8@eec10a2 Backport-PR-URL: #34776 PR-URL: #33778 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Michaël Zasso <[email protected]> Reviewed-By: Gus Caplan <[email protected]> Reviewed-By: Gerhard Stöbich <[email protected]> Reviewed-By: Michael Dawson <[email protected]>
1 parent b7e4d5f commit 5db8b35

File tree

3 files changed

+20
-2
lines changed

3 files changed

+20
-2
lines changed

common.gypi

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434

3535
# Reset this number to 0 on major V8 upgrades.
3636
# Increment by one for each non-official patch applied to deps/v8.
37-
'v8_embedder_string': '-node.42',
37+
'v8_embedder_string': '-node.43',
3838

3939
##### V8 defaults for Node.js #####
4040

deps/v8/src/builtins/builtins-microtask-queue-gen.cc

+7
Original file line numberDiff line numberDiff line change
@@ -202,10 +202,17 @@ void MicrotaskQueueBuiltinsAssembler::RunSingleMicrotask(
202202
TNode<Object> const thenable = LoadObjectField(
203203
microtask, PromiseResolveThenableJobTask::kThenableOffset);
204204

205+
RunPromiseHook(Runtime::kPromiseHookBefore, microtask_context,
206+
CAST(promise_to_resolve));
207+
205208
TNode<Object> const result =
206209
CallBuiltin(Builtins::kPromiseResolveThenableJob, native_context,
207210
promise_to_resolve, thenable, then);
208211
GotoIfException(result, &if_exception, &var_exception);
212+
213+
RunPromiseHook(Runtime::kPromiseHookAfter, microtask_context,
214+
CAST(promise_to_resolve));
215+
209216
RewindEnteredContext(saved_entered_context_count);
210217
SetCurrentContext(current_context);
211218
Goto(&done);

deps/v8/test/cctest/test-api.cc

+12-1
Original file line numberDiff line numberDiff line change
@@ -16350,7 +16350,18 @@ TEST(PromiseHook) {
1635016350
CHECK_EQ(v8::Promise::kPending, GetPromise("p")->State());
1635116351
CompileRun("resolve(Promise.resolve(value));\n");
1635216352
CHECK_EQ(v8::Promise::kFulfilled, GetPromise("p")->State());
16353-
CHECK_EQ(9, promise_hook_data->promise_hook_count);
16353+
CHECK_EQ(11, promise_hook_data->promise_hook_count);
16354+
16355+
promise_hook_data->Reset();
16356+
source =
16357+
"var p = Promise.resolve({\n"
16358+
" then(r) {\n"
16359+
" r();\n"
16360+
" }\n"
16361+
"});";
16362+
CompileRun(source);
16363+
CHECK_EQ(GetPromise("p")->State(), v8::Promise::kFulfilled);
16364+
CHECK_EQ(promise_hook_data->promise_hook_count, 5);
1635416365

1635516366
delete promise_hook_data;
1635616367
isolate->SetPromiseHook(nullptr);

0 commit comments

Comments
 (0)