Skip to content

Commit

Permalink
filterx: set ignore_falsy_return and return fillable in generators
Browse files Browse the repository at this point in the history
Signed-off-by: Attila Szakacs <[email protected]>
  • Loading branch information
alltilla committed May 6, 2024
1 parent 493f020 commit 4c81873
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 32 deletions.
1 change: 1 addition & 0 deletions lib/filterx/expr-generator.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ void
filterx_generator_init_instance(FilterXExpr *s)
{
filterx_expr_init_instance(s);
s->ignore_falsy_result = TRUE;
}

void
Expand Down
7 changes: 4 additions & 3 deletions lib/filterx/expr-literal-generator.c
Original file line number Diff line number Diff line change
Expand Up @@ -142,9 +142,10 @@ _literal_generator_eval(FilterXExpr *s)
if (!fillable)
return NULL;

FilterXObject *result = _eval_elements(fillable, self->elements) ? filterx_boolean_new(TRUE) : NULL;
filterx_object_unref(fillable);
return result;
if (!_eval_elements(fillable, self->elements))
return NULL;

return fillable;
}

void
Expand Down
8 changes: 5 additions & 3 deletions lib/filterx/expr-regexp.c
Original file line number Diff line number Diff line change
Expand Up @@ -359,14 +359,16 @@ _regexp_search_generator_eval(FilterXExpr *s)
if (matched)
{
if (!_store_matches(self->pattern, &state, fillable))
goto exit;
{
filterx_object_unref(fillable);
goto exit;
}
}

result = filterx_boolean_new(TRUE);
result = fillable;

exit:
_state_cleanup(&state);
filterx_object_unref(fillable);
return result;
}

Expand Down
8 changes: 2 additions & 6 deletions lib/filterx/tests/test_expr_regexp.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,9 +86,7 @@ _search(const gchar *lhs, const gchar *pattern)

FilterXObject *result_obj = filterx_expr_eval(expr);
cr_assert(result_obj);
gboolean result;
cr_assert(filterx_boolean_unwrap(result_obj, &result));
cr_assert(result);
cr_assert(filterx_object_truthy(result_obj));

FilterXObject *fillable = filterx_expr_eval(fillable_expr);
cr_assert(fillable);
Expand All @@ -109,9 +107,7 @@ _search_with_fillable(const gchar *lhs, const gchar *pattern, FilterXObject *fil

FilterXObject *result_obj = filterx_expr_eval(expr);
cr_assert(result_obj);
gboolean result;
cr_assert(filterx_boolean_unwrap(result_obj, &result));
cr_assert(result);
cr_assert(filterx_object_truthy(result_obj));

filterx_object_unref(result_obj);
filterx_expr_unref(expr);
Expand Down
29 changes: 9 additions & 20 deletions lib/filterx/tests/test_filterx_expr.c
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,6 @@ Test(filterx_expr, test_filterx_list_merge)
FilterXExpr *fillable = filterx_literal_new(json_array);
FilterXExpr *list_expr = NULL;
FilterXObject *result = NULL;
gboolean success = FALSE;
GList *values = NULL, *inner_values = NULL;
guint64 len;

Expand All @@ -140,8 +139,7 @@ Test(filterx_expr, test_filterx_list_merge)
// $fillable += [42];
result = filterx_expr_eval(list_expr);
cr_assert(result);
cr_assert(filterx_boolean_unwrap(result, &success));
cr_assert(success);
cr_assert(filterx_object_truthy(result));
cr_assert(filterx_object_len(json_array, &len));
cr_assert_eq(len, 1);
_assert_int_value_and_unref(filterx_list_get_subscript(json_array, 0), 42);
Expand All @@ -150,8 +148,7 @@ Test(filterx_expr, test_filterx_list_merge)
// $fillable += [42];
result = filterx_expr_eval(list_expr);
cr_assert(result);
cr_assert(filterx_boolean_unwrap(result, &success));
cr_assert(success);
cr_assert(filterx_object_truthy(result));
cr_assert(filterx_object_len(json_array, &len));
cr_assert_eq(len, 2);
_assert_int_value_and_unref(filterx_list_get_subscript(json_array, 0), 42);
Expand All @@ -175,8 +172,7 @@ Test(filterx_expr, test_filterx_list_merge)
// $fillable += [[1337]];
result = filterx_expr_eval(list_expr);
cr_assert(result);
cr_assert(filterx_boolean_unwrap(result, &success));
cr_assert(success);
cr_assert(filterx_object_truthy(result));
cr_assert(filterx_object_len(json_array, &len));
cr_assert_eq(len, 3);

Expand Down Expand Up @@ -217,7 +213,6 @@ Test(filterx_expr, test_filterx_dict_merge)
FilterXExpr *fillable = filterx_literal_new(json);
FilterXExpr *dict_expr = NULL;
FilterXObject *result = NULL;
gboolean success = FALSE;
GList *values = NULL, *inner_values = NULL;
guint64 len;

Expand All @@ -237,8 +232,7 @@ Test(filterx_expr, test_filterx_dict_merge)
// $fillable += {"foo": 42};
result = filterx_expr_eval(dict_expr);
cr_assert(result);
cr_assert(filterx_boolean_unwrap(result, &success));
cr_assert(success);
cr_assert(filterx_object_truthy(result));
cr_assert(filterx_object_len(json, &len));
cr_assert_eq(len, 1);
_assert_int_value_and_unref(filterx_object_get_subscript(json, foo), 42);
Expand All @@ -247,8 +241,7 @@ Test(filterx_expr, test_filterx_dict_merge)
// $fillable += {"foo": 42};
result = filterx_expr_eval(dict_expr);
cr_assert(result);
cr_assert(filterx_boolean_unwrap(result, &success));
cr_assert(success);
cr_assert(filterx_object_truthy(result));
cr_assert(filterx_object_len(json, &len));
cr_assert_eq(len, 1);
_assert_int_value_and_unref(filterx_object_get_subscript(json, foo), 42);
Expand All @@ -268,8 +261,7 @@ Test(filterx_expr, test_filterx_dict_merge)
// $fillable += {"foo": 420};
result = filterx_expr_eval(dict_expr);
cr_assert(result);
cr_assert(filterx_boolean_unwrap(result, &success));
cr_assert(success);
cr_assert(filterx_object_truthy(result));
cr_assert(filterx_object_len(json, &len));
cr_assert_eq(len, 1);
_assert_int_value_and_unref(filterx_object_get_subscript(json, foo), 420);
Expand All @@ -289,8 +281,7 @@ Test(filterx_expr, test_filterx_dict_merge)
// $fillable += {"bar": 1337};
result = filterx_expr_eval(dict_expr);
cr_assert(result);
cr_assert(filterx_boolean_unwrap(result, &success));
cr_assert(success);
cr_assert(filterx_object_truthy(result));
cr_assert(filterx_object_len(json, &len));
cr_assert_eq(len, 2);
_assert_int_value_and_unref(filterx_object_get_subscript(json, foo), 420);
Expand All @@ -314,8 +305,7 @@ Test(filterx_expr, test_filterx_dict_merge)
// $fillable += {"baz": {"foo": 1}};
result = filterx_expr_eval(dict_expr);
cr_assert(result);
cr_assert(filterx_boolean_unwrap(result, &success));
cr_assert(success);
cr_assert(filterx_object_truthy(result));
cr_assert(filterx_object_len(json, &len));
cr_assert_eq(len, 3);

Expand All @@ -332,8 +322,7 @@ Test(filterx_expr, test_filterx_dict_merge)
// Shallow merge.
result = filterx_expr_eval(dict_expr);
cr_assert(result);
cr_assert(filterx_boolean_unwrap(result, &success));
cr_assert(success);
cr_assert(filterx_object_truthy(result));
cr_assert(filterx_object_len(json, &len));
cr_assert_eq(len, 3);

Expand Down

0 comments on commit 4c81873

Please sign in to comment.