aboutsummaryrefslogtreecommitdiff
path: root/gcc/cpplib.h
diff options
context:
space:
mode:
authorNeil Booth <neilb@earthling.net>2000-10-30 22:29:00 +0000
committerNeil Booth <neil@gcc.gnu.org>2000-10-30 22:29:00 +0000
commita5c3cccda43ddeaa0e90df75f74c230dea0ad579 (patch)
treeaea40a1085df8546a232c08b4db9f87353674441 /gcc/cpplib.h
parentdbdaea4110d5c97ba1addef900516eea7846a2c0 (diff)
downloadgcc-a5c3cccda43ddeaa0e90df75f74c230dea0ad579.zip
gcc-a5c3cccda43ddeaa0e90df75f74c230dea0ad579.tar.gz
gcc-a5c3cccda43ddeaa0e90df75f74c230dea0ad579.tar.bz2
cppfiles.c (stack_include_file): Check for stacked contexts here.
* cppfiles.c (stack_include_file): Check for stacked contexts here. * cpphash.h (_cpp_do__Pragma): New prototype. * cppinit.c (cpp_reader_init): Add _Pragma keyword to hash table. * cpplex.c (skip_escaped_newlines): Only process trigraphs and escaped newlines if !(buffer->from_stage3). (_cpp_lex_token): Warn about missing newlines iff !buffer->from_stage3. * cpplib.c (get__Pragma_string, destringize, _cpp_do__Pragma): New functions. (run_directive): Set output_line for _Pragma to avoid line markers in output. Set from_stage3 and prevent macro expansion for _Pragma and command-line options. Check buffer exhaustion. (cpp_push_buffer): Don't check for stacked macro contexts, as this is perfectly legitimate for _Pragma. Move the check to stack_include_file instead. Set from_stage3 iff buffer is preprocessed input. * cpplib.h (struct cpp_buffer): Make warned_cplusplus_comments unsigned. New boolean from_stage3. (struct spec_nodes): Add n__Pragma. * cppmacro.c (enter_macro_context): Flip sense of return value. (_cpp_get_token): Handle _Pragma operator. From-SVN: r37147
Diffstat (limited to 'gcc/cpplib.h')
-rw-r--r--gcc/cpplib.h8
1 files changed, 7 insertions, 1 deletions
diff --git a/gcc/cpplib.h b/gcc/cpplib.h
index 747ff18..de7a1a5 100644
--- a/gcc/cpplib.h
+++ b/gcc/cpplib.h
@@ -287,7 +287,12 @@ struct cpp_buffer
The warning happens only for C89 extended mode with -pedantic on,
or for -Wtraditional, and only once per file (otherwise it would
be far too noisy). */
- char warned_cplusplus_comments;
+ unsigned char warned_cplusplus_comments;
+
+ /* True if we don't process trigraphs and escaped newlines. True
+ for preprocessed input, command line directives, and _Pragma
+ buffers. */
+ unsigned char from_stage3;
};
/* Maximum nesting of cpp_buffers. We use a static limit, partly for
@@ -509,6 +514,7 @@ struct spec_nodes
{
cpp_hashnode *n_L; /* L"str" */
cpp_hashnode *n_defined; /* defined operator */
+ cpp_hashnode *n__Pragma; /* _Pragma operator */
cpp_hashnode *n__STRICT_ANSI__; /* STDC_0_IN_SYSTEM_HEADERS */
cpp_hashnode *n__CHAR_UNSIGNED__; /* plain char is unsigned */
cpp_hashnode *n__VA_ARGS__; /* C99 vararg macros */