diff options
author | Zack Weinberg <zack@gcc.gnu.org> | 2004-09-09 19:16:56 +0000 |
---|---|---|
committer | Zack Weinberg <zack@gcc.gnu.org> | 2004-09-09 19:16:56 +0000 |
commit | 21b11495d75df8fd0e5b23f0176f6aa676875055 (patch) | |
tree | e54413e76af5e0dcfeb68d4c3f3c4ea1d44ceec0 /libcpp/lex.c | |
parent | b49ce401c20c43ae693407fdd9218fdb2e576d4f (diff) | |
download | gcc-21b11495d75df8fd0e5b23f0176f6aa676875055.zip gcc-21b11495d75df8fd0e5b23f0176f6aa676875055.tar.gz gcc-21b11495d75df8fd0e5b23f0176f6aa676875055.tar.bz2 |
cpplib.h (TTYPE_TABLE): Remove CPP_ and SPELL_ prefixes throughout.
2004-09-09 Matt Austern <austern@apple.com>
Zack Weinberg <zack@codesourcery.com>
* include/cpplib.h (TTYPE_TABLE): Remove CPP_ and SPELL_
prefixes throughout. Add entry for PRAGMA. Remove
unnecessary "= 0" from EQ.
(enum cpp_ttype): Adjust OP and TK definitions to restore
prefixes, via token-paste.
(CPP_LAST_EQ, CPP_FIRST_DIGRAPH, CPP_LAST_PUNCTUATOR, CPP_LAST_CPP_OP):
Change from #defines to additional cpp_ttype enumerators.
(struct cpp_options): Add defer_pragmas.
(cpp_handle_deferred_pragma): Prototype new interface.
* internal.h (struct cpp_reader): Add directive_result.
* directives.c (struct pragma_entry): Add is_internal field;
give boolean fields type bool.
(start_directive): Initialize pfile->directive_result.type.
(_cpp_do__Pragma): Likewise.
(run_directive): Do not crash if pfile->buffer->prev is NULL.
(insert_pragma_entry): Add 'internal' argument; set new->is_internal
from it.
(register_pragma): New static function, bulk of former
cpp_register_pragma here; add 'internal' argument, pass along
to insert_pragma_entry.
(cpp_register_pragma): Now a wrapper around register_pragma which
always passes false for 'internal' argument.
(_cpp_init_internal_pragmas): Call register_pragma directly, passing
true for 'internal'.
(do_pragma): If CPP_OPTION (pfile, defer_pragmas) and this isn't
an internal pragma, save text till the end of the line as a CPP_PRAGMA
token instead of executing the pragma.
(cpp_handle_deferred_pragma): New interface.
* lex.c (token_spellings): Adjust OP and TK definitions to
match changes to cpplib.h.
(_cpp_lex_token): Check for a directive-result token and
return it if present.
(cpp_token_val_index): Handle CPP_PRAGMA.
* macro.c (cpp_builtin_macro_text): Correct comment.
(builtin_macro): Handle directive-result tokens from _cpp_do__Pragma.
From-SVN: r87247
Diffstat (limited to 'libcpp/lex.c')
-rw-r--r-- | libcpp/lex.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/libcpp/lex.c b/libcpp/lex.c index 914703f..62a28f8 100644 --- a/libcpp/lex.c +++ b/libcpp/lex.c @@ -41,8 +41,8 @@ struct token_spelling static const unsigned char *const digraph_spellings[] = { U"%:", U"%:%:", U"<:", U":>", U"<%", U"%>" }; -#define OP(e, s) { SPELL_OPERATOR, U s }, -#define TK(e, s) { s, U #e }, +#define OP(e, s) { SPELL_OPERATOR, U s }, +#define TK(e, s) { SPELL_ ## s, U #e }, static const struct token_spelling token_spellings[N_TTYPES] = { TTYPE_TABLE }; #undef OP #undef TK @@ -736,7 +736,16 @@ _cpp_lex_token (cpp_reader *pfile) handles the directive as normal. */ && pfile->state.parsing_args != 1 && _cpp_handle_directive (pfile, result->flags & PREV_WHITE)) - continue; + { + if (pfile->directive_result.type == CPP_PADDING) + continue; + else + { + result = &pfile->directive_result; + break; + } + } + if (pfile->cb.line_change && !pfile->state.skipping) pfile->cb.line_change (pfile, result, pfile->state.parsing_args); } @@ -1573,6 +1582,8 @@ cpp_token_val_index (cpp_token *tok) return CPP_TOKEN_FLD_ARG_NO; else if (tok->type == CPP_PADDING) return CPP_TOKEN_FLD_SOURCE; + else if (tok->type == CPP_PRAGMA) + return CPP_TOKEN_FLD_STR; /* else fall through */ default: return CPP_TOKEN_FLD_NONE; |