diff --git a/common.gypi b/common.gypi index d4de1234271078..9860fdf511880e 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 c1bf7df2ec1acb..644cc6c90ce28e 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 4cdb65062219e8..3633f3064e2208 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);