mirror of
https://github.com/zebrajr/node.git
synced 2025-12-06 12:20:27 +01:00
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 <cbruni@chromium.org>
Reviewed-by: Sathya Gunasekaran <gsathya@chromium.org>
Commit-Queue: Gus Caplan <me@gus.host>
Cr-Commit-Position: refs/heads/master@{#68207}
Refs: eec10a2fd8
PR-URL: https://github.com/nodejs/node/pull/33778
Backport-PR-URL: https://github.com/nodejs/node/pull/35393
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Gus Caplan <me@gus.host>
Reviewed-By: Gerhard Stöbich <deb2001-github@yahoo.de>
Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
This commit is contained in:
parent
020ba1a2b8
commit
3564424625
|
|
@ -33,7 +33,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.58',
|
'v8_embedder_string': '-node.59',
|
||||||
|
|
||||||
# Enable disassembler for `--print-code` v8 options
|
# Enable disassembler for `--print-code` v8 options
|
||||||
'v8_enable_disassembler': 1,
|
'v8_enable_disassembler': 1,
|
||||||
|
|
|
||||||
|
|
@ -993,10 +993,17 @@ TF_BUILTIN(RunMicrotasks, InternalBuiltinsAssembler) {
|
||||||
Node* const thenable = LoadObjectField(
|
Node* const thenable = LoadObjectField(
|
||||||
microtask, PromiseResolveThenableJobTask::kThenableOffset);
|
microtask, PromiseResolveThenableJobTask::kThenableOffset);
|
||||||
|
|
||||||
|
RunPromiseHook(Runtime::kPromiseHookBefore, microtask_context,
|
||||||
|
CAST(promise_to_resolve));
|
||||||
|
|
||||||
Node* const result =
|
Node* const result =
|
||||||
CallBuiltin(Builtins::kPromiseResolveThenableJob, native_context,
|
CallBuiltin(Builtins::kPromiseResolveThenableJob, native_context,
|
||||||
promise_to_resolve, thenable, then);
|
promise_to_resolve, thenable, then);
|
||||||
GotoIfException(result, &if_exception, &var_exception);
|
GotoIfException(result, &if_exception, &var_exception);
|
||||||
|
|
||||||
|
RunPromiseHook(Runtime::kPromiseHookAfter, microtask_context,
|
||||||
|
CAST(promise_to_resolve));
|
||||||
|
|
||||||
LeaveMicrotaskContext();
|
LeaveMicrotaskContext();
|
||||||
SetCurrentContext(current_context);
|
SetCurrentContext(current_context);
|
||||||
Goto(&loop_next);
|
Goto(&loop_next);
|
||||||
|
|
|
||||||
13
deps/v8/test/cctest/test-api.cc
vendored
13
deps/v8/test/cctest/test-api.cc
vendored
|
|
@ -18771,7 +18771,18 @@ TEST(PromiseHook) {
|
||||||
CHECK_EQ(v8::Promise::kPending, GetPromise("p")->State());
|
CHECK_EQ(v8::Promise::kPending, GetPromise("p")->State());
|
||||||
CompileRun("resolve(Promise.resolve(value));\n");
|
CompileRun("resolve(Promise.resolve(value));\n");
|
||||||
CHECK_EQ(v8::Promise::kFulfilled, GetPromise("p")->State());
|
CHECK_EQ(v8::Promise::kFulfilled, GetPromise("p")->State());
|
||||||
CHECK_EQ(9, promise_hook_data->promise_hook_count);
|
CHECK_EQ(11, promise_hook_data->promise_hook_count);
|
||||||
|
|
||||||
|
promise_hook_data->Reset();
|
||||||
|
source =
|
||||||
|
"var p = Promise.resolve({\n"
|
||||||
|
" then(r) {\n"
|
||||||
|
" r();\n"
|
||||||
|
" }\n"
|
||||||
|
"});";
|
||||||
|
CompileRun(source);
|
||||||
|
CHECK_EQ(GetPromise("p")->State(), v8::Promise::kFulfilled);
|
||||||
|
CHECK_EQ(promise_hook_data->promise_hook_count, 5);
|
||||||
|
|
||||||
delete promise_hook_data;
|
delete promise_hook_data;
|
||||||
isolate->SetPromiseHook(nullptr);
|
isolate->SetPromiseHook(nullptr);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user