mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
* src/reader.c (readgram): Indent output macro YYSTYPE.
(packsymbols): Likewise. (output_token_defines): Likewise. * src/files.c: Standardize. (compute_header_macro): New. (defines_obstack_save): New. Use compute_header_macro. (output_files): Update. Use defines_obstack_save.
This commit is contained in:
10
ChangeLog
10
ChangeLog
@@ -1,3 +1,13 @@
|
||||
2001-08-15 Marc Autret <prog@epita.fr>
|
||||
|
||||
* src/reader.c (readgram): Indent output macro YYSTYPE.
|
||||
(packsymbols): Likewise.
|
||||
(output_token_defines): Likewise.
|
||||
* src/files.c: Standardize.
|
||||
(compute_header_macro): New.
|
||||
(defines_obstack_save): New. Use compute_header_macro.
|
||||
(output_files): Update. Use defines_obstack_save.
|
||||
|
||||
2001-08-15 Akim Demaille <akim@epita.fr>
|
||||
|
||||
* doc/bison.texinfo (Table of Symbols): Document
|
||||
|
||||
53
src/files.c
53
src/files.c
@@ -84,6 +84,37 @@ stringappend (const char *string1, const char *string2)
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------------.
|
||||
| Computes the macro name used to avoid double inclusion in the |
|
||||
| header of the parser and store it in header_macro_name. |
|
||||
`---------------------------------------------------------------*/
|
||||
|
||||
static const char *
|
||||
compute_header_macro (void)
|
||||
{
|
||||
int ite;
|
||||
char *macro_name;
|
||||
|
||||
macro_name = XMALLOC (char,
|
||||
strlen (base_name) +
|
||||
strlen (header_extension) + 1);
|
||||
|
||||
stpcpy (macro_name, base_name);
|
||||
strcat (macro_name, header_extension);
|
||||
|
||||
for (ite = 0; macro_name[ite]; ite++)
|
||||
if (macro_name[ite] == '.')
|
||||
macro_name[ite] = '_';
|
||||
else
|
||||
{
|
||||
if (islower (macro_name[ite]))
|
||||
macro_name[ite] -= ('a' - 'A');
|
||||
}
|
||||
return macro_name;
|
||||
}
|
||||
|
||||
|
||||
/*-----------------------------------------------------------------.
|
||||
| Try to open file NAME with mode MODE, and print an error message |
|
||||
| if fails. |
|
||||
@@ -133,6 +164,25 @@ obstack_save (struct obstack *obs, const char *filename)
|
||||
xfclose (out);
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------.
|
||||
| Output double inclusion protection macros and saves defines_obstack |
|
||||
`---------------------------------------------------------------------*/
|
||||
|
||||
static void
|
||||
defines_obstack_save (const char *filename)
|
||||
{
|
||||
FILE *out = xfopen (filename, "w");
|
||||
size_t size = obstack_object_size (&defines_obstack);
|
||||
char *macro_name = compute_header_macro ();
|
||||
|
||||
fprintf (out, "#ifndef %s\n", macro_name);
|
||||
fprintf (out, "# define %s\n\n", macro_name);
|
||||
fwrite (obstack_finish (&defines_obstack), 1, size, out);
|
||||
fprintf (out, "\n#endif /* not %s */\n", macro_name);
|
||||
|
||||
free (macro_name);
|
||||
xfclose (out);
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------.
|
||||
| Return the path to the skeleton which locaction might be given in |
|
||||
@@ -397,8 +447,7 @@ output_files (void)
|
||||
|
||||
/* Output the header file if wanted. */
|
||||
if (defines_flag)
|
||||
obstack_save (&defines_obstack,
|
||||
stringappend (base_name, header_extension));
|
||||
defines_obstack_save (stringappend (base_name, header_extension));
|
||||
|
||||
/* If we output only the table, dump the actions in ACTFILE. */
|
||||
if (no_parser_flag)
|
||||
|
||||
12
src/reader.c
12
src/reader.c
@@ -1575,9 +1575,9 @@ readgram (void)
|
||||
"#ifndef YYSTYPE\n#define YYSTYPE int\n#endif\n");
|
||||
if (defines_flag)
|
||||
obstack_sgrow (&defines_obstack, "\
|
||||
#ifndef YYSTYPE\n\
|
||||
# define YYSTYPE int\n\
|
||||
#endif\n");
|
||||
# ifndef YYSTYPE\n\
|
||||
# define YYSTYPE int\n\
|
||||
# endif\n");
|
||||
}
|
||||
|
||||
/* Report any undefined symbols and consider them nonterminals. */
|
||||
@@ -1634,11 +1634,11 @@ output_token_defines (struct obstack *oout)
|
||||
if (c != '\0')
|
||||
continue;
|
||||
|
||||
obstack_fgrow2 (oout, "#define\t%s\t%d\n",
|
||||
obstack_fgrow2 (oout, "# define\t%s\t%d\n",
|
||||
symbol,
|
||||
(translations ? bp->user_token_number : bp->value));
|
||||
if (semantic_parser)
|
||||
obstack_fgrow2 (oout, "#define\tT%s\t%d\n", symbol, bp->value);
|
||||
obstack_fgrow2 (oout, "# define\tT%s\t%d\n", symbol, bp->value);
|
||||
}
|
||||
|
||||
obstack_1grow (oout, '\n');
|
||||
@@ -1793,7 +1793,7 @@ packsymbols (void)
|
||||
/* don't make these for dummy nonterminals made by gensym. */
|
||||
if (*tags[i] != '@')
|
||||
obstack_fgrow2 (&defines_obstack,
|
||||
"#define\tNT%s\t%d\n", tags[i], i);
|
||||
"# define\tNT%s\t%d\n", tags[i], i);
|
||||
}
|
||||
#if 0
|
||||
/* `fdefines' is now a temporary file, so we need to copy its
|
||||
|
||||
Reference in New Issue
Block a user