diff options
author | Neil Booth <neilb@earthling.net> | 2000-04-10 11:08:12 +0000 |
---|---|---|
committer | Neil Booth <neil@gcc.gnu.org> | 2000-04-10 11:08:12 +0000 |
commit | 61474454b453e664f80c0bd93ff4217d58a8dfba (patch) | |
tree | ea7c10d47e64bc4b4b2d6a71203a4f70e05d04fa /gcc/cpplex.c | |
parent | 775afb2516d17b4a3c63ffe7be4d7144a75fb0a1 (diff) | |
download | gcc-61474454b453e664f80c0bd93ff4217d58a8dfba.zip gcc-61474454b453e664f80c0bd93ff4217d58a8dfba.tar.gz gcc-61474454b453e664f80c0bd93ff4217d58a8dfba.tar.bz2 |
cpplex.c (skip_block_comment): Use pointer arithmetic rather than GETC ().
* cpplex.c (skip_block_comment): Use pointer arithmetic rather
than GETC ().
* cpphash.h: (CPP_BUMP_BUFFER_LINE_CUR, CPP_BUMP_LINE_CUR): New.
From-SVN: r33052
Diffstat (limited to 'gcc/cpplex.c')
-rw-r--r-- | gcc/cpplex.c | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/gcc/cpplex.c b/gcc/cpplex.c index b8a1b07..0dd6ff7 100644 --- a/gcc/cpplex.c +++ b/gcc/cpplex.c @@ -248,33 +248,41 @@ static void skip_block_comment (pfile) cpp_reader *pfile; { - int c, prev_c = -1; long line, col; + const U_CHAR *limit, *cur; FORWARD(1); cpp_buf_line_and_col (CPP_BUFFER (pfile), &line, &col); - for (;;) + limit = CPP_BUFFER (pfile)->rlimit; + cur = CPP_BUFFER (pfile)->cur; + + while (cur < limit) { - c = GETC (); - if (c == EOF) - { - cpp_error_with_line (pfile, line, col, "unterminated comment"); - return; - } - else if (c == '\n' || c == '\r') + char c = *cur++; + if (c == '\n' || c == '\r') { /* \r cannot be a macro escape marker here. */ if (!ACTIVE_MARK_P (pfile)) - CPP_BUMP_LINE (pfile); + CPP_BUMP_LINE_CUR (pfile, cur); } - else if (c == '/' && prev_c == '*') - return; - else if (c == '*' && prev_c == '/' - && CPP_OPTION (pfile, warn_comments)) - cpp_warning (pfile, "`/*' within comment"); + else if (c == '*') + { + /* Check for teminator. */ + if (cur < limit && *cur == '/') + goto out; - prev_c = c; + /* Warn about comment starter embedded in comment. */ + if (cur[-2] == '/' && CPP_OPTION (pfile, warn_comments)) + cpp_warning_with_line (pfile, CPP_BUFFER (pfile)->lineno, + cur - CPP_BUFFER (pfile)->line_base, + "'/*' within comment"); + } } + + cpp_error_with_line (pfile, line, col, "unterminated comment"); + cur--; + out: + CPP_BUFFER (pfile)->cur = cur + 1; } /* Skip a C++/Chill line comment. We know it's a comment, and point |