diff options
| author | 2023-06-19 11:56:46 +0200 | |
|---|---|---|
| committer | 2023-06-19 11:56:46 +0200 | |
| commit | b71515071d1310bbf9cd34f8997aa736ebd30099 (patch) | |
| tree | f14ac1364d508ad2f1e8cdcda59b4dc9bae96f21 /lex.c | |
| parent | 08649c95cc15b5ad99e6b8899d639f6c3b63266b (diff) | |
frontend: separate compiler & lexer
Diffstat (limited to 'lex.c')
| -rw-r--r-- | lex.c | 25 |
1 files changed, 20 insertions, 5 deletions
@@ -1,5 +1,4 @@ -#include "common.h" -#include "parse.h" +#include "lex.h" #include <string.h> const char * @@ -332,7 +331,7 @@ readstrchrlit(struct parser *pr, struct token *tk, char delim) } else { tk->litlit = 0; vpush(&b, 0); - tk->s = alloc(&pr->exarena, b.n, 1); + tk->s = alloc(pr->tmparena, b.n, 1); memcpy((char *)tk->s, b.p, b.n); } } else { @@ -350,7 +349,7 @@ readstrchrlit(struct parser *pr, struct token *tk, char delim) tk->s = (char *)&pr->dat[beginoff]; } else { tk->litlit = 0; - tk->s = alloc(&pr->exarena, tk->len, 1); + tk->s = alloc(pr->tmparena, tk->len, 1); memcpy((char *)tk->s, b.p, tk->len); } } @@ -473,7 +472,7 @@ Begin: tk->len = n; if (n == pr->chridx - idx) tk->s = (char *)&pr->dat[idx]; else { - tk->s = alloc(&pr->exarena, n, 1); + tk->s = alloc(pr->tmparena, n, 1); memcpy((char *)tk->s, tmp, n); } RET(TKNUMLIT); @@ -1101,4 +1100,20 @@ lexpeek(struct parser *pr, struct token *tk_) return t; } +void +initparser(struct parser *pr, const char *file, struct arena **tmparena) +{ + const char *error; + struct memfile *f; + + memset(pr, 0, sizeof *pr); + pr->fileid = openfile(&error, &f, file); + if (pr->fileid < 0) + fatal(NULL, "Cannot open %'s: %s", file, error); + pr->dat = f->p; + pr->ndat = f->n; + pr->tmparena = tmparena; +} + + /* vim:set ts=3 sw=3 expandtab: */ |