diff options
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/cppinit.c | 11 | ||||
-rw-r--r-- | gcc/cpplib.c | 2 | ||||
-rw-r--r-- | gcc/cpptrad.c | 40 |
4 files changed, 39 insertions, 22 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 590cf75..cc5d35c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2002-05-18 Neil Booth <neil@daikokuya.demon.co.uk> + + * cppinit.c (cpp_post_options): If preprocessed, turn off + traditional. If traditional, turn off column numbers. + * cpplib.c (cpp_push_buffer): Lex from stage 3 if traditional. + * cpptrad.c (handle_newline): Update line_base. + (skip_comment): Handle -Wcomment. + 2002-05-17 Zack Weinberg <zack@codesourcery.com> * cppinit.c (struct builtin): Remove unused fields. diff --git a/gcc/cppinit.c b/gcc/cppinit.c index 5d91005..dad255a 100644 --- a/gcc/cppinit.c +++ b/gcc/cppinit.c @@ -1774,9 +1774,16 @@ cpp_post_options (pfile) CPP_OPTION (pfile, warn_traditional) = 0; /* Permanently disable macro expansion if we are rescanning - preprocessed text. */ + preprocessed text. Read preprocesed source in ISO mode. */ if (CPP_OPTION (pfile, preprocessed)) - pfile->state.prevent_expansion = 1; + { + pfile->state.prevent_expansion = 1; + CPP_OPTION (pfile, traditional) = 0; + } + + /* Traditional CPP does not accurately track column information. */ + if (CPP_OPTION (pfile, traditional)) + CPP_OPTION (pfile, show_column) = 0; /* -dM makes no normal output. This is set here so that -dM -dD works as expected. */ diff --git a/gcc/cpplib.c b/gcc/cpplib.c index 2773ed9..f19d34e 100644 --- a/gcc/cpplib.c +++ b/gcc/cpplib.c @@ -1881,7 +1881,7 @@ cpp_push_buffer (pfile, buffer, len, from_stage3, return_at_eof) new->line_base = new->buf = new->cur = buffer; new->rlimit = buffer + len; - new->from_stage3 = from_stage3; + new->from_stage3 = from_stage3 || CPP_OPTION (pfile, traditional); new->prev = pfile->buffer; new->return_at_eof = return_at_eof; new->saved_flags = BOL; diff --git a/gcc/cpptrad.c b/gcc/cpptrad.c index a6178e3..d5c2126 100644 --- a/gcc/cpptrad.c +++ b/gcc/cpptrad.c @@ -21,9 +21,9 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "cpplib.h" #include "cpphash.h" -/* Lexing TODO: Handle -Wcomment, -C, maybe -CC, and space in escaped - newlines. Stop cpplex.c from recognizing comments, trigraphs and - directives during its lexing pass. */ +/* Lexing TODO: Handle -C, maybe -CC, and space in escaped newlines. + Stop cpplex.c from recognizing comments and directives during its + lexing pass. */ static const uchar *handle_newline PARAMS ((cpp_reader *, const uchar *)); static const uchar *skip_escaped_newlines PARAMS ((cpp_reader *, @@ -64,6 +64,7 @@ handle_newline (pfile, cur) pfile->line++; if (cur[0] + cur[1] == '\r' + '\n') cur++; + pfile->buffer->line_base = cur + 1; return cur + 1; } @@ -89,30 +90,31 @@ skip_comment (pfile, cur) const uchar *cur; { unsigned int from_line = pfile->line; + unsigned int c = 0, prevc; + const uchar *limit = pfile->buffer->rlimit; - for (;;) + while (cur < limit) { - unsigned int c = *cur++; - if (c == '*') + prevc = c; + c = *cur++; + + if (c == '/') { - cur = skip_escaped_newlines (pfile, cur); - if (*cur == '/') - { - cur++; - break; - } + if (prevc == '*') + break; + if (*cur == '*' && cur[1] != '/' + && CPP_OPTION (pfile, warn_comments)) + cpp_error_with_line (pfile, DL_WARNING, pfile->line, 0, + "\"/*\" within comment"); } else if (is_vspace (c)) cur = handle_newline (pfile, cur - 1); - else if (c == '\0' && cur - 1 == pfile->buffer->rlimit) - { - cur--; - cpp_error_with_line (pfile, DL_ERROR, from_line, 0, - "unterminated comment"); - break; - } } + if (c != '/' || prevc != '*') + cpp_error_with_line (pfile, DL_ERROR, from_line, 0, + "unterminated comment"); + return cur; } |