Significantly improved logging
This commit is contained in:
parent
52fe4b56fa
commit
b219191f73
|
@ -11,7 +11,7 @@
|
|||
/*
|
||||
Object.getPrototypeOf = undefined;
|
||||
Object.setPrototypeOf = undefined;
|
||||
Reflect = undefined;
|
||||
Reflect = undefined
|
||||
Symbol = undefined;
|
||||
URIError = undefined;
|
||||
Proxy = undefined;
|
||||
|
@ -558,7 +558,7 @@ Object.hide = function(obj,...props)
|
|||
for (var prop of props) {
|
||||
var p = Object.getOwnPropertyDescriptor(obj,prop);
|
||||
if (!p) {
|
||||
console.info(`No property of name ${prop}.`);
|
||||
console.error(`No property of name ${prop}.`);
|
||||
continue;
|
||||
}
|
||||
p.enumerable = false;
|
||||
|
|
|
@ -6,12 +6,12 @@ this.realzoom = function() { return cmd(135); };
|
|||
|
||||
this.right = function()
|
||||
{
|
||||
return this.pos.x + (Game.width/2);
|
||||
return this.pos.x + (Window.rendersize.x/2);
|
||||
}
|
||||
|
||||
this.left = function()
|
||||
{
|
||||
return this.pos.x - (Game.width/2);
|
||||
return this.pos.x - (Window.rendersize.x/2);
|
||||
}
|
||||
|
||||
this.mixin({
|
||||
|
|
|
@ -24,7 +24,7 @@ var component = {
|
|||
nc.gameobject = go;
|
||||
Object.mixin(nc, this._enghook(go.body));
|
||||
assign_impl(nc,this.impl);
|
||||
Object.hide(nc, ['gameobject', 'id']);
|
||||
Object.hide(nc, 'gameobject', 'id');
|
||||
nc.post();
|
||||
return nc;
|
||||
},
|
||||
|
|
|
@ -130,7 +130,7 @@ Object.assign(performance, {
|
|||
var avgt = performance.best_t(elapsed/times);
|
||||
var totalt = performance.best_t(elapsed);
|
||||
|
||||
console.say(`performance [${q}]: ${avgt.time.toFixed(3)} ${avgt.unit} average [${totalt.time.toFixed(3)} ${totalt.unit} for ${times} loops]`);
|
||||
say(`performance [${q}]: ${avgt.time.toFixed(3)} ${avgt.unit} average [${totalt.time.toFixed(3)} ${totalt.unit} for ${times} loops]`);
|
||||
},
|
||||
|
||||
get fps() { return sys_cmd(8); },
|
||||
|
|
|
@ -1554,7 +1554,7 @@ var replpanel = Object.copy(inputpanel, {
|
|||
|
||||
guibody() {
|
||||
this.win.selectable = true;
|
||||
var log = cmd(84);
|
||||
//var log = cmd(84);
|
||||
log = log.slice(-5000);
|
||||
return [
|
||||
Mum.text({str:log, anchor:[0,0], offset:[0,-300].sub(this.scrolloffset), selectable: true}),
|
||||
|
@ -1575,12 +1575,12 @@ var replpanel = Object.copy(inputpanel, {
|
|||
ecode += `var ${key} = editor.edit_level.objects['${key}'];`;
|
||||
|
||||
ecode += this.value;
|
||||
console.say(this.value);
|
||||
say(this.value);
|
||||
this.value = "";
|
||||
this.caret = 0;
|
||||
var ret = function() {return eval(ecode);}.call(repl_obj);
|
||||
if (typeof ret === 'object') ret = json.encode(ret,null,1);
|
||||
console.say(ret);
|
||||
say(ret);
|
||||
},
|
||||
|
||||
resetscroll() {
|
||||
|
@ -1616,7 +1616,7 @@ replpanel.inputs.tab = function() {
|
|||
if (eval(`typeof ${keyobj.tofirst('.')}`) === 'object' && eval(`typeof ${keyobj.replace('.', '?.')}`) === 'object')
|
||||
obj = eval(keyobj);
|
||||
else if (this.value.includes('.')){
|
||||
console.say(`${this.value} is not an object.`);
|
||||
say(`${this.value} is not an object.`);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1657,7 +1657,7 @@ replpanel.inputs.tab = function() {
|
|||
});
|
||||
|
||||
if (keys.length > 1)
|
||||
console.repl(keys.join(', '));
|
||||
say(keys.join(', '));
|
||||
};
|
||||
replpanel.inputs['C-p'] = function()
|
||||
{
|
||||
|
|
|
@ -3,10 +3,9 @@ globalThis.global = globalThis;
|
|||
|
||||
function use(file)
|
||||
{
|
||||
|
||||
if (use.files[file]) return use.files[file];
|
||||
if (globalThis.console)
|
||||
console.warn(`running ${file}`);
|
||||
console.info(`running ${file}`);
|
||||
|
||||
var c = io.slurp(file);
|
||||
|
||||
|
@ -20,7 +19,7 @@ use.files = {};
|
|||
function include(file,that)
|
||||
{
|
||||
if (!that) return;
|
||||
if (globalThis.console) console.warn(`running ${file}`);
|
||||
if (globalThis.console) console.info(`running ${file}`);
|
||||
var c = io.slurp(file);
|
||||
eval_env(c, that, file);
|
||||
}
|
||||
|
@ -29,7 +28,7 @@ function eval_env(script, env, file)
|
|||
{
|
||||
env ??= {};
|
||||
file ??= "SCRIPT";
|
||||
if (globalThis.console) console.warn(`eval ${file}`);
|
||||
if (globalThis.console) console.info(`eval ${file}`);
|
||||
script = `(function() { ${script}; }).call(this);\n`;
|
||||
return cmd(123,script,env,file);
|
||||
}
|
||||
|
@ -91,7 +90,7 @@ global.mixin("scripts/render.js");
|
|||
|
||||
global.Game = {
|
||||
engine_start(fn) {
|
||||
console.warn("engine starting.");
|
||||
console.info("Starting rendering and sound ...");
|
||||
cmd(257, fn);
|
||||
},
|
||||
|
||||
|
|
|
@ -742,7 +742,7 @@ ur {
|
|||
/* Apply an ur u to an entity e */
|
||||
/* u is given as */
|
||||
function apply_ur(u, e) {
|
||||
console.log(`applying ur ${u}`);
|
||||
console.info(`Applying ur named ${u}.`);
|
||||
if (typeof u !== 'string') {
|
||||
console.warn("Must give u as a string.");
|
||||
return;
|
||||
|
|
|
@ -336,7 +336,7 @@ var Player = {
|
|||
|
||||
print_pawns() {
|
||||
for (var pawn of this.pawns.reversed())
|
||||
console.say(pawn.toString());
|
||||
say(pawn.toString());
|
||||
},
|
||||
|
||||
create() {
|
||||
|
|
|
@ -121,8 +121,6 @@ Resources.replstrs = function(path)
|
|||
}
|
||||
|
||||
var console = {
|
||||
set level(x) { cmd(92,x); },
|
||||
get level() { return cmd(93); },
|
||||
print(msg, lvl) {
|
||||
var lg;
|
||||
if (typeof msg === 'object') {
|
||||
|
@ -142,10 +140,12 @@ var console = {
|
|||
|
||||
yughlog(lvl, lg, file, line);
|
||||
},
|
||||
|
||||
spam(msg) {
|
||||
this.print(msg,0);
|
||||
},
|
||||
|
||||
/* this always prints to stdout */
|
||||
debug(msg) {
|
||||
this.print(msg,1);
|
||||
},
|
||||
|
@ -159,41 +159,29 @@ var console = {
|
|||
},
|
||||
|
||||
error(msg) {
|
||||
this.print(msg, 4);
|
||||
this.stack(1);
|
||||
this.print(msg + "\n" + console.stackstr(3), 4);
|
||||
},
|
||||
|
||||
write(msg) {
|
||||
if (typeof msg === 'object')
|
||||
msg = JSON.stringify(msg,null,2);
|
||||
|
||||
cmd(91,msg);
|
||||
panic(msg) {
|
||||
this.print(msg + "\n" + console.stackstr(1), 5);
|
||||
},
|
||||
|
||||
say(msg) { console.write(msg + '\n'); },
|
||||
repl(msg) { cmd(142, msg + '\n'); },
|
||||
log(msg) {
|
||||
if (typeof msg === 'object') msg = JSON.stringify(msg,null,1);
|
||||
cmd(91, msg + '\n');
|
||||
},
|
||||
stackstr(skip=0) {
|
||||
var err = new Error();
|
||||
var stack = err.stack.split('\n');
|
||||
return stack.slice(skip,stack.length-10).join('\n');
|
||||
},
|
||||
|
||||
stack(skip = 0) {
|
||||
var err = new Error();
|
||||
var stack = err.stack;
|
||||
var n = stack.next('\n',0)+1;
|
||||
for (var i = 0; i < skip; i++)
|
||||
n = stack.next('\n', n)+1;
|
||||
console.write(err.name);
|
||||
console.write(err.message);
|
||||
console.write(err.stack);
|
||||
},
|
||||
|
||||
clear() {
|
||||
cmd(146);
|
||||
console.log(stackstr(skip+1));
|
||||
},
|
||||
};
|
||||
|
||||
console.log = console.info;
|
||||
|
||||
var say = function(msg) {
|
||||
console.say(msg);
|
||||
}
|
||||
var say = console.log;
|
||||
say.doc = "Print to std out with an appended newline.";
|
||||
|
||||
console.doc = {
|
||||
|
|
|
@ -8,108 +8,70 @@
|
|||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include "yugine.h"
|
||||
#include "resources.h"
|
||||
|
||||
#include "script.h"
|
||||
|
||||
int logLevel = 0;
|
||||
|
||||
char *logstr[] = { "spam", "debug", "info", "warn", "error"};
|
||||
char *logstr[] = { "spam", "debug", "info", "warn", "error", "panic"};
|
||||
char *catstr[] = {"engine", "script", "render"};
|
||||
|
||||
FILE *logfile = NULL;
|
||||
|
||||
#define ERROR_BUFFER 1024
|
||||
#define CONSOLE_BUF 1024*1024 /* 5MB */
|
||||
|
||||
char *consolelog = NULL;
|
||||
|
||||
static FILE *sout;
|
||||
static FILE *logout; /* where logs are written to */
|
||||
static FILE *writeout; /* where console is written to */
|
||||
|
||||
void log_init()
|
||||
{
|
||||
consolelog = malloc(CONSOLE_BUF+1);
|
||||
consolelog[0] = '\0';
|
||||
sout = fdopen(dup(1),"w");
|
||||
sout = stdout;
|
||||
#ifndef NDEBUG
|
||||
logout = fopen(".prosperon/log.txt", "w");
|
||||
writeout = fopen(".prosperon/transcript.txt", "w");
|
||||
#endif
|
||||
}
|
||||
|
||||
const char *logfmt = "%s:%d: %s, %s: %s\n";
|
||||
void log_shutdown()
|
||||
{
|
||||
fclose(logout);
|
||||
fclose(writeout);
|
||||
}
|
||||
|
||||
const char *logfmt = "%s:%d: [%s] %s, %s: ";
|
||||
void mYughLog(int category, int priority, int line, const char *file, const char *message, ...)
|
||||
{
|
||||
#ifndef NDEBUG
|
||||
if (priority >= logLevel) {
|
||||
time_t now = time(0);
|
||||
struct tm *tinfo = localtime(&now);
|
||||
time_t now = time(NULL);
|
||||
struct tm *tinfo = localtime(&now);
|
||||
char timebuf[80];
|
||||
strftime(timebuf, sizeof(timebuf), "%Y-%m-%d %H:%M:%S", tinfo);
|
||||
|
||||
double ticks = (double)clock()/CLOCKS_PER_SEC;
|
||||
fprintf(logout, logfmt, file, line, timebuf, logstr[priority], catstr[category]);
|
||||
|
||||
va_list args, arg2;
|
||||
va_start(args, message);
|
||||
va_copy(arg2, args);
|
||||
int len = vsnprintf(NULL, 0, message, args)+1;
|
||||
char *msg = malloc(len);
|
||||
va_list args;
|
||||
va_start(args, message);
|
||||
vfprintf(logout, message, args);
|
||||
va_end(args);
|
||||
fprintf(logout, "\n");
|
||||
|
||||
if (priority == LOG_DEBUG) {
|
||||
printf(logfmt, file, line, timebuf, logstr[priority], catstr[category]);
|
||||
va_list args;
|
||||
va_start(args,message);
|
||||
vprintf(message, args);
|
||||
va_end(args);
|
||||
vsnprintf(msg, len, message, arg2);
|
||||
va_end(arg2);
|
||||
|
||||
len = snprintf(NULL, 0, logfmt, file,line,logstr[priority], catstr[category], msg)+1;
|
||||
char *buffer = malloc(len);
|
||||
snprintf(buffer, len, logfmt, file, line, logstr[priority], catstr[category], msg);
|
||||
|
||||
fprintf(stderr, "%s", buffer);
|
||||
// if (priority >= LOG_ERROR)
|
||||
// js_stacktrace();
|
||||
fflush(stderr);
|
||||
|
||||
free(msg);
|
||||
free(buffer);
|
||||
printf("\n");
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
/* print to stdout and console */
|
||||
void log_print(const char *str)
|
||||
{
|
||||
fprintf(sout, "%s", str);
|
||||
fflush(sout);
|
||||
|
||||
#ifndef NDEBUG
|
||||
strncat(consolelog, str, CONSOLE_BUF);
|
||||
|
||||
if (logfile) {
|
||||
fprintf(logfile, "%s", str);
|
||||
fflush(logfile);
|
||||
}
|
||||
fprintf(writeout, str);
|
||||
#endif
|
||||
}
|
||||
|
||||
void log_clear()
|
||||
{
|
||||
consolelog[0] = 0;
|
||||
}
|
||||
|
||||
void console_print(const char *str)
|
||||
{
|
||||
#ifndef NDEBUG
|
||||
strncat(consolelog, str, CONSOLE_BUF);
|
||||
#endif
|
||||
}
|
||||
|
||||
void log_setfile(char *file) {
|
||||
freopen(file, "w", stderr);
|
||||
freopen(file, "w", stdout);
|
||||
}
|
||||
|
||||
void log_cat(FILE *f) {
|
||||
char out[1024];
|
||||
|
||||
while (fgets(out, sizeof(out), f)) {
|
||||
out[strcspn(out, "\n")] = '\0';
|
||||
YughInfo(out);
|
||||
}
|
||||
printf(str);
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
void sg_logging(const char *tag, uint32_t lvl, uint32_t id, const char *msg, uint32_t line, const char *file, void *data) {
|
||||
lvl = 3-lvl;
|
||||
mYughLog(2, lvl, line, file, "tag: %s, id: %d, msg: %s", tag, id, msg);
|
||||
lvl = LOG_PANIC-lvl;
|
||||
mYughLog(LOG_RENDER, lvl, line, file, "tag: %s, id: %d, msg: %s", tag, id, msg);
|
||||
}
|
||||
|
|
|
@ -9,22 +9,25 @@
|
|||
#define LOG_INFO 2
|
||||
#define LOG_WARN 3
|
||||
#define LOG_ERROR 4
|
||||
#define LOG_PANIC 5
|
||||
|
||||
#define LOG_ENGINE 0
|
||||
#define LOG_SCRIPT 1
|
||||
#define LOG_RENDER 2
|
||||
|
||||
extern char *consolelog;
|
||||
extern int logLevel;
|
||||
extern char *logwrite;
|
||||
extern char *transwrite;
|
||||
|
||||
void log_init();
|
||||
void log_shutdown();
|
||||
|
||||
#ifndef NDEBUG
|
||||
#define YughLog(cat, pri, msg, ...) mYughLog(cat, pri, __LINE__, __FILE__, msg, ##__VA_ARGS__)
|
||||
#define YughInfo(msg, ...) mYughLog(0, 0, __LINE__, __FILE__, msg, ##__VA_ARGS__);
|
||||
#define YughWarn(msg, ...) mYughLog(0, 1, __LINE__, __FILE__, msg, ##__VA_ARGS__);
|
||||
#define YughError(msg, ...) mYughLog(0, 2, __LINE__, __FILE__, msg, ##__VA_ARGS__);
|
||||
#define YughCritical(msg, ...) mYughLog(0, 3, __LINE__, __FILE__, msg, ##__VA_ARGS__);
|
||||
#define YughSpam(msg, ...) mYughLog(0, LOG_SPAM, __LINE__, __FILE__, msg, ##__VA_ARGS__);
|
||||
#define YughInfo(msg, ...) mYughLog(0, LOG_INFO, __LINE__, __FILE__, msg, ##__VA_ARGS__);
|
||||
#define YughWarn(msg, ...) mYughLog(0, LOG_WARN, __LINE__, __FILE__, msg, ##__VA_ARGS__);
|
||||
#define YughError(msg, ...) mYughLog(0, LOG_ERROR, __LINE__, __FILE__, msg, ##__VA_ARGS__);
|
||||
#define YughCritical(msg, ...) mYughLog(0, LOG_PANIC, __LINE__, __FILE__, msg, ##__VA_ARGS__);
|
||||
#else
|
||||
#define YughLog(cat, pri, msg, ...)
|
||||
#define YughInfo(msg, ...)
|
||||
|
@ -33,13 +36,10 @@ void log_init();
|
|||
#define YughCritical(msg, ...)
|
||||
#endif
|
||||
|
||||
/* These log to the correct areas */
|
||||
void mYughLog(int category, int priority, int line, const char *file, const char *message, ...);
|
||||
void sg_logging(const char *tag, uint32_t lvl, uint32_t id, const char *msg, uint32_t line, const char *file, void *data);
|
||||
|
||||
void log_setfile(char *file);
|
||||
void log_cat(FILE *f);
|
||||
void log_print(const char *str);
|
||||
void log_clear();
|
||||
void console_print(const char *str);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -825,10 +825,6 @@ JSValue duk_cmd(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
|
|||
draw_edge(v1, js_arrlen(argv[1]), js2color(argv[2]), js2number(argv[3]), 0, js2color(argv[2]), 10);
|
||||
break;
|
||||
|
||||
case 84:
|
||||
ret = consolelog ? JS_NewString(js, consolelog) : JS_NewString(js,"");
|
||||
break;
|
||||
|
||||
case 85:
|
||||
ret = vec22js(HMM_ProjV2(js2vec2(argv[1]), js2vec2(argv[2])));
|
||||
break;
|
||||
|
@ -854,18 +850,11 @@ JSValue duk_cmd(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
|
|||
log_print(str);
|
||||
break;
|
||||
|
||||
case 92:
|
||||
logLevel = js2int(argv[1]);
|
||||
break;
|
||||
|
||||
case 93:
|
||||
ret = int2js(logLevel);
|
||||
break;
|
||||
|
||||
case 97:
|
||||
str = js2str(argv[1]);
|
||||
cursor_img(str);
|
||||
break;
|
||||
|
||||
case 103:
|
||||
ret = vec22js(js2gameobject(argv[1])->scale.XY);
|
||||
break;
|
||||
|
@ -972,11 +961,7 @@ JSValue duk_cmd(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
|
|||
|
||||
case 142:
|
||||
str = JS_ToCString(js, argv[1]);
|
||||
console_print(str);
|
||||
break;
|
||||
|
||||
case 146:
|
||||
log_clear();
|
||||
log_print(str);
|
||||
break;
|
||||
|
||||
case 149:
|
||||
|
@ -1275,7 +1260,7 @@ JSValue duk_yughlog(JSContext *js, JSValueConst this, int argc, JSValueConst *ar
|
|||
const char *f = JS_ToCString(js, argv[2]);
|
||||
int line = js2int(argv[3]);
|
||||
|
||||
mYughLog(1, cmd, line, f, s);
|
||||
mYughLog(LOG_SCRIPT, cmd, line, f, s);
|
||||
|
||||
JS_FreeCString(js, s);
|
||||
JS_FreeCString(js, f);
|
||||
|
|
|
@ -177,47 +177,47 @@ static struct {
|
|||
} sg_shadow;
|
||||
|
||||
|
||||
void trace_make_image(const sg_image_desc *d, sg_image result, void *data)
|
||||
void trace_make_image(const sg_image_desc *d, sg_image id, void *data)
|
||||
{
|
||||
YughInfo("Making image %s", d->label);
|
||||
YughSpam("Made image %s.", d->label);
|
||||
}
|
||||
|
||||
void trace_init_image(sg_image id, const sg_image_desc *d, void *data)
|
||||
{
|
||||
YughInfo("Init image %s", d->label);
|
||||
YughSpam("Init image %s", d->label);
|
||||
}
|
||||
|
||||
void trace_make_shader(const sg_shader_desc *d, sg_shader result, void *data)
|
||||
void trace_make_shader(const sg_shader_desc *d, sg_shader id, void *data)
|
||||
{
|
||||
YughInfo("Making shader %s", d->label);
|
||||
if (sg_query_shader_state(result) == SG_RESOURCESTATE_FAILED)
|
||||
YughSpam("Making shader %s", d->label);
|
||||
if (sg_query_shader_state(id) == SG_RESOURCESTATE_FAILED)
|
||||
YughError("FAILED MAKING A SHADER: %s\n%s\n%s", d->label);
|
||||
}
|
||||
|
||||
void trace_fail_shader(sg_shader id, void *data)
|
||||
{
|
||||
YughError("SHADER DID NOT COMPILE");
|
||||
YughError("Shader %u did not compile.", id);
|
||||
}
|
||||
|
||||
void trace_destroy_shader(sg_shader shd, void *data)
|
||||
void trace_destroy_shader(sg_shader id, void *data)
|
||||
{
|
||||
YughInfo("DESTROYED SHADER");
|
||||
YughSpam("Destroyed shader %u.", id);
|
||||
}
|
||||
|
||||
void trace_fail_image(sg_image id, void *data)
|
||||
{
|
||||
sg_image_desc desc = sg_query_image_desc(id);
|
||||
YughError("Failed to make image %s", desc.label);
|
||||
YughError("Failed to make image %u %s", id, desc.label);
|
||||
}
|
||||
|
||||
void trace_make_pipeline(const sg_pipeline_desc *d, sg_pipeline result, void *data)
|
||||
void trace_make_pipeline(const sg_pipeline_desc *d, sg_pipeline id, void *data)
|
||||
{
|
||||
YughInfo("Making pipeline %s, id %d", d->label, result);
|
||||
YughSpam("Making pipeline %u [%s].", id, d->label);
|
||||
}
|
||||
|
||||
void trace_apply_pipeline(sg_pipeline pip, void *data)
|
||||
{
|
||||
YughInfo("Applying pipeline %d", pip);
|
||||
YughSpam("Applying pipeline %u %s.", pip, sg_query_pipeline_desc(pip).label);
|
||||
}
|
||||
|
||||
void trace_fail_pipeline(sg_pipeline pip, void *data)
|
||||
|
@ -227,12 +227,12 @@ void trace_fail_pipeline(sg_pipeline pip, void *data)
|
|||
|
||||
void trace_make_attachments(const sg_attachment_desc *d, sg_attachments result, void *data)
|
||||
{
|
||||
YughInfo("Making attachments %s", "IMPLEMENT");
|
||||
YughSpam("Making attachments %s", "IMPLEMENT");
|
||||
}
|
||||
|
||||
void trace_begin_pass(sg_pass pass, const sg_pass_action *action, void *data)
|
||||
{
|
||||
YughInfo("Begin pass %s", pass.label);
|
||||
YughSpam("Begin pass %s", pass.label);
|
||||
}
|
||||
|
||||
static sg_trace_hooks hooks = {
|
||||
|
|
|
@ -207,7 +207,7 @@ void texture_free(texture *tex)
|
|||
char *tex_get_path(struct texture *tex) {
|
||||
for (int i = 0; i < shlen(texhash); i++) {
|
||||
if (tex == texhash[i].value) {
|
||||
YughInfo("Found key %s", texhash[i].key);
|
||||
YughSpam("Found key %s", texhash[i].key);
|
||||
return texhash[i].key;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -84,12 +84,6 @@ static int sim_play = SIM_PLAY;
|
|||
static int argc;
|
||||
static char **args;
|
||||
|
||||
void seghandle()
|
||||
{
|
||||
js_stacktrace();
|
||||
exit(1);
|
||||
}
|
||||
|
||||
static JSValue c_init_fn;
|
||||
|
||||
void c_init() {
|
||||
|
@ -153,11 +147,17 @@ void c_frame()
|
|||
|
||||
void cleanup()
|
||||
{
|
||||
sfetch_shutdown();
|
||||
out_memusage(".prosperon/jsmem.txt");
|
||||
script_stop();
|
||||
}
|
||||
|
||||
void seghandle()
|
||||
{
|
||||
js_stacktrace();
|
||||
cleanup();
|
||||
exit(1);
|
||||
}
|
||||
|
||||
void c_clean() {
|
||||
cleanup();
|
||||
gif_rec_end("out.gif");
|
||||
|
@ -293,14 +293,7 @@ int main(int argc, char **argv) {
|
|||
setlocale(LC_ALL, "en_US.utf8");
|
||||
#ifndef NDEBUG
|
||||
log_init();
|
||||
int logout = 0;
|
||||
if (logout) {
|
||||
time_t now = time(NULL);
|
||||
char fname[100];
|
||||
snprintf(fname, 100, "yugine-%ld.log", now);
|
||||
log_setfile(fname);
|
||||
}
|
||||
|
||||
|
||||
signal(SIGSEGV, seghandle);
|
||||
signal(SIGABRT, seghandle);
|
||||
signal(SIGFPE, seghandle);
|
||||
|
|
Loading…
Reference in a new issue