Re: [PATCH 2/2] Star wildcard ranges (e.g., "info thread 2.*")

Pedro Alves
2016-01-14T11:29:27Z

On 01/13/2016 04:34 PM, Pedro Alves wrote:
>
> +void
> +number_range_setup_range (struct get_number_or_range_state *state,
> + int start_value, int end_value, const char *end_ptr)
> +{
> + gdb_assert (start_value > 0);
> +
> + state->in_range = 1;
> + state->string = "-";

I'm revisiting this "-" assignment. This was actually a hack to make
get_number_or_range believe it is handling a range. But, we already
have the state->in_range field for that. It was needed because get_number_of_range
checks *state->string != '-' _before_ checking state->in_range. But it doesn't
have to be that way -- if we swap that around, like in the hunk below, we no longer
need to hack state->string.

> + state->end_ptr = end_ptr;
> + state->last_retval = start_value - 1;
> + state->end_value = end_value;
> +}

I'm squashing in this hunk with the patch, removing the hack, and reposting
a v2 series.

diff --git a/gdb/cli/cli-utils.c b/gdb/cli/cli-utils.c
index bf6ecae..0946db0 100644
--- a/gdb/cli/cli-utils.c
+++ b/gdb/cli/cli-utils.c
@@ -134,7 +134,21 @@ init_number_or_range (struct get_number_or_range_state *state,
int
get_number_or_range (struct get_number_or_range_state *state)
{
- if (*state->string != '-')
+ if (state->in_range)
+ {
+ /* All number-parsing has already been done. Return the next
+ integer value (one greater than the saved previous value).
+ Do not advance the token pointer until the end of range is
+ reached. */
+
+ if (++state->last_retval == state->end_value)
+ {
+ /* End of range reached; advance token pointer. */
+ state->string = state->end_ptr;
+ state->in_range = 0;
+ }
+ }
+ else if (*state->string != '-')
{
/* Default case: state->string is pointing either to a solo
number, or to the first number of a range. */
@@ -165,27 +179,26 @@ get_number_or_range (struct get_number_or_range_state *state)
state->in_range = 1;
}
}
- else if (! state->in_range)
- error (_("negative value"));
else
- {
- /* state->string points to the '-' that betokens a range. All
- number-parsing has already been done. Return the next
- integer value (one greater than the saved previous value).
- Do not advance the token pointer until the end of range
- is reached. */
-
- if (++state->last_retval == state->end_value)
- {
- /* End of range reached; advance token pointer. */
- state->string = state->end_ptr;
- state->in_range = 0;
- }
- }
+ error (_("negative value"));
state->finished = *state->string == '\0';
return state->last_retval;
}