0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2025-01-01 18:34:18 +01:00

ircd::js: Add debug dump() calls from JS_DEBUG ifdef'ed api.

This commit is contained in:
Jason Volk 2016-10-27 01:50:47 -07:00
parent 54c8044ca1
commit 7e66df914a
3 changed files with 103 additions and 2 deletions

View file

@ -25,6 +25,7 @@
namespace ircd {
namespace js {
// Returns static string
const char *reflect(const JSType &);
const char *reflect(const JSExnType &);
const char *reflect(const JSGCStatus &);
@ -33,10 +34,25 @@ const char *reflect(const JSFinalizeStatus &);
const char *reflect(const JSContextOp &);
const char *reflect_telemetry(const int &id);
// Returns single-line string
std::string debug(const JS::Value &);
std::string debug(const JS::HandleObject &);
std::string debug(const JSErrorReport &);
void debug_log_gcparams();
// prints to IRCd stdout
void dump(const JSString *const &v);
void dump(const JSAtom *const &v);
void dump(const JSObject *const &v);
void dump(const JS::Value &v);
void dump(const jsid &v);
void dump(const JSContext *v);
void dump(const JSScript *const &v);
void dump(const char16_t *const &v, const size_t &len);
void dump(const ::js::InterpreterFrame *v);
void backtrace();
// writes lines to ircd::js::log
void log_gcparams();
} // namespace js
} // namespace ircd

View file

@ -39,6 +39,11 @@
#include <jsapi.h>
#include <js/Conversions.h>
// Some forward declarations for jsapi items not declared in the above includes,
// but visible to definition files making use of additional jsapi interfaces.
struct JSAtom;
namespace js { struct InterpreterFrame; }
namespace ircd {
namespace js {

View file

@ -1466,7 +1466,7 @@ ircd::js::jserror::create(JSErrorReport &report)
//
void
ircd::js::debug_log_gcparams()
ircd::js::log_gcparams()
{
for(int i(0); i < 50; ++i)
{
@ -1494,6 +1494,86 @@ ircd::js::debug_log_gcparams()
}
}
void
ircd::js::backtrace()
{
#ifdef JS_DEBUG
::js::DumpBacktrace(*cx);
#endif
}
void
ircd::js::dump(const JSString *const &v)
{
#ifdef JS_DEBUG
::js::DumpString(const_cast<JSString *>(v));
#endif
}
void
ircd::js::dump(const JSAtom *const &v)
{
#ifdef JS_DEBUG
::js::DumpAtom(const_cast<JSAtom *>(v));
#endif
}
void
ircd::js::dump(const JSObject *const &v)
{
#ifdef JS_DEBUG
::js::DumpObject(const_cast<JSObject *>(v));
#endif
}
void
ircd::js::dump(const JS::Value &v)
{
#ifdef JS_DEBUG
::js::DumpValue(v);
#endif
}
void
ircd::js::dump(const jsid &v)
{
#ifdef JS_DEBUG
::js::DumpId(v);
#endif
}
void
ircd::js::dump(const JSContext *v)
{
#ifdef JS_DEBUG
::js::DumpPC(const_cast<JSContext *>(v));
#endif
}
void
ircd::js::dump(const JSScript *const &v)
{
#ifdef JS_DEBUG
::js::DumpScript(*cx, const_cast<JSScript *>(v));
#endif
}
void
ircd::js::dump(const char16_t *const &v, const size_t &len)
{
#ifdef JS_DEBUG
::js::DumpChars(v, len);
#endif
}
void
ircd::js::dump(const ::js::InterpreterFrame *v)
{
#ifdef JS_DEBUG
::js::DumpInterpreterFrame(*cx, const_cast<::js::InterpreterFrame *>(v));
#endif
}
std::string
ircd::js::debug(const JSErrorReport &r)
{