v86/src/log.js
2020-12-31 19:14:33 -06:00

130 lines
2.5 KiB
JavaScript

"use strict";
var log_data = [];
function do_the_log(message)
{
if(LOG_TO_FILE)
{
log_data.push(message, "\n");
}
else
{
console.log(message);
}
}
/**
* @type {function((string|number), number=)}
* @const
*/
var dbg_log = (function()
{
if(!DEBUG)
{
return function() {};
}
/** @const @type {Object.<number, string>} */
var dbg_names = LOG_NAMES.reduce(function(a, x)
{
a[x[0]] = x[1];
return a;
}, {});
var log_last_message = "";
var log_message_repetitions = 0;
/**
* @param {number=} level
*/
function dbg_log_(stuff, level)
{
if(!DEBUG) return;
level = level || 1;
if(level & LOG_LEVEL)
{
var level_name = dbg_names[level] || "",
message = "[" + v86util.pads(level_name, 4) + "] " + stuff;
if(message === log_last_message)
{
log_message_repetitions++;
if(log_message_repetitions < 2048)
{
return;
}
}
var now = new Date();
var time_str = v86util.pad0(now.getHours(), 2) + ":" +
v86util.pad0(now.getMinutes(), 2) + ":" +
v86util.pad0(now.getSeconds(), 2) + "+" +
v86util.pad0(now.getMilliseconds(), 3) + " ";
if(log_message_repetitions)
{
if(log_message_repetitions === 1)
{
do_the_log(time_str + log_last_message);
}
else
{
do_the_log("Previous message repeated " + log_message_repetitions + " times");
}
log_message_repetitions = 0;
}
do_the_log(time_str + message);
log_last_message = message;
}
}
return dbg_log_;
})();
/**
* @param {number=} level
*/
function dbg_trace(level)
{
if(!DEBUG) return;
dbg_log(Error().stack, level);
}
/**
* console.assert is fucking slow
* @param {string=} msg
* @param {number=} level
*/
function dbg_assert(cond, msg, level)
{
if(!DEBUG) return;
if(!cond)
{
dbg_assert_failed(msg);
}
}
function dbg_assert_failed(msg)
{
debugger;
console.trace();
if(msg)
{
throw "Assert failed: " + msg;
}
else
{
throw "Assert failed";
}
}