Spaces:
Runtime error
Runtime error
| if(typeof DEBUG === "undefined") | |
| { | |
| globalThis.DEBUG = true; | |
| } | |
| import { LOG_NAMES } from "./const.js"; | |
| import { pad0, pads } from "./lib.js"; | |
| import { | |
| LOG_ALL, LOG_PS2, LOG_PIT, LOG_9P, LOG_PIC, LOG_DMA, LOG_NET, LOG_FLOPPY, LOG_DISK, | |
| LOG_SERIAL, LOG_VGA, LOG_SB16, LOG_VIRTIO | |
| } from "./const.js"; | |
| /** @const */ | |
| export var LOG_TO_FILE = false; | |
| export var LOG_LEVEL = LOG_ALL & ~LOG_PS2 & ~LOG_PIT & ~LOG_VIRTIO & ~LOG_9P & ~LOG_PIC & | |
| ~LOG_DMA & ~LOG_SERIAL & ~LOG_NET & ~LOG_FLOPPY & ~LOG_DISK & ~LOG_VGA & ~LOG_SB16; | |
| export function set_log_level(level) { | |
| LOG_LEVEL = level; | |
| } | |
| export 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=)} | |
| */ | |
| export const dbg_log = (function() | |
| { | |
| if(!DEBUG) | |
| { | |
| return function() {}; | |
| } | |
| /** @type {Object.<number, string>} */ | |
| const 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 = "[" + 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 = pad0(now.getHours(), 2) + ":" + | |
| pad0(now.getMinutes(), 2) + ":" + | |
| pad0(now.getSeconds(), 2) + "+" + | |
| 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 | |
| */ | |
| export function dbg_trace(level) | |
| { | |
| if(!DEBUG) return; | |
| dbg_log(Error().stack, level); | |
| } | |
| /** | |
| * console.assert is fucking slow | |
| * @param {string=} msg | |
| * @param {number=} level | |
| */ | |
| export function dbg_assert(cond, msg, level) | |
| { | |
| if(!DEBUG) return; | |
| if(!cond) | |
| { | |
| dbg_assert_failed(msg); | |
| } | |
| } | |
| export function dbg_assert_failed(msg) | |
| { | |
| debugger; | |
| console.trace(); | |
| if(msg) | |
| { | |
| throw "Assert failed: " + msg; | |
| } | |
| else | |
| { | |
| throw "Assert failed"; | |
| } | |
| } | |