summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Belanger <admin@stephenbelanger.com>2020-06-06 14:13:16 -0700
committerRichard Lau <rlau@redhat.com>2020-10-07 06:10:45 -0400
commit356442462551e4400c4617c6d0a1f721c78957c0 (patch)
treeff8f47bb12ed97adcc5ea7046b5e13a06d4623a8
parent020ba1a2b8b337694d0897c202a969986c176a9f (diff)
downloadnode-new-356442462551e4400c4617c6d0a1f721c78957c0.tar.gz
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: https://github.com/v8/v8/commit/eec10a2fd8fa4d0e7f5e32dedbd239d938a5dd87 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>
-rw-r--r--common.gypi2
-rw-r--r--deps/v8/src/builtins/builtins-internal-gen.cc7
-rw-r--r--deps/v8/test/cctest/test-api.cc13
3 files changed, 20 insertions, 2 deletions
diff --git a/common.gypi b/common.gypi
index 7a9a89a376..fc06084d0f 100644
--- a/common.gypi
+++ b/common.gypi
@@ -33,7 +33,7 @@
# Reset this number to 0 on major V8 upgrades.
# 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
'v8_enable_disassembler': 1,
diff --git a/deps/v8/src/builtins/builtins-internal-gen.cc b/deps/v8/src/builtins/builtins-internal-gen.cc
index c1bf7df2ec..644cc6c90c 100644
--- a/deps/v8/src/builtins/builtins-internal-gen.cc
+++ b/deps/v8/src/builtins/builtins-internal-gen.cc
@@ -993,10 +993,17 @@ TF_BUILTIN(RunMicrotasks, InternalBuiltinsAssembler) {
Node* const thenable = LoadObjectField(
microtask, PromiseResolveThenableJobTask::kThenableOffset);
+ RunPromiseHook(Runtime::kPromiseHookBefore, microtask_context,
+ CAST(promise_to_resolve));
+
Node* const result =
CallBuiltin(Builtins::kPromiseResolveThenableJob, native_context,
promise_to_resolve, thenable, then);
GotoIfException(result, &if_exception, &var_exception);
+
+ RunPromiseHook(Runtime::kPromiseHookAfter, microtask_context,
+ CAST(promise_to_resolve));
+
LeaveMicrotaskContext();
SetCurrentContext(current_context);
Goto(&loop_next);
diff --git a/deps/v8/test/cctest/test-api.cc b/deps/v8/test/cctest/test-api.cc
index 4cdb650622..3633f3064e 100644
--- a/deps/v8/test/cctest/test-api.cc
+++ b/deps/v8/test/cctest/test-api.cc
@@ -18771,7 +18771,18 @@ TEST(PromiseHook) {
CHECK_EQ(v8::Promise::kPending, GetPromise("p")->State());
CompileRun("resolve(Promise.resolve(value));\n");
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;
isolate->SetPromiseHook(nullptr);