Replace this function by {list,concat,set}_expr_remove() to validate expression type. Signed-off-by: Pablo Neira Ayuso --- include/expression.h | 4 +++- src/expression.c | 24 ++++++++++++++++++------ src/segtree.c | 6 +++--- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/include/expression.h b/include/expression.h index ce774fd32887..198ead603da6 100644 --- a/include/expression.h +++ b/include/expression.h @@ -519,21 +519,23 @@ struct expr *range_expr_to_prefix(struct expr *range); extern struct expr *compound_expr_alloc(const struct location *loc, enum expr_types etypes); -extern void compound_expr_remove(struct expr *compound, struct expr *expr); extern void list_expr_sort(struct list_head *head); extern void list_splice_sorted(struct list_head *list, struct list_head *head); extern struct expr *concat_expr_alloc(const struct location *loc); void concat_expr_add(struct expr *concat, struct expr *item); +void concat_expr_remove(struct expr *concat, struct expr *expr); extern struct expr *list_expr_alloc(const struct location *loc); void list_expr_add(struct expr *expr, struct expr *item); +void list_expr_remove(struct expr *expr, struct expr *item); struct expr *list_expr_to_binop(struct expr *expr); extern struct expr *set_expr_alloc(const struct location *loc, const struct set *set); void __set_expr_add(struct expr *set, struct expr *elem); void set_expr_add(struct expr *set, struct expr *elem); +void set_expr_remove(struct expr *expr, struct expr *item); extern void concat_range_aggregate(struct expr *set); extern void interval_map_decompose(struct expr *set); diff --git a/src/expression.c b/src/expression.c index ee1fe34e2de9..582d0e7f8d66 100644 --- a/src/expression.c +++ b/src/expression.c @@ -1048,12 +1048,6 @@ static void compound_expr_print(const struct expr *expr, const char *delim, } } -void compound_expr_remove(struct expr *compound, struct expr *expr) -{ - compound->expr_set.size--; - list_del(&expr->list); -} - static void concat_expr_destroy(struct expr *expr) { compound_expr_destroy(expr); @@ -1247,6 +1241,12 @@ void concat_expr_add(struct expr *concat, struct expr *item) expr_concat->size++; } +void concat_expr_remove(struct expr *concat, struct expr *expr) +{ + expr_concat(concat)->size--; + list_del(&expr->list); +} + static void list_expr_print(const struct expr *expr, struct output_ctx *octx) { compound_expr_print(expr, ",", octx); @@ -1283,6 +1283,12 @@ void list_expr_add(struct expr *expr, struct expr *item) expr_list->size++; } +void list_expr_remove(struct expr *list, struct expr *expr) +{ + expr_list(list)->size--; + list_del(&expr->list); +} + /* list is assumed to have two items at least, otherwise extend this! */ struct expr *list_expr_to_binop(struct expr *expr) { @@ -1433,6 +1439,12 @@ void set_expr_add(struct expr *set, struct expr *elem) expr_set->size++; } +void set_expr_remove(struct expr *set, struct expr *expr) +{ + expr_set(set)->size--; + list_del(&expr->list); +} + static void mapping_expr_print(const struct expr *expr, struct output_ctx *octx) { expr_print(expr->left, octx); diff --git a/src/segtree.c b/src/segtree.c index e6b14f5dd120..88207a3987b8 100644 --- a/src/segtree.c +++ b/src/segtree.c @@ -448,13 +448,13 @@ next: mpz_clear(range); r2 = list_entry(r2_next, typeof(*r2), list); - compound_expr_remove(expr_value(start), r1); + concat_expr_remove(expr_value(start), r1); if (free_r1) expr_free(r1); } - compound_expr_remove(set, start); + set_expr_remove(set, start); expr_free(start); start = NULL; } @@ -584,7 +584,7 @@ void interval_map_decompose(struct expr *set) catchall = i; continue; } - compound_expr_remove(set, i); + set_expr_remove(set, i); elements[n++] = i; } qsort(elements, n, sizeof(elements[0]), expr_value_cmp); -- 2.30.2