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