diff --git a/src/shared/proparser/qmakebuiltins.cpp b/src/shared/proparser/qmakebuiltins.cpp index 83d018bd81e..834a9726935 100644 --- a/src/shared/proparser/qmakebuiltins.cpp +++ b/src/shared/proparser/qmakebuiltins.cpp @@ -387,16 +387,12 @@ void QMakeEvaluator::populateDeps( } } -ProStringList QMakeEvaluator::evaluateExpandFunction( - const ProKey &func, const ushort *&tokPtr) +ProStringList QMakeEvaluator::evaluateBuiltinExpand( + const ProKey &func, const ProStringList &args) { - QHash::ConstIterator it = - m_functionDefs.replaceFunctions.constFind(func); - if (it != m_functionDefs.replaceFunctions.constEnd()) { - const QList args = prepareFunctionArgs(tokPtr); - traceMsg("calling $$%s(%s)", dbgKey(func), dbgStrListList(args)); - return evaluateFunction(*it, args, 0); - } + ProStringList ret; + + traceMsg("calling built-in $$%s(%s)", dbgKey(func), dbgSepStrList(args)); ExpandFunc func_t = ExpandFunc(statics.expands.value(func)); if (func_t == 0) { @@ -408,12 +404,6 @@ ProStringList QMakeEvaluator::evaluateExpandFunction( deprecationWarning(fL1S("Using uppercased builtin functions is deprecated.")); } } - - //why don't the builtin functions just use args_list? --Sam - const ProStringList &args = expandVariableReferences(tokPtr, 5, true); - traceMsg("calling built-in $$%s(%s)", dbgKey(func), dbgSepStrList(args)); - ProStringList ret; - switch (func_t) { case E_BASENAME: case E_DIRNAME: @@ -1052,23 +1042,12 @@ ProStringList QMakeEvaluator::evaluateExpandFunction( return ret; } -QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateConditionalFunction( - const ProKey &function, const ushort *&tokPtr) +QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional( + const ProKey &function, const ProStringList &args) { - QHash::ConstIterator it = - m_functionDefs.testFunctions.constFind(function); - if (it != m_functionDefs.testFunctions.constEnd()) { - const QList args = prepareFunctionArgs(tokPtr); - traceMsg("calling %s(%s)", dbgKey(function), dbgStrListList(args)); - return evaluateBoolFunction(*it, args, function); - } - - TestFunc func_t = (TestFunc)statics.functions.value(function); - - //why don't the builtin functions just use args_list? --Sam - const ProStringList &args = expandVariableReferences(tokPtr, 5, true); traceMsg("calling built-in %s(%s)", dbgKey(function), dbgSepStrList(args)); + TestFunc func_t = (TestFunc)statics.functions.value(function); switch (func_t) { case T_DEFINED: { if (args.count() < 1 || args.count() > 2) { diff --git a/src/shared/proparser/qmakeevaluator.cpp b/src/shared/proparser/qmakeevaluator.cpp index b319606af24..e39fe7667db 100644 --- a/src/shared/proparser/qmakeevaluator.cpp +++ b/src/shared/proparser/qmakeevaluator.cpp @@ -1616,6 +1616,36 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBoolFunction( return ReturnFalse; } +QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateConditionalFunction( + const ProKey &func, const ushort *&tokPtr) +{ + QHash::ConstIterator it = + m_functionDefs.testFunctions.constFind(func); + if (it != m_functionDefs.testFunctions.constEnd()) { + const QList args = prepareFunctionArgs(tokPtr); + traceMsg("calling %s(%s)", dbgKey(func), dbgStrListList(args)); + return evaluateBoolFunction(*it, args, func); + } + + //why don't the builtin functions just use args_list? --Sam + return evaluateBuiltinConditional(func, expandVariableReferences(tokPtr, 5, true)); +} + +ProStringList QMakeEvaluator::evaluateExpandFunction( + const ProKey &func, const ushort *&tokPtr) +{ + QHash::ConstIterator it = + m_functionDefs.replaceFunctions.constFind(func); + if (it != m_functionDefs.replaceFunctions.constEnd()) { + const QList args = prepareFunctionArgs(tokPtr); + traceMsg("calling $$%s(%s)", dbgKey(func), dbgStrListList(args)); + return evaluateFunction(*it, args, 0); + } + + //why don't the builtin functions just use args_list? --Sam + return evaluateBuiltinExpand(func, expandVariableReferences(tokPtr, 5, true)); +} + bool QMakeEvaluator::evaluateConditional(const QString &cond, const QString &where, int line) { bool ret = false; diff --git a/src/shared/proparser/qmakeevaluator.h b/src/shared/proparser/qmakeevaluator.h index ec7bf4f562d..2ebe1a9b10e 100644 --- a/src/shared/proparser/qmakeevaluator.h +++ b/src/shared/proparser/qmakeevaluator.h @@ -178,6 +178,9 @@ public: ProStringList evaluateExpandFunction(const ProKey &function, const ushort *&tokPtr); VisitReturn evaluateConditionalFunction(const ProKey &function, const ushort *&tokPtr); + ProStringList evaluateBuiltinExpand(const ProKey &function, const ProStringList &args); + VisitReturn evaluateBuiltinConditional(const ProKey &function, const ProStringList &args); + bool evaluateConditional(const QString &cond, const QString &where, int line = -1); #ifdef PROEVALUATOR_FULL void checkRequirements(const ProStringList &deps);