From dfbf62ec3d64ab32260e1393039239e52b504cdc Mon Sep 17 00:00:00 2001 From: Neil Booth Date: Sun, 17 Dec 2000 14:46:34 +0000 Subject: [PATCH] cppmain.c (check_multiline_token): New function. * cppmain.c (check_multiline_token): New function. (scan_buffer): Use it. (cb_change_file): Restructure to avoid warning. * cpperror.c (print_location): Initialize col. From-SVN: r38332 --- gcc/ChangeLog | 7 +++++++ gcc/cpperror.c | 2 +- gcc/cppmain.c | 31 ++++++++++++++++++++++--------- 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5aa47d715d1f..63a25edb029a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2000-12-17 Neil Booth + + * cppmain.c (check_multiline_token): New function. + (scan_buffer): Use it. + (cb_change_file): Restructure to avoid warning. + * cpperror.c (print_location): Initialize col. + 2000-12-14 Philipp Thomas * protoize.c (main): Correctly set locale categories. * gcc.c (main): Likewise. diff --git a/gcc/cpperror.c b/gcc/cpperror.c index 6a48a2a7c972..cfd4ce540f64 100644 --- a/gcc/cpperror.c +++ b/gcc/cpperror.c @@ -86,7 +86,7 @@ print_location (pfile, filename, pos) fprintf (stderr, "%s: ", progname); else { - unsigned int line, col; + unsigned int line, col = 0; enum cpp_buffer_type type = buffer->type; /* For _Pragma buffers, we want to print the location as diff --git a/gcc/cppmain.c b/gcc/cppmain.c index f3bf2a0e57ca..706ff2f85cd8 100644 --- a/gcc/cppmain.c +++ b/gcc/cppmain.c @@ -43,6 +43,7 @@ static void setup_callbacks PARAMS ((void)); /* General output routines. */ static void scan_buffer PARAMS ((cpp_reader *)); +static void check_multiline_token PARAMS ((cpp_string *)); static int printer_init PARAMS ((cpp_reader *)); static int dump_macro PARAMS ((cpp_reader *, cpp_hashnode *, void *)); @@ -218,11 +219,26 @@ scan_buffer (pfile) cpp_output_token (token, print.outf); print.printed = 1; + if (token->type == CPP_STRING || token->type == CPP_WSTRING + || token->type == CPP_COMMENT) + check_multiline_token (&token->val.str); } } while (cpp_pop_buffer (pfile) != 0); } +/* Adjust print.lineno for newlines embedded in tokens. */ +static void +check_multiline_token (str) + cpp_string *str; +{ + unsigned int i; + + for (i = 0; i < str->len; i++) + if (str->text[i] == '\n') + print.lineno++; +} + /* Initialize a cpp_printer structure. As a side effect, open the output file. */ static int @@ -362,8 +378,6 @@ cb_change_file (pfile, fc) cpp_reader *pfile ATTRIBUTE_UNUSED; const cpp_file_change *fc; { - const char *flags; - /* Bring current file to correct line (except first file). */ if (fc->reason == FC_ENTER && fc->from.filename) maybe_print_line (fc->from.lineno); @@ -378,14 +392,13 @@ cb_change_file (pfile, fc) if (print.lineno) { - print.lineno = fc->to.lineno; - switch (fc->reason) - { - case FC_ENTER : flags = " 1"; break; - case FC_LEAVE : flags = " 2"; break; - case FC_RENAME: flags = ""; break; - } + const char *flags = ""; + print.lineno = fc->to.lineno; + if (fc->reason == FC_ENTER) + flags = " 1"; + else if (fc->reason == FC_LEAVE) + flags = " 2"; print_line (flags); } }