/* Symbol table manager for Bison.
- Copyright (C) 1984, 1989, 2000-2002, 2004-2011 Free Software
+ Copyright (C) 1984, 1989, 2000-2002, 2004-2012 Free Software
Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
#include "system.h"
#include <hash.h>
-#include <quotearg.h>
#include "complain.h"
#include "gram.h"
/* If the tag is not a string (starts with a double quote), check
that it is valid for Yacc. */
- if (tag[0] != '\"' && tag[0] != '\'' && strchr (tag, '-'))
+ if (tag[0] != '\"' && tag[0] != '\'' && mbschr (tag, '-'))
yacc_at (loc, _("POSIX Yacc forbids dashes in symbol names: %s"),
tag);
symbol_redeclaration (symbol *s, const char *what, location first,
location second)
{
- complain_at (second, _("%s redeclaration for %s"), what, s->tag);
- complain_at (first, _("previous declaration"));
+ unsigned i = 0;
+ complain_at_indent (second, &i, _("%s redeclaration for %s"), what, s->tag);
+ i += SUB_INDENT;
+ complain_at_indent (first, &i, _("previous declaration"));
}
static void
semantic_type_redeclaration (semantic_type *s, const char *what, location first,
location second)
{
- complain_at (second, _("%s redeclaration for <%s>"), what, s->tag);
- complain_at (first, _("previous declaration"));
+ unsigned i = 0;
+ complain_at_indent (second, &i, _("%s redeclaration for <%s>"), what, s->tag);
+ i += SUB_INDENT;
+ complain_at_indent (first, &i, _("previous declaration"));
}
if (user_token_number == 0)
{
endtoken = sym;
- endtoken->number = 0;
/* It is always mapped to 0, so it was already counted in
NTOKENS. */
- --ntokens;
+ if (endtoken->number != NUMBER_UNDEFINED)
+ --ntokens;
+ endtoken->number = 0;
}
}
symbol_make_alias (symbol *sym, symbol *str, location loc)
{
if (str->alias)
- warn_at (loc, _("symbol `%s' used more than once as a literal string"),
- str->tag);
+ warn_at (loc, _("symbol %s used more than once as a literal string"),
+ str->tag);
else if (sym->alias)
- warn_at (loc, _("symbol `%s' given more than one literal string"),
- sym->tag);
+ warn_at (loc, _("symbol %s given more than one literal string"),
+ sym->tag);
else
{
str->class = token_sym;
static void
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
second step, via a traversal of the symbol table sorted on tag.
first = second;
second = tmp;
}
- complain_at (second->location,
- _("user token number %d redeclaration for %s"),
- num, second->tag);
- complain_at (first->location, _("previous declaration for %s"),
- first->tag);
+ complain_at_indent (second->location, &i,
+ _("user token number %d redeclaration for %s"),
+ num, second->tag);
+ i += SUB_INDENT;
+ complain_at_indent (first->location, &i,
+ _("previous declaration for %s"),
+ first->tag);
}
/*--------------------------------------------------.
{
if (default_tagged_destructor.code)
{
- complain_at (destructor->location,
- _("redeclaration for default tagged %%destructor"));
- complain_at (default_tagged_destructor.location,
- _("previous declaration"));
+ unsigned i = 0;
+ complain_at_indent (destructor->location, &i,
+ _("redeclaration for default tagged %%destructor"));
+ i += SUB_INDENT;
+ complain_at_indent (default_tagged_destructor.location, &i,
+ _("previous declaration"));
}
default_tagged_destructor = *destructor;
}
{
if (default_tagless_destructor.code)
{
- complain_at (destructor->location,
- _("redeclaration for default tagless %%destructor"));
- complain_at (default_tagless_destructor.location,
- _("previous declaration"));
+ unsigned i = 0;
+ complain_at_indent (destructor->location, &i,
+ _("redeclaration for default tagless %%destructor"));
+ i += SUB_INDENT;
+ complain_at_indent (default_tagless_destructor.location, &i,
+ _("previous declaration"));
}
default_tagless_destructor = *destructor;
}
{
if (default_tagged_printer.code)
{
- complain_at (printer->location,
- _("redeclaration for default tagged %%printer"));
- complain_at (default_tagged_printer.location,
- _("previous declaration"));
+ unsigned i = 0;
+ complain_at_indent (printer->location, &i,
+ _("redeclaration for default tagged %%printer"));
+ i += SUB_INDENT;
+ complain_at_indent (default_tagged_printer.location, &i,
+ _("previous declaration"));
}
default_tagged_printer = *printer;
}
{
if (default_tagless_printer.code)
{
- complain_at (printer->location,
- _("redeclaration for default tagless %%printer"));
- complain_at (default_tagless_printer.location,
- _("previous declaration"));
+ unsigned i = 0;
+ complain_at_indent (printer->location, &i,
+ _("redeclaration for default tagless %%printer"));
+ i += SUB_INDENT;
+ complain_at_indent (default_tagless_printer.location, &i,
+ _("previous declaration"));
}
default_tagless_printer = *printer;
}