Commit b4ac7f6d authored by Oswald Buddenhagen's avatar Oswald Buddenhagen
Browse files

fix error() not propagating through if()



if() would simply "downgrade" a fatal error to a false condition, which
is certainly not expected.

Change-Id: Ie9c54f2bddf588856498bf795007b341b7c9363a
Reviewed-by: Joerg Bornemann's avatarJoerg Bornemann <joerg.bornemann@qt.io>
(cherry picked from qtbase/b27d4835c2ae0d8767ca914acb72a4bdcea6fc85)
Reviewed-by: Jake Petroules's avatarJake Petroules <jake.petroules@qt.io>
parent fcbaf241
...@@ -1215,8 +1215,8 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional( ...@@ -1215,8 +1215,8 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
evalError(fL1S("if(condition) requires one argument.")); evalError(fL1S("if(condition) requires one argument."));
return ReturnFalse; return ReturnFalse;
} }
return returnBool(evaluateConditional(args.at(0).toQString(), return evaluateConditional(args.at(0).toQString(),
m_current.pro->fileName(), m_current.line)); m_current.pro->fileName(), m_current.line);
} }
case T_CONFIG: { case T_CONFIG: {
if (args.count() < 1 || args.count() > 2) { if (args.count() < 1 || args.count() > 2) {
......
...@@ -1750,13 +1750,14 @@ ProStringList QMakeEvaluator::evaluateExpandFunction( ...@@ -1750,13 +1750,14 @@ ProStringList QMakeEvaluator::evaluateExpandFunction(
return ProStringList(); return ProStringList();
} }
bool QMakeEvaluator::evaluateConditional(const QString &cond, const QString &where, int line) QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateConditional(
const QString &cond, const QString &where, int line)
{ {
bool ret = false; VisitReturn ret = ReturnFalse;
ProFile *pro = m_parser->parsedProBlock(cond, where, line, QMakeParser::TestGrammar); ProFile *pro = m_parser->parsedProBlock(cond, where, line, QMakeParser::TestGrammar);
if (pro->isOk()) { if (pro->isOk()) {
m_locationStack.push(m_current); m_locationStack.push(m_current);
ret = visitProBlock(pro, pro->tokPtr()) == ReturnTrue; ret = visitProBlock(pro, pro->tokPtr());
m_current = m_locationStack.pop(); m_current = m_locationStack.pop();
} }
pro->deref(); pro->deref();
...@@ -1768,7 +1769,7 @@ void QMakeEvaluator::checkRequirements(const ProStringList &deps) ...@@ -1768,7 +1769,7 @@ void QMakeEvaluator::checkRequirements(const ProStringList &deps)
{ {
ProStringList &failed = valuesRef(ProKey("QMAKE_FAILED_REQUIREMENTS")); ProStringList &failed = valuesRef(ProKey("QMAKE_FAILED_REQUIREMENTS"));
foreach (const ProString &dep, deps) foreach (const ProString &dep, deps)
if (!evaluateConditional(dep.toQString(), m_current.pro->fileName(), m_current.line)) if (evaluateConditional(dep.toQString(), m_current.pro->fileName(), m_current.line) != ReturnTrue)
failed << dep; failed << dep;
} }
#endif #endif
......
...@@ -211,7 +211,7 @@ public: ...@@ -211,7 +211,7 @@ public:
ProStringList evaluateBuiltinExpand(int func_t, const ProKey &function, const ProStringList &args); ProStringList evaluateBuiltinExpand(int func_t, const ProKey &function, const ProStringList &args);
VisitReturn evaluateBuiltinConditional(int func_t, const ProKey &function, const ProStringList &args); VisitReturn evaluateBuiltinConditional(int func_t, const ProKey &function, const ProStringList &args);
bool evaluateConditional(const QString &cond, const QString &where, int line = -1); VisitReturn evaluateConditional(const QString &cond, const QString &where, int line = -1);
#ifdef PROEVALUATOR_FULL #ifdef PROEVALUATOR_FULL
void checkRequirements(const ProStringList &deps); void checkRequirements(const ProStringList &deps);
#endif #endif
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment