Skip to content

Commit

Permalink
filterx: use common function for evaluating expr lists
Browse files Browse the repository at this point in the history
Signed-off-by: Balazs Scheidler <[email protected]>
  • Loading branch information
bazsi committed May 6, 2024
1 parent b1c25c1 commit 6b7b015
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 22 deletions.
13 changes: 3 additions & 10 deletions lib/filterx/expr-condition.c
Original file line number Diff line number Diff line change
Expand Up @@ -65,17 +65,10 @@ _eval_condition(FilterXConditional *c)
goto exit;
}

for (GList *l = c->statements; l; l = l->next)
if (!filterx_expr_list_eval(c->statements, &result))
{
FilterXExpr *expr = l->data;
result = filterx_expr_eval(expr);
if (!result || !filterx_object_truthy(result))
{
filterx_object_unref(result);
return filterx_boolean_new(FALSE);
}
if (l->next != NULL)
filterx_object_unref(result);
filterx_object_unref(result);
return filterx_boolean_new(FALSE);
}
exit:
filterx_object_unref(condition_value);
Expand Down
12 changes: 1 addition & 11 deletions lib/filterx/expr-shorthand.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,19 +33,9 @@ static FilterXObject *
_eval(FilterXExpr *s)
{
FilterXShorthand *self = (FilterXShorthand *) s;

FilterXObject *result = NULL;
for (GList *elem = self->exprs; elem; elem = elem->next)
{
filterx_object_unref(result);

FilterXExpr *expr = elem->data;
result = filterx_expr_eval(expr);

if (!result || filterx_object_falsy(result))
break;
}

filterx_expr_list_eval(self->exprs, &result);
return result;
}

Expand Down
1 change: 0 additions & 1 deletion lib/filterx/filterx-eval.c
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,6 @@ _evaluate_statement(FilterXExpr *expr)
return success;
}


gboolean
filterx_eval_exec_statements(FilterXScope *scope, GList *statements, LogMessage *msg)
{
Expand Down
18 changes: 18 additions & 0 deletions lib/filterx/filterx-expr.c
Original file line number Diff line number Diff line change
Expand Up @@ -124,3 +124,21 @@ filterx_binary_op_init_instance(FilterXBinaryOp *self, FilterXExpr *lhs, FilterX
self->lhs = lhs;
self->rhs = rhs;
}

gboolean
filterx_expr_list_eval(GList *expressions, FilterXObject **result)
{
*result = NULL;
for (GList *elem = expressions; elem; elem = elem->next)
{
filterx_object_unref(*result);

FilterXExpr *expr = elem->data;
*result = filterx_expr_eval(expr);

if (!(*result) || filterx_object_falsy(*result))
return FALSE;
}

return TRUE;
}
2 changes: 2 additions & 0 deletions lib/filterx/filterx-expr.h
Original file line number Diff line number Diff line change
Expand Up @@ -157,4 +157,6 @@ typedef struct _FilterXBinaryOp
void filterx_binary_op_free_method(FilterXExpr *s);
void filterx_binary_op_init_instance(FilterXBinaryOp *self, FilterXExpr *lhs, FilterXExpr *rhs);

gboolean filterx_expr_list_eval(GList *expressions, FilterXObject **result);

#endif

0 comments on commit 6b7b015

Please sign in to comment.