From 5e07bce166318379f0a2d22b223124f5cb9adfa6 Mon Sep 17 00:00:00 2001 From: Sam Roberts Date: Mon, 7 Nov 2016 13:18:23 -0800 Subject: [PATCH] src: add wrapper for process.emitWarning() PR-URL: https://github.com/nodejs/node/pull/9139 Reviewed-By: Ben Noordhuis Reviewed-By: Fedor Indutny --- src/node.cc | 27 +++++++++++++++++++++++++++ src/node_internals.h | 2 ++ 2 files changed, 29 insertions(+) diff --git a/src/node.cc b/src/node.cc index dc0bdcaac6..08063e2a5d 100644 --- a/src/node.cc +++ b/src/node.cc @@ -2609,6 +2609,33 @@ void ClearFatalExceptionHandlers(Environment* env) { Undefined(env->isolate())).FromJust(); } +// Call process.emitWarning(str), fmt is a snprintf() format string +void ProcessEmitWarning(Environment* env, const char* fmt, ...) { + char warning[1024]; + va_list ap; + + va_start(ap, fmt); + vsnprintf(warning, sizeof(warning), fmt, ap); + va_end(ap); + + HandleScope handle_scope(env->isolate()); + Context::Scope context_scope(env->context()); + + Local process = env->process_object(); + MaybeLocal emit_warning = process->Get(env->context(), + FIXED_ONE_BYTE_STRING(env->isolate(), "emitWarning")); + Local arg = node::OneByteString(env->isolate(), warning); + + Local f; + + if (!emit_warning.ToLocal(&f)) return; + if (!f->IsFunction()) return; + + // MakeCallback() unneeded, because emitWarning is internal code, it calls + // process.emit('warning', ..), but does so on the nextTick. + f.As()->Call(process, 1, &arg); +} + static void Binding(const FunctionCallbackInfo& args) { Environment* env = Environment::GetCurrent(args); diff --git a/src/node_internals.h b/src/node_internals.h index 530d2514e3..d10952340a 100644 --- a/src/node_internals.h +++ b/src/node_internals.h @@ -133,6 +133,8 @@ void AppendExceptionLine(Environment* env, NO_RETURN void FatalError(const char* location, const char* message); +void ProcessEmitWarning(Environment* env, const char* fmt, ...); + v8::Local BuildStatsObject(Environment* env, const uv_stat_t* s); enum Endianness {