#include "stmt.h" #include "call.h" #include "fn.h" #include "parse.h" #include "prv.h" #include "display.h" #include "exit.h" #include "set.h" void stmt_free(struct stmt *s) { switch (s->type) { case DISPLAY: display_free(&s->u.display); break; case SET: set_free(&s->u.set); break; case CALL: call_free(&s->u.call); break; } } int stmt_cgen(const struct stmt *s, struct cgen *c) { switch (s->type) { case DISPLAY: return display_cgen(&s->u.display, c); case SET: return set_cgen(&s->u.set, c); case CALL: return call_cgen(&s->u.call, c); } fprintf(stderr, "%s: unreachable\n", __func__); return -1; } struct stmt *stmt_cur(const struct prv *p) { const struct fn *fn = fn_cur(p); return &fn->stmts[fn->nstmts - 1]; } const struct seq stmts[] = { {(const struct step[]){ {ID, "display"}, {ANY, NULL, 1}, {ID, "etc"}, {0}}, .fn = display}, {(const struct step[]) {{ID, "display"}, {ANY, NULL, 1}, {0}}, .fn = display}, {(const struct step[]){{ID, "exit"}, {0}}, .fn = s_exit}, {(const struct step[]){{ID, "set"}, {0}}, .fn = set}, {(const struct step[]){{ID, "call"}, {0}}, .fn = call}, {0} };