From c6f68e6c198e2c4fcb8453a5ea43730d476e3673 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Thu, 19 Mar 2015 09:14:27 +0000 Subject: [PATCH] Prefer processed elements during optimizations. --- src/libutil/expression.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/libutil/expression.c b/src/libutil/expression.c index 91e52b6d7..e103b5b60 100644 --- a/src/libutil/expression.c +++ b/src/libutil/expression.c @@ -531,8 +531,10 @@ err: return FALSE; } -#define CHOSE_OPERAND(e1, e2) (((e1)->p.atom->priority >= (e2)->p.atom->priority) ? \ - (e1) : (e2)) +#define CHOSE_OPERAND(e1, e2) ((e1)->flags & RSPAMD_EXPR_FLAG_PROCESSED ? (e1) : \ + ((e2)->flags & RSPAMD_EXPR_FLAG_PROCESSED) ? (e2) : \ + ((e1)->p.atom->priority >= (e2)->p.atom->priority) ? \ + (e1) : (e2)) #define CHOOSE_REMAIN(e1, e2, es) ((es) == (e1) ? (e2) : (e1)) #define PROCESS_ELT(expr, e) do { \ if (!((e)->flags & RSPAMD_EXPR_FLAG_PROCESSED)) { \ -- 2.39.5