]> git.saurik.com Git - bison.git/commitdiff
* src/lex.c (read_typename): New function.
authorAkim Demaille <akim@epita.fr>
Mon, 16 Oct 2000 18:08:35 +0000 (18:08 +0000)
committerAkim Demaille <akim@epita.fr>
Mon, 16 Oct 2000 18:08:35 +0000 (18:08 +0000)
(lex): Use it.
* src/reader.c (copy_dollar): Likewise.

ChangeLog
src/lex.c
src/lex.h
src/reader.c
src/symtab.h

index 77af116510ac4ff947e193a6dece58bbe94932dd..9fb13c39ed8354d1dfd0430a6911efcf46969bac 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2000-10-16  Akim Demaille  <akim@epita.fr>
+
+       * src/lex.c (read_typename): New function.
+       (lex): Use it.
+       * src/reader.c (copy_dollar): Likewise.
+
+       
 2000-10-16  Akim Demaille  <akim@epita.fr>
 
        * src/reader.c (copy_comment2): Expect the input stream to be on
index 1d07bc3e9c9fea0939a8ffd9011e78a029f7bc8a..c5d73082d8a502d697f65ff8e0fe3f629794c0c9 100644 (file)
--- a/src/lex.c
+++ b/src/lex.c
@@ -323,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)
@@ -488,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 ();
 
index 3831e5afafbecea1eb991260d17d623fe0802e83..54d5022cc140f1fbb928d93445859592d7a4db7d 100644 (file)
--- a/src/lex.h
+++ b/src/lex.h
@@ -62,6 +62,7 @@ char *grow_token_buffer PARAMS ((char *));
 void init_lex PARAMS ((void));
 int skip_white_space PARAMS ((void));
 void unlex PARAMS ((int));
+void read_type_name PARAMS ((FILE *fin));
 
 /* Return one of the token-type codes.  When an identifier is seen,
    the code IDENTIFIER is returned and the name is looked up in the
index c8d48067e527f3665b9067f2dd8a0b63341ab277..0b2f643f5cce8543bb523d806ed13a3d5fc74c76 100644 (file)
@@ -344,22 +344,12 @@ copy_dollar (FILE *fin, FILE *fout,
   int c = getc (fin);
   char *type_name = NULL;
 
-  /* Get the typename if explicit. */
+  /* Get the type name if explicit. */
   if (c == '<')
     {
-      char *cp = token_buffer;
-
-      while ((c = getc (fin)) != '>' && c > 0)
-       {
-         if (cp == token_buffer + maxtoken)
-           cp = grow_token_buffer (cp);
-
-         *cp++ = c;
-       }
-      *cp = 0;
+      read_type_name (fin);
       type_name = token_buffer;
       value_components_used = 1;
-
       c = getc (fin);
     }
 
@@ -1372,9 +1362,9 @@ readgram (void)
                {
                  bucket *sdummy;
 
-                 /* Since the action was written out with this rule's */
-                 /* number, we must give the new rule this number */
-                 /* by inserting the new rule before it.  */
+                 /* Since the action was written out with this rule's
+                    number, we must give the new rule this number by
+                    inserting the new rule before it.  */
 
                  /* Make a dummy nonterminal, a gensym.  */
                  sdummy = gensym ();
@@ -1395,7 +1385,8 @@ readgram (void)
                  p->next = crule1;
                  crule1->next = crule;
 
-                 /* insert the dummy generated by that rule into this rule.  */
+                 /* Insert the dummy generated by that rule into this
+                    rule.  */
                  nitems++;
                  p = XCALLOC (symbol_list, 1);
                  p->sym = sdummy;
index c68ec8feee89a4076da08ac86b96bdded2491780..354fb8fd6bc41bb4ad61d00874141a6c365e7970 100644 (file)
@@ -39,7 +39,10 @@ typedef struct bucket
 {
   struct bucket *link;
   struct bucket *next;
+
+  /* The key, name of the symbol. */
   char *tag;
+  /* Its type. */
   char *type_name;
   short value;
   short prec;