diff --git a/src/parsers/bind.c b/src/parsers/bind.c index 7fa821dc7d9837ef717114e2245d7c31fa80cacb..808df9742bc6e7a1bb6c93a838f9f69903d036e0 100644 --- a/src/parsers/bind.c +++ b/src/parsers/bind.c @@ -4,7 +4,6 @@ typedef struct { const HParser *p; HContinuation k; void *env; - HAllocator *mm__; } BindEnv; // an HAllocator backed by an HArena @@ -39,20 +38,15 @@ static HParseResult *parse_bind(void *be_, HParseState *state) { if(!res) return NULL; - // create a temporary arena allocator for the continuation - HArena *arena = h_new_arena(be->mm__, 0); - ArenaAllocator aa = {{aa_alloc, aa_realloc, aa_free}, arena}; + // create a wrapper arena allocator for the continuation + ArenaAllocator aa = {{aa_alloc, aa_realloc, aa_free}, state->arena}; HParser *kx = be->k((HAllocator *)&aa, res->ast, be->env); if(!kx) { - h_delete_arena(arena); return NULL; } - res = h_do_parse(kx, state); - - h_delete_arena(arena); - return res; + return h_do_parse(kx, state); } static const HParserVtable bind_vt = { @@ -76,7 +70,6 @@ HParser *h_bind__m(HAllocator *mm__, be->p = p; be->k = k; be->env = env; - be->mm__ = mm__; return h_new_parser(mm__, &bind_vt, be); }