grep: extract grep_binexp() from grep_or_expr()

When constructing an OR node, the grep.c code uses `grep_or_expr()` to
make a node, assign its kind, and set its left and right children. The
same is not done for AND nodes.

Prepare to introduce a new `grep_and_expr()` function which will share
code with the existing implementation of `grep_or_expr()` by introducing
a new function which compiles either kind of binary expression, and
reimplement `grep_or_expr()` in terms of it.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Taylor Blau 2022-01-06 14:50:12 -05:00 committed by Junio C Hamano
parent e2b154277a
commit f2d275984d

11
grep.c
View File

@ -603,15 +603,22 @@ static struct grep_expr *grep_not_expr(struct grep_expr *expr)
return z;
}
static struct grep_expr *grep_or_expr(struct grep_expr *left, struct grep_expr *right)
static struct grep_expr *grep_binexp(enum grep_expr_node kind,
struct grep_expr *left,
struct grep_expr *right)
{
struct grep_expr *z = xcalloc(1, sizeof(*z));
z->node = GREP_NODE_OR;
z->node = kind;
z->u.binary.left = left;
z->u.binary.right = right;
return z;
}
static struct grep_expr *grep_or_expr(struct grep_expr *left, struct grep_expr *right)
{
return grep_binexp(GREP_NODE_OR, left, right);
}
static struct grep_expr *compile_pattern_or(struct grep_pat **);
static struct grep_expr *compile_pattern_atom(struct grep_pat **list)
{