diff options
author | neil <neil@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-08-04 12:01:59 +0000 |
---|---|---|
committer | neil <neil@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-08-04 12:01:59 +0000 |
commit | 4dfe8b745ff717c66fab3bc5d759a1d862ddd074 (patch) | |
tree | 0aaaf48e2153d5621bc68cb09f9c0d2ef9a3854a /gcc/cpplex.c | |
parent | 3cbe3ca9fef6daf335579b8cee2b0fe6fbfe9877 (diff) | |
download | gcc-4dfe8b745ff717c66fab3bc5d759a1d862ddd074.tar.gz |
* Makefile.in (CPPLIB_H): New, so that dependencies on cpplib.h
are also on line-map.h.
* cppfiles.c (stack_include_file): Update.
* cpphash.h (struct cpp_buffer): New member return_at_eof.
(_cpp_pop_buffer): New.
* cppinit.c (cpp_destroy, cpp_finish): Update.
(do_includes): Mark each buffer to return at EOF.
* cpplex.c (_cpp_lex_token): Pop buffers at EOF. Continue or
return as requested.
* cpplib.c (run_directive, do_line, cpp_push_buffer): Update.
(cpp_pop_buffer): Rename _cpp_pop_buffer. Stop skipping.
* cpplib.h (cpp_pop_buffer): Remove.
(cpp_scan_buffer_nooutput): Rename cpp_scan_nooutput.
* cppmacro.c (cpp_scan_buffer_nooutput): Similarly. No need to pop
buffers.
* cppmain.c (scan_buffer): Rename scan_translation_unit. No need
to pop buffers.
(do_preprocessing): Update.
* fix-header.c (read_scan_file): Update. No need to pop buffers.
* c-parse.in (_yylex): Similarly.
* scan-decls.c (scan_decls): Similarly.
* line-map.h: Update comments.
* cp/spew.c (read_token): No need to pop buffers.
* objc/Make-lang.in (objc-act.o): Update dependencies.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@44634 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cpplex.c')
-rw-r--r-- | gcc/cpplex.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/gcc/cpplex.c b/gcc/cpplex.c index fa32bd51561..e0002beac45 100644 --- a/gcc/cpplex.c +++ b/gcc/cpplex.c @@ -893,16 +893,23 @@ _cpp_lex_token (pfile, result) switch (c) { case EOF: - /* Non-empty files should end in a newline. Checking "bol" too - prevents multiple warnings when hitting the EOF more than - once, like in a directive. Don't warn for command line and - _Pragma buffers. */ - if (pfile->lexer_pos.col != 0 && !bol && !buffer->from_stage3) - cpp_pedwarn (pfile, "no newline at end of file"); + if (!pfile->state.in_directive) + { + unsigned char ret = pfile->buffer->return_at_eof; + + /* Non-empty files should end in a newline. Don't warn for + command line and _Pragma buffers. */ + if (pfile->lexer_pos.col != 0 && !buffer->from_stage3) + cpp_pedwarn (pfile, "no newline at end of file"); + _cpp_pop_buffer (pfile); + if (pfile->buffer && !ret) + { + bol = 1; + goto done_directive; + } + } pfile->state.next_bol = 1; - pfile->state.skipping = 0; /* In case missing #endif. */ result->type = CPP_EOF; - /* Don't do MI optimisation. */ return; case ' ': case '\t': case '\f': case '\v': case '\0': |