mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-19 09:13: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>
|
2001-08-15 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
* doc/bison.texinfo (Table of Symbols): Document
|
* 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;
|
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 |
|
| Try to open file NAME with mode MODE, and print an error message |
|
||||||
| if fails. |
|
| if fails. |
|
||||||
@@ -133,6 +164,25 @@ obstack_save (struct obstack *obs, const char *filename)
|
|||||||
xfclose (out);
|
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 |
|
| 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. */
|
/* Output the header file if wanted. */
|
||||||
if (defines_flag)
|
if (defines_flag)
|
||||||
obstack_save (&defines_obstack,
|
defines_obstack_save (stringappend (base_name, header_extension));
|
||||||
stringappend (base_name, header_extension));
|
|
||||||
|
|
||||||
/* If we output only the table, dump the actions in ACTFILE. */
|
/* If we output only the table, dump the actions in ACTFILE. */
|
||||||
if (no_parser_flag)
|
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");
|
"#ifndef YYSTYPE\n#define YYSTYPE int\n#endif\n");
|
||||||
if (defines_flag)
|
if (defines_flag)
|
||||||
obstack_sgrow (&defines_obstack, "\
|
obstack_sgrow (&defines_obstack, "\
|
||||||
#ifndef YYSTYPE\n\
|
# ifndef YYSTYPE\n\
|
||||||
# define YYSTYPE int\n\
|
# define YYSTYPE int\n\
|
||||||
#endif\n");
|
# endif\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Report any undefined symbols and consider them nonterminals. */
|
/* Report any undefined symbols and consider them nonterminals. */
|
||||||
@@ -1634,11 +1634,11 @@ output_token_defines (struct obstack *oout)
|
|||||||
if (c != '\0')
|
if (c != '\0')
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
obstack_fgrow2 (oout, "#define\t%s\t%d\n",
|
obstack_fgrow2 (oout, "# define\t%s\t%d\n",
|
||||||
symbol,
|
symbol,
|
||||||
(translations ? bp->user_token_number : bp->value));
|
(translations ? bp->user_token_number : bp->value));
|
||||||
if (semantic_parser)
|
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');
|
obstack_1grow (oout, '\n');
|
||||||
@@ -1793,7 +1793,7 @@ packsymbols (void)
|
|||||||
/* don't make these for dummy nonterminals made by gensym. */
|
/* don't make these for dummy nonterminals made by gensym. */
|
||||||
if (*tags[i] != '@')
|
if (*tags[i] != '@')
|
||||||
obstack_fgrow2 (&defines_obstack,
|
obstack_fgrow2 (&defines_obstack,
|
||||||
"#define\tNT%s\t%d\n", tags[i], i);
|
"# define\tNT%s\t%d\n", tags[i], i);
|
||||||
}
|
}
|
||||||
#if 0
|
#if 0
|
||||||
/* `fdefines' is now a temporary file, so we need to copy its
|
/* `fdefines' is now a temporary file, so we need to copy its
|
||||||
|
|||||||
Reference in New Issue
Block a user