diff options
Diffstat (limited to 'div.c')
| -rw-r--r-- | div.c | 89 |
1 files changed, 0 insertions, 89 deletions
@@ -1,89 +0,0 @@ -#include "div.h" -#include "gl.h" -#include "im.h" -#include "lk.h" -#include "pr.h" -#include "td.h" -#include "ws.h" - -static const struct seq linkage = - {(struct step[]){{ID, "linkage"}, {0}}, .fn = lk}, - types = {(struct step[]){{ID, "types"}, {0}}, .fn = td}, - imports = {(struct step[]){{ID, "imports"}, {0}}, .fn = im}, - procedure = {(struct step[]){{ID, "procedure"}, {0}}, .fn = pr}; - -static const struct seq fnseq[] = -{ - linkage, - types, - imports, - procedure, - {(struct step[]){{ID, "storage"}, {0}}, .fn = ws}, - {(struct step[]){{ID, "globals"}, {0}}, .fn = gl}, - {0} -}; - -static const struct seq imseq[] = -{ - linkage, - types, - imports, - {0} -}; - -static const struct seq pseq[] = -{ - linkage, - procedure, - {0} -}; - -int div_fn(const struct lex *l, struct prv *p) -{ - struct pos init = - { - .seq = fnseq, - .stseq = fnseq, - .step = fnseq->steps - }; - - if (push(&init, p)) - return -1; - - p->stk = p->tk; - return 0; -} - -int div_im(const struct lex *l, struct prv *p) -{ - struct pos init = - { - .seq = imseq, - .stseq = imseq, - .step = imseq->steps - }; - - if (lex_eof(l, p->stk)) - return 0; - else if (push(&init, p)) - return -1; - - p->stk = p->tk; - return 1; -} - -int div_p(const struct lex *l, struct prv *p) -{ - struct pos init = - { - .seq = pseq, - .stseq = pseq, - .step = pseq->steps - }; - - if (push(&init, p)) - return -1; - - p->stk = p->tk; - return 1; -} |
