diff --git a/shared/proparser/profileevaluator.cpp b/shared/proparser/profileevaluator.cpp index 433076a88dc0cb908c8a7e1a8ad930e667d9ec0d..ea280b45b4dace722a69496d8376d7d07f5b09bb 100644 --- a/shared/proparser/profileevaluator.cpp +++ b/shared/proparser/profileevaluator.cpp @@ -821,7 +821,7 @@ bool ProFileEvaluator::Private::visitProValue(ProValue *value) bool ProFileEvaluator::Private::visitProFunction(ProFunction *func) { - if (!m_skipLevel && (!m_updateCondition || m_condition == ConditionFalse)) { + if (!m_updateCondition || m_condition == ConditionFalse) { QString text = func->text(); int lparen = text.indexOf(QLatin1Char('(')); int rparen = text.lastIndexOf(QLatin1Char(')')); @@ -829,10 +829,12 @@ bool ProFileEvaluator::Private::visitProFunction(ProFunction *func) QString arguments = text.mid(lparen + 1, rparen - lparen - 1); QString funcName = text.left(lparen); m_lineNo = func->lineNumber(); - bool result = false; - if (!evaluateConditionalFunction(funcName.trimmed(), arguments, &result)) + bool result; + if (!evaluateConditionalFunction(funcName.trimmed(), arguments, &result)) { + m_invertNext = false; return false; - if (result ^ m_invertNext) + } + if (!m_skipLevel && (result ^ m_invertNext)) m_condition = ConditionTrue; } m_invertNext = false; @@ -1733,6 +1735,8 @@ bool ProFileEvaluator::Private::evaluateConditionalFunction(const QString &funct break; } case T_INCLUDE: { + if (m_skipLevel && !m_cumulative) + break; QString parseInto; if (args.count() == 2) { parseInto = args[1]; @@ -1749,6 +1753,8 @@ bool ProFileEvaluator::Private::evaluateConditionalFunction(const QString &funct break; } case T_LOAD: { + if (m_skipLevel && !m_cumulative) + break; QString parseInto; bool ignore_error = false; if (args.count() == 2) {