Skip to content

Commit

Permalink
src: add a constructor overload for CallbackScope
Browse files Browse the repository at this point in the history
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 <darshan.sen@postman.com>

PR-URL: #39768
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com>
  • Loading branch information
RaisinTen authored and targos committed Sep 4, 2021
1 parent 1aa2080 commit 1efae01
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 4 deletions.
4 changes: 1 addition & 3 deletions src/api/async_resource.cc
Expand Up @@ -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_) {}

Expand Down
10 changes: 10 additions & 0 deletions src/api/callback.cc
Expand Up @@ -27,6 +27,16 @@ CallbackScope::CallbackScope(Isolate* isolate,
try_catch_.SetVerbose(true);
}

CallbackScope::CallbackScope(Environment* env,
Local<Object> 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();
Expand Down
3 changes: 3 additions & 0 deletions src/node.h
Expand Up @@ -983,6 +983,9 @@ class NODE_EXTERN CallbackScope {
CallbackScope(v8::Isolate* isolate,
v8::Local<v8::Object> resource,
async_context asyncContext);
CallbackScope(Environment* env,
v8::Local<v8::Object> resource,
async_context asyncContext);
~CallbackScope();

void operator=(const CallbackScope&) = delete;
Expand Down
2 changes: 1 addition & 1 deletion src/node_api.cc
Expand Up @@ -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()) {}
Expand Down

0 comments on commit 1efae01

Please sign in to comment.