errors: indent "symbol redeclaration" context

This is the continuation of the work on the readability of errors
context.

For example, what used to be:
  input.y:5.10-24: %printer redeclaration for <field2>
  input.y:3.11-25: previous declaration

is now:
  input.y:5.10-24: %printer redeclaration for <field2>
  input.y:3.11-25:     previous declaration

* NEWS: Document this change.
* src/symtab.c (symbol_redeclaration, semantic_type_redeclaration,
user_token_number_redeclaration, default_tagged_destructor_set,
default_tagless_destructor_set, default_tagged_printer_set,
default_tagless_printer_set): Use complain_at_indent to
output with increased indentation level.
* tests/input.at: Apply this change.

Signed-off-by: Akim Demaille <akim@lrde.epita.fr>
This commit is contained in:
Theophile Ranquet
2012-09-26 11:49:19 +02:00
committed by Akim Demaille
parent 24d96dd3eb
commit cbaea0106d
3 changed files with 77 additions and 51 deletions

12
NEWS
View File

@@ -14,6 +14,18 @@ GNU Bison NEWS
Incorrect definitions of YY_, issued by yacc.c when no parser header is Incorrect definitions of YY_, issued by yacc.c when no parser header is
generated, are removed. generated, are removed.
** Changes in the format of errors and exceptions output
This used to be the format of many error reports:
foo.y:5.10-24: result type clash on merge function 'merge': <t3> != <t2>
foo.y:4.13-27: previous declaration
It is now:
foo.y:5.10-25: result type clash on merge function 'merge': <t3> != <t2>
foo.y:4.13-27: previous declaration
* Noteworthy changes in release 2.6.2 (2012-08-03) [stable] * Noteworthy changes in release 2.6.2 (2012-08-03) [stable]
** Bug fixes ** Bug fixes

View File

@@ -150,16 +150,20 @@ static void
symbol_redeclaration (symbol *s, const char *what, location first, symbol_redeclaration (symbol *s, const char *what, location first,
location second) location second)
{ {
complain_at (second, _("%s redeclaration for %s"), what, s->tag); unsigned i = 0;
complain_at (first, _("previous declaration")); complain_at_indent (second, &i, _("%s redeclaration for %s"), what, s->tag);
i += SUB_INDENT;
complain_at_indent (first, &i, _("previous declaration"));
} }
static void static void
semantic_type_redeclaration (semantic_type *s, const char *what, location first, semantic_type_redeclaration (semantic_type *s, const char *what, location first,
location second) location second)
{ {
complain_at (second, _("%s redeclaration for <%s>"), what, s->tag); unsigned i = 0;
complain_at (first, _("previous declaration")); complain_at_indent (second, &i, _("%s redeclaration for <%s>"), what, s->tag);
i += SUB_INDENT;
complain_at_indent (first, &i, _("previous declaration"));
} }
@@ -515,6 +519,7 @@ symbol_pack_processor (void *this, void *null ATTRIBUTE_UNUSED)
static void static void
user_token_number_redeclaration (int num, symbol *first, symbol *second) user_token_number_redeclaration (int num, symbol *first, symbol *second)
{ {
unsigned i = 0;
/* User token numbers are not assigned during the parsing, but in a /* User token numbers are not assigned during the parsing, but in a
second step, via a traversal of the symbol table sorted on tag. second step, via a traversal of the symbol table sorted on tag.
@@ -526,10 +531,11 @@ user_token_number_redeclaration (int num, symbol *first, symbol *second)
first = second; first = second;
second = tmp; second = tmp;
} }
complain_at (second->location, complain_at_indent (second->location, &i,
_("user token number %d redeclaration for %s"), _("user token number %d redeclaration for %s"),
num, second->tag); num, second->tag);
complain_at (first->location, _("previous declaration for %s"), complain_at_indent (first->location, &i,
_("previous declaration for %s"),
first->tag); first->tag);
} }
@@ -923,9 +929,11 @@ default_tagged_destructor_set (code_props const *destructor)
{ {
if (default_tagged_destructor.code) if (default_tagged_destructor.code)
{ {
complain_at (destructor->location, unsigned i = 0;
complain_at_indent (destructor->location, &i,
_("redeclaration for default tagged %%destructor")); _("redeclaration for default tagged %%destructor"));
complain_at (default_tagged_destructor.location, i += SUB_INDENT;
complain_at_indent (default_tagged_destructor.location, &i,
_("previous declaration")); _("previous declaration"));
} }
default_tagged_destructor = *destructor; default_tagged_destructor = *destructor;
@@ -936,9 +944,11 @@ default_tagless_destructor_set (code_props const *destructor)
{ {
if (default_tagless_destructor.code) if (default_tagless_destructor.code)
{ {
complain_at (destructor->location, unsigned i = 0;
complain_at_indent (destructor->location, &i,
_("redeclaration for default tagless %%destructor")); _("redeclaration for default tagless %%destructor"));
complain_at (default_tagless_destructor.location, i += SUB_INDENT;
complain_at_indent (default_tagless_destructor.location, &i,
_("previous declaration")); _("previous declaration"));
} }
default_tagless_destructor = *destructor; default_tagless_destructor = *destructor;
@@ -949,9 +959,11 @@ default_tagged_printer_set (code_props const *printer)
{ {
if (default_tagged_printer.code) if (default_tagged_printer.code)
{ {
complain_at (printer->location, unsigned i = 0;
complain_at_indent (printer->location, &i,
_("redeclaration for default tagged %%printer")); _("redeclaration for default tagged %%printer"));
complain_at (default_tagged_printer.location, i += SUB_INDENT;
complain_at_indent (default_tagged_printer.location, &i,
_("previous declaration")); _("previous declaration"));
} }
default_tagged_printer = *printer; default_tagged_printer = *printer;
@@ -962,9 +974,11 @@ default_tagless_printer_set (code_props const *printer)
{ {
if (default_tagless_printer.code) if (default_tagless_printer.code)
{ {
complain_at (printer->location, unsigned i = 0;
complain_at_indent (printer->location, &i,
_("redeclaration for default tagless %%printer")); _("redeclaration for default tagless %%printer"));
complain_at (default_tagless_printer.location, i += SUB_INDENT;
complain_at_indent (default_tagless_printer.location, &i,
_("previous declaration")); _("previous declaration"));
} }
default_tagless_printer = *printer; default_tagless_printer = *printer;