Skip to content

Commit 3564424

Browse files
Qardrichardlau
authored andcommittedOct 7, 2020
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: v8/v8@eec10a2 PR-URL: #33778 Backport-PR-URL: #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>
1 parent 020ba1a commit 3564424

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
@@ -33,7 +33,7 @@
3333

3434
# Reset this number to 0 on major V8 upgrades.
3535
# Increment by one for each non-official patch applied to deps/v8.
36-
'v8_embedder_string': '-node.58',
36+
'v8_embedder_string': '-node.59',
3737

3838
# Enable disassembler for `--print-code` v8 options
3939
'v8_enable_disassembler': 1,

‎deps/v8/src/builtins/builtins-internal-gen.cc

+7
Original file line numberDiff line numberDiff line change
@@ -993,10 +993,17 @@ TF_BUILTIN(RunMicrotasks, InternalBuiltinsAssembler) {
993993
Node* const thenable = LoadObjectField(
994994
microtask, PromiseResolveThenableJobTask::kThenableOffset);
995995

996+
RunPromiseHook(Runtime::kPromiseHookBefore, microtask_context,
997+
CAST(promise_to_resolve));
998+
996999
Node* const result =
9971000
CallBuiltin(Builtins::kPromiseResolveThenableJob, native_context,
9981001
promise_to_resolve, thenable, then);
9991002
GotoIfException(result, &if_exception, &var_exception);
1003+
1004+
RunPromiseHook(Runtime::kPromiseHookAfter, microtask_context,
1005+
CAST(promise_to_resolve));
1006+
10001007
LeaveMicrotaskContext();
10011008
SetCurrentContext(current_context);
10021009
Goto(&loop_next);

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

+12-1
Original file line numberDiff line numberDiff line change
@@ -18771,7 +18771,18 @@ TEST(PromiseHook) {
1877118771
CHECK_EQ(v8::Promise::kPending, GetPromise("p")->State());
1877218772
CompileRun("resolve(Promise.resolve(value));\n");
1877318773
CHECK_EQ(v8::Promise::kFulfilled, GetPromise("p")->State());
18774-
CHECK_EQ(9, promise_hook_data->promise_hook_count);
18774+
CHECK_EQ(11, promise_hook_data->promise_hook_count);
18775+
18776+
promise_hook_data->Reset();
18777+
source =
18778+
"var p = Promise.resolve({\n"
18779+
" then(r) {\n"
18780+
" r();\n"
18781+
" }\n"
18782+
"});";
18783+
CompileRun(source);
18784+
CHECK_EQ(GetPromise("p")->State(), v8::Promise::kFulfilled);
18785+
CHECK_EQ(promise_hook_data->promise_hook_count, 5);
1877518786

1877618787
delete promise_hook_data;
1877718788
isolate->SetPromiseHook(nullptr);

0 commit comments

Comments
 (0)
Please sign in to comment.