forked from qt-creator/qt-creator
short-cut evaluation inside if() tests
this is consistent with the top-level scope evaluation.
This commit is contained in:
@@ -2503,6 +2503,8 @@ ProItem::ProItemReturn ProFileEvaluator::Private::evaluateConditionalFunction(
|
|||||||
logMessage(format("unexpected next()."));
|
logMessage(format("unexpected next()."));
|
||||||
return ProItem::ReturnFalse;
|
return ProItem::ReturnFalse;
|
||||||
case T_IF: {
|
case T_IF: {
|
||||||
|
if (m_skipLevel && !m_cumulative)
|
||||||
|
return ProItem::ReturnFalse;
|
||||||
if (args.count() != 1) {
|
if (args.count() != 1) {
|
||||||
logMessage(format("if(condition) requires one argument."));
|
logMessage(format("if(condition) requires one argument."));
|
||||||
return ProItem::ReturnFalse;
|
return ProItem::ReturnFalse;
|
||||||
@@ -2560,19 +2562,13 @@ ProItem::ProItemReturn ProFileEvaluator::Private::evaluateConditionalFunction(
|
|||||||
args += c;
|
args += c;
|
||||||
}
|
}
|
||||||
if (!parens && (isOp || d == ed)) {
|
if (!parens && (isOp || d == ed)) {
|
||||||
// Yes, qmake doesn't shortcut evaluations here. We can't, either,
|
if (m_cumulative || (orOp != ret)) {
|
||||||
// as some test functions have side effects.
|
if (isFunc)
|
||||||
bool success;
|
ret = evaluateConditionalFunction(test, args);
|
||||||
if (isFunc) {
|
else
|
||||||
success = evaluateConditionalFunction(test, args);
|
ret = isActiveConfig(test, true);
|
||||||
} else {
|
ret ^= invert;
|
||||||
success = isActiveConfig(test, true);
|
|
||||||
}
|
}
|
||||||
success ^= invert;
|
|
||||||
if (orOp)
|
|
||||||
ret |= success;
|
|
||||||
else
|
|
||||||
ret &= success;
|
|
||||||
orOp = (c == '|');
|
orOp = (c == '|');
|
||||||
invert = false;
|
invert = false;
|
||||||
isFunc = false;
|
isFunc = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user