From fb753f88e9ae5a80d1499596821d3b09fd09cc7c Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Sun, 2 Jul 2000 10:56:57 +0200 Subject: [PATCH] cpplib.h (struct cpp_reader): New field include_depth. * cpplib.h (struct cpp_reader): New field include_depth. (struct cpp_printer): Rename last_bsd to last_id. * cppfiles.c (read_include_file): Bump include_depth. * cpplex.c (cpp_pop_buffer): Decrement include_depth. (output_line_command): Output correct #line if a header is including itself and is not protected against multiple inclusion. Use include_depth instead of buffer_stack_depth, last_id instead of last_bsd. * cppinit.c (cpp_start_read): Initialize last_id instead of last_bsd. From-SVN: r34831 --- gcc/ChangeLog | 13 +++++++++++++ gcc/cppfiles.c | 1 + gcc/cppinit.c | 2 +- gcc/cpplex.c | 33 ++++++++++++++++++--------------- gcc/cpplib.h | 5 ++++- 5 files changed, 37 insertions(+), 17 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 96e16c78abc3..fad11bd56d13 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2000-07-02 Jakub Jelinek + + * cpplib.h (struct cpp_reader): New field include_depth. + (struct cpp_printer): Rename last_bsd to last_id. + * cppfiles.c (read_include_file): Bump include_depth. + * cpplex.c (cpp_pop_buffer): Decrement include_depth. + (output_line_command): Output correct #line if a header + is including itself and is not protected against multiple inclusion. + Use include_depth instead of buffer_stack_depth, last_id instead of + last_bsd. + * cppinit.c (cpp_start_read): Initialize last_id instead of + last_bsd. + 2000-07-01 Benjamin Chelf * Makefile.in (C_AND_OBJC_OBJS): Added c-semantics.o. diff --git a/gcc/cppfiles.c b/gcc/cppfiles.c index 4e14aae102f9..4def8edee491 100644 --- a/gcc/cppfiles.c +++ b/gcc/cppfiles.c @@ -618,6 +618,7 @@ read_include_file (pfile, inc) /* These must be set before prescan. */ fp->inc = inc; fp->nominal_fname = inc->name; + pfile->include_depth++; if (length == 0) inc->cmacro = NEVER_REREAD; diff --git a/gcc/cppinit.c b/gcc/cppinit.c index 0cbccaedbd8c..320dfdb953b4 100644 --- a/gcc/cppinit.c +++ b/gcc/cppinit.c @@ -951,7 +951,7 @@ cpp_start_read (pfile, print, fname) { print->lineno = 0; print->last_fname = CPP_BUFFER (pfile)->nominal_fname; - print->last_bsd = pfile->buffer_stack_depth; + print->last_id = pfile->include_depth; print->written = CPP_WRITTEN (pfile); } diff --git a/gcc/cpplex.c b/gcc/cpplex.c index b7f6da5181b9..109e97ef86ca 100644 --- a/gcc/cpplex.c +++ b/gcc/cpplex.c @@ -218,6 +218,8 @@ cpp_pop_buffer (pfile) free ((PTR) buf->buf); if (pfile->system_include_depth) pfile->system_include_depth--; + if (pfile->include_depth) + pfile->include_depth--; if (pfile->potential_control_macro) { if (buf->inc->cmacro != NEVER_REREAD) @@ -289,25 +291,26 @@ output_line_command (pfile, print, line) if (CPP_OPTION (pfile, no_line_commands)) return; - /* Determine whether the current filename has changed, and if so, - how. 'nominal_fname' values are unique, so they can be compared - by comparing pointers. */ - if (ip->nominal_fname == print->last_fname) - change = same; - else + if (pfile->include_depth == print->last_id) { - if (pfile->buffer_stack_depth == print->last_bsd) + /* Determine whether the current filename has changed, and if so, + how. 'nominal_fname' values are unique, so they can be compared + by comparing pointers. */ + if (ip->nominal_fname == print->last_fname) + change = same; + else change = rname; + } + else + { + if (pfile->include_depth > print->last_id) + change = enter; else - { - if (pfile->buffer_stack_depth > print->last_bsd) - change = enter; - else - change = leave; - print->last_bsd = pfile->buffer_stack_depth; - } - print->last_fname = ip->nominal_fname; + change = leave; + print->last_id = pfile->include_depth; } + print->last_fname = ip->nominal_fname; + /* If the current file has not changed, we can output a few newlines instead if we want to increase the line number by a small amount. We cannot do this if print->lineno is zero, because that means we diff --git a/gcc/cpplib.h b/gcc/cpplib.h index 88efdf789bb8..b14bb7870fe5 100644 --- a/gcc/cpplib.h +++ b/gcc/cpplib.h @@ -492,6 +492,9 @@ struct cpp_reader /* Current depth of buffer stack. */ unsigned int buffer_stack_depth; + /* Current depth in #include directives. */ + unsigned int include_depth; + /* Hash table of macros and assertions. See cpphash.c */ struct htab *hashtab; @@ -564,7 +567,7 @@ struct cpp_printer { FILE *outf; /* stream to write to */ const char *last_fname; /* previous file name */ - unsigned int last_bsd; /* did we just push? */ + unsigned int last_id; /* did we just push? */ unsigned int lineno; /* line currently being written */ unsigned int written; /* low water mark in token buffer */ }; -- 2.43.5