Skip to content

Commit

Permalink
style: introduce parse_positional_ref
Browse files Browse the repository at this point in the history
* src/scan-code.l: here.
  • Loading branch information
akimd committed Sep 20, 2020
1 parent aac79ca commit bad4fc0
Showing 1 changed file with 20 additions and 13 deletions.
33 changes: 20 additions & 13 deletions src/scan-code.l
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,23 @@ show_sub_messages (warnings warning,
points to LHS ($$) of the current rule or midrule. */
#define LHS_REF (INT_MIN + 1)

/* Parse a positional reference in RULE. */
static long
parse_positional_ref (char *cp, int rule_length,
char *text, const location *text_loc)
{
long num = strtol (cp, &cp, 10);
if (1 - INT_MAX + rule_length <= num && num <= rule_length)
return num;
else
{
complain (text_loc, complaint, _("integer out of range: %s"),
quote (text));
return INVALID_REF;
}
}


/* Parse named or positional reference. In case of positional
references, can return negative values for $-n "deep" stack
accesses. */
Expand All @@ -412,18 +429,8 @@ parse_ref (char *cp, symbol_list *rule, int rule_length,
if ('$' == *cp)
return LHS_REF;

if (c_isdigit (*cp) || (*cp == '-' && c_isdigit (* (cp + 1))))
{
long num = strtol (cp, &cp, 10);
if (1 - INT_MAX + rule_length <= num && num <= rule_length)
return num;
else
{
complain (text_loc, complaint, _("integer out of range: %s"),
quote (text));
return INVALID_REF;
}
}
if (c_isdigit (*cp) || (*cp == '-' && c_isdigit (cp[1])))
return parse_positional_ref (cp, rule_length, text, text_loc);

bool const explicit_bracketing = *cp == '[';

Expand Down Expand Up @@ -585,7 +592,7 @@ fetch_type_name (char *cp, char const **type_name,
/*------------------------------------------------------------------.
| TEXT is pointing to a wannabee semantic value (i.e., a '$'). |
| |
| Possible inputs: $[<TYPENAME>]($|integer) |
| Possible inputs: $[<TYPENAME>]($|INTEGER) |
| |
| Output to OBSTACK_FOR_STRING a reference to this semantic value. |
`------------------------------------------------------------------*/
Expand Down

0 comments on commit bad4fc0

Please sign in to comment.