diff options
| author | Philip <pipcet@gmail.com> | 2015-05-02 12:58:37 +0000 |
|---|---|---|
| committer | Philip <pipcet@gmail.com> | 2015-05-02 12:58:37 +0000 |
| commit | 0877ba7cbf275fdcd45e3c33768d258fc75feb5b (patch) | |
| tree | dc52b5c3b27496aca61f6ffd72b082181c7da1de /tccpp.c | |
| parent | a3d78b95d7564c92afa09604fde6387a03d3acde (diff) | |
| download | tinycc-0877ba7cbf275fdcd45e3c33768d258fc75feb5b.tar.gz tinycc-0877ba7cbf275fdcd45e3c33768d258fc75feb5b.tar.bz2 | |
tccpp.c: parse flag to accept stray \
This adds a PARSE_FLAG_ACCEPT_STRAYS parse flag to accept stray
backslashes in the source code, and uses it for pure preprocessing.
For absolutely correct behaviour of # stringification, we need to use
this flag when parsing macro definitions and in macro arguments, as
well; this patch does not yet do so. The test case for that is something
like
#define STRINGIFY2(x) #x
#define STRINGIFY(x) STRINGIFY2(x)
STRINGIFY(\n)
which should produce "\n", not a parse error or "\\n".
See http://lists.nongnu.org/archive/html/tinycc-devel/2015-05/msg00002.html
Diffstat (limited to 'tccpp.c')
| -rw-r--r-- | tccpp.c | 10 |
1 files changed, 8 insertions, 2 deletions
@@ -2271,7 +2271,13 @@ static inline void next_nomacro1(void) } else { file->buf_ptr = p; ch = *p; - handle_stray(); + if (parse_flags & PARSE_FLAG_ACCEPT_STRAYS) { + if (handle_stray_noerror() != 0) { + goto parse_simple; + } + } else { + handle_stray(); + } p = file->buf_ptr; goto redo_no_start; } @@ -3307,7 +3313,7 @@ ST_FUNC int tcc_preprocess(TCCState *s1) ch = file->buf_ptr[0]; tok_flags = TOK_FLAG_BOL | TOK_FLAG_BOF; parse_flags &= PARSE_FLAG_ASM_FILE; - parse_flags |= PARSE_FLAG_PREPROCESS | PARSE_FLAG_LINEFEED | PARSE_FLAG_SPACES; + parse_flags |= PARSE_FLAG_PREPROCESS | PARSE_FLAG_LINEFEED | PARSE_FLAG_SPACES | PARSE_FLAG_ACCEPT_STRAYS; token_seen = 0; file->line_ref = 0; file_ref = NULL; |
