Commit 43612ffb by Neil Booth Committed by Neil Booth

cppinit.c (cpp_post_options): If preprocessed, turn off traditional.

	* 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.

From-SVN: r53582
parent c810846e
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> 2002-05-17 Zack Weinberg <zack@codesourcery.com>
* cppinit.c (struct builtin): Remove unused fields. * cppinit.c (struct builtin): Remove unused fields.
......
...@@ -1774,9 +1774,16 @@ cpp_post_options (pfile) ...@@ -1774,9 +1774,16 @@ cpp_post_options (pfile)
CPP_OPTION (pfile, warn_traditional) = 0; CPP_OPTION (pfile, warn_traditional) = 0;
/* Permanently disable macro expansion if we are rescanning /* Permanently disable macro expansion if we are rescanning
preprocessed text. */ preprocessed text. Read preprocesed source in ISO mode. */
if (CPP_OPTION (pfile, preprocessed)) 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 /* -dM makes no normal output. This is set here so that -dM -dD
works as expected. */ works as expected. */
......
...@@ -1881,7 +1881,7 @@ cpp_push_buffer (pfile, buffer, len, from_stage3, return_at_eof) ...@@ -1881,7 +1881,7 @@ cpp_push_buffer (pfile, buffer, len, from_stage3, return_at_eof)
new->line_base = new->buf = new->cur = buffer; new->line_base = new->buf = new->cur = buffer;
new->rlimit = buffer + len; new->rlimit = buffer + len;
new->from_stage3 = from_stage3; new->from_stage3 = from_stage3 || CPP_OPTION (pfile, traditional);
new->prev = pfile->buffer; new->prev = pfile->buffer;
new->return_at_eof = return_at_eof; new->return_at_eof = return_at_eof;
new->saved_flags = BOL; new->saved_flags = BOL;
......
...@@ -21,9 +21,9 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ...@@ -21,9 +21,9 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "cpplib.h" #include "cpplib.h"
#include "cpphash.h" #include "cpphash.h"
/* Lexing TODO: Handle -Wcomment, -C, maybe -CC, and space in escaped /* Lexing TODO: Handle -C, maybe -CC, and space in escaped newlines.
newlines. Stop cpplex.c from recognizing comments, trigraphs and Stop cpplex.c from recognizing comments and directives during its
directives during its lexing pass. */ lexing pass. */
static const uchar *handle_newline PARAMS ((cpp_reader *, const uchar *)); static const uchar *handle_newline PARAMS ((cpp_reader *, const uchar *));
static const uchar *skip_escaped_newlines PARAMS ((cpp_reader *, static const uchar *skip_escaped_newlines PARAMS ((cpp_reader *,
...@@ -64,6 +64,7 @@ handle_newline (pfile, cur) ...@@ -64,6 +64,7 @@ handle_newline (pfile, cur)
pfile->line++; pfile->line++;
if (cur[0] + cur[1] == '\r' + '\n') if (cur[0] + cur[1] == '\r' + '\n')
cur++; cur++;
pfile->buffer->line_base = cur + 1;
return cur + 1; return cur + 1;
} }
...@@ -89,30 +90,31 @@ skip_comment (pfile, cur) ...@@ -89,30 +90,31 @@ skip_comment (pfile, cur)
const uchar *cur; const uchar *cur;
{ {
unsigned int from_line = pfile->line; 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++; prevc = c;
if (c == '*') c = *cur++;
if (c == '/')
{ {
cur = skip_escaped_newlines (pfile, cur); if (prevc == '*')
if (*cur == '/') break;
{ if (*cur == '*' && cur[1] != '/'
cur++; && CPP_OPTION (pfile, warn_comments))
break; cpp_error_with_line (pfile, DL_WARNING, pfile->line, 0,
} "\"/*\" within comment");
} }
else if (is_vspace (c)) else if (is_vspace (c))
cur = handle_newline (pfile, cur - 1); 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; return cur;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment