From 1efae01b185194ca1be10dabf85bf96f9f468faf Mon Sep 17 00:00:00 2001 From: Darshan Sen Date: Sun, 15 Aug 2021 11:00:35 +0530 Subject: [PATCH] src: add a constructor overload for CallbackScope This overload accepts the current Environment* as an argument, unlike the other constructor, which accepts an Isolate*. This is useful because we can pass the current Environment* directly instead of recomputing it from the Isolate* inside the constructor. Signed-off-by: Darshan Sen PR-URL: https://github.com/nodejs/node/pull/39768 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Franziska Hinkelmann --- src/api/async_resource.cc | 4 +--- src/api/callback.cc | 10 ++++++++++ src/node.h | 3 +++ src/node_api.cc | 2 +- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/api/async_resource.cc b/src/api/async_resource.cc index 0a2437fe6eda5c..3c4fbdadbc462c 100644 --- a/src/api/async_resource.cc +++ b/src/api/async_resource.cc @@ -62,10 +62,8 @@ async_id AsyncResource::get_trigger_async_id() const { return async_context_.trigger_async_id; } -// TODO(addaleax): We shouldn’t need to use env_->isolate() if we’re just going -// to end up using the Isolate* to figure out the Environment* again. AsyncResource::CallbackScope::CallbackScope(AsyncResource* res) - : node::CallbackScope(res->env_->isolate(), + : node::CallbackScope(res->env_, res->resource_.Get(res->env_->isolate()), res->async_context_) {} diff --git a/src/api/callback.cc b/src/api/callback.cc index 2a1c6301414176..46f17ba74e9528 100644 --- a/src/api/callback.cc +++ b/src/api/callback.cc @@ -27,6 +27,16 @@ CallbackScope::CallbackScope(Isolate* isolate, try_catch_.SetVerbose(true); } +CallbackScope::CallbackScope(Environment* env, + Local object, + async_context asyncContext) + : private_(new InternalCallbackScope(env, + object, + asyncContext)), + try_catch_(env->isolate()) { + try_catch_.SetVerbose(true); +} + CallbackScope::~CallbackScope() { if (try_catch_.HasCaught()) private_->MarkAsFailed(); diff --git a/src/node.h b/src/node.h index d19deab7cc7f64..2824de3bf8401d 100644 --- a/src/node.h +++ b/src/node.h @@ -983,6 +983,9 @@ class NODE_EXTERN CallbackScope { CallbackScope(v8::Isolate* isolate, v8::Local resource, async_context asyncContext); + CallbackScope(Environment* env, + v8::Local resource, + async_context asyncContext); ~CallbackScope(); void operator=(const CallbackScope&) = delete; diff --git a/src/node_api.cc b/src/node_api.cc index 3fcc9ecbf4a63f..e73e9a05713699 100644 --- a/src/node_api.cc +++ b/src/node_api.cc @@ -553,7 +553,7 @@ class AsyncContext { class CallbackScope : public node::CallbackScope { public: explicit CallbackScope(AsyncContext* async_context) - : node::CallbackScope(async_context->node_env()->isolate(), + : node::CallbackScope(async_context->node_env(), async_context->resource_.Get( async_context->node_env()->isolate()), async_context->async_context()) {}