diff options
author | Joyee Cheung <joyeec9h3@gmail.com> | 2019-04-19 07:40:27 +0300 |
---|---|---|
committer | Joyee Cheung <joyeec9h3@gmail.com> | 2019-04-26 14:03:14 +0300 |
commit | 744cdecbf42e9ba9bdff2d5006cb625f25b87917 (patch) | |
tree | 346a4870cb6c071c4d873cb5669ec27e9cbfd484 /src/node_errors.cc | |
parent | e029b927c2a291b78bb27202a14bff09628b75a6 (diff) |
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>
Diffstat (limited to 'src/node_errors.cc')
-rw-r--r-- | src/node_errors.cc | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/node_errors.cc b/src/node_errors.cc index 560409d96b6..e2cd65b4efc 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> 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 void DecorateErrorStack(Environment* env, |