From 162092ea2a49af2b21b9b89eb8e2971f9295b5d4 Mon Sep 17 00:00:00 2001 From: Stephen Belanger Date: Sat, 6 Jun 2020 14:13:16 -0700 Subject: [PATCH] deps: V8: cherry-pick eec10a2fd8fa MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Sathya Gunasekaran Commit-Queue: Gus Caplan Cr-Commit-Position: refs/heads/master@{#68207} Refs: https://github.com/v8/v8/commit/eec10a2fd8fa4d0e7f5e32dedbd239d938a5dd87 PR-URL: https://github.com/nodejs/node/pull/33778 Reviewed-By: Anna Henningsen Reviewed-By: Michaël Zasso Reviewed-By: Gus Caplan Reviewed-By: Gerhard Stöbich Reviewed-By: Michael Dawson --- .../v8/src/builtins/builtins-microtask-queue-gen.cc | 7 +++++++ deps/v8/test/cctest/test-api.cc | 13 ++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/deps/v8/src/builtins/builtins-microtask-queue-gen.cc b/deps/v8/src/builtins/builtins-microtask-queue-gen.cc index 917255f9bb3e54..c71faa116c1d2e 100644 --- a/deps/v8/src/builtins/builtins-microtask-queue-gen.cc +++ b/deps/v8/src/builtins/builtins-microtask-queue-gen.cc @@ -198,11 +198,18 @@ void MicrotaskQueueBuiltinsAssembler::RunSingleMicrotask( const TNode thenable = LoadObjectField( microtask, PromiseResolveThenableJobTask::kThenableOffset); + RunPromiseHook(Runtime::kPromiseHookBefore, microtask_context, + CAST(promise_to_resolve)); + { ScopedExceptionHandler handler(this, &if_exception, &var_exception); CallBuiltin(Builtins::kPromiseResolveThenableJob, native_context, promise_to_resolve, thenable, then); } + + RunPromiseHook(Runtime::kPromiseHookAfter, microtask_context, + CAST(promise_to_resolve)); + RewindEnteredContext(saved_entered_context_count); SetCurrentContext(current_context); Goto(&done); diff --git a/deps/v8/test/cctest/test-api.cc b/deps/v8/test/cctest/test-api.cc index 6b7ea85452d2b0..a12d4788e4b5b5 100644 --- a/deps/v8/test/cctest/test-api.cc +++ b/deps/v8/test/cctest/test-api.cc @@ -16357,7 +16357,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);