]> git.saurik.com Git - bison.git/commitdiff
* src/reader.c (parse_union_decl): Add new obstack union_obstack. Which
authorPascal Bart <pascal.bart@epita.fr>
Sun, 23 Sep 2001 15:33:14 +0000 (15:33 +0000)
committerPascal Bart <pascal.bart@epita.fr>
Sun, 23 Sep 2001 15:33:14 +0000 (15:33 +0000)
will contain `%union' declaration.
(parse_union_decl): Delete #line directive output.
(parse_union_decl): Substitute /attrs_obstack/union_obstack for all
informations about %union.
(parse_union_decl): Copy the union_obstack in the muscle stype.
* src/bison.simple: Add new #line directive.
Add typdef %%stype YYSTYPE.

ChangeLog
src/bison.simple
src/reader.c

index 3d44a0a7ce1a40c5bc7ce9283e4b279b62b1c96c..b2db6979ae7bb93ca267ba59bb1cef74d22622af 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2001-09-23  Pascal Bart  <pascal.bart@epita.fr>
+
+       * src/reader.c (parse_union_decl): Add new obstack union_obstack.  Which
+       will contain `%union' declaration.
+       (parse_union_decl): Delete #line directive output.
+       (parse_union_decl): Substitute /attrs_obstack/union_obstack for all
+       informations about %union.
+       (parse_union_decl): Copy the union_obstack in the muscle stype.
+       * src/bison.simple: Add new #line directive.
+       Add typdef %%stype YYSTYPE.
+
 2001-09-23  Pascal Bart  <pascal.bart@epita.fr>
 
        * src/bison.simple: Add new `#line' directive.
index 5b980d185e8d749eaeef88fc134b89ff1ae4e6d9..9c1a8c1241ad068919f7fd2c7147f4216aa7f880 100644 (file)
 # define YYDEBUG %%debug
 #endif
 
+#line %%input_line "%%filename"
 #ifndef YYSTYPE
-# define YYSTYPE %%stype
+typedef %%stype YYSTYPE;
 #endif
 
 #ifndef YYLTYPE
index 5344837a1a6f47f977485db1076f68f6a8f87ddc..35e08501a04b9a018aa9a4dcb6c5cc8cc38c4105 100644 (file)
@@ -735,9 +735,9 @@ token_buffer);
 
 
 /*--------------------------------------------------------------.
-| Copy the union declaration into ATTRS_OBSTACK (and fdefines), |
-| where it is made into the definition of YYSTYPE, the type of  |
-| elements of the parser value stack.                           |
+| Copy the union declaration into the stype muscle             |
+| (and fdefines),  where it is made into the definition of     |
+| YYSTYPE, the type of elements of the parser value stack.     |
 `--------------------------------------------------------------*/
 
 static void
@@ -745,23 +745,18 @@ parse_union_decl (void)
 {
   int c;
   int count = 0;
+  struct obstack union_obstack;
 
   if (typed)
     complain (_("multiple %s declarations"), "%union");
 
   typed = 1;
 
-
-  if (!no_lines_flag)
-    {
-      obstack_fgrow2 (&attrs_obstack, muscle_find ("linef"),
-                     lineno, quotearg_style (c_quoting_style, 
-                                             muscle_find("filename")));
-    }
-  else
+  if (no_lines_flag)
     obstack_1grow (&attrs_obstack, '\n');
   
-  obstack_sgrow (&attrs_obstack, "typedef union");
+  obstack_init (&union_obstack);
+  obstack_sgrow (&union_obstack, "union");
   if (defines_flag)
     obstack_sgrow (&defines_obstack, "typedef union");
 
@@ -769,7 +764,7 @@ parse_union_decl (void)
 
   while (c != EOF)
     {
-      obstack_1grow (&attrs_obstack, c);
+      obstack_1grow (&union_obstack, c);
       if (defines_flag)
        obstack_1grow (&defines_obstack, c);
 
@@ -780,7 +775,7 @@ parse_union_decl (void)
          break;
 
        case '/':
-         copy_comment2 (finput, &defines_obstack, &attrs_obstack);
+         copy_comment2 (finput, &defines_obstack, &union_obstack);
          break;
 
        case '{':
@@ -793,19 +788,21 @@ parse_union_decl (void)
          count--;
          if (count <= 0)
            {
-             obstack_sgrow (&attrs_obstack, " YYSTYPE;\n");
              if (defines_flag)
                obstack_sgrow (&defines_obstack, " YYSTYPE;\n");
              /* 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;
            }
        }
 
       c = getc (finput);
     }
+
 }