style: introduce parse_positional_ref

* src/scan-code.l: here.
This commit is contained in:
Akim Demaille
2020-07-05 15:53:42 +02:00
parent aac79ca103
commit bad4fc09a7

View File

@@ -401,18 +401,10 @@ show_sub_messages (warnings warning,
points to LHS ($$) of the current rule or midrule. */ points to LHS ($$) of the current rule or midrule. */
#define LHS_REF (INT_MIN + 1) #define LHS_REF (INT_MIN + 1)
/* Parse named or positional reference. In case of positional /* Parse a positional reference in RULE. */
references, can return negative values for $-n "deep" stack
accesses. */
static long static long
parse_ref (char *cp, symbol_list *rule, int rule_length, parse_positional_ref (char *cp, int rule_length,
int midrule_rhs_index, char *text, const location *text_loc, char *text, const location *text_loc)
char dollar_or_at)
{
if ('$' == *cp)
return LHS_REF;
if (c_isdigit (*cp) || (*cp == '-' && c_isdigit (* (cp + 1))))
{ {
long num = strtol (cp, &cp, 10); long num = strtol (cp, &cp, 10);
if (1 - INT_MAX + rule_length <= num && num <= rule_length) if (1 - INT_MAX + rule_length <= num && num <= rule_length)
@@ -425,6 +417,21 @@ parse_ref (char *cp, symbol_list *rule, int rule_length,
} }
} }
/* Parse named or positional reference. In case of positional
references, can return negative values for $-n "deep" stack
accesses. */
static long
parse_ref (char *cp, symbol_list *rule, int rule_length,
int midrule_rhs_index, char *text, const location *text_loc,
char dollar_or_at)
{
if ('$' == *cp)
return LHS_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 == '['; bool const explicit_bracketing = *cp == '[';
if (explicit_bracketing) if (explicit_bracketing)
@@ -585,7 +592,7 @@ fetch_type_name (char *cp, char const **type_name,
/*------------------------------------------------------------------. /*------------------------------------------------------------------.
| TEXT is pointing to a wannabee semantic value (i.e., a '$'). | | 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. | | Output to OBSTACK_FOR_STRING a reference to this semantic value. |
`------------------------------------------------------------------*/ `------------------------------------------------------------------*/