diff options
author | Akim Demaille <akim@lrde.epita.fr> | 2013-02-17 12:47:35 +0100 |
---|---|---|
committer | Akim Demaille <akim@lrde.epita.fr> | 2013-02-18 10:01:29 +0100 |
commit | 0fe5a72a262cd4680513d135e1161f345fc3afb1 (patch) | |
tree | 9ddd2df24a469cd31606981e5eeab528329fca6f /src/complain.c | |
parent | 4c9b8f1318c68238074ee19e7ab976a22924540e (diff) | |
download | bison-0fe5a72a262cd4680513d135e1161f345fc3afb1.tar.gz |
diagnostics: factor and enhance messages about duplicate rule directives
When reporting a duplicate directive on a rule, point to its first
occurrence:
one.y:11.10-15: error: only one %empty allowed per rule
%empty {} %empty
^^^^^^
one.y:11.3-8: previous declaration
%empty {} %empty
^^^^^^
And consistently discard the second one.
* src/complain.h, src/complain.c (duplicate_directive): New.
* src/reader.c: Use it where appropriate.
* src/symlist.h, src/symlist.c (symbol_list): Add a dprec_location member.
* tests/actions.at: Adjust expected output.
Diffstat (limited to 'src/complain.c')
-rw-r--r-- | src/complain.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/complain.c b/src/complain.c index 44e1b1ea..2e87097f 100644 --- a/src/complain.c +++ b/src/complain.c @@ -365,3 +365,13 @@ deprecated_directive (location const *loc, char const *old, char const *upd) _("deprecated directive: %s, use %s"), quote (old), quote_n (1, upd)); } + +void +duplicate_directive (char const *directive, + location first, location second) +{ + unsigned i = 0; + complain (&second, complaint, _("only one %s allowed per rule"), directive); + i += SUB_INDENT; + complain_indent (&first, complaint, &i, _("previous declaration")); +} |