add pic_atpanic
This commit is contained in:
parent
7a440186c6
commit
54301ce98c
|
@ -8,15 +8,16 @@
|
||||||
#include "picrin/private/state.h"
|
#include "picrin/private/state.h"
|
||||||
|
|
||||||
void
|
void
|
||||||
pic_panic(pic_state PIC_UNUSED(*pic), const char *msg)
|
pic_panic(pic_state *pic, const char *msg)
|
||||||
{
|
{
|
||||||
extern PIC_NORETURN void abort();
|
if (pic->panicf) {
|
||||||
|
pic->panicf(pic, msg);
|
||||||
|
}
|
||||||
|
|
||||||
#if DEBUG
|
#if PIC_ENABLE_STDIO
|
||||||
fprintf(stderr, "abort: %s\n", msg);
|
fprintf(stderr, "picrin panic!: %s\n", msg);
|
||||||
#else
|
|
||||||
(void)msg;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
PIC_ABORT(pic);
|
PIC_ABORT(pic);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -96,6 +96,9 @@ const char *pic_current_library(pic_state *);
|
||||||
void pic_import(pic_state *, const char *lib);
|
void pic_import(pic_state *, const char *lib);
|
||||||
void pic_export(pic_state *, pic_value sym);
|
void pic_export(pic_state *, pic_value sym);
|
||||||
|
|
||||||
|
typedef void (*pic_panicf)(pic_state *, const char *msg);
|
||||||
|
|
||||||
|
pic_panicf pic_atpanic(pic_state *, pic_panicf f);
|
||||||
PIC_NORETURN void pic_panic(pic_state *, const char *msg);
|
PIC_NORETURN void pic_panic(pic_state *, const char *msg);
|
||||||
PIC_NORETURN void pic_errorf(pic_state *, const char *fmt, ...);
|
PIC_NORETURN void pic_errorf(pic_state *, const char *fmt, ...);
|
||||||
PIC_NORETURN void pic_raise(pic_state *, pic_value v);
|
PIC_NORETURN void pic_raise(pic_state *, pic_value v);
|
||||||
|
|
|
@ -76,6 +76,7 @@ struct pic_state {
|
||||||
size_t arena_size, arena_idx;
|
size_t arena_size, arena_idx;
|
||||||
|
|
||||||
pic_value err;
|
pic_value err;
|
||||||
|
pic_panicf panicf;
|
||||||
|
|
||||||
char *native_stack_start;
|
char *native_stack_start;
|
||||||
};
|
};
|
||||||
|
|
|
@ -276,6 +276,7 @@ pic_open(pic_allocf allocf, void *userdata)
|
||||||
pic->ireps.prev = &pic->ireps;
|
pic->ireps.prev = &pic->ireps;
|
||||||
|
|
||||||
/* raised error object */
|
/* raised error object */
|
||||||
|
pic->panicf = NULL;
|
||||||
pic->err = pic_invalid_value(pic);
|
pic->err = pic_invalid_value(pic);
|
||||||
|
|
||||||
/* file pool */
|
/* file pool */
|
||||||
|
|
Loading…
Reference in New Issue