diff options
author | Nguyễn Gia Phong <cnx@loang.net> | 2024-02-26 17:49:44 +0900 |
---|---|---|
committer | Nguyễn Gia Phong <cnx@loang.net> | 2024-03-01 05:14:50 +0900 |
commit | f6c6302192bfc6f1bfba253367317cdb52ba4370 (patch) | |
tree | efd23ddd371ac9cd98082ca8f1b3ddfd1e97d245 /parse.c | |
parent | c9dff9cb9c9bb9ac685d59d12f7f991c30a1cd94 (diff) | |
download | roux-f6c6302192bfc6f1bfba253367317cdb52ba4370.tar.gz |
Port entry point to Zig
Diffstat (limited to 'parse.c')
-rw-r--r-- | parse.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/parse.c b/parse.c index 738ec5b..ae7f785 100644 --- a/parse.c +++ b/parse.c @@ -1077,7 +1077,7 @@ parsedatstr(Dat *d) } static void -parsedat(void cb(Dat *), Lnk *lnk) +parsedat(void cb(Dat *, FILE *), Lnk *lnk, FILE *outf) { char name[NString] = {0}; int t; @@ -1097,7 +1097,7 @@ parsedat(void cb(Dat *), Lnk *lnk) d.type = DStart; d.name = name; d.lnk = lnk; - cb(&d); + cb(&d, outf); if (t != Tlbrace) err("expected data contents in { .. }"); @@ -1130,7 +1130,7 @@ parsedat(void cb(Dat *), Lnk *lnk) parsedatstr(&d); else err("constant literal expected"); - cb(&d); + cb(&d, outf); t = nextnl(); } while (t == Tint || t == Tflts || t == Tfltd || t == Tstr || t == Tglo); if (t == Trbrace) @@ -1140,7 +1140,7 @@ parsedat(void cb(Dat *), Lnk *lnk) } Done: d.type = DEnd; - cb(&d); + cb(&d, outf); } static int @@ -1177,7 +1177,8 @@ parselnk(Lnk *lnk) } void -parse(FILE *f, char *path, void dbgfile(char *), void data(Dat *), void func(Fn *)) +parse(FILE *f, char *path, FILE *outf, + void data(Dat *, FILE *), void func(Fn *, FILE *)) { Lnk lnk; uint n; @@ -1196,13 +1197,13 @@ parse(FILE *f, char *path, void dbgfile(char *), void data(Dat *), void func(Fn err("top-level definition expected"); case Tdbgfile: expect(Tstr); - dbgfile(tokval.str); + emitdbgfile(tokval.str, outf); break; case Tfunc: - func(parsefn(&lnk)); + func(parsefn(&lnk), outf); break; case Tdata: - parsedat(data, &lnk); + parsedat(data, &lnk, outf); break; case Ttype: parsetyp(); |