void pattern_init_expr(struct pattern_expr *expr);
struct pattern_expr *pattern_lookup_expr(struct pattern_head *head, struct pat_ref *ref);
struct pattern_expr *pattern_new_expr(struct pattern_head *head, struct pat_ref *ref,
- char **err, int *reuse);
+ int patflags, char **err, int *reuse);
struct sample_data **pattern_find_smp(struct pattern_expr *expr, struct pat_ref_elt *elt);
int pattern_delete(struct pattern_expr *expr, struct pat_ref_elt *ref);
}
/* Create new pattern expression associated to this reference. */
- pattern_expr = pattern_new_expr(&expr->pat, ref, err, NULL);
+ pattern_expr = pattern_new_expr(&expr->pat, ref, patflags, err, NULL);
if (!pattern_expr)
goto out_free_expr;
- /* Copy the pattern matching and indexing flags. */
- pattern_expr->mflags = patflags;
-
/* now parse all patterns */
while (**args) {
arg = *args;
* flag <reuse> is set.
*/
struct pattern_expr *pattern_new_expr(struct pattern_head *head, struct pat_ref *ref,
- char **err, int *reuse)
+ int patflags, char **err, int *reuse)
{
struct pattern_expr *expr;
struct pattern_expr_list *list;
list_for_each_entry(expr, &ref->pat, list)
if (expr->pat_head->index == head->index &&
expr->pat_head->parse == head->parse &&
- expr->pat_head->parse_smp == head->parse_smp)
+ expr->pat_head->parse_smp == head->parse_smp &&
+ expr->mflags == patflags)
break;
if (&expr->list == &ref->pat)
expr = NULL;
/* Initialize this new expr. */
pattern_init_expr(expr);
+ /* Copy the pattern matching and indexing flags. */
+ expr->mflags = patflags;
+
/* This new pattern expression reference one of his heads. */
expr->pat_head = head;
*/
expr = pattern_lookup_expr(head, ref);
if (!expr || (expr->mflags != patflags)) {
- expr = pattern_new_expr(head, ref, err, &reuse);
+ expr = pattern_new_expr(head, ref, patflags, err, &reuse);
if (!expr)
return 0;
- expr->mflags = patflags;
}
/* The returned expression may be not empty, because the function