cosmopolitan/third_party/duktape/duk_debug_macros.c

86 lines
2.0 KiB
C
Raw Normal View History

2020-06-15 14:18:57 +00:00
/*
* Debugging macro calls.
*/
#include "third_party/duktape/duk_internal.h"
#if defined(DUK_USE_DEBUG)
/*
* Debugging enabled
*/
#if !defined(DUK_USE_DEBUG_WRITE)
#error debugging enabled (DUK_USE_DEBUG) but DUK_USE_DEBUG_WRITE not defined
#endif
#define DUK__DEBUG_BUFSIZE DUK_USE_DEBUG_BUFSIZE
#if defined(DUK_USE_VARIADIC_MACROS)
DUK_INTERNAL void duk_debug_log(duk_int_t level, const char *file, duk_int_t line, const char *func, const char *fmt, ...) {
va_list ap;
long arg_level;
const char *arg_file;
long arg_line;
const char *arg_func;
const char *arg_msg;
char buf[DUK__DEBUG_BUFSIZE];
va_start(ap, fmt);
duk_memzero((void *) buf, (size_t) DUK__DEBUG_BUFSIZE);
duk_debug_vsnprintf(buf, DUK__DEBUG_BUFSIZE - 1, fmt, ap);
arg_level = (long) level;
arg_file = (const char *) file;
arg_line = (long) line;
arg_func = (const char *) func;
arg_msg = (const char *) buf;
DUK_USE_DEBUG_WRITE(arg_level, arg_file, arg_line, arg_func, arg_msg);
va_end(ap);
}
#else /* DUK_USE_VARIADIC_MACROS */
DUK_INTERNAL char duk_debug_file_stash[DUK_DEBUG_STASH_SIZE];
DUK_INTERNAL duk_int_t duk_debug_line_stash;
DUK_INTERNAL char duk_debug_func_stash[DUK_DEBUG_STASH_SIZE];
DUK_INTERNAL duk_int_t duk_debug_level_stash;
DUK_INTERNAL void duk_debug_log(const char *fmt, ...) {
va_list ap;
long arg_level;
const char *arg_file;
long arg_line;
const char *arg_func;
const char *arg_msg;
char buf[DUK__DEBUG_BUFSIZE];
va_start(ap, fmt);
duk_memzero((void *) buf, (size_t) DUK__DEBUG_BUFSIZE);
duk_debug_vsnprintf(buf, DUK__DEBUG_BUFSIZE - 1, fmt, ap);
arg_level = (long) duk_debug_level_stash;
arg_file = (const char *) duk_debug_file_stash;
arg_line = (long) duk_debug_line_stash;
arg_func = (const char *) duk_debug_func_stash;
arg_msg = (const char *) buf;
DUK_USE_DEBUG_WRITE(arg_level, arg_file, arg_line, arg_func, arg_msg);
va_end(ap);
}
#endif /* DUK_USE_VARIADIC_MACROS */
#else /* DUK_USE_DEBUG */
/*
* Debugging disabled
*/
#endif /* DUK_USE_DEBUG */