introduce ProValueMap typedef for brevity's sake

Change-Id: I41b7202acb2889d217d1f437050443bea853ee87
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
This commit is contained in:
Oswald Buddenhagen
2012-05-04 21:16:56 +02:00
parent 55cad4a424
commit 5a6625245b
5 changed files with 30 additions and 31 deletions

View File

@@ -127,6 +127,8 @@ public:
void removeDuplicates(); void removeDuplicates();
}; };
typedef QHash<ProString, ProStringList> ProValueMap;
// These token definitions affect both ProFileEvaluator and ProWriter // These token definitions affect both ProFileEvaluator and ProWriter
enum ProToken { enum ProToken {
TokTerminator = 0, // end of stream (possibly not included in length; must be zero) TokTerminator = 0, // end of stream (possibly not included in length; must be zero)

View File

@@ -192,7 +192,7 @@ void QMakeEvaluator::runProcess(QProcess *proc, const QString &command,
void QMakeEvaluator::populateDeps( void QMakeEvaluator::populateDeps(
const ProStringList &deps, const ProString &prefix, const ProStringList &deps, const ProString &prefix,
QHash<ProString, QSet<ProString> > &dependencies, QHash<ProString, ProStringList> &dependees, QHash<ProString, QSet<ProString> > &dependencies, ProValueMap &dependees,
ProStringList &rootSet) const ProStringList &rootSet) const
{ {
foreach (const ProString &item, deps) foreach (const ProString &item, deps)
@@ -413,7 +413,7 @@ ProStringList QMakeEvaluator::evaluateExpandFunction(
if (args.count() != 2) { if (args.count() != 2) {
evalError(fL1S("fromfile(file, variable) requires two arguments.")); evalError(fL1S("fromfile(file, variable) requires two arguments."));
} else { } else {
QHash<ProString, ProStringList> vars; ProValueMap vars;
QString fn = resolvePath(m_option->expandEnvVars(args.at(0).toQString(m_tmp1))); QString fn = resolvePath(m_option->expandEnvVars(args.at(0).toQString(m_tmp1)));
fn.detach(); fn.detach();
if (evaluateFileInto(fn, QMakeHandler::EvalAuxFile, &vars, EvalProOnly)) if (evaluateFileInto(fn, QMakeHandler::EvalAuxFile, &vars, EvalProOnly))
@@ -607,7 +607,7 @@ ProStringList QMakeEvaluator::evaluateExpandFunction(
evalError(fL1S("%1(var, prefix) requires one or two arguments").arg(func.toQString(m_tmp1))); evalError(fL1S("%1(var, prefix) requires one or two arguments").arg(func.toQString(m_tmp1)));
} else { } else {
QHash<ProString, QSet<ProString> > dependencies; QHash<ProString, QSet<ProString> > dependencies;
QHash<ProString, ProStringList> dependees; ProValueMap dependees;
ProStringList rootSet; ProStringList rootSet;
ProStringList orgList = valuesDirect(args.at(0)); ProStringList orgList = valuesDirect(args.at(0));
populateDeps(orgList, (args.count() < 2 ? ProString() : args.at(1)), populateDeps(orgList, (args.count() < 2 ? ProString() : args.at(1)),
@@ -680,7 +680,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateConditionalFunction(
} }
const ProString &var = map(args.at(0)); const ProString &var = map(args.at(0));
for (int i = m_valuemapStack.size(); --i > 0; ) { for (int i = m_valuemapStack.size(); --i > 0; ) {
QHash<ProString, ProStringList>::Iterator it = m_valuemapStack[i].find(var); ProValueMap::Iterator it = m_valuemapStack[i].find(var);
if (it != m_valuemapStack.at(i).end()) { if (it != m_valuemapStack.at(i).end()) {
if (it->constBegin() == statics.fakeValue.constBegin()) { if (it->constBegin() == statics.fakeValue.constBegin()) {
// This is stupid, but qmake doesn't propagate deletions // This is stupid, but qmake doesn't propagate deletions
@@ -700,7 +700,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateConditionalFunction(
if (args.count() < 2 || args.count() > 3) { if (args.count() < 2 || args.count() > 3) {
evalError(fL1S("infile(file, var, [values]) requires two or three arguments.")); evalError(fL1S("infile(file, var, [values]) requires two or three arguments."));
} else { } else {
QHash<ProString, ProStringList> vars; ProValueMap vars;
QString fn = resolvePath(m_option->expandEnvVars(args.at(0).toQString(m_tmp1))); QString fn = resolvePath(m_option->expandEnvVars(args.at(0).toQString(m_tmp1)));
fn.detach(); fn.detach();
if (!evaluateFileInto(fn, QMakeHandler::EvalAuxFile, &vars, EvalProOnly)) if (!evaluateFileInto(fn, QMakeHandler::EvalAuxFile, &vars, EvalProOnly))
@@ -941,8 +941,8 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateConditionalFunction(
.arg(function.toQString(m_tmp1))); .arg(function.toQString(m_tmp1)));
return ReturnFalse; return ReturnFalse;
} }
QHash<ProString, ProStringList> *hsh; ProValueMap *hsh;
QHash<ProString, ProStringList>::Iterator it; ProValueMap::Iterator it;
const ProString &var = map(args.at(0)); const ProString &var = map(args.at(0));
if (!(hsh = findValues(var, &it))) if (!(hsh = findValues(var, &it)))
return ReturnFalse; return ReturnFalse;
@@ -960,8 +960,8 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateConditionalFunction(
.arg(function.toQString(m_tmp1))); .arg(function.toQString(m_tmp1)));
return ReturnFalse; return ReturnFalse;
} }
QHash<ProString, ProStringList> *hsh; ProValueMap *hsh;
QHash<ProString, ProStringList>::Iterator it; ProValueMap::Iterator it;
const ProString &var = map(args.at(0)); const ProString &var = map(args.at(0));
if (!(hsh = findValues(var, &it))) if (!(hsh = findValues(var, &it)))
return ReturnFalse; return ReturnFalse;
@@ -991,11 +991,11 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateConditionalFunction(
if (parseInto.isEmpty()) { if (parseInto.isEmpty()) {
ok = evaluateFile(fn, QMakeHandler::EvalIncludeFile, LoadProOnly); ok = evaluateFile(fn, QMakeHandler::EvalIncludeFile, LoadProOnly);
} else { } else {
QHash<ProString, ProStringList> symbols; ProValueMap symbols;
if ((ok = evaluateFileInto(fn, QMakeHandler::EvalAuxFile, if ((ok = evaluateFileInto(fn, QMakeHandler::EvalAuxFile,
&symbols, EvalWithSetup))) { &symbols, EvalWithSetup))) {
QHash<ProString, ProStringList> newMap; ProValueMap newMap;
for (QHash<ProString, ProStringList>::ConstIterator for (ProValueMap::ConstIterator
it = m_valuemapStack.top().constBegin(), it = m_valuemapStack.top().constBegin(),
end = m_valuemapStack.top().constEnd(); end = m_valuemapStack.top().constEnd();
it != end; ++it) { it != end; ++it) {
@@ -1005,7 +1005,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateConditionalFunction(
|| ky.at(parseInto.length()) == QLatin1Char('.')))) || ky.at(parseInto.length()) == QLatin1Char('.'))))
newMap[it.key()] = it.value(); newMap[it.key()] = it.value();
} }
for (QHash<ProString, ProStringList>::ConstIterator it = symbols.constBegin(); for (ProValueMap::ConstIterator it = symbols.constBegin();
it != symbols.constEnd(); ++it) { it != symbols.constEnd(); ++it) {
const QString &ky = it.key().toQString(m_tmp1); const QString &ky = it.key().toQString(m_tmp1);
if (!ky.startsWith(QLatin1Char('.'))) if (!ky.startsWith(QLatin1Char('.')))

View File

@@ -164,7 +164,7 @@ QMakeEvaluator::QMakeEvaluator(QMakeGlobals *option,
m_skipLevel = 0; m_skipLevel = 0;
m_loopLevel = 0; m_loopLevel = 0;
m_listCount = 0; m_listCount = 0;
m_valuemapStack.push(QHash<ProString, ProStringList>()); m_valuemapStack.push(ProValueMap());
} }
QMakeEvaluator::~QMakeEvaluator() QMakeEvaluator::~QMakeEvaluator()
@@ -880,7 +880,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::visitProFile(
} }
if (!qmake_cache.isEmpty()) { if (!qmake_cache.isEmpty()) {
qmake_cache = resolvePath(qmake_cache); qmake_cache = resolvePath(qmake_cache);
QHash<ProString, ProStringList> cache_valuemap; ProValueMap cache_valuemap;
if (evaluateFileInto(qmake_cache, QMakeHandler::EvalConfigFile, if (evaluateFileInto(qmake_cache, QMakeHandler::EvalConfigFile,
&cache_valuemap, EvalProOnly)) { &cache_valuemap, EvalProOnly)) {
if (m_option->qmakespec.isEmpty()) { if (m_option->qmakespec.isEmpty()) {
@@ -1457,7 +1457,7 @@ bool QMakeEvaluator::modesForGenerator(const QString &gen,
void QMakeEvaluator::validateModes() const void QMakeEvaluator::validateModes() const
{ {
if (m_option->target_mode == QMakeGlobals::TARG_UNKNOWN_MODE) { if (m_option->target_mode == QMakeGlobals::TARG_UNKNOWN_MODE) {
const QHash<ProString, ProStringList> &vals = const ProValueMap &vals =
m_option->base_valuemap.isEmpty() ? m_valuemapStack[0] : m_option->base_valuemap; m_option->base_valuemap.isEmpty() ? m_valuemapStack[0] : m_option->base_valuemap;
QMakeGlobals::TARG_MODE target_mode; QMakeGlobals::TARG_MODE target_mode;
const ProStringList &gen = vals.value(ProString("MAKEFILE_GENERATOR")); const ProStringList &gen = vals.value(ProString("MAKEFILE_GENERATOR"));
@@ -1597,7 +1597,7 @@ ProStringList QMakeEvaluator::evaluateFunction(
evalError(fL1S("ran into infinite recursion (depth > 100).")); evalError(fL1S("ran into infinite recursion (depth > 100)."));
oki = false; oki = false;
} else { } else {
m_valuemapStack.push(QHash<ProString, ProStringList>()); m_valuemapStack.push(ProValueMap());
m_locationStack.push(m_current); m_locationStack.push(m_current);
int loopLevel = m_loopLevel; int loopLevel = m_loopLevel;
m_loopLevel = 0; m_loopLevel = 0;
@@ -1699,11 +1699,10 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateConditionalFunction(
return evaluateConditionalFunction(function, expandVariableReferences(tokPtr, 5, true)); return evaluateConditionalFunction(function, expandVariableReferences(tokPtr, 5, true));
} }
QHash<ProString, ProStringList> *QMakeEvaluator::findValues( ProValueMap *QMakeEvaluator::findValues(const ProString &variableName, ProValueMap::Iterator *rit)
const ProString &variableName, QHash<ProString, ProStringList>::Iterator *rit)
{ {
for (int i = m_valuemapStack.size(); --i >= 0; ) { for (int i = m_valuemapStack.size(); --i >= 0; ) {
QHash<ProString, ProStringList>::Iterator it = m_valuemapStack[i].find(variableName); ProValueMap::Iterator it = m_valuemapStack[i].find(variableName);
if (it != m_valuemapStack[i].end()) { if (it != m_valuemapStack[i].end()) {
if (it->constBegin() == statics.fakeValue.constBegin()) if (it->constBegin() == statics.fakeValue.constBegin())
return 0; return 0;
@@ -1716,14 +1715,14 @@ QHash<ProString, ProStringList> *QMakeEvaluator::findValues(
ProStringList &QMakeEvaluator::valuesRef(const ProString &variableName) ProStringList &QMakeEvaluator::valuesRef(const ProString &variableName)
{ {
QHash<ProString, ProStringList>::Iterator it = m_valuemapStack.top().find(variableName); ProValueMap::Iterator it = m_valuemapStack.top().find(variableName);
if (it != m_valuemapStack.top().end()) { if (it != m_valuemapStack.top().end()) {
if (it->constBegin() == statics.fakeValue.constBegin()) if (it->constBegin() == statics.fakeValue.constBegin())
it->clear(); it->clear();
return *it; return *it;
} }
for (int i = m_valuemapStack.size() - 1; --i >= 0; ) { for (int i = m_valuemapStack.size() - 1; --i >= 0; ) {
QHash<ProString, ProStringList>::ConstIterator it = m_valuemapStack.at(i).constFind(variableName); ProValueMap::ConstIterator it = m_valuemapStack.at(i).constFind(variableName);
if (it != m_valuemapStack.at(i).constEnd()) { if (it != m_valuemapStack.at(i).constEnd()) {
ProStringList &ret = m_valuemapStack.top()[variableName]; ProStringList &ret = m_valuemapStack.top()[variableName];
if (it->constBegin() != statics.fakeValue.constBegin()) if (it->constBegin() != statics.fakeValue.constBegin())
@@ -1737,7 +1736,7 @@ ProStringList &QMakeEvaluator::valuesRef(const ProString &variableName)
ProStringList QMakeEvaluator::valuesDirect(const ProString &variableName) const ProStringList QMakeEvaluator::valuesDirect(const ProString &variableName) const
{ {
for (int i = m_valuemapStack.size(); --i >= 0; ) { for (int i = m_valuemapStack.size(); --i >= 0; ) {
QHash<ProString, ProStringList>::ConstIterator it = m_valuemapStack.at(i).constFind(variableName); ProValueMap::ConstIterator it = m_valuemapStack.at(i).constFind(variableName);
if (it != m_valuemapStack.at(i).constEnd()) { if (it != m_valuemapStack.at(i).constEnd()) {
if (it->constBegin() == statics.fakeValue.constBegin()) if (it->constBegin() == statics.fakeValue.constBegin())
break; break;
@@ -1953,7 +1952,7 @@ bool QMakeEvaluator::evaluateFeatureFile(const QString &fileName)
bool QMakeEvaluator::evaluateFileInto( bool QMakeEvaluator::evaluateFileInto(
const QString &fileName, QMakeHandler::EvalFileType type, const QString &fileName, QMakeHandler::EvalFileType type,
QHash<ProString, ProStringList> *values, EvalIntoMode mode) ProValueMap *values, EvalIntoMode mode)
{ {
QMakeEvaluator visitor(m_option, m_parser, m_handler); QMakeEvaluator visitor(m_option, m_parser, m_handler);
#ifdef PROEVALUATOR_CUMULATIVE #ifdef PROEVALUATOR_CUMULATIVE

View File

@@ -112,8 +112,7 @@ public:
void visitProVariable(ushort tok, const ProStringList &curr, const ushort *&tokPtr); void visitProVariable(ushort tok, const ProStringList &curr, const ushort *&tokPtr);
static const ProString &map(const ProString &var); static const ProString &map(const ProString &var);
QHash<ProString, ProStringList> *findValues(const ProString &variableName, ProValueMap *findValues(const ProString &variableName, ProValueMap::Iterator *it);
QHash<ProString, ProStringList>::Iterator *it);
ProStringList valuesDirect(const ProString &variableName) const; ProStringList valuesDirect(const ProString &variableName) const;
ProStringList split_value_list(const QString &vals, const ProFile *source = 0); ProStringList split_value_list(const QString &vals, const ProFile *source = 0);
@@ -133,7 +132,7 @@ public:
bool evaluateFeatureFile(const QString &fileName); bool evaluateFeatureFile(const QString &fileName);
enum EvalIntoMode { EvalProOnly, EvalWithSetup }; enum EvalIntoMode { EvalProOnly, EvalWithSetup };
bool evaluateFileInto(const QString &fileName, QMakeHandler::EvalFileType type, bool evaluateFileInto(const QString &fileName, QMakeHandler::EvalFileType type,
QHash<ProString, ProStringList> *values, // output-only ProValueMap *values, // output-only
EvalIntoMode mode); EvalIntoMode mode);
void evalError(const QString &msg) const; void evalError(const QString &msg) const;
@@ -162,8 +161,7 @@ public:
void populateDeps( void populateDeps(
const ProStringList &deps, const ProString &prefix, const ProStringList &deps, const ProString &prefix,
QHash<ProString, QSet<ProString> > &dependencies, QHash<ProString, QSet<ProString> > &dependencies,
QHash<ProString, ProStringList> &dependees, ProValueMap &dependees, ProStringList &rootSet) const;
ProStringList &rootSet) const;
QString fixPathToLocalOS(const QString &str) const; QString fixPathToLocalOS(const QString &str) const;
@@ -195,7 +193,7 @@ public:
int m_listCount; int m_listCount;
ProFunctionDefs m_functionDefs; ProFunctionDefs m_functionDefs;
ProStringList m_returnValue; ProStringList m_returnValue;
QStack<QHash<ProString, ProStringList> > m_valuemapStack; // VariableName must be us-ascii, the content however can be non-us-ascii. QStack<ProValueMap> m_valuemapStack; // VariableName must be us-ascii, the content however can be non-us-ascii.
QString m_tmp1, m_tmp2, m_tmp3, m_tmp[2]; // Temporaries for efficient toQString QString m_tmp1, m_tmp2, m_tmp3, m_tmp[2]; // Temporaries for efficient toQString
QMakeGlobals *m_option; QMakeGlobals *m_option;

View File

@@ -79,7 +79,7 @@ private:
QString getEnv(const QString &) const; QString getEnv(const QString &) const;
QStringList getPathListEnv(const QString &var) const; QStringList getPathListEnv(const QString &var) const;
QHash<ProString, ProStringList> base_valuemap; // Cached results of qmake.conf, .qmake.cache & default_pre.prf ProValueMap base_valuemap; // Cached results of qmake.conf, .qmake.cache & default_pre.prf
ProFunctionDefs base_functions; ProFunctionDefs base_functions;
QStringList feature_roots; QStringList feature_roots;
QString qmakespec_name; QString qmakespec_name;