HParsedToken *h_act_flatten(const HParseResult *p, void* user_data) { HCountedArray *seq = h_carray_new(p->arena); act_flatten_(seq, p->ast); HParsedToken *res = a_new_(p->arena, HParsedToken, 1); res->token_type = TT_SEQUENCE; res->seq = seq; res->index = p->ast->index; res->bit_offset = p->ast->bit_offset; return res; }
static HParsedToken *reshape_sequence(const HParseResult *p) { assert(p->ast); assert(p->ast->token_type == TT_SEQUENCE); HCountedArray *seq = h_carray_new(p->arena); // drop all elements that are NULL for(size_t i=0; i<p->ast->seq->used; i++) { if(p->ast->seq->elements[i] != NULL) h_carray_append(seq, p->ast->seq->elements[i]); } HParsedToken *res = a_new_(p->arena, HParsedToken, 1); res->token_type = TT_SEQUENCE; res->seq = seq; res->index = p->ast->index; res->bit_offset = p->ast->bit_offset; return res; }
HParsedToken *h_make_seq(HArena *arena) { HParsedToken *ret = h_make_(arena, TT_SEQUENCE); ret->seq = h_carray_new(arena); return ret; }