simultaneously, use one to define the `stype' muscle, and use the
value of the latter to fill defines_obstack.
(copy_comment): Remove.
(copy_comment2): Work for a single obstack.
Rename as...
(copy_comment): this.
+2001-12-15 Akim Demaille <akim@epita.fr>
+
+ * src/reader.c (parse_union_decl): Instead of handling two obstack
+ simultaneously, use one to define the `stype' muscle, and use the
+ value of the latter to fill defines_obstack.
+ (copy_comment): Remove.
+ (copy_comment2): Work for a single obstack.
+ Rename as...
+ (copy_comment): this.
+
2001-12-15 Akim Demaille <akim@epita.fr>
* src/lex.c, src/lex.h (xgetc): No longer static.
2001-12-15 Akim Demaille <akim@epita.fr>
* src/lex.c, src/lex.h (xgetc): No longer static.
-/*-----------------------------------------------------------------.
-| Dump the wannabee comment from IN to OUT1 and OUT2 (which can be |
-| NULL). In fact we just saw a `/', which might or might not be a |
-| comment. In any case, copy what we saw. |
-| |
-| OUT2 might be NULL. |
-`-----------------------------------------------------------------*/
+
+/*------------------------------------------------------------------.
+| Dump the wannabee comment from IN to OOUT. In fact we just saw a |
+| `/', which might or might not be a comment. In any case, copy |
+| what we saw. |
+`------------------------------------------------------------------*/
-copy_comment2 (FILE *fin, struct obstack *oout1, struct obstack *oout2)
+copy_comment (FILE *fin, struct obstack *oout)
{
int cplus_comment;
int ended;
int c;
/* We read a `/', output it. */
{
int cplus_comment;
int ended;
int c;
/* We read a `/', output it. */
- obstack_1grow (oout1, '/');
- if (oout2)
- obstack_1grow (oout2, '/');
+ obstack_1grow (oout, '/');
switch ((c = getc (fin)))
{
switch ((c = getc (fin)))
{
- obstack_1grow (oout1, c);
- if (oout2)
- obstack_1grow (oout2, c);
+ obstack_1grow (oout, c);
c = getc (fin);
ended = 0;
c = getc (fin);
ended = 0;
- obstack_1grow (oout1, c);
- if (oout2)
- obstack_1grow (oout2, c);
+ obstack_1grow (oout, c);
c = getc (fin);
}
if (c == '/')
{
c = getc (fin);
}
if (c == '/')
{
- obstack_1grow (oout1, c);
- if (oout2)
- obstack_1grow (oout2, c);
+ obstack_1grow (oout, c);
ended = 1;
}
}
else if (c == '\n')
{
lineno++;
ended = 1;
}
}
else if (c == '\n')
{
lineno++;
- obstack_1grow (oout1, c);
- if (oout2)
- obstack_1grow (oout2, c);
+ obstack_1grow (oout, c);
if (cplus_comment)
ended = 1;
else
if (cplus_comment)
ended = 1;
else
fatal (_("unterminated comment"));
else
{
fatal (_("unterminated comment"));
else
{
- obstack_1grow (oout1, c);
- if (oout2)
- obstack_1grow (oout2, c);
+ obstack_1grow (oout, c);
-/*-------------------------------------------------------------------.
-| Dump the comment (actually the current string starting with a `/') |
-| from FIN to OOUT. |
-`-------------------------------------------------------------------*/
-
-static inline void
-copy_comment (FILE *fin, struct obstack *oout)
-{
- copy_comment2 (fin, oout, NULL);
-}
-
-
/*-----------------------------------------------------------------.
| FIN is pointing to a location (i.e., a `@'). Output to OOUT a |
| reference to this location. STACK_OFFSET is the number of values |
/*-----------------------------------------------------------------.
| FIN is pointing to a location (i.e., a `@'). Output to OOUT a |
| reference to this location. STACK_OFFSET is the number of values |
int count = 0;
bool done = FALSE;
struct obstack union_obstack;
int count = 0;
bool done = FALSE;
struct obstack union_obstack;
- const char *prologue = "\
-#ifndef YYSTYPE\n\
-typedef union";
- const char *epilogue = "\
- yystype;\n\
-# define YYSTYPE yystype\n\
-#endif\n";
-
if (typed)
complain (_("multiple %s declarations"), "%union");
typed = 1;
if (typed)
complain (_("multiple %s declarations"), "%union");
typed = 1;
- /* FIXME: I'm worried: are you sure attrs_obstack is properly
- filled? */
- /* I don't see any reasons to keep this line, because we should
- create a special skeleton for this option. */
- if (no_lines_flag)
- obstack_1grow (&attrs_obstack, '\n');
-
obstack_init (&union_obstack);
obstack_sgrow (&union_obstack, "union");
obstack_init (&union_obstack);
obstack_sgrow (&union_obstack, "union");
- if (defines_flag)
- obstack_sgrow (&defines_obstack, prologue);
/* If C contains '/', it is output by copy_comment (). */
if (c != '/')
/* If C contains '/', it is output by copy_comment (). */
if (c != '/')
- {
- obstack_1grow (&union_obstack, c);
- if (defines_flag)
- obstack_1grow (&defines_obstack, c);
- }
+ obstack_1grow (&union_obstack, c);
- copy_comment2 (finput, &defines_obstack, &union_obstack);
+ copy_comment (finput, &union_obstack);
- 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));
/* 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));
+
+ if (defines_flag)
+ obstack_fgrow1 (&defines_obstack, "\
+#ifndef YYSTYPE\n\
+typedef %s
+yystype;\n\
+# define YYSTYPE yystype\n\
+#endif\n",
+ muscle_find ("stype"));