* data/m4sugar/m4sugar.m4 (m4_map): Recognize when the list of

arguments is really empty, not only equal to `[]'.
* src/symtab.h, src/symtab.c (symbol_t): `destructor' is a new
member.
(symbol_destructor_set): New.
* src/output.c (symbol_destructors_output): New.
* src/reader.h (brace_code_t, current_braced_code): New.
* src/scan-gram.l (BRACED_CODE): Use it to branch on...
(handle_dollar): Rename as...
(handle_action_dollar): this.
(handle_destructor_dollar): New.
* src/parse-gram.y (PERCENT_DESTRUCTOR): New.
(grammar_declaration): Use it.
* data/bison.simple (yystos): Is always defined.
(yydestructor): New.
* tests/actions.at (Destructors): New.
* tests/calc.at (_AT_CHECK_CALC_ERROR): Don't rely on egrep.
This commit is contained in:
Akim Demaille
2002-06-17 08:43:12 +00:00
parent dafdc66ff0
commit 9280d3ef89
15 changed files with 1222 additions and 848 deletions

View File

@@ -606,6 +606,33 @@ token_definitions_output (FILE *out)
}
/*----------------------------------------.
| Output the symbol destructors to OOUT. |
`----------------------------------------*/
static void
symbol_destructors_output (FILE *out)
{
int i;
int first = 1;
fputs ("m4_define([b4_symbol_destructors], \n[", out);
for (i = 0; i < nsyms; ++i)
if (symbols[i]->destructor)
{
symbol_t *symbol = symbols[i];
/* Symbol-number, destructor. */
fprintf (out, "%s[[[%d]], [[%s]], [[%s]]]",
first ? "" : ",\n",
symbol->number, symbol->destructor, symbol->type_name);
first = 0;
}
fputs ("])\n\n", out);
}
static void
save_column (int symbol, int default_state)
{
@@ -1019,6 +1046,7 @@ output_skeleton (void)
actions_output (out);
token_definitions_output (out);
symbol_destructors_output (out);
muscles_m4_output (out);