]> git.saurik.com Git - bison.git/blobdiff - src/lex.c
* src/lex.c (read_typename): New function.
[bison.git] / src / lex.c
index f81e291036c9b0913bd6bb4bf944e74f2d172ffd..c5d73082d8a502d697f65ff8e0fe3f629794c0c9 100644 (file)
--- a/src/lex.c
+++ b/src/lex.c
@@ -76,6 +76,7 @@ skip_white_space (void)
       switch (c)
        {
        case '/':
+         /* FIXME: Should probably be merged with copy_comment.  */
          c = getc (finput);
          if (c != '*' && c != '/')
            {
@@ -130,7 +131,11 @@ skip_white_space (void)
     }
 }
 
-/* do a getc, but give error message if EOF encountered */
+
+/*-----------------------------------------------------.
+| Do a getc, but give error message if EOF encountered |
+`-----------------------------------------------------*/
+
 static int
 xgetc (FILE *f)
 {
@@ -318,6 +323,37 @@ unlex (int token)
   unlexed_symval = symval;
 }
 
+/*-----------------------------------------------------------------.
+| We just read `<' from FIN.  Store in TOKEN_BUFFER, the type name |
+| specified between the `<...>'.                                   |
+`-----------------------------------------------------------------*/
+
+void
+read_type_name (FILE *fin)
+{
+  char *p = token_buffer;
+  int c = getc (fin);
+
+  while (c != '>')
+    {
+      if (c == EOF)
+       fatal (_("unterminated type name at end of file"));
+      if (c == '\n')
+       {
+         complain (_("unterminated type name"));
+         ungetc (c, fin);
+         break;
+       }
+
+      if (p == token_buffer + maxtoken)
+       p = grow_token_buffer (p);
+
+      *p++ = c;
+      c = getc (fin);
+    }
+  *p = 0;
+}
+
 
 int
 lex (void)
@@ -334,7 +370,8 @@ lex (void)
     }
 
   c = skip_white_space ();
-  *token_buffer = c;           /* for error messages (token buffer always valid) */
+  /* for error messages (token buffer always valid) */
+  *token_buffer = c;
   token_buffer[1] = 0;
 
   switch (c)
@@ -432,7 +469,8 @@ lex (void)
        int code;               /* ignored here */
        p = token_buffer;
        *p++ = '\"';
-       while (literalchar (&p, &code, '\"'))   /* read up to and including " */
+       /* Read up to and including ".  */
+       while (literalchar (&p, &code, '\"'))
          {
            if (p >= token_buffer + maxtoken - 4)
              p = grow_token_buffer (p);
@@ -481,29 +519,9 @@ lex (void)
        }
 
     case '<':
-      p = token_buffer;
-      c = getc (finput);
-      while (c != '>')
-       {
-         if (c == EOF)
-           fatal (_("unterminated type name at end of file"));
-         if (c == '\n')
-           {
-             complain (_("unterminated type name"));
-             ungetc (c, finput);
-             break;
-           }
-
-         if (p == token_buffer + maxtoken)
-           p = grow_token_buffer (p);
-
-         *p++ = c;
-         c = getc (finput);
-       }
-      *p = 0;
+      read_type_name (finput);
       return TYPENAME;
 
-
     case '%':
       return parse_percent_token ();