Provide an additional sub-message for clarity.

Add "symbol not found in production" error message when
an "invalid reference" is detected in named references
resolution.

	* src/scan-code.l: Update "invalid reference" case.
	* tests/named-ref.at: Adjust test-cases.
This commit is contained in:
Alex Rozenman
2009-09-12 11:48:56 +03:00
parent 93d0103dd4
commit 4c56b1319d
3 changed files with 75 additions and 41 deletions

View File

@@ -590,29 +590,24 @@ parse_ref (char *cp, symbol_list *rule, int rule_length,
switch (valid_variants)
{
case 0:
if (variant_count == 0)
{
if (explicit_bracketing || !ref_tail_fields)
complain_at (text_loc, _("unresolved reference: %s"),
quote(text));
else
{
unsigned len = ref_tail_fields - text;
char *str = strndup (text, len);
text_loc.end.column = text_loc.start.column + len;
complain_at (text_loc, _("unresolved reference: %s"),
quote (str));
free (str);
}
}
else
{
complain_at (text_loc, _("invalid reference: %s"),
quote (text));
{
unsigned len = (explicit_bracketing || !ref_tail_fields) ?
cp_end - cp : ref_tail_fields - cp;
const char *message = "symbol not found in production";
complain_at (text_loc, _("invalid reference: %s"), quote (text));
if (midrule_rhs_index)
complain_at (rule->location, _(" %s before $%d: %.*s"),
message, midrule_rhs_index, len, cp);
else
complain_at (rule->location, _(" %s: %.*s"),
message, len, cp);
if (variant_count > 0)
show_sub_messages (cp, explicit_bracketing, midrule_rhs_index,
dollar_or_at, false);
}
return INVALID_REF;
return INVALID_REF;
}
case 1:
{
if (variant_count > 1)