mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-18 08:43:03 +00:00
Warn about unused values.
* src/symlist.h, src/symlist.c (symbol_list, symbol_list_new): Add
a `used' member.
(symbol_list_n_get, symbol_list_n_used_set): New.
(symbol_list_n_type_name_get): Use symbol_list_n_get.
* src/scan-gram.l (handle_action_dollar): Flag used symbols.
* src/reader.c (grammar_current_rule_check): Check that values are
used.
* src/symtab.c (symbol_print): Accept 0.
* tests/existing.at: Remove the type information.
Empty the actions.
Remove useless actions (beware of mid-rule actions: perl -000
-pi -e 's/s*{}(?=[ns]*[|;])//g').
* tests/actions.at (Exotic Dollars): Use unused values.
* tests/calc.at: Likewise.
* tests/glr-regression.at (No users destructors if stack 0 deleted):
Likewise.
* src/gram.c (rule_useful_p, rule_never_reduced_p): Use
rule_useful_p.
This commit is contained in:
@@ -25,9 +25,10 @@
|
||||
# include "location.h"
|
||||
# include "symtab.h"
|
||||
|
||||
/* A list of symbols, used during the parsing to store the rules. */
|
||||
typedef struct symbol_list
|
||||
{
|
||||
struct symbol_list *next;
|
||||
/* The symbol. */
|
||||
symbol *sym;
|
||||
location location;
|
||||
|
||||
@@ -35,9 +36,16 @@ typedef struct symbol_list
|
||||
const char *action;
|
||||
location action_location;
|
||||
|
||||
/* Whether this symbol's value is used in the current action. */
|
||||
bool used;
|
||||
|
||||
/* Precedence/associativity. */
|
||||
symbol *ruleprec;
|
||||
int dprec;
|
||||
int merger;
|
||||
|
||||
/* The list. */
|
||||
struct symbol_list *next;
|
||||
} symbol_list;
|
||||
|
||||
|
||||
@@ -48,18 +56,24 @@ symbol_list *symbol_list_new (symbol *sym, location loc);
|
||||
void symbol_list_print (symbol_list *l, FILE *f);
|
||||
|
||||
/* Prepend SYM at LOC to the LIST. */
|
||||
symbol_list *symbol_list_prepend (symbol_list *list,
|
||||
symbol_list *symbol_list_prepend (symbol_list *l,
|
||||
symbol *sym,
|
||||
location loc);
|
||||
|
||||
/* Free the LIST, but not the symbols it contains. */
|
||||
void symbol_list_free (symbol_list *list);
|
||||
void symbol_list_free (symbol_list *l);
|
||||
|
||||
/* Return its length. */
|
||||
unsigned int symbol_list_length (symbol_list *list);
|
||||
unsigned int symbol_list_length (symbol_list *l);
|
||||
|
||||
/* Get symbol N in symbol list L. */
|
||||
symbol_list *symbol_list_n_get (symbol_list *l, int n);
|
||||
|
||||
/* Get the data type (alternative in the union) of the value for
|
||||
symbol N in rule RULE. */
|
||||
uniqstr symbol_list_n_type_name_get (symbol_list *rp, location loc, int n);
|
||||
uniqstr symbol_list_n_type_name_get (symbol_list *l, location loc, int n);
|
||||
|
||||
/* The symbol N in symbol list L is USED. */
|
||||
void symbol_list_n_used_set (symbol_list *l, int n, bool used);
|
||||
|
||||
#endif /* !SYMLIST_H_ */
|
||||
|
||||
Reference in New Issue
Block a user