* src/complain.h, src/complain.c (warn, complain): Remove, unused.

* src/reader.c (lineno): Remove.
Adjust all dependencies.
(get_merge_function): Take a location and use complain_at.
* src/symtab.h, src/symtab.c (symbol_make_alias): Likewise.
* tests/regression.at (Invalid inputs, Mixing %token styles):
Adjust.
This commit is contained in:
Akim Demaille
2002-07-09 15:54:39 +00:00
parent b275314e2d
commit a5d5099417
12 changed files with 51 additions and 146 deletions

View File

@@ -159,55 +159,6 @@ warn_at (location, message, va_alist)
putc ('\n', stderr);
fflush (stderr);
}
void
#if defined VA_START && defined __STDC__
warn (const char *message, ...)
#else
warn (message, va_alist)
char *message;
va_dcl
#endif
{
#ifdef VA_START
va_list args;
#endif
if (error_one_per_line)
{
static const char *old_infile;
static int old_lineno;
if (old_lineno == lineno &&
(infile == old_infile || !strcmp (old_infile, infile)))
/* Simply return and print nothing. */
return;
old_infile = infile;
old_lineno = lineno;
}
fflush (stdout);
if (infile != NULL)
fprintf (stderr, "%s:%d: ", infile, lineno);
else
fprintf (stderr, "%s:", program_name);
fputs (_("warning: "), stderr);
#ifdef VA_START
VA_START (args, message);
vfprintf (stderr, message, args);
va_end (args);
#else
fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8);
#endif
++warn_message_count;
putc ('\n', stderr);
fflush (stderr);
}
/*-----------------------------------------------------------.
| An error has occurred, but we can proceed, and die later. |
@@ -257,53 +208,6 @@ complain_at (location, message, va_alist)
putc ('\n', stderr);
fflush (stderr);
}
void
#if defined VA_START && defined __STDC__
complain (const char *message, ...)
#else
complain (message, va_alist)
char *message;
va_dcl
#endif
{
#ifdef VA_START
va_list args;
#endif
if (error_one_per_line)
{
static const char *old_infile;
static int old_lineno;
if (old_lineno == lineno &&
(infile == old_infile || !strcmp (old_infile, infile)))
/* Simply return and print nothing. */
return;
old_infile = infile;
old_lineno = lineno;
}
fflush (stdout);
if (infile != NULL)
fprintf (stderr, "%s:%d: ", infile, lineno);
else
fprintf (stderr, "%s:", program_name);
#ifdef VA_START
VA_START (args, message);
vfprintf (stderr, message, args);
va_end (args);
#else
fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8);
#endif
++complain_message_count;
putc ('\n', stderr);
fflush (stderr);
}
/*-------------------------------------------------.
| A severe error has occurred, we cannot proceed. |
@@ -354,10 +258,7 @@ fatal (message, va_alist)
#endif
fflush (stdout);
if (infile != NULL)
fprintf (stderr, "%s:%d: ", infile, lineno);
else
fprintf (stderr, "%s:", program_name);
fprintf (stderr, "%s: ", infile ? infile : program_name);
fputs (_("fatal error: "), stderr);

View File

@@ -29,17 +29,11 @@ extern "C" {
/* Informative messages, but we proceed. */
void warn (const char *format, ...)
__attribute__ ((__format__ (__printf__, 1, 2)));
void warn_at (location_t location, const char *format, ...)
__attribute__ ((__format__ (__printf__, 2, 3)));
/* Something bad happen, but let's continue and die later. */
void complain (const char *format, ...)
__attribute__ ((__format__ (__printf__, 1, 2)));
void complain_at (location_t location, const char *format, ...)
__attribute__ ((__format__ (__printf__, 2, 3)));
@@ -52,9 +46,7 @@ void fatal_at (location_t location, const char *format, ...)
__attribute__ ((__format__ (__printf__, 2, 3)));
# else
void warn ();
void warn_at ();
void complain ();
void complain_at ();
void fatal ();
void fatal_at ();
@@ -62,7 +54,6 @@ void fatal_at ();
/* Position in the current input file. */
extern char *infile;
extern int lineno;
/* This variable is incremented each time `warn' is called. */
extern unsigned int warn_message_count;

View File

@@ -51,7 +51,6 @@ main (int argc, char *argv[])
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
lineno = 0;
getargs (argc, argv);
if (trace_flag)

View File

@@ -1390,7 +1390,7 @@ yyreduce:
{
symbol_class_set (yyvsp[-1].symbol, current_class, yylsp[-1]);
symbol_type_set (yyvsp[-1].symbol, current_type, yylsp[-1]);
symbol_make_alias (yyvsp[-1].symbol, yyvsp[0].symbol);
symbol_make_alias (yyvsp[-1].symbol, yyvsp[0].symbol, yyloc);
}
break;
@@ -1400,7 +1400,7 @@ yyreduce:
symbol_class_set (yyvsp[-2].symbol, current_class, yylsp[-2]);
symbol_type_set (yyvsp[-2].symbol, current_type, yylsp[-2]);
symbol_user_token_number_set (yyvsp[-2].symbol, yyvsp[-1].integer, yylsp[-1]);
symbol_make_alias (yyvsp[-2].symbol, yyvsp[0].symbol);
symbol_make_alias (yyvsp[-2].symbol, yyvsp[0].symbol, yyloc);
}
break;

View File

@@ -304,14 +304,14 @@ symbol_def:
{
symbol_class_set ($1, current_class, @1);
symbol_type_set ($1, current_type, @1);
symbol_make_alias ($1, $2);
symbol_make_alias ($1, $2, @$);
}
| ID INT string_as_id
{
symbol_class_set ($1, current_class, @1);
symbol_type_set ($1, current_type, @1);
symbol_user_token_number_set ($1, $2, @2);
symbol_make_alias ($1, $3);
symbol_make_alias ($1, $3, @$);
}
;

View File

@@ -34,7 +34,6 @@
#include "conflicts.h"
#include "muscle_tab.h"
int lineno;
static symbol_list_t *grammar = NULL;
static int start_flag = 0;
merger_list *merge_functions;
@@ -113,7 +112,8 @@ epilogue_set (const char *epilogue, location_t location)
`-------------------------------------------------------------------*/
static int
get_merge_function (const char* name, const char* type)
get_merge_function (const char* name, const char* type,
location_t loc)
{
merger_list *syms;
merger_list head;
@@ -129,15 +129,17 @@ get_merge_function (const char* name, const char* type)
for (syms = &head, n = 1; syms->next != NULL; syms = syms->next, n += 1)
if (strcmp (name, syms->next->name) == 0)
break;
if (syms->next == NULL) {
syms->next = XMALLOC (merger_list, 1);
syms->next->name = strdup (name);
syms->next->type = strdup (type);
syms->next->next = NULL;
merge_functions = head.next;
} else if (strcmp (type, syms->next->type) != 0)
warn (_("result type clash on merge function %s: `%s' vs. `%s'"),
name, type, syms->next->type);
if (syms->next == NULL)
{
syms->next = XMALLOC (merger_list, 1);
syms->next->name = strdup (name);
syms->next->type = strdup (type);
syms->next->next = NULL;
merge_functions = head.next;
}
else if (strcmp (type, syms->next->type) != 0)
warn_at (loc, _("result type clash on merge function %s: `%s' vs. `%s'"),
name, type, syms->next->type);
return n;
}
@@ -367,7 +369,7 @@ grammar_current_rule_merge_set (const char* name, location_t location)
if (current_rule->merger != 0)
complain_at (location, _("only one %%merge allowed per rule"));
current_rule->merger =
get_merge_function (name, current_rule->sym->type_name);
get_merge_function (name, current_rule->sym->type_name, location);
}
/* Attach a SYMBOL to the current rule. If needed, move the previous
@@ -469,7 +471,6 @@ void
reader (void)
{
gram_control_t gram_control;
lineno = 1;
/* Initialize the symbol table. */
symbols_new ();

View File

@@ -768,7 +768,7 @@ do { \
} while (0)
#define YY_USER_ACTION LOCATION_COLUMNS (*yylloc, yyleng)
#define YY_LINES LOCATION_LINES (*yylloc, yyleng); lineno += yyleng;
#define YY_LINES LOCATION_LINES (*yylloc, yyleng);
#define YY_STEP LOCATION_STEP (*yylloc)
/* STRING_OBSTACK -- Used to store all the characters that we need to

View File

@@ -39,7 +39,7 @@ do { \
} while (0)
#define YY_USER_ACTION LOCATION_COLUMNS (*yylloc, yyleng)
#define YY_LINES LOCATION_LINES (*yylloc, yyleng); lineno += yyleng;
#define YY_LINES LOCATION_LINES (*yylloc, yyleng);
#define YY_STEP LOCATION_STEP (*yylloc)
/* STRING_OBSTACK -- Used to store all the characters that we need to

View File

@@ -238,13 +238,13 @@ symbol_check_defined (symbol_t *this)
`-------------------------------------------------------------------*/
void
symbol_make_alias (symbol_t *symbol, symbol_t *symval)
symbol_make_alias (symbol_t *symbol, symbol_t *symval, location_t loc)
{
if (symval->alias)
warn (_("symbol `%s' used more than once as a literal string"),
warn_at (loc, _("symbol `%s' used more than once as a literal string"),
symval->tag);
else if (symbol->alias)
warn (_("symbol `%s' given more than one literal string"),
warn_at (loc, _("symbol `%s' given more than one literal string"),
symbol->tag);
else
{
@@ -277,8 +277,9 @@ symbol_check_alias_consistence (symbol_t *this)
if (this->prec != this->alias->prec)
{
if (this->prec != 0 && this->alias->prec != 0)
complain (_("conflicting precedences for %s and %s"),
this->tag, this->alias->tag);
complain_at (this->alias->location,
_("conflicting precedences for %s and %s"),
this->tag, this->alias->tag);
if (this->prec != 0)
this->alias->prec = this->prec;
else
@@ -292,8 +293,9 @@ symbol_check_alias_consistence (symbol_t *this)
not nice, fix this! */
if (this->assoc != right_assoc
&& this->alias->assoc != right_assoc)
complain (_("conflicting associativities for %s and %s"),
this->tag, this->alias->tag);
complain_at (this->alias->location,
_("conflicting associativities for %s and %s"),
this->tag, this->alias->tag);
if (this->assoc != 0)
this->alias->assoc = this->assoc;
else
@@ -360,9 +362,10 @@ symbol_translation (symbol_t *this)
{
/* A token which translation has already been set? */
if (token_translations[this->user_token_number] != undeftoken->number)
complain (_("tokens %s and %s both assigned number %d"),
symbols[token_translations[this->user_token_number]]->tag,
this->tag, this->user_token_number);
complain_at (this->location,
_("tokens %s and %s both assigned number %d"),
symbols[token_translations[this->user_token_number]]->tag,
this->tag, this->user_token_number);
token_translations[this->user_token_number] = this->number;
}

View File

@@ -99,7 +99,8 @@ symbol_t *symbol_get PARAMS ((const char *key, location_t location));
symbol_t *dummy_symbol_get PARAMS ((location_t location));
/* Declare the new SYMBOL. Make it an alias of SYMVAL. */
void symbol_make_alias PARAMS ((symbol_t *symbol, symbol_t *symval));
void symbol_make_alias PARAMS ((symbol_t *symbol, symbol_t *symval,
location_t location));
/* Set the TYPE_NAME associated to SYMBOL. Does nothing if passed 0 as
TYPE_NAME. */