OSDN Git Service

2006-01-01 Jerry DeLisle <jvdelisle@gcc.gnu.org>
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 6 Jan 2006 01:21:56 +0000 (01:21 +0000)
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 6 Jan 2006 01:21:56 +0000 (01:21 +0000)
PR fortran/24268
* io.c (next_char_not_space): New function that returns the next
character that is not white space.
(format_lex): Use the new function to skip whitespace within
a format string.

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

gcc/fortran/ChangeLog
gcc/fortran/io.c

index 38781ee..2b47dc8 100644 (file)
@@ -1,3 +1,11 @@
+2006-01-01  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR fortran/24268
+       * io.c (next_char_not_space): New function that returns the next
+       character that is not white space.
+       (format_lex): Use the new function to skip whitespace within
+       a format string.
+
 2006-01-05  Erik Edelmann  <eedelman@gcc.gnu.org>
 
        PR fortran/23675
index 7ca000a..e72fe5d 100644 (file)
@@ -154,6 +154,20 @@ unget_char (void)
   use_last_char = 1;
 }
 
+/* Eat up the spaces and return a character. */
+
+static char
+next_char_not_space(void)
+{
+  char c;
+  do
+    {
+      c = next_char (0);
+    }
+  while (gfc_is_whitespace (c));
+  return c;
+}
+
 static int value = 0;
 
 /* Simple lexical analyzer for getting the next token in a FORMAT
@@ -174,19 +188,15 @@ format_lex (void)
       return token;
     }
 
-  do
-    {
-      c = next_char (0);
-    }
-  while (gfc_is_whitespace (c));
-
+  c = next_char_not_space ();
+  
   negative_flag = 0;
   switch (c)
     {
     case '-':
       negative_flag = 1;
     case '+':
-      c = next_char (0);
+      c = next_char_not_space ();
       if (!ISDIGIT (c))
        {
          token = FMT_UNKNOWN;
@@ -197,7 +207,7 @@ format_lex (void)
 
       do
        {
-         c = next_char (0);
+         c = next_char_not_space ();
           if(ISDIGIT (c))
             value = 10 * value + c - '0';
        }
@@ -227,13 +237,13 @@ format_lex (void)
 
       do
        {
-         c = next_char (0);
+         c = next_char_not_space ();
          if (c != '0')
            zflag = 0;
           if (ISDIGIT (c))
             value = 10 * value + c - '0';
        }
-      while (ISDIGIT (c) || gfc_is_whitespace(c));
+      while (ISDIGIT (c));
 
       unget_char ();
       token = zflag ? FMT_ZERO : FMT_POSINT;
@@ -260,7 +270,7 @@ format_lex (void)
       break;
 
     case 'T':
-      c = next_char (0);
+      c = next_char_not_space ();
       if (c != 'L' && c != 'R')
        unget_char ();
 
@@ -280,7 +290,7 @@ format_lex (void)
       break;
 
     case 'S':
-      c = next_char (0);
+      c = next_char_not_space ();
       if (c != 'P' && c != 'S')
        unget_char ();
 
@@ -288,7 +298,7 @@ format_lex (void)
       break;
 
     case 'B':
-      c = next_char (0);
+      c = next_char_not_space ();
       if (c == 'N' || c == 'Z')
        token = FMT_BLANK;
       else
@@ -350,7 +360,7 @@ format_lex (void)
       break;
 
     case 'E':
-      c = next_char (0);
+      c = next_char_not_space ();
       if (c == 'N' || c == 'S')
        token = FMT_EXT;
       else