]> git.saurik.com Git - bison.git/commitdiff
* src/lex.c, src/lex.h (xgetc): No longer static.
authorAkim Demaille <akim@epita.fr>
Sat, 15 Dec 2001 15:13:36 +0000 (15:13 +0000)
committerAkim Demaille <akim@epita.fr>
Sat, 15 Dec 2001 15:13:36 +0000 (15:13 +0000)
* src/reader.c (parse_union_decl): Revamp.

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

index ae9d826f8fb1b6074cab1b346549529a96e8c9d2..1acdebe841b4f6b29dea4ff6ca6f66639559b4c1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2001-12-15  Akim Demaille  <akim@epita.fr>
+
+       * src/lex.c, src/lex.h (xgetc): No longer static.
+       * src/reader.c (parse_union_decl): Revamp.
+
 2001-12-15  Akim Demaille  <akim@epita.fr>
 
        Still making progress in separating Bison into (i) input, (ii)
 2001-12-15  Akim Demaille  <akim@epita.fr>
 
        Still making progress in separating Bison into (i) input, (ii)
index 60e392ce2cbd9311feddc61c3228b6f5d98eaf98..deb6eb7af47374fd303b83ac865b2c7fdb059d4f 100644 (file)
--- a/src/lex.c
+++ b/src/lex.c
@@ -130,7 +130,7 @@ 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
+int
 xgetc (FILE *f)
 {
   int c = getc (f);
 xgetc (FILE *f)
 {
   int c = getc (f);
index 267843f1e3d3910b4645267061ccf78b4a2ff40d..9f3cfe3ac6b0e74f57b68d495d81af1ae916b0f7 100644 (file)
--- a/src/lex.h
+++ b/src/lex.h
@@ -66,6 +66,7 @@ void lex_free PARAMS ((void));
 int skip_white_space PARAMS ((void));
 void unlex PARAMS ((token_t));
 void read_type_name PARAMS ((FILE *fin));
 int skip_white_space PARAMS ((void));
 void unlex PARAMS ((token_t));
 void read_type_name PARAMS ((FILE *fin));
+int xgetc 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
 
 /* 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 d4046ed9cc90553d8c6d71b222a33e78a498ed50..c06f439965f5732aaefc16031ac357e5314343be 100644 (file)
@@ -753,6 +753,7 @@ parse_union_decl (void)
 {
   int c;
   int count = 0;
 {
   int c;
   int count = 0;
+  bool done = FALSE;
   struct obstack union_obstack;
   const char *prologue = "\
 #ifndef YYSTYPE\n\
   struct obstack union_obstack;
   const char *prologue = "\
 #ifndef YYSTYPE\n\
@@ -779,10 +780,10 @@ typedef union";
   if (defines_flag)
     obstack_sgrow (&defines_obstack, prologue);
 
   if (defines_flag)
     obstack_sgrow (&defines_obstack, prologue);
 
-  c = getc (finput);
-
-  while (c != EOF)
+  while (!done)
     {
     {
+      c = xgetc (finput);
+
       /* If C contains '/', it is output by copy_comment ().  */
       if (c != '/')
        {
       /* If C contains '/', it is output by copy_comment ().  */
       if (c != '/')
        {
@@ -806,26 +807,24 @@ typedef union";
          break;
 
        case '}':
          break;
 
        case '}':
+         /* FIXME: Errr.  How could this happen???. --akim */
          if (count == 0)
            complain (_("unmatched %s"), "`}'");
          count--;
          if (count == 0)
            complain (_("unmatched %s"), "`}'");
          count--;
-         if (count <= 0)
-           {
-             if (defines_flag)
-               obstack_sgrow (&defines_obstack, epilogue);
-             /* JF don't choke on trailing semi */
-             c = skip_white_space ();
-             if (c != ';')
-               ungetc (c, finput);
-             obstack_1grow (&union_obstack, 0);
-             muscle_insert ("stype", obstack_finish (&union_obstack));
-             return;
-           }
+         if (!count)
+           done = TRUE;
+         break;
        }
        }
-
-      c = getc (finput);
     }
 
     }
 
+  if (defines_flag)
+    obstack_sgrow (&defines_obstack, epilogue);
+  /* JF don't choke on trailing semi */
+  c = skip_white_space ();
+  if (c != ';')
+    ungetc (c, finput);
+  obstack_1grow (&union_obstack, 0);
+  muscle_insert ("stype", obstack_finish (&union_obstack));
 }
 
 
 }