summaryrefslogtreecommitdiff
path: root/src/complain.c
diff options
context:
space:
mode:
authorAkim Demaille <akim@lrde.epita.fr>2013-02-17 12:47:35 +0100
committerAkim Demaille <akim@lrde.epita.fr>2013-02-18 10:01:29 +0100
commit0fe5a72a262cd4680513d135e1161f345fc3afb1 (patch)
tree9ddd2df24a469cd31606981e5eeab528329fca6f /src/complain.c
parent4c9b8f1318c68238074ee19e7ab976a22924540e (diff)
downloadbison-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.c10
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"));
+}