diff --git a/include/picrin.h b/include/picrin.h index 80351abf..30f1a707 100644 --- a/include/picrin.h +++ b/include/picrin.h @@ -54,6 +54,7 @@ typedef pic_value (*pic_func_t)(pic_state *); void *pic_alloc(pic_state *, size_t); void *pic_realloc(pic_state *, void *, size_t); +void *pic_calloc(pic_state *, unsigned, size_t); struct pic_object *pic_obj_alloc(pic_state *, size_t, enum pic_tt); void pic_free(pic_state *, void *); diff --git a/src/gc.c b/src/gc.c index 53685773..caca103a 100644 --- a/src/gc.c +++ b/src/gc.c @@ -57,6 +57,18 @@ pic_realloc(pic_state *pic, void *ptr, size_t size) return ptr; } +void * +pic_calloc(pic_state *pic, unsigned count, size_t size) +{ + void *ptr; + + ptr = calloc(count ,size); + if (ptr == NULL) { + pic_abort(pic, "memory exhausted"); + } + return ptr; +} + void pic_free(pic_state *pic, void *ptr) {