diff options
| author | 2025-12-20 22:00:28 +0100 | |
|---|---|---|
| committer | 2025-12-20 22:00:28 +0100 | |
| commit | 497289eb02927c75f6e77bba052bec2a4589c227 (patch) | |
| tree | e308c60f6d5ce8569eeb3159b45a5bebc1d8dda5 | |
| parent | 8341b8fa4ede60ff92127825a0b2e6b29f5e4d83 (diff) | |
lexer: note source of #include when error occurs in #included file
| -rw-r--r-- | c/lex.c | 6 | ||||
| -rw-r--r-- | c/lex.h | 3 |
2 files changed, 8 insertions, 1 deletions
@@ -1507,6 +1507,7 @@ tryinclude(struct lexer *lx, const struct span *span, char *path) /* fallthru */ case LXOK: new.save = xmalloc(sizeof *new.save); + lx->inclnerror = nerror; memcpy(new.save, lx, sizeof *lx); *lx = new; @@ -1850,6 +1851,11 @@ Begin: markfileonce(lx->fileid, lx->inclguard); } struct lexer *sv = lx->save; + if (sv->inclnerror != nerror) { + int line; + const char *f = getfilepos(&line, NULL, sv->fileid, sv->chridx-2); + note(NULL, "in file included from %s:%d", f, line); + } memcpy(lx, sv, sizeof *lx); free(sv); --includedepth; @@ -101,7 +101,8 @@ struct lexer { bool eof, err; struct arena **tmparena; bool firstdirective; - ushort nppcnd0; + short nppcnd0; + short inclnerror; internstr inclguard; uchar chrbuf[1<<10]; uint chridxbuf[1<<10]; |