From 549d939ce6d90944eb95f72c50455d1e0074a34a Mon Sep 17 00:00:00 2001 From: Yuichi Nishiwaki Date: Sun, 14 Feb 2016 13:19:54 +0900 Subject: [PATCH] add pic_alloca --- extlib/benz/gc.c | 9 +++++++++ extlib/benz/include/picrin.h | 1 + 2 files changed, 10 insertions(+) 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);