OSDN Git Service

* cppmain.c (check_multiline_token): New function.
authorneil <neil@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 17 Dec 2000 14:46:34 +0000 (14:46 +0000)
committerneil <neil@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 17 Dec 2000 14:46:34 +0000 (14:46 +0000)
        (scan_buffer): Use it.
        (cb_change_file): Restructure to avoid warning.
        * cpperror.c (print_location): Initialize col.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@38332 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/cpperror.c
gcc/cppmain.c

index 5aa47d7..63a25ed 100644 (file)
@@ -1,3 +1,10 @@
+2000-12-17  Neil Booth  <neil@daikokuya.demon.co.uk>
+
+        * 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  <pthomas@suse.de>
        * protoize.c (main): Correctly set locale categories.
        * gcc.c (main): Likewise.
index 6a48a2a..cfd4ce5 100644 (file)
@@ -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
index f3bf2a0..706ff2f 100644 (file)
@@ -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);
     }
 }