fix a preprocessor for .S
Lets assume that in *.S files a preprocessor directive
follow '#' char w/o spaces between. Otherwise there is
too many problems with the content of the comments.
This commit is contained in:
19
tccpp.c
19
tccpp.c
@ -782,6 +782,8 @@ redo_start:
|
||||
else if (parse_flags & PARSE_FLAG_ASM_COMMENTS)
|
||||
p = parse_line_comment(p);
|
||||
}
|
||||
else if (parse_flags & PARSE_FLAG_ASM_FILE)
|
||||
p = parse_line_comment(p);
|
||||
break;
|
||||
_default:
|
||||
default:
|
||||
@ -1432,7 +1434,7 @@ ST_FUNC void preprocess(int is_bof)
|
||||
saved_parse_flags = parse_flags;
|
||||
parse_flags = PARSE_FLAG_PREPROCESS | PARSE_FLAG_TOK_NUM |
|
||||
PARSE_FLAG_LINEFEED;
|
||||
parse_flags |= (saved_parse_flags & PARSE_FLAG_ASM_COMMENTS);
|
||||
parse_flags |= (saved_parse_flags & (PARSE_FLAG_ASM_FILE | PARSE_FLAG_ASM_COMMENTS));
|
||||
next_nomacro();
|
||||
redo:
|
||||
switch(tok) {
|
||||
@ -2259,6 +2261,11 @@ maybe_newline:
|
||||
case '#':
|
||||
/* XXX: simplify */
|
||||
PEEKC(c, p);
|
||||
if (is_space(c) && (parse_flags & PARSE_FLAG_ASM_FILE)) {
|
||||
p = parse_line_comment(p);
|
||||
goto redo_no_start;
|
||||
}
|
||||
else
|
||||
if ((tok_flags & TOK_FLAG_BOL) &&
|
||||
(parse_flags & PARSE_FLAG_PREPROCESS)) {
|
||||
file->buf_ptr = p;
|
||||
@ -2588,7 +2595,12 @@ maybe_newline:
|
||||
p++;
|
||||
break;
|
||||
default:
|
||||
tcc_error("unrecognized character \\x%02x", c);
|
||||
if ((parse_flags & PARSE_FLAG_ASM_FILE) == 0)
|
||||
tcc_error("unrecognized character \\x%02x", c);
|
||||
else {
|
||||
tok = ' ';
|
||||
p++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
tok_flags = 0;
|
||||
@ -3215,7 +3227,8 @@ ST_FUNC int tcc_preprocess(TCCState *s1)
|
||||
preprocess_init(s1);
|
||||
ch = file->buf_ptr[0];
|
||||
tok_flags = TOK_FLAG_BOL | TOK_FLAG_BOF;
|
||||
parse_flags = PARSE_FLAG_ASM_COMMENTS | PARSE_FLAG_PREPROCESS |
|
||||
parse_flags = (parse_flags & PARSE_FLAG_ASM_FILE);
|
||||
parse_flags |= PARSE_FLAG_ASM_COMMENTS | PARSE_FLAG_PREPROCESS |
|
||||
PARSE_FLAG_LINEFEED | PARSE_FLAG_SPACES;
|
||||
token_seen = 0;
|
||||
file->line_ref = 0;
|
||||
|
||||
Reference in New Issue
Block a user