From 4c9aca0cfcd370b3381754ff073917c6fb9a4692 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> Date: Mon, 8 Feb 2010 17:15:44 +0100 Subject: [PATCH] optimization: turn more constants into global statics --- src/shared/proparser/profileevaluator.cpp | 99 ++++++++++++++++------- 1 file changed, 68 insertions(+), 31 deletions(-) diff --git a/src/shared/proparser/profileevaluator.cpp b/src/shared/proparser/profileevaluator.cpp index 90ad91f96c3..c547a3f7f6c 100644 --- a/src/shared/proparser/profileevaluator.cpp +++ b/src/shared/proparser/profileevaluator.cpp @@ -344,9 +344,27 @@ static struct { QString field_sep; QString deppath; QString incpath; + QString strelse; + QString strtrue; + QString strfalse; + QString strunix; + QString strmacx; + QString strqnx6; + QString strmac9; + QString strmac; + QString strwin32; + QString strCONFIG; + QString strARGS; + QString strDot; + QString strDotDot; + QString strever; + QString strforever; + QString strTEMPLATE; + QString strQMAKE_DIR_SEP; QHash<QString, int> expands; QHash<QString, int> functions; QHash<QString, int> varList; + QRegExp reg_variableName; } statics; void ProFileEvaluator::Private::initStatics() @@ -357,6 +375,26 @@ void ProFileEvaluator::Private::initStatics() statics.field_sep = QLatin1String(" "); statics.deppath = QLatin1String("DEPENDPATH"); statics.incpath = QLatin1String("INCLUDEPATH"); + statics.strelse = QLatin1String("else"); + statics.strtrue = QLatin1String("true"); + statics.strfalse = QLatin1String("false"); + statics.strunix = QLatin1String("unix"); + statics.strmacx = QLatin1String("macx"); + statics.strqnx6 = QLatin1String("qnx6"); + statics.strmac9 = QLatin1String("mac9"); + statics.strmac = QLatin1String("mac"); + statics.strwin32 = QLatin1String("win32"); + statics.strCONFIG = QLatin1String("CONFIG"); + statics.strARGS = QLatin1String("ARGS"); + statics.strDot = QLatin1String("."); + statics.strDotDot = QLatin1String(".."); + statics.strever = QLatin1String("ever"); + statics.strforever = QLatin1String("forever"); + statics.strTEMPLATE = QLatin1String("TEMPLATE"); + statics.strQMAKE_DIR_SEP = QLatin1String("QMAKE_DIR_SEP"); + + statics.reg_variableName.setPattern(QLatin1String("\\$\\(.*\\)")); + statics.reg_variableName.setMinimal(true); static const struct { const char * const name; @@ -914,8 +952,7 @@ static QString expandEnvVars(const QString &str) { QString string = str; int rep; - QRegExp reg_variableName(QLatin1String("\\$\\(.*\\)")); - reg_variableName.setMinimal(true); + QRegExp reg_variableName = statics.reg_variableName; // Copy for thread safety while ((rep = reg_variableName.indexIn(string)) != -1) string.replace(rep, reg_variableName.matchedLength(), QString::fromLocal8Bit(qgetenv(string.mid(rep + 2, reg_variableName.matchedLength() - 3).toLatin1().constData()).constData())); @@ -1165,7 +1202,7 @@ void ProFileEvaluator::Private::visitProCondition(ProCondition *cond) { if (!m_skipLevel) { m_hadCondition = true; - if (!cond->text().compare(QLatin1String("else"), Qt::CaseInsensitive)) { + if (!cond->text().compare(statics.strelse, Qt::CaseInsensitive)) { m_sts.condition = !m_sts.prevCondition; } else { m_sts.prevCondition = false; @@ -1307,7 +1344,7 @@ ProItem::ProItemReturn ProFileEvaluator::Private::visitProFile(ProFile *pro) QSet<QString> processed; forever { bool finished = true; - QStringList configs = valuesDirect(QLatin1String("CONFIG")); + QStringList configs = valuesDirect(statics.strCONFIG); for (int i = configs.size() - 1; i >= 0; --i) { const QString config = configs.at(i).toLower(); if (!processed.contains(config)) { @@ -1757,28 +1794,28 @@ QStringList ProFileEvaluator::Private::expandVariableReferences( bool ProFileEvaluator::Private::isActiveConfig(const QString &config, bool regex) { // magic types for easy flipping - if (config == QLatin1String("true")) + if (config == statics.strtrue) return true; - if (config == QLatin1String("false")) + if (config == statics.strfalse) return false; // mkspecs if ((m_option->target_mode == m_option->TARG_MACX_MODE || m_option->target_mode == m_option->TARG_QNX6_MODE || m_option->target_mode == m_option->TARG_UNIX_MODE) - && config == QLatin1String("unix")) + && config == statics.strunix) return true; - if (m_option->target_mode == m_option->TARG_MACX_MODE && config == QLatin1String("macx")) + if (m_option->target_mode == m_option->TARG_MACX_MODE && config == statics.strmacx) return true; - if (m_option->target_mode == m_option->TARG_QNX6_MODE && config == QLatin1String("qnx6")) + if (m_option->target_mode == m_option->TARG_QNX6_MODE && config == statics.strqnx6) return true; - if (m_option->target_mode == m_option->TARG_MAC9_MODE && config == QLatin1String("mac9")) + if (m_option->target_mode == m_option->TARG_MAC9_MODE && config == statics.strmac9) return true; if ((m_option->target_mode == m_option->TARG_MAC9_MODE || m_option->target_mode == m_option->TARG_MACX_MODE) - && config == QLatin1String("mac")) + && config == statics.strmac) return true; - if (m_option->target_mode == m_option->TARG_WIN_MODE && config == QLatin1String("win32")) + if (m_option->target_mode == m_option->TARG_WIN_MODE && config == statics.strwin32) return true; if (regex && (config.contains(QLatin1Char('*')) || config.contains(QLatin1Char('?')))) { @@ -1788,7 +1825,7 @@ bool ProFileEvaluator::Private::isActiveConfig(const QString &config, bool regex return true; // CONFIG variable - foreach (const QString &configValue, m_valuemap.value(QLatin1String("CONFIG"))) { + foreach (const QString &configValue, m_valuemap.value(statics.strCONFIG)) { if (re.exactMatch(configValue)) return true; } @@ -1798,7 +1835,7 @@ bool ProFileEvaluator::Private::isActiveConfig(const QString &config, bool regex return true; // CONFIG variable - foreach (const QString &configValue, m_valuemap.value(QLatin1String("CONFIG"))) { + foreach (const QString &configValue, m_valuemap.value(statics.strCONFIG)) { if (configValue == config) return true; } @@ -1834,7 +1871,7 @@ QStringList ProFileEvaluator::Private::evaluateFunction( args += argumentsList[i]; m_valuemap[QString::number(i+1)] = argumentsList[i]; } - m_valuemap[QLatin1String("ARGS")] = args; + m_valuemap[statics.strARGS] = args; oki = (visitProBlock(funcPtr) != ProItem::ReturnFalse); // True || Return ret = m_returnValue; m_returnValue.clear(); @@ -1958,7 +1995,7 @@ QStringList ProFileEvaluator::Private::evaluateExpandFunction(const QString &fun start = start_str.toInt(&ok); if (!ok) { if (args.count() == 2) { - int dotdot = start_str.indexOf(QLatin1String("..")); + int dotdot = start_str.indexOf(statics.strDotDot); if (dotdot != -1) { start = start_str.left(dotdot).toInt(&ok); if (ok) @@ -2016,7 +2053,7 @@ QStringList ProFileEvaluator::Private::evaluateExpandFunction(const QString &fun bool singleLine = true; if (args.count() > 1) - singleLine = (!args[1].compare(QLatin1String("true"), Qt::CaseInsensitive)); + singleLine = (!args[1].compare(statics.strtrue, Qt::CaseInsensitive)); QFile qfile(resolvePath(file)); if (qfile.open(QIODevice::ReadOnly)) { @@ -2157,7 +2194,7 @@ QStringList ProFileEvaluator::Private::evaluateExpandFunction(const QString &fun } else { bool recursive = false; if (args.count() == 2) - recursive = (!args[1].compare(QLatin1String("true"), Qt::CaseInsensitive) || args[1].toInt()); + recursive = (!args[1].compare(statics.strtrue, Qt::CaseInsensitive) || args[1].toInt()); QStringList dirs; QString r = fixPathToLocalOS(resolvePath(args[0])); int slash = r.lastIndexOf(QDir::separator()); @@ -2176,7 +2213,7 @@ QStringList ProFileEvaluator::Private::evaluateExpandFunction(const QString &fun QDir qdir(dir); for (int i = 0; i < (int)qdir.count(); ++i) { - if (qdir[i] == QLatin1String(".") || qdir[i] == QLatin1String("..")) + if (qdir[i] == statics.strDot || qdir[i] == statics.strDotDot) continue; QString fname = dir + qdir[i]; if (IoUtils::fileType(fname) == IoUtils::FileIsDir) { @@ -2222,8 +2259,8 @@ ProItem::ProItemReturn ProFileEvaluator::Private::evaluateConditionalFunction( if (ret.isEmpty()) { return ProItem::ReturnTrue; } else { - if (ret.first() != QLatin1String("false")) { - if (ret.first() == QLatin1String("true")) { + if (ret.first() != statics.strfalse) { + if (ret.first() == statics.strtrue) { return ProItem::ReturnTrue; } else { bool ok; @@ -2351,12 +2388,12 @@ ProItem::ProItemReturn ProFileEvaluator::Private::evaluateConditionalFunction( if (args.count() == 1) { doVariableReplace(&args[0]); it_list = args[0]; - if (args[0] != QLatin1String("ever")) { + if (args[0] != statics.strever) { logMessage(format("for({var, list|var, forever|ever})" " requires one or two arguments.")); return ProItem::ReturnFalse; } - it_list = QLatin1String("forever"); + it_list = statics.strforever; } else { loop.variable = args[0]; loop.oldVarVal = m_valuemap.value(loop.variable); @@ -2365,10 +2402,10 @@ ProItem::ProItemReturn ProFileEvaluator::Private::evaluateConditionalFunction( } loop.list = m_valuemap.value(it_list); if (loop.list.isEmpty()) { - if (it_list == QLatin1String("forever")) { + if (it_list == statics.strforever) { loop.infinite = true; } else { - int dotdot = it_list.indexOf(QLatin1String("..")); + int dotdot = it_list.indexOf(statics.strDotDot); if (dotdot != -1) { bool ok; int start = it_list.left(dotdot).toInt(&ok); @@ -2497,7 +2534,7 @@ ProItem::ProItemReturn ProFileEvaluator::Private::evaluateConditionalFunction( return ProItem::ReturnFalse; } const QStringList mutuals = args[1].split(QLatin1Char('|')); - const QStringList &configs = valuesDirect(QLatin1String("CONFIG")); + const QStringList &configs = valuesDirect(statics.strCONFIG); for (int i = configs.size() - 1; i >= 0; i--) { for (int mut = 0; mut < mutuals.count(); mut++) { @@ -2640,7 +2677,7 @@ ProItem::ProItemReturn ProFileEvaluator::Private::evaluateConditionalFunction( bool ignore_error = false; if (args.count() == 2) { QString sarg = args[1]; - ignore_error = (!sarg.compare(QLatin1String("true"), Qt::CaseInsensitive) || sarg.toInt()); + ignore_error = (!sarg.compare(statics.strtrue, Qt::CaseInsensitive) || sarg.toInt()); } else if (args.count() != 1) { logMessage(format("load(feature) requires one or two arguments.")); return ProItem::ReturnFalse; @@ -2838,9 +2875,9 @@ QStringList ProFileEvaluator::Private::values(const QString &variableName, QStringList result = place.value(variableName); if (result.isEmpty()) { - if (variableName == QLatin1String("TEMPLATE")) { + if (variableName == statics.strTEMPLATE) { result.append(QLatin1String("app")); - } else if (variableName == QLatin1String("QMAKE_DIR_SEP")) { + } else if (variableName == statics.strQMAKE_DIR_SEP) { result.append(m_option->dirlist_sep); } } @@ -3081,7 +3118,7 @@ QStringList ProFileEvaluator::absoluteFileValues( if (wildcard.contains(QLatin1Char('*')) || wildcard.contains(QLatin1Char('?'))) { QDir theDir(absDir); foreach (const QString &fn, theDir.entryList(QStringList(wildcard))) - if (fn != QLatin1String(".") && fn != QLatin1String("..")) + if (fn != statics.strDot && fn != statics.strDotDot) result << absDir + QLatin1Char('/') + fn; } // else if (acceptMissing) } @@ -3093,7 +3130,7 @@ QStringList ProFileEvaluator::absoluteFileValues( ProFileEvaluator::TemplateType ProFileEvaluator::templateType() { - QStringList templ = values(QLatin1String("TEMPLATE")); + QStringList templ = values(statics.strTEMPLATE); if (templ.count() >= 1) { const QString &t = templ.last(); if (!t.compare(QLatin1String("app"), Qt::CaseInsensitive)) -- GitLab