From 071300b39de9432a95fd29d84eca41bfa7b492f9 Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Fri, 19 Apr 2019 12:40:27 +0800 Subject: [PATCH] src: move OnMessage to node_errors.cc Rename the per-isolate message listener to `PerIsolateMessageListener` and move it to `node_errors.cc` since it's part of the error handling process. It also creates an external reference so it needs to be exposed in `node_errors.h` for a snapshot builder to know. PR-URL: https://github.com/nodejs/node/pull/27304 Reviewed-By: Anna Henningsen --- src/api/environment.cc | 29 +---------------------------- src/node_errors.cc | 27 +++++++++++++++++++++++++++ src/node_errors.h | 2 ++ 3 files changed, 30 insertions(+), 28 deletions(-) diff --git a/src/api/environment.cc b/src/api/environment.cc index 9a29ad1e5e1ff0..548b685dfe424a 100644 --- a/src/api/environment.cc +++ b/src/api/environment.cc @@ -5,7 +5,6 @@ #include "node_internals.h" #include "node_native_module_env.h" #include "node_platform.h" -#include "node_process.h" #include "node_v8_platform-inl.h" #include "uv.h" @@ -46,32 +45,6 @@ static bool ShouldAbortOnUncaughtException(Isolate* isolate) { !env->inside_should_not_abort_on_uncaught_scope(); } -static void OnMessage(Local message, Local error) { - Isolate* isolate = message->GetIsolate(); - switch (message->ErrorLevel()) { - case Isolate::MessageErrorLevel::kMessageWarning: { - Environment* env = Environment::GetCurrent(isolate); - if (!env) { - break; - } - Utf8Value filename(isolate, message->GetScriptOrigin().ResourceName()); - // (filename):(line) (message) - std::stringstream warning; - warning << *filename; - warning << ":"; - warning << message->GetLineNumber(env->context()).FromMaybe(-1); - warning << " "; - v8::String::Utf8Value msg(isolate, message->Get()); - warning << *msg; - USE(ProcessEmitWarningGeneric(env, warning.str().c_str(), "V8")); - break; - } - case Isolate::MessageErrorLevel::kMessageError: - FatalException(isolate, error, message); - break; - } -} - void* NodeArrayBufferAllocator::Allocate(size_t size) { if (zero_fill_field_ || per_process::cli_options->zero_fill_all_buffers) return UncheckedCalloc(size); @@ -187,7 +160,7 @@ void SetIsolateUpForNode(v8::Isolate* isolate, IsolateSettingCategories cat) { switch (cat) { case IsolateSettingCategories::kErrorHandlers: isolate->AddMessageListenerWithErrorLevel( - OnMessage, + errors::PerIsolateMessageListener, Isolate::MessageErrorLevel::kMessageError | Isolate::MessageErrorLevel::kMessageWarning); isolate->SetAbortOnUncaughtExceptionCallback( diff --git a/src/node_errors.cc b/src/node_errors.cc index 560409d96b6124..e2cd65b4efc88d 100644 --- a/src/node_errors.cc +++ b/src/node_errors.cc @@ -6,6 +6,7 @@ #ifdef NODE_REPORT #include "node_report.h" #endif +#include "node_process.h" #include "node_v8_platform-inl.h" namespace node { @@ -739,6 +740,32 @@ const char* errno_string(int errorno) { } } +void PerIsolateMessageListener(Local message, Local error) { + Isolate* isolate = message->GetIsolate(); + switch (message->ErrorLevel()) { + case Isolate::MessageErrorLevel::kMessageWarning: { + Environment* env = Environment::GetCurrent(isolate); + if (!env) { + break; + } + Utf8Value filename(isolate, message->GetScriptOrigin().ResourceName()); + // (filename):(line) (message) + std::stringstream warning; + warning << *filename; + warning << ":"; + warning << message->GetLineNumber(env->context()).FromMaybe(-1); + warning << " "; + v8::String::Utf8Value msg(isolate, message->Get()); + warning << *msg; + USE(ProcessEmitWarningGeneric(env, warning.str().c_str(), "V8")); + break; + } + case Isolate::MessageErrorLevel::kMessageError: + FatalException(isolate, error, message); + break; + } +} + } // namespace errors void DecorateErrorStack(Environment* env, diff --git a/src/node_errors.h b/src/node_errors.h index c27f4b36fa57f2..49575f0bd19927 100644 --- a/src/node_errors.h +++ b/src/node_errors.h @@ -191,6 +191,8 @@ class TryCatchScope : public v8::TryCatch { }; const char* errno_string(int errorno); +void PerIsolateMessageListener(v8::Local message, + v8::Local error); } // namespace errors