diff --git a/extlib/benz/gc.c b/extlib/benz/gc.c index 300b131f..18906f40 100644 --- a/extlib/benz/gc.c +++ b/extlib/benz/gc.c @@ -696,6 +696,15 @@ pic_gc(pic_state *pic) gc_sweep_phase(pic); } +void * +pic_alloca(pic_state *pic, size_t n) +{ + static const pic_data_type t = { "pic_alloca", pic_free, 0 }; + + /* TODO: optimize */ + return pic_data_alloc(pic, &t, pic_malloc(pic, n))->data; +} + struct pic_object * pic_obj_alloc_unsafe(pic_state *pic, size_t size, enum pic_tt tt) { diff --git a/extlib/benz/include/picrin.h b/extlib/benz/include/picrin.h index 93322e57..99ab5562 100644 --- a/extlib/benz/include/picrin.h +++ b/extlib/benz/include/picrin.h @@ -137,6 +137,7 @@ void pic_free(pic_state *, void *); typedef pic_value (*pic_func_t)(pic_state *); +void *pic_alloca(pic_state *, size_t); pic_value pic_gc_protect(pic_state *, pic_value); size_t pic_gc_arena_preserve(pic_state *); void pic_gc_arena_restore(pic_state *, size_t);