diff --git a/src/eval.c b/src/eval.c index c3805f9..a3ba388 100644 --- a/src/eval.c +++ b/src/eval.c @@ -130,10 +130,15 @@ int _eval_node_matches(pattern_node *node, eval *eval){ } int _eval_foreach_check_node(void *data, va_list args){ + int inverted_matches = 1; int return_code = 0; pattern_node* node = data; eval* evl = va_arg(args, eval*); - if(_eval_node_matches(node, evl)){ + while(node && node->invert && inverted_matches) { + inverted_matches &= !_eval_node_matches(node, evl); + node = _eval_pattern_node_get_next(node); + } + if(inverted_matches && _eval_node_matches(node, evl)){ return_code = _eval_pairmap_add_node(evl->set_next, _eval_pattern_node_get_next(node)) == LIBLEX_SUCCESS ? 0 : EVAL_FOREACH_MALLOC; if(return_code == 0){ evl->matched++;