OSDN Git Service

gcc/
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 10 Jun 2010 20:23:00 +0000 (20:23 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 10 Jun 2010 20:23:00 +0000 (20:23 +0000)
* read-md.h (read_char): Increment read_md_lineno after reading '\n'.
(unread_char): Decrement read_md_lineno after putting back '\n'.
* read-md.c (fatal_with_file_and_line): Push back any characters
that we decide not to add to the context.
(read_skip_spaces): Don't increment read_md_lineno here.  Avoid using
fatal_expected_char in cases where '/' ends a line (for example).
(read_name): Don't increment read_md_lineno here.
(read_escape): Likewise.
(read_quoted_string): Likewise.
(read_braced_string): Likewise.

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

gcc/ChangeLog
gcc/read-md.c
gcc/read-md.h

index c40d0a1..aeb277f 100644 (file)
@@ -1,5 +1,18 @@
 2010-06-10  Richard Sandiford  <rdsandiford@googlemail.com>
 
 2010-06-10  Richard Sandiford  <rdsandiford@googlemail.com>
 
+       * read-md.h (read_char): Increment read_md_lineno after reading '\n'.
+       (unread_char): Decrement read_md_lineno after putting back '\n'.
+       * read-md.c (fatal_with_file_and_line): Push back any characters
+       that we decide not to add to the context.
+       (read_skip_spaces): Don't increment read_md_lineno here.  Avoid using
+       fatal_expected_char in cases where '/' ends a line (for example).
+       (read_name): Don't increment read_md_lineno here.
+       (read_escape): Likewise.
+       (read_quoted_string): Likewise.
+       (read_braced_string): Likewise.
+
+2010-06-10  Richard Sandiford  <rdsandiford@googlemail.com>
+
        * Makefile.in (READ_MD_H): Add $(HASHTAB_H).
        (build/genconstants.o): Depend on $(READ_MD_H) gensupport.h.
        * genconstants.c: Include read-md.h.
        * Makefile.in (READ_MD_H): Add $(HASHTAB_H).
        (build/genconstants.o): Depend on $(READ_MD_H) gensupport.h.
        * genconstants.c: Include read-md.h.
index 07882aa..1402921 100644 (file)
@@ -259,7 +259,10 @@ fatal_with_file_and_line (const char *msg, ...)
       if (c == EOF)
        break;
       if (c == '\r' || c == '\n')
       if (c == EOF)
        break;
       if (c == '\r' || c == '\n')
-       break;
+       {
+         unread_char (c);
+         break;
+       }
       context[i] = c;
     }
   context[i] = '\0';
       context[i] = c;
     }
   context[i] = '\0';
@@ -298,18 +301,13 @@ read_skip_spaces (void)
       c = read_char ();
       switch (c)
        {
       c = read_char ();
       switch (c)
        {
-       case '\n':
-         read_md_lineno++;
-         break;
-
-       case ' ': case '\t': case '\f': case '\r':
+       case ' ': case '\t': case '\f': case '\r': case '\n':
          break;
 
        case ';':
          do
            c = read_char ();
          while (c != '\n' && c != EOF);
          break;
 
        case ';':
          do
            c = read_char ();
          while (c != '\n' && c != EOF);
-         read_md_lineno++;
          break;
 
        case '/':
          break;
 
        case '/':
@@ -317,14 +315,15 @@ read_skip_spaces (void)
            int prevc;
            c = read_char ();
            if (c != '*')
            int prevc;
            c = read_char ();
            if (c != '*')
-             fatal_expected_char ('*', c);
+             {
+               unread_char (c);
+               fatal_with_file_and_line ("stray '/' in file");
+             }
 
            prevc = 0;
            while ((c = read_char ()) && c != EOF)
              {
 
            prevc = 0;
            while ((c = read_char ()) && c != EOF)
              {
-               if (c == '\n')
-                  read_md_lineno++;
-               else if (prevc == '*' && c == '/')
+               if (prevc == '*' && c == '/')
                  break;
                prevc = c;
              }
                  break;
                prevc = c;
              }
@@ -370,8 +369,6 @@ read_name (struct md_name *name)
 
   if (i == 0)
     fatal_with_file_and_line ("missing name or number");
 
   if (i == 0)
     fatal_with_file_and_line ("missing name or number");
-  if (c == '\n')
-    read_md_lineno++;
 
   name->buffer[i] = 0;
   name->string = name->buffer;
 
   name->buffer[i] = 0;
   name->string = name->buffer;
@@ -406,7 +403,6 @@ read_escape (void)
     {
       /* Backslash-newline is replaced by nothing, as in C.  */
     case '\n':
     {
       /* Backslash-newline is replaced by nothing, as in C.  */
     case '\n':
-      read_md_lineno++;
       return;
 
       /* \" \' \\ are replaced by the second character.  */
       return;
 
       /* \" \' \\ are replaced by the second character.  */
@@ -458,9 +454,7 @@ read_quoted_string (void)
   while (1)
     {
       c = read_char (); /* Read the string  */
   while (1)
     {
       c = read_char (); /* Read the string  */
-      if (c == '\n')
-       read_md_lineno++;
-      else if (c == '\\')
+      if (c == '\\')
        {
          read_escape ();
          continue;
        {
          read_escape ();
          continue;
@@ -491,9 +485,7 @@ read_braced_string (void)
     {
       c = read_char (); /* Read the string  */
 
     {
       c = read_char (); /* Read the string  */
 
-      if (c == '\n')
-       read_md_lineno++;
-      else if (c == '{')
+      if (c == '{')
        brace_depth++;
       else if (c == '}')
        brace_depth--;
        brace_depth++;
       else if (c == '}')
        brace_depth--;
index 2edd3ce..0ebebde 100644 (file)
@@ -51,7 +51,12 @@ extern struct obstack string_obstack;
 static inline int
 read_char (void)
 {
 static inline int
 read_char (void)
 {
-  return getc (read_md_file);
+  int ch;
+
+  ch = getc (read_md_file);
+  if (ch == '\n')
+    read_md_lineno++;
+  return ch;
 }
 
 /* Put back CH, which was the last character read from the MD file.  */
 }
 
 /* Put back CH, which was the last character read from the MD file.  */
@@ -59,6 +64,8 @@ read_char (void)
 static inline void
 unread_char (int ch)
 {
 static inline void
 unread_char (int ch)
 {
+  if (ch == '\n')
+    read_md_lineno--;
   ungetc (ch, read_md_file);
 }
 
   ungetc (ch, read_md_file);
 }