]> git.saurik.com Git - bison.git/commit - tests/input.at
fix warnings for useless %printer/%destructor
authorAkim Demaille <akim@lrde.epita.fr>
Wed, 20 Jun 2012 10:33:34 +0000 (12:33 +0200)
committerAkim Demaille <akim@lrde.epita.fr>
Wed, 20 Jun 2012 19:53:27 +0000 (21:53 +0200)
commit3b0b682fd6c55c0387aacbb86bc708da09ad2ae3
tree3eaeaeacd35b9f5d2cffdad75d4f8cb7a2e021f7
parent0d4b994cc2559aa7eb58b26d5fa96be241755a92
fix warnings for useless %printer/%destructor

The previous commit, which turns into a warning what used to be an
error:

    %printer {} foo;
    %%
    exp: '0';

has two shortcomings: the warning is way too long (foo is reported
to be useless later), and besides, it also turns into a warning much
more serious errors:

   %printer {} foo;
   %%
   exp: foo;

Reduce the amount to warnings in the first case, restore the error in
the second.

* src/symtab.h (status): Add a new inital state: undeclared.
* src/symtab.c (symbol_new): Initialize to undeclared.
(symbol_class_set): Simplify the logic of the code that neutralize
the "redeclared" warning after the "redefined" one.
(symbol_check_defined): "undeclared" is also an error.
* src/reader.c (grammar_current_rule_symbol_append): Symbols appearing
in a rule are "needed".
* src/symlist.c (symbol_list_destructor_set, symbol_list_printer_set):
An unknown symbol appearing in a %printer/%destructor is "used".
* src/reduce.c (nonterminals_reduce): Do not report as "useless" symbols
that are not used (e.g., those that for instance appeared only in a
%printer).
* tests/input.at (Undeclared symbols used for a printer or destructor):
Improve the cover the cases described above.
src/reader.c
src/reduce.c
src/symlist.c
src/symtab.c
src/symtab.h
tests/input.at