diff --git a/src/connection_wrap.cc b/src/connection_wrap.cc index 67308bdb9c8d95..b894382c0370d5 100644 --- a/src/connection_wrap.cc +++ b/src/connection_wrap.cc @@ -48,9 +48,10 @@ void ConnectionWrap::OnConnection(uv_stream_t* handle, if (status == 0) { // Instantiate the client javascript object and handle. - Local client_obj = WrapType::Instantiate(env, - wrap_data, - WrapType::SOCKET); + Local client_obj; + if (!WrapType::Instantiate(env, wrap_data, WrapType::SOCKET) + .ToLocal(&client_obj)) + return; // Unwrap the client javascript object. WrapType* wrap; diff --git a/src/pipe_wrap.cc b/src/pipe_wrap.cc index 8ad1e0f594aa26..06bb3dd73d1b3c 100644 --- a/src/pipe_wrap.cc +++ b/src/pipe_wrap.cc @@ -42,16 +42,16 @@ using v8::FunctionTemplate; using v8::HandleScope; using v8::Int32; using v8::Local; +using v8::MaybeLocal; using v8::Object; using v8::String; using v8::Value; using AsyncHooks = Environment::AsyncHooks; - -Local PipeWrap::Instantiate(Environment* env, - AsyncWrap* parent, - PipeWrap::SocketType type) { +MaybeLocal PipeWrap::Instantiate(Environment* env, + AsyncWrap* parent, + PipeWrap::SocketType type) { EscapableHandleScope handle_scope(env->isolate()); AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(parent); CHECK_EQ(false, env->pipe_constructor_template().IsEmpty()); @@ -60,9 +60,8 @@ Local PipeWrap::Instantiate(Environment* env, .ToLocalChecked(); CHECK_EQ(false, constructor.IsEmpty()); Local type_value = Int32::New(env->isolate(), type); - Local instance = - constructor->NewInstance(env->context(), 1, &type_value).ToLocalChecked(); - return handle_scope.Escape(instance); + return handle_scope.EscapeMaybe( + constructor->NewInstance(env->context(), 1, &type_value)); } diff --git a/src/pipe_wrap.h b/src/pipe_wrap.h index b98d850439f0f4..473179a4f6fba0 100644 --- a/src/pipe_wrap.h +++ b/src/pipe_wrap.h @@ -38,9 +38,9 @@ class PipeWrap : public ConnectionWrap { IPC }; - static v8::Local Instantiate(Environment* env, - AsyncWrap* parent, - SocketType type); + static v8::MaybeLocal Instantiate(Environment* env, + AsyncWrap* parent, + SocketType type); static void Initialize(v8::Local target, v8::Local unused, v8::Local context, diff --git a/src/stream_wrap.cc b/src/stream_wrap.cc index 627bcf5949c545..e957cb172533c3 100644 --- a/src/stream_wrap.cc +++ b/src/stream_wrap.cc @@ -44,6 +44,7 @@ using v8::FunctionCallbackInfo; using v8::FunctionTemplate; using v8::HandleScope; using v8::Local; +using v8::MaybeLocal; using v8::Object; using v8::ReadOnly; using v8::Signature; @@ -195,10 +196,9 @@ void LibuvStreamWrap::OnUvAlloc(size_t suggested_size, uv_buf_t* buf) { *buf = EmitAlloc(suggested_size); } - - template -static Local AcceptHandle(Environment* env, LibuvStreamWrap* parent) { +static MaybeLocal AcceptHandle(Environment* env, + LibuvStreamWrap* parent) { static_assert(std::is_base_of::value || std::is_base_of::value, "Can only accept stream handles"); @@ -206,8 +206,7 @@ static Local AcceptHandle(Environment* env, LibuvStreamWrap* parent) { EscapableHandleScope scope(env->isolate()); Local wrap_obj; - wrap_obj = WrapType::Instantiate(env, parent, WrapType::SOCKET); - if (wrap_obj.IsEmpty()) + if (!WrapType::Instantiate(env, parent, WrapType::SOCKET).ToLocal(&wrap_obj)) return Local(); HandleWrap* wrap = Unwrap(wrap_obj); @@ -237,7 +236,7 @@ void LibuvStreamWrap::OnUvRead(ssize_t nread, const uv_buf_t* buf) { CHECK_EQ(persistent().IsEmpty(), false); if (nread > 0) { - Local pending_obj; + MaybeLocal pending_obj; if (type == UV_TCP) { pending_obj = AcceptHandle(env(), this); @@ -250,9 +249,11 @@ void LibuvStreamWrap::OnUvRead(ssize_t nread, const uv_buf_t* buf) { } if (!pending_obj.IsEmpty()) { - object()->Set(env()->context(), - env()->pending_handle_string(), - pending_obj).FromJust(); + object() + ->Set(env()->context(), + env()->pending_handle_string(), + pending_obj.ToLocalChecked()) + .FromJust(); } } diff --git a/src/tcp_wrap.cc b/src/tcp_wrap.cc index dac621ec879e5c..cb6e634006709d 100644 --- a/src/tcp_wrap.cc +++ b/src/tcp_wrap.cc @@ -46,6 +46,7 @@ using v8::HandleScope; using v8::Int32; using v8::Integer; using v8::Local; +using v8::MaybeLocal; using v8::Object; using v8::String; using v8::Uint32; @@ -53,10 +54,9 @@ using v8::Value; using AsyncHooks = Environment::AsyncHooks; - -Local TCPWrap::Instantiate(Environment* env, - AsyncWrap* parent, - TCPWrap::SocketType type) { +MaybeLocal TCPWrap::Instantiate(Environment* env, + AsyncWrap* parent, + TCPWrap::SocketType type) { EscapableHandleScope handle_scope(env->isolate()); AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(parent); CHECK_EQ(env->tcp_constructor_template().IsEmpty(), false); @@ -65,9 +65,8 @@ Local TCPWrap::Instantiate(Environment* env, .ToLocalChecked(); CHECK_EQ(constructor.IsEmpty(), false); Local type_value = Int32::New(env->isolate(), type); - Local instance = - constructor->NewInstance(env->context(), 1, &type_value).ToLocalChecked(); - return handle_scope.Escape(instance); + return handle_scope.EscapeMaybe( + constructor->NewInstance(env->context(), 1, &type_value)); } diff --git a/src/tcp_wrap.h b/src/tcp_wrap.h index db269f65281639..0467a1c3f3bf20 100644 --- a/src/tcp_wrap.h +++ b/src/tcp_wrap.h @@ -37,9 +37,9 @@ class TCPWrap : public ConnectionWrap { SERVER }; - static v8::Local Instantiate(Environment* env, - AsyncWrap* parent, - SocketType type); + static v8::MaybeLocal Instantiate(Environment* env, + AsyncWrap* parent, + SocketType type); static void Initialize(v8::Local target, v8::Local unused, v8::Local context, diff --git a/src/udp_wrap.cc b/src/udp_wrap.cc index d838ef6e725b96..e4aca28c89500e 100644 --- a/src/udp_wrap.cc +++ b/src/udp_wrap.cc @@ -30,12 +30,12 @@ namespace node { using v8::Array; using v8::Context; -using v8::EscapableHandleScope; using v8::FunctionCallbackInfo; using v8::FunctionTemplate; using v8::HandleScope; using v8::Integer; using v8::Local; +using v8::MaybeLocal; using v8::Object; using v8::PropertyAttribute; using v8::Signature; @@ -518,18 +518,14 @@ void UDPWrap::OnRecv(uv_udp_t* handle, wrap->MakeCallback(env->onmessage_string(), arraysize(argv), argv); } - -Local UDPWrap::Instantiate(Environment* env, - AsyncWrap* parent, - UDPWrap::SocketType type) { - EscapableHandleScope scope(env->isolate()); +MaybeLocal UDPWrap::Instantiate(Environment* env, + AsyncWrap* parent, + UDPWrap::SocketType type) { AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(parent); // If this assert fires then Initialize hasn't been called yet. CHECK_EQ(env->udp_constructor_function().IsEmpty(), false); - Local instance = env->udp_constructor_function() - ->NewInstance(env->context()).ToLocalChecked(); - return scope.Escape(instance); + return env->udp_constructor_function()->NewInstance(env->context()); } diff --git a/src/udp_wrap.h b/src/udp_wrap.h index 6347cdea87b450..97d95b57d3dd84 100644 --- a/src/udp_wrap.h +++ b/src/udp_wrap.h @@ -61,9 +61,9 @@ class UDPWrap: public HandleWrap { static void SetTTL(const v8::FunctionCallbackInfo& args); static void BufferSize(const v8::FunctionCallbackInfo& args); - static v8::Local Instantiate(Environment* env, - AsyncWrap* parent, - SocketType type); + static v8::MaybeLocal Instantiate(Environment* env, + AsyncWrap* parent, + SocketType type); SET_NO_MEMORY_INFO() SET_MEMORY_INFO_NAME(UDPWrap) SET_SELF_SIZE(UDPWrap)