#include "prv.h" #include "dbg.h" #include int push(const struct pos *pos, struct prv *p) { size_t n = p->n + 1; struct pos *npos = realloc(p->pos, n * sizeof *npos), *pp; if (!npos) { perror("realloc(3)"); return -1; } else if (p->n) { struct pos *prev = &npos[p->n - 1]; prev->seq = prev->stseq; prev->step = prev->seq->steps; p->i++; } ddbg("push rule %s [%zu]", pos->name, p->n); if (pos->end) ddbg(", end=%p", pos->end); ddbg("\n"); pp = &npos[p->n++]; *pp = *pos; pp->stseq = pp->seq; pp->step = pp->seq->steps; p->pos = npos; return 0; }