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 <anna@addaleax.net>
This commit is contained in:
parent
e029b927c2
commit
744cdecbf4
@ -5,7 +5,6 @@
|
|||||||
#include "node_internals.h"
|
#include "node_internals.h"
|
||||||
#include "node_native_module_env.h"
|
#include "node_native_module_env.h"
|
||||||
#include "node_platform.h"
|
#include "node_platform.h"
|
||||||
#include "node_process.h"
|
|
||||||
#include "node_v8_platform-inl.h"
|
#include "node_v8_platform-inl.h"
|
||||||
#include "uv.h"
|
#include "uv.h"
|
||||||
|
|
||||||
@ -46,32 +45,6 @@ static bool ShouldAbortOnUncaughtException(Isolate* isolate) {
|
|||||||
!env->inside_should_not_abort_on_uncaught_scope();
|
!env->inside_should_not_abort_on_uncaught_scope();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnMessage(Local<Message> message, Local<Value> 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) {
|
void* NodeArrayBufferAllocator::Allocate(size_t size) {
|
||||||
if (zero_fill_field_ || per_process::cli_options->zero_fill_all_buffers)
|
if (zero_fill_field_ || per_process::cli_options->zero_fill_all_buffers)
|
||||||
return UncheckedCalloc(size);
|
return UncheckedCalloc(size);
|
||||||
@ -187,7 +160,7 @@ void SetIsolateUpForNode(v8::Isolate* isolate, IsolateSettingCategories cat) {
|
|||||||
switch (cat) {
|
switch (cat) {
|
||||||
case IsolateSettingCategories::kErrorHandlers:
|
case IsolateSettingCategories::kErrorHandlers:
|
||||||
isolate->AddMessageListenerWithErrorLevel(
|
isolate->AddMessageListenerWithErrorLevel(
|
||||||
OnMessage,
|
errors::PerIsolateMessageListener,
|
||||||
Isolate::MessageErrorLevel::kMessageError |
|
Isolate::MessageErrorLevel::kMessageError |
|
||||||
Isolate::MessageErrorLevel::kMessageWarning);
|
Isolate::MessageErrorLevel::kMessageWarning);
|
||||||
isolate->SetAbortOnUncaughtExceptionCallback(
|
isolate->SetAbortOnUncaughtExceptionCallback(
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#ifdef NODE_REPORT
|
#ifdef NODE_REPORT
|
||||||
#include "node_report.h"
|
#include "node_report.h"
|
||||||
#endif
|
#endif
|
||||||
|
#include "node_process.h"
|
||||||
#include "node_v8_platform-inl.h"
|
#include "node_v8_platform-inl.h"
|
||||||
|
|
||||||
namespace node {
|
namespace node {
|
||||||
@ -739,6 +740,32 @@ const char* errno_string(int errorno) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PerIsolateMessageListener(Local<Message> message, Local<Value> 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
|
} // namespace errors
|
||||||
|
|
||||||
void DecorateErrorStack(Environment* env,
|
void DecorateErrorStack(Environment* env,
|
||||||
|
@ -191,6 +191,8 @@ class TryCatchScope : public v8::TryCatch {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const char* errno_string(int errorno);
|
const char* errno_string(int errorno);
|
||||||
|
void PerIsolateMessageListener(v8::Local<v8::Message> message,
|
||||||
|
v8::Local<v8::Value> error);
|
||||||
|
|
||||||
} // namespace errors
|
} // namespace errors
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user