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
This commit is contained in:
parent
b49ce401c2
commit
21b11495d7
6 changed files with 257 additions and 119 deletions
|
@ -109,10 +109,8 @@ static const char * const monthnames[] =
|
|||
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
|
||||
};
|
||||
|
||||
/* Handle builtin macros like __FILE__, and push the resulting token
|
||||
on the context stack. Also handles _Pragma, for which no new token
|
||||
is created. Returns 1 if it generates a new token context, 0 to
|
||||
return the token to the caller. */
|
||||
/* Helper function for builtin_macro. Returns the text generated by
|
||||
a builtin macro. */
|
||||
const uchar *
|
||||
_cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
|
||||
{
|
||||
|
@ -245,8 +243,8 @@ _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
|
|||
}
|
||||
|
||||
/* Convert builtin macros like __FILE__ to a token and push it on the
|
||||
context stack. Also handles _Pragma, for which no new token is
|
||||
created. Returns 1 if it generates a new token context, 0 to
|
||||
context stack. Also handles _Pragma, for which a new token may not
|
||||
be created. Returns 1 if it generates a new token context, 0 to
|
||||
return the token to the caller. */
|
||||
static int
|
||||
builtin_macro (cpp_reader *pfile, cpp_hashnode *node)
|
||||
|
@ -263,6 +261,13 @@ builtin_macro (cpp_reader *pfile, cpp_hashnode *node)
|
|||
return 0;
|
||||
|
||||
_cpp_do__Pragma (pfile);
|
||||
if (pfile->directive_result.type == CPP_PRAGMA)
|
||||
{
|
||||
cpp_token *tok = _cpp_temp_token (pfile);
|
||||
*tok = pfile->directive_result;
|
||||
push_token_context (pfile, NULL, tok, 1);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue