@matheusbsbs / matheus-bagliano / commits / 95ce9ce296
Fork 0

grep: move logic to compile header pattern into a separate helper

The callers should be queuing only GREP_PATTERN_HEAD elements to the header_list queue; simplify the switch and guard it with an assert. Signed-off-by: Junio C Hamano <gitster@pobox.com>

Junio C Hamano committed Sep 12, 2010 at 19:30 UTC 95ce9ce296e1636a2b78e73b96905d781ef2ddc7
1 file changed +22 -23
grep.c
+22 -23
@@ -189,29 +189,31 @@ static struct grep_expr *compile_pattern_expr(struct grep_pat **list)
189 return compile_pattern_or(list);
190 }
191
192 -void compile_grep_patterns(struct grep_opt *opt)
192 +static struct grep_expr *prep_header_patterns(struct grep_opt *opt)
193 {
194 struct grep_pat *p;
195 - struct grep_expr *header_expr = NULL;
196 -
197 - if (opt->header_list) {
198 - p = opt->header_list;
199 - header_expr = compile_pattern_expr(&p);
200 - if (p)
201 - die("incomplete pattern expression: %s", p->pattern);
202 - for (p = opt->header_list; p; p = p->next) {
203 - switch (p->token) {
204 - case GREP_PATTERN: /* atom */
205 - case GREP_PATTERN_HEAD:
206 - case GREP_PATTERN_BODY:
207 - compile_regexp(p, opt);
208 - break;
209 - default:
210 - opt->extended = 1;
211 - break;
212 - }
213 - }
195 + struct grep_expr *header_expr;
196 +
197 + if (!opt->header_list)
198 + return NULL;
199 + p = opt->header_list;
200 + header_expr = compile_pattern_expr(&p);
201 + if (p)
202 + die("incomplete pattern expression: %s", p->pattern);
203 + for (p = opt->header_list; p; p = p->next) {
204 + if (p->token != GREP_PATTERN_HEAD)
205 + die("bug: a non-header pattern in grep header list.");
206 + if (p->field < 0 || GREP_HEADER_FIELD_MAX <= p->field)
207 + die("bug: unknown header field %d", p->field);
208 + compile_regexp(p, opt);
209 }
210 + return header_expr;
211 +}
212 +
213 +void compile_grep_patterns(struct grep_opt *opt)
214 +{
215 + struct grep_pat *p;
216 + struct grep_expr *header_expr = prep_header_patterns(opt);
217
218 for (p = opt->pattern_list; p; p = p->next) {
219 switch (p->token) {
@@ -231,9 +233,6 @@ void compile_grep_patterns(struct grep_opt *opt)
233 else if (!opt->extended)
234 return;
235
234 - /* Then bundle them up in an expression.
235 - * A classic recursive descent parser would do.
236 - */
236 p = opt->pattern_list;
237 if (p)
238 opt->pattern_expression = compile_pattern_expr(&p);