+2001-11-12 Pascal Bart <pascal.bart@epita.fr>
+
+ * src/bison.simple: Define type yystype instead of YYSTYPE, and
+ define CPP macro, which substitute YYSTYPE by yystype.
+ * src/reader.c (parse_union_decl): Output yystype/YYSTYPE as we do
+ with yyltype/YYLTYPE. This allows inclusion of the generated
+ header within the parser if the compiler, such as GGC, accepts
+ multiple equivalent #defines.
+ From Akim.
+
2001-11-05 Akim Demaille <akim@epita.fr>
* src/reader.c (symbols_output): New, extracted from...
#line %%input_line "%%filename"
#ifndef YYSTYPE
-typedef %%stype YYSTYPE;
+typedef %%stype yystype;
+# define YYSTYPE yystype
#endif
#ifndef YYLTYPE
int c;
int count = 0;
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");
/* 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");
if (defines_flag)
- obstack_sgrow (&defines_obstack, "typedef union");
+ obstack_sgrow (&defines_obstack, prologue);
c = getc (finput);
if (count <= 0)
{
if (defines_flag)
- obstack_sgrow (&defines_obstack, " YYSTYPE;\n");
+ obstack_sgrow (&defines_obstack, epilogue);
/* JF don't choke on trailing semi */
c = skip_white_space ();
if (c != ';')