diff options
| author | nsfisis <nsfisis@gmail.com> | 2025-08-19 07:51:50 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2025-08-19 07:51:50 +0900 |
| commit | eb22f9bbc2f2596c2c690960852e29eaed04ea09 (patch) | |
| tree | 123f5c29f5bc8550196e39ec43ffaa148f1b3774 /io.c | |
| parent | f17425f819558ab506cb5aea29d5f4f2837ab0c1 (diff) | |
| download | ducc-eb22f9bbc2f2596c2c690960852e29eaed04ea09.tar.gz ducc-eb22f9bbc2f2596c2c690960852e29eaed04ea09.tar.zst ducc-eb22f9bbc2f2596c2c690960852e29eaed04ea09.zip | |
feat: skip a pair of backslash and new-line
Diffstat (limited to 'io.c')
| -rw-r--r-- | io.c | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -57,6 +57,24 @@ BOOL infile_eof(InFile* f) { char infile_peek_char(InFile* f) { char c = f->buf[f->pos]; + + // Skip a pair of backslash and new-line. + if (c == '\\') { + char c2 = f->buf[f->pos + 1]; + // C23: 5.1.1.2 + // A source file that is not empty shall end in a new-line character, + // which shall not be immediately preceded by a backslash character + // before any such splicing takes place. + if (c2 == '\0') { + fatal_error("%s:%d: <new-line> expected, but got <eof>", f->loc.filename, f->loc.line); + } + // TODO: crlf + if (c2 == '\r' || c2 == '\n') { + f->pos += 2; + return infile_peek_char(f); + } + } + // Normalize new-line. // TODO: crlf if (c == '\r') |
