Code

grep: micro-optimize hit collection for AND nodes
[git.git] / grep.c
diff --git a/grep.c b/grep.c
index 062b2b6f28f6332518240d2a474a7739735e1ecf..db341b6797ccb5e44796ff1556437677f595a913 100644 (file)
--- a/grep.c
+++ b/grep.c
@@ -394,13 +394,9 @@ static int match_expr_eval(struct grep_opt *o,
                h = !match_expr_eval(o, x->u.unary, bol, eol, ctx, 0);
                break;
        case GREP_NODE_AND:
-               if (!collect_hits)
-                       return (match_expr_eval(o, x->u.binary.left,
-                                               bol, eol, ctx, 0) &&
-                               match_expr_eval(o, x->u.binary.right,
-                                               bol, eol, ctx, 0));
-               h = match_expr_eval(o, x->u.binary.left, bol, eol, ctx, 0);
-               h &= match_expr_eval(o, x->u.binary.right, bol, eol, ctx, 0);
+               if (!match_expr_eval(o, x->u.binary.left, bol, eol, ctx, 0))
+                       return 0;
+               h = match_expr_eval(o, x->u.binary.right, bol, eol, ctx, 0);
                break;
        case GREP_NODE_OR:
                if (!collect_hits)