"referenced entity .* not found" message fixed to be fatal
[tac_plus.git] / cfgeval.c
index fcd3a97..1343a9a 100644 (file)
--- a/cfgeval.c
+++ b/cfgeval.c
@@ -379,12 +379,14 @@ struct expr *parent;
        switch (expr->type) {
 
        case S_not:
-           expr_sink_internal(expr->u.not.child, membership, expr /* parent */);
+           if (expr_sink_internal(expr->u.not.child, membership, expr /* parent */))
+               return (1);
            break;
 
        case S_and:
        case S_or:
-           expr_sink_internal(expr->u.and_or.child_first, membership, expr /* parent */);
+           if (expr_sink_internal(expr->u.and_or.child_first, membership, expr /* parent */))
+               return (1);
            break;
 
        case S_user:
@@ -1326,6 +1328,13 @@ top_down:
                    report(LOG_DEBUG, "expr_eval_immediate: bottom_up and_or: full scan: " PF_EXPR,
                            PA_EXPR(expr_single));
 
+               /* It would be nice to pretend that all 'veto' decisions already made in the child
+                * had to set our 'result' to the correct value. But 'consent' decisions don't set
+                * us and the behaviour of auto-set from the child in 'veto' case may get changed
+                * in the future versions.
+                * So we rather don't depend on it.
+                * This overhead doesn't change altgorithmic complexity anyway.
+                */
                result_parent = consent;
                for (expr_child = expr_parent->u.and_or.child_first; expr_child; expr_child = expr_child->next)
                {