Ævar Arnfjörð Bjarmason <[email protected]> writes:
> @@ -169,6 +167,24 @@ void grep_init(struct grep_opt *opt, const char *prefix)
>
> static void grep_set_pattern_type_option(enum grep_pattern_type
> pattern_type, struct grep_opt *opt)
> {
> + /*
> + * When committing to the pattern type by setting the relevant
> + * fields in grep_opt it's generally not necessary to zero out
> + * the fields we're not choosing, since they won't have been
> + * set by anything. The extended_regexp_option field is the
> + * only exception to this.
> + *
> + * This is because in the process of parsing grep.patternType
> + * & grep.extendedRegexp we set opt->pattern_type_option and
> + * opt->extended_regexp_option, respectively. We then
> + * internally use opt->extended_regexp_option to see if we're
> + * compiling an ERE. It must be unset if that's not actually
> + * the case.
> + */
> + if (pattern_type != GREP_PATTERN_TYPE_ERE &&
> + opt->extended_regexp_option)
> + opt->extended_regexp_option = 0;
Good to have the reasoning in an in-code comment like the above.
But after reading these two paragraphs and then before reading the
three line code, a more natural embodiment in the code of the
commentary that came to my mind was
if (pattern_type != GREP_PATTERN_TYPE_ERE)
opt->extended_regexp_option = 0;
The end-result is the same as yours, of course, but I somehow found
it match the reasoning better.
Now, I wonder if this can further be tweaked to
opt->extended_regexp_option = (pattern_type == GREP_PATTERN_TYPE_ERE);
which might lead us in a direction to really unify the two related
fields extended_regexp_option and pattern_type_option.
Even if that were a good longer term direction to go in, it is
outside the scope of this step, of course. I am merely bringing it
up as an conversation item ;-).