diff options
Diffstat (limited to 'src/node.cc')
-rw-r--r-- | src/node.cc | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/src/node.cc b/src/node.cc index 481db24e94..8176c25c53 100644 --- a/src/node.cc +++ b/src/node.cc @@ -589,7 +589,7 @@ Local<Value> ErrnoException(Isolate* isolate, } e = Exception::Error(cons); - Local<Object> obj = e->ToObject(env->isolate()); + Local<Object> obj = e.As<Object>(); obj->Set(env->errno_string(), Integer::New(env->isolate(), errorno)); obj->Set(env->code_string(), estring); @@ -751,7 +751,7 @@ Local<Value> WinapiErrnoException(Isolate* isolate, e = Exception::Error(message); } - Local<Object> obj = e->ToObject(env->isolate()); + Local<Object> obj = e.As<Object>(); obj->Set(env->errno_string(), Integer::New(isolate, errorno)); if (path != nullptr) { @@ -1428,7 +1428,7 @@ static void ReportException(Environment* env, if (er->IsUndefined() || er->IsNull()) { trace_value = Undefined(env->isolate()); } else { - Local<Object> err_obj = er->ToObject(env->isolate()); + Local<Object> err_obj = er->ToObject(env->context()).ToLocalChecked(); trace_value = err_obj->Get(env->stack_string()); arrow = @@ -2251,7 +2251,8 @@ static void DLOpen(const FunctionCallbackInfo<Value>& args) { return env->ThrowTypeError("flag argument must be an integer."); } - Local<Object> module = args[0]->ToObject(env->isolate()); // Cast + Local<Object> module = + args[0]->ToObject(env->context()).ToLocalChecked(); // Cast node::Utf8Value filename(env->isolate(), args[1]); // Cast DLib dlib; dlib.filename_ = *filename; @@ -2269,7 +2270,8 @@ static void DLOpen(const FunctionCallbackInfo<Value>& args) { dlib.Close(); #ifdef _WIN32 // Windows needs to add the filename into the error message - errmsg = String::Concat(errmsg, args[1]->ToString(env->isolate())); + errmsg = String::Concat(errmsg, + args[1]->ToString(env->context()).ToLocalChecked()); #endif // _WIN32 env->isolate()->ThrowException(Exception::Error(errmsg)); return; @@ -2314,7 +2316,18 @@ static void DLOpen(const FunctionCallbackInfo<Value>& args) { modlist_addon = mp; Local<String> exports_string = env->exports_string(); - Local<Object> exports = module->Get(exports_string)->ToObject(env->isolate()); + MaybeLocal<Value> maybe_exports = + module->Get(env->context(), exports_string); + + if (maybe_exports.IsEmpty() || + maybe_exports.ToLocalChecked()->ToObject(env->context()).IsEmpty()) { + dlib.Close(); + return; + } + + Local<Object> exports = + maybe_exports.ToLocalChecked()->ToObject(env->context()) + .FromMaybe(Local<Object>()); if (mp->nm_context_register_func != nullptr) { mp->nm_context_register_func(exports, module, env->context(), mp->nm_priv); @@ -4281,7 +4294,7 @@ void EmitBeforeExit(Environment* env) { Local<String> exit_code = FIXED_ONE_BYTE_STRING(env->isolate(), "exitCode"); Local<Value> args[] = { FIXED_ONE_BYTE_STRING(env->isolate(), "beforeExit"), - process_object->Get(exit_code)->ToInteger(env->isolate()) + process_object->Get(exit_code)->ToInteger(env->context()).ToLocalChecked() }; MakeCallback(env->isolate(), process_object, "emit", arraysize(args), args, |