#include "prv.h" #include int pop(const struct lex *l, struct prv *p) { size_t n; struct pos *npos = NULL; if (!p->n) { fprintf(stderr, "%s: underflow\n", __func__); return -1; } else if (!(n = p->n - 1)) { free(p->pos); p->pos = NULL; } else if (!(npos = realloc(p->pos, n * sizeof *npos))) { perror("realloc(3)"); return -1; } p->pos = npos; p->n = n; if (p->n) { const struct pos *old = &p->pos[--p->i]; if (old->seq->end && old->seq->end(l, p)) return -1; } return 0; }