From 5372019fabc593faad353349d41dea7e79dae509 Mon Sep 17 00:00:00 2001 From: Akim Demaille <akim@epita.fr> Date: Sun, 5 May 2002 11:56:27 +0000 Subject: [PATCH] * src/output.c (GENERATE_OUTPUT_TABLE): Replace with... (GENERATE_MUSCLE_INSERT_TABLE): this. (output_int_table, output_unsigned_int_table, output_short_table) (output_token_number_table, output_item_number_table): Replace with... (muscle_insert_int_table, muscle_insert_unsigned_int_table) (muscle_insert_short_table, muscle_insert_token_number_table) (muscle_insert_item_number_table): these. Adjust all callers. (prepare_tokens): Don't free `translations', since... * src/reader.h, src/reader.c (grammar_free): do it. Move to... * src/gram.h, src/gram.c (grammar_free): here. * data/bison.simple, data/bison.c++: b4_token_number_max is now b4_translate_max. --- ChangeLog | 18 +++++++ data/bison.c++ | 4 +- data/bison.simple | 2 +- src/gram.c | 11 +++++ src/gram.h | 3 ++ src/output.c | 118 +++++++++++++++++++--------------------------- src/reader.c | 9 ---- src/reader.h | 3 -- 8 files changed, 83 insertions(+), 85 deletions(-) diff --git a/ChangeLog b/ChangeLog index bb5dfd5d..b6af28a6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2002-05-05 Akim Demaille <akim@epita.fr> + + * src/output.c (GENERATE_OUTPUT_TABLE): Replace with... + (GENERATE_MUSCLE_INSERT_TABLE): this. + (output_int_table, output_unsigned_int_table, output_short_table) + (output_token_number_table, output_item_number_table): Replace with... + (muscle_insert_int_table, muscle_insert_unsigned_int_table) + (muscle_insert_short_table, muscle_insert_token_number_table) + (muscle_insert_item_number_table): these. + Adjust all callers. + (prepare_tokens): Don't free `translations', since... + * src/reader.h, src/reader.c (grammar_free): do it. + Move to... + * src/gram.h, src/gram.c (grammar_free): here. + * data/bison.simple, data/bison.c++: b4_token_number_max is now + b4_translate_max. + + 2002-05-05 Akim Demaille <akim@epita.fr> * src/output.c (output_unsigned_int_table): New. diff --git a/data/bison.c++ b/data/bison.c++ index 91c0fef0..6d949040 100644 --- a/data/bison.c++ +++ b/data/bison.c++ @@ -202,8 +202,8 @@ namespace yy template < > struct Traits< b4_name > { - typedef b4_uint_type(b4_token_number_max) TokenNumberType; - typedef b4_sint_type(b4_rhs_max) RhsNumberType; + typedef b4_uint_type(b4_translate_max) TokenNumberType; + typedef b4_sint_type(b4_rhs_max) RhsNumberType; typedef int StateType; typedef yystype SemanticType; typedef b4_ltype LocationType; diff --git a/data/bison.simple b/data/bison.simple index dedf2c5a..8920bee3 100644 --- a/data/bison.simple +++ b/data/bison.simple @@ -334,7 +334,7 @@ b4_token_defines(b4_tokens) #define YYUNDEFTOK b4_undef_token_number #define YYMAXUTOK b4_user_token_number_max -typedef b4_uint_type(b4_token_number_max) yy_token_number_type; +typedef b4_uint_type(b4_translate_max) yy_token_number_type; #define YYTRANSLATE(X) \ ((unsigned)(X) <= YYMAXUTOK ? yytranslate[[X]] : YYUNDEFTOK) diff --git a/src/gram.c b/src/gram.c index 75546603..3fc03d0e 100644 --- a/src/gram.c +++ b/src/gram.c @@ -159,3 +159,14 @@ grammar_dump (FILE *out, const char *title) } fprintf (out, "\n\n"); } + + +void +grammar_free (void) +{ + XFREE (ritem); + free (rules + 1); + XFREE (token_translations); + /* Free the symbol table data structure. */ + symbols_free (); +} diff --git a/src/gram.h b/src/gram.h index d02964ff..af4e636c 100644 --- a/src/gram.h +++ b/src/gram.h @@ -181,4 +181,7 @@ size_t ritem_longest_rhs PARAMS ((void)); /* Dump the grammar. */ void grammar_dump PARAMS ((FILE *out, const char *title)); +/* Free the packed grammar. */ +void grammar_free PARAMS ((void)); + #endif /* !GRAM_H_ */ diff --git a/src/output.c b/src/output.c index 649b542a..e424143d 100644 --- a/src/output.c +++ b/src/output.c @@ -167,17 +167,18 @@ table_grow (size_t desired) } -/*------------------------------------------------------------------. -| Create a function NAME which Format the FIRST and then | -| TABLE_DATA[BEGIN..END[ (of TYPE) into OOUT, and return the number | -| of bits needed for its longuest value. | -`------------------------------------------------------------------*/ +/*-------------------------------------------------------------------. +| Create a function NAME which associates to the muscle NAME the | +| result of formatting the FIRST and then TABLE_DATA[BEGIN..END[ (of | +| TYPE), and to the muscle NAME_max, the max value of the | +| TABLE_DATA. | +`-------------------------------------------------------------------*/ -#define GENERATE_OUTPUT_TABLE(Name, Type) \ +#define GENERATE_MUSCLE_INSERT_TABLE(Name, Type) \ \ -static inline long int \ -Name (struct obstack *oout, \ +static void \ +Name (const char *name, \ Type *table_data, \ Type first, \ int begin, \ @@ -187,31 +188,35 @@ Name (struct obstack *oout, \ int i; \ int j = 1; \ \ - obstack_fgrow1 (oout, "%6d", first); \ + obstack_fgrow1 (&format_obstack, "%6d", first); \ for (i = begin; i < end; ++i) \ { \ - obstack_1grow (oout, ','); \ + obstack_1grow (&format_obstack, ','); \ if (j >= 10) \ { \ - obstack_sgrow (oout, "\n "); \ + obstack_sgrow (&format_obstack, "\n "); \ j = 1; \ } \ else \ ++j; \ - obstack_fgrow1 (oout, "%6d", table_data[i]); \ + obstack_fgrow1 (&format_obstack, "%6d", table_data[i]); \ if (table_data[i] > max) \ max = table_data[i]; \ } \ - obstack_1grow (oout, 0); \ + obstack_1grow (&format_obstack, 0); \ + muscle_insert (name, obstack_finish (&format_obstack)); \ \ - return max; \ + /* Build `NAME_max' in the obstack. */ \ + obstack_fgrow1 (&format_obstack, "%s_max", name); \ + obstack_1grow (&format_obstack, 0); \ + MUSCLE_INSERT_LONG_INT (obstack_finish (&format_obstack), max); \ } -GENERATE_OUTPUT_TABLE(output_int_table, int) -GENERATE_OUTPUT_TABLE(output_unsigned_int_table, unsigned int) -GENERATE_OUTPUT_TABLE(output_short_table, short) -GENERATE_OUTPUT_TABLE(output_token_number_table, token_number_t) -GENERATE_OUTPUT_TABLE(output_item_number_table, item_number_t) +GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_int_table, int) +GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_unsigned_int_table, unsigned int) +GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_short_table, short) +GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_token_number_table, token_number_t) +GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_item_number_table, item_number_t) /*-----------------------------------------------------------------. @@ -222,12 +227,9 @@ GENERATE_OUTPUT_TABLE(output_item_number_table, item_number_t) static void prepare_tokens (void) { - long int max = output_token_number_table (&format_obstack, - token_translations, - 0, 1, max_user_token_number + 1); - muscle_insert ("translate", obstack_finish (&format_obstack)); - MUSCLE_INSERT_LONG_INT ("token_number_max", max); - XFREE (token_translations); + muscle_insert_token_number_table ("translate", + token_translations, + 0, 1, max_user_token_number + 1); { int i; @@ -268,9 +270,8 @@ prepare_tokens (void) short *values = XCALLOC (short, ntokens + 1); for (i = 0; i < ntokens + 1; ++i) values[i] = symbols[i]->user_token_number; - output_short_table (&format_obstack, values, - 0, 1, ntokens + 1); - muscle_insert ("toknum", obstack_finish (&format_obstack)); + muscle_insert_short_table ("toknum", values, + 0, 1, ntokens + 1); free (values); } } @@ -312,24 +313,11 @@ prepare_rules (void) } assert (i == nritems); - max = output_item_number_table (&format_obstack, rhs, ritem[0], 1, nritems); - muscle_insert ("rhs", obstack_finish (&format_obstack)); - MUSCLE_INSERT_LONG_INT ("rhs_max", max); - - max = output_unsigned_int_table (&format_obstack, prhs, 0, 1, nrules + 1); - muscle_insert ("prhs", obstack_finish (&format_obstack)); - MUSCLE_INSERT_LONG_INT ("prhs_max", max); - - max = output_unsigned_int_table (&format_obstack, rline, 0, 1, nrules + 1); - muscle_insert ("rline", obstack_finish (&format_obstack)); - MUSCLE_INSERT_LONG_INT ("rline_max", max); - - output_token_number_table (&format_obstack, r1, 0, 1, nrules + 1); - muscle_insert ("r1", obstack_finish (&format_obstack)); - - max = output_unsigned_int_table (&format_obstack, r2, 0, 1, nrules + 1); - muscle_insert ("r2", obstack_finish (&format_obstack)); - MUSCLE_INSERT_LONG_INT ("r2_max", max); + muscle_insert_item_number_table ("rhs", rhs, ritem[0], 1, nritems); + muscle_insert_unsigned_int_table ("prhs", prhs, 0, 1, nrules + 1); + muscle_insert_unsigned_int_table ("rline", rline, 0, 1, nrules + 1); + muscle_insert_token_number_table ("r1", r1, 0, 1, nrules + 1); + muscle_insert_unsigned_int_table ("r2", r2, 0, 1, nrules + 1); free (rhs); free (prhs); @@ -350,9 +338,8 @@ prepare_states (void) (token_number_t *) alloca (sizeof (token_number_t) * nstates); for (i = 0; i < nstates; ++i) values[i] = states[i]->accessing_symbol; - output_token_number_table (&format_obstack, values, - 0, 1, nstates); - muscle_insert ("stos", obstack_finish (&format_obstack)); + muscle_insert_token_number_table ("stos", values, + 0, 1, nstates); } @@ -537,10 +524,8 @@ token_actions (void) save_row (i); } - output_short_table (&format_obstack, yydefact, - yydefact[0], 1, nstates); - muscle_insert ("defact", obstack_finish (&format_obstack)); - + muscle_insert_short_table ("defact", yydefact, + yydefact[0], 1, nstates); XFREE (actrow); XFREE (yydefact); } @@ -708,10 +693,8 @@ goto_actions (void) yydefgoto[i - ntokens] = default_state; } - output_short_table (&format_obstack, yydefgoto, - yydefgoto[0], 1, nsyms - ntokens); - muscle_insert ("defgoto", obstack_finish (&format_obstack)); - + muscle_insert_short_table ("defgoto", yydefgoto, + yydefgoto[0], 1, nsyms - ntokens); XFREE (state_count); XFREE (yydefgoto); } @@ -893,15 +876,12 @@ static void output_base (void) { /* Output pact. */ - output_short_table (&format_obstack, base, - base[0], 1, nstates); - muscle_insert ("pact", obstack_finish (&format_obstack)); + muscle_insert_short_table ("pact", base, + base[0], 1, nstates); /* Output pgoto. */ - output_short_table (&format_obstack, base, - base[nstates], nstates + 1, nvectors); - muscle_insert ("pgoto", obstack_finish (&format_obstack)); - + muscle_insert_short_table ("pgoto", base, + base[nstates], nstates + 1, nvectors); XFREE (base); } @@ -909,9 +889,8 @@ output_base (void) static void output_table (void) { - output_short_table (&format_obstack, table, - table[0], 1, high + 1); - muscle_insert ("table", obstack_finish (&format_obstack)); + muscle_insert_short_table ("table", table, + table[0], 1, high + 1); XFREE (table); } @@ -919,9 +898,8 @@ output_table (void) static void output_check (void) { - output_short_table (&format_obstack, check, - check[0], 1, high + 1); - muscle_insert ("check", obstack_finish (&format_obstack)); + muscle_insert_short_table ("check", check, + check[0], 1, high + 1); XFREE (check); } diff --git a/src/reader.c b/src/reader.c index 75957010..6106037c 100644 --- a/src/reader.c +++ b/src/reader.c @@ -1871,12 +1871,3 @@ reader (void) /* The grammar as a symbol_list is no longer needed. */ LIST_FREE (symbol_list, grammar); } - -void -grammar_free (void) -{ - XFREE (ritem); - free (rules + 1); - /* Free the symbol table data structure. */ - symbols_free (); -} diff --git a/src/reader.h b/src/reader.h index 8c946183..64abe4d4 100644 --- a/src/reader.h +++ b/src/reader.h @@ -28,9 +28,6 @@ void reader PARAMS ((void)); -/* Free the packed grammar. */ -void grammar_free PARAMS ((void)); - extern int lineno; extern symbol_t *errtoken; -- 2.45.2