From 0682dae77c62103b68e71b7e758ba5789867954b Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> Date: Mon, 7 Dec 2009 20:32:36 +0100 Subject: [PATCH] ProfileEvaluator::Option => ProfileOption makes forward delcs in headers possible --- src/plugins/qt4projectmanager/profilereader.h | 2 +- src/shared/proparser/profileevaluator.cpp | 41 ++++---- src/shared/proparser/profileevaluator.h | 94 ++++++++++--------- 3 files changed, 71 insertions(+), 66 deletions(-) diff --git a/src/plugins/qt4projectmanager/profilereader.h b/src/plugins/qt4projectmanager/profilereader.h index 09782a0b38d..06c1d13598b 100644 --- a/src/plugins/qt4projectmanager/profilereader.h +++ b/src/plugins/qt4projectmanager/profilereader.h @@ -67,7 +67,7 @@ private: private: QMap<QString, ProFile *> m_includeFiles; QList<ProFile *> m_proFiles; - ProFileEvaluator::Option m_option; + ProFileOption m_option; }; } // namespace Internal diff --git a/src/shared/proparser/profileevaluator.cpp b/src/shared/proparser/profileevaluator.cpp index 0b48e57693b..035e7d4c234 100644 --- a/src/shared/proparser/profileevaluator.cpp +++ b/src/shared/proparser/profileevaluator.cpp @@ -85,11 +85,12 @@ static void clearFunctions(ProFileEvaluator::FunctionDefs *defs) /////////////////////////////////////////////////////////////////////// // -// Option +// ProFileOption // /////////////////////////////////////////////////////////////////////// -ProFileEvaluator::Option::Option() +// ProFileOption +ProFileOption::ProFileOption() { #ifdef Q_OS_WIN dirlist_sep = QLatin1Char(';'); @@ -113,12 +114,12 @@ ProFileEvaluator::Option::Option() field_sep = QLatin1String(" "); } -ProFileEvaluator::Option::~Option() +ProFileOption::~ProFileOption() { clearFunctions(&base_functions); } -QString ProFileEvaluator::Option::field_sep; +QString ProFileOption::field_sep; /////////////////////////////////////////////////////////////////////// // @@ -129,7 +130,7 @@ QString ProFileEvaluator::Option::field_sep; class ProFileEvaluator::Private : public AbstractProItemVisitor { public: - Private(ProFileEvaluator *q_, ProFileEvaluator::Option *option); + Private(ProFileEvaluator *q_, ProFileOption *option); ~Private(); ProFileEvaluator *q; @@ -248,7 +249,7 @@ public: QStringList m_removeUserConfigCmdArgs; bool m_parsePreAndPostFiles; - Option *m_option; + ProFileOption *m_option; }; #if !defined(__GNUC__) || __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 3) @@ -256,7 +257,7 @@ Q_DECLARE_TYPEINFO(ProFileEvaluator::Private::State, Q_PRIMITIVE_TYPE); Q_DECLARE_TYPEINFO(ProFileEvaluator::Private::ProLoop, Q_MOVABLE_TYPE); #endif -ProFileEvaluator::Private::Private(ProFileEvaluator *q_, ProFileEvaluator::Option *option) +ProFileEvaluator::Private::Private(ProFileEvaluator *q_, ProFileOption *option) : q(q_), m_option(option) { // Configuration, more or less @@ -1315,22 +1316,22 @@ QStringList ProFileEvaluator::Private::qmakeFeaturePaths() const QString features_concat = QLatin1String("/features"); QStringList concat; switch (m_option->target_mode) { - case Option::TARG_MACX_MODE: + case ProFileOption::TARG_MACX_MODE: concat << QLatin1String("/features/mac"); concat << QLatin1String("/features/macx"); concat << QLatin1String("/features/unix"); break; - case Option::TARG_UNIX_MODE: + case ProFileOption::TARG_UNIX_MODE: concat << QLatin1String("/features/unix"); break; - case Option::TARG_WIN_MODE: + case ProFileOption::TARG_WIN_MODE: concat << QLatin1String("/features/win32"); break; - case Option::TARG_MAC9_MODE: + case ProFileOption::TARG_MAC9_MODE: concat << QLatin1String("/features/mac"); concat << QLatin1String("/features/mac9"); break; - case Option::TARG_QNX6_MODE: + case ProFileOption::TARG_QNX6_MODE: concat << QLatin1String("/features/qnx6"); concat << QLatin1String("/features/unix"); break; @@ -1431,7 +1432,7 @@ QString ProFileEvaluator::Private::currentDirectory() const void ProFileEvaluator::Private::doVariableReplace(QString *str) { - *str = expandVariableReferences(*str).join(Option::field_sep); + *str = expandVariableReferences(*str).join(ProFileOption::field_sep); } QStringList ProFileEvaluator::Private::expandVariableReferences(const QString &str) @@ -1556,7 +1557,7 @@ QStringList ProFileEvaluator::Private::expandVariableReferences(const QString &s current = str.left(start_var); if (!replacement.isEmpty()) { if (quote) { - current += replacement.join(Option::field_sep); + current += replacement.join(ProFileOption::field_sep); } else { current += replacement.takeFirst(); if (!replacement.isEmpty()) { @@ -1722,7 +1723,7 @@ QStringList ProFileEvaluator::Private::evaluateExpandFunction(const QString &fun QStringList args; //why don't the builtin functions just use args_list? --Sam foreach (const QStringList &arg, args_list) - args += arg.join(Option::field_sep); + args += arg.join(ProFileOption::field_sep); enum ExpandFunc { E_MEMBER=1, E_FIRST, E_LAST, E_CAT, E_FROMFILE, E_EVAL, E_LIST, E_SPRINTF, E_JOIN, E_SPLIT, E_BASENAME, E_DIRNAME, E_SECTION, @@ -1834,7 +1835,7 @@ QStringList ProFileEvaluator::Private::evaluateExpandFunction(const QString &fun if (args.count() != 2) { logMessage(format("split(var, sep) requires one or two arguments")); } else { - const QString &sep = (args.count() == 2) ? args[1] : Option::field_sep; + const QString &sep = (args.count() == 2) ? args[1] : ProFileOption::field_sep; foreach (const QString &var, values(args.first())) foreach (const QString &splt, var.split(sep)) ret.append(splt); @@ -2138,7 +2139,7 @@ ProItem::ProItemReturn ProFileEvaluator::Private::evaluateConditionalFunction( QStringList args; //why don't the builtin functions just use args_list? --Sam foreach (const QStringList &arg, args_list) - args += arg.join(Option::field_sep); + args += arg.join(ProFileOption::field_sep); enum TestFunc { T_REQUIRES=1, T_GREATERTHAN, T_LESSTHAN, T_EQUALS, T_EXISTS, T_EXPORT, T_CLEAR, T_UNSET, T_EVAL, T_CONFIG, T_SYSTEM, @@ -2497,7 +2498,7 @@ ProItem::ProItemReturn ProFileEvaluator::Private::evaluateConditionalFunction( logMessage(format("%1(variable, value) requires two arguments.").arg(function)); return ProItem::ReturnFalse; } - QString rhs(args[1]), lhs(values(args[0]).join(Option::field_sep)); + QString rhs(args[1]), lhs(values(args[0]).join(ProFileOption::field_sep)); bool ok; int rhs_int = rhs.toInt(&ok); if (ok) { // do integer compare @@ -2517,7 +2518,7 @@ ProItem::ProItemReturn ProFileEvaluator::Private::evaluateConditionalFunction( logMessage(format("%1(variable, value) requires two arguments.").arg(function)); return ProItem::ReturnFalse; } - return returnBool(values(args[0]).join(Option::field_sep) == args[1]); + return returnBool(values(args[0]).join(ProFileOption::field_sep) == args[1]); case T_CLEAR: { if (m_skipLevel && !m_cumulative) return ProItem::ReturnFalse; @@ -2923,7 +2924,7 @@ void ProFileEvaluator::Private::errorMessage(const QString &message) const // /////////////////////////////////////////////////////////////////////// -ProFileEvaluator::ProFileEvaluator(ProFileEvaluator::Option *option) +ProFileEvaluator::ProFileEvaluator(ProFileOption *option) : d(new Private(this, option)) { } diff --git a/src/shared/proparser/profileevaluator.h b/src/shared/proparser/profileevaluator.h index eae3ce197ab..ee21f4544b6 100644 --- a/src/shared/proparser/profileevaluator.h +++ b/src/shared/proparser/profileevaluator.h @@ -40,59 +40,18 @@ QT_BEGIN_NAMESPACE +class ProFileOption; + class ProFileEvaluator { class Private; -public: +public: struct FunctionDefs { QHash<QString, ProBlock *> testFunctions; QHash<QString, ProBlock *> replaceFunctions; }; - // This struct is from qmake, but we are not using everything. - struct Option - { - Option(); - ~Option(); - - //simply global convenience - //QString libtool_ext; - //QString pkgcfg_ext; - //QString prf_ext; - //QString prl_ext; - //QString ui_ext; - //QStringList h_ext; - //QStringList cpp_ext; - //QString h_moc_ext; - //QString cpp_moc_ext; - //QString obj_ext; - //QString lex_ext; - //QString yacc_ext; - //QString h_moc_mod; - //QString cpp_moc_mod; - //QString lex_mod; - //QString yacc_mod; - QString dir_sep; - QString dirlist_sep; - QString qmakespec; - QString cachefile; - QHash<QString, QString> properties; - - enum TARG_MODE { TARG_UNIX_MODE, TARG_WIN_MODE, TARG_MACX_MODE, TARG_MAC9_MODE, TARG_QNX6_MODE }; - TARG_MODE target_mode; - //QString pro_ext; - //QString res_ext; - - private: - friend class ProFileEvaluator; - friend class ProFileEvaluator::Private; - static QString field_sep; // Just a cache for quick construction - QHash<QString, QStringList> base_valuemap; // Cached results of qmake.conf, .qmake.cache & default_pre.prf - FunctionDefs base_functions; - QStringList feature_roots; - }; - enum TemplateType { TT_Unknown = 0, TT_Application, @@ -101,7 +60,7 @@ public: TT_Subdirs }; - ProFileEvaluator(Option *option); + ProFileEvaluator(ProFileOption *option); virtual ~ProFileEvaluator(); ProFileEvaluator::TemplateType templateType(); @@ -139,6 +98,51 @@ private: // This doesn't help gcc 3.3 ... template<typename T> friend class QTypeInfo; + + friend class ProFileOption; +}; + +// This struct is from qmake, but we are not using everything. +struct ProFileOption +{ + ProFileOption(); + ~ProFileOption(); + + //simply global convenience + //QString libtool_ext; + //QString pkgcfg_ext; + //QString prf_ext; + //QString prl_ext; + //QString ui_ext; + //QStringList h_ext; + //QStringList cpp_ext; + //QString h_moc_ext; + //QString cpp_moc_ext; + //QString obj_ext; + //QString lex_ext; + //QString yacc_ext; + //QString h_moc_mod; + //QString cpp_moc_mod; + //QString lex_mod; + //QString yacc_mod; + QString dir_sep; + QString dirlist_sep; + QString qmakespec; + QString cachefile; + QHash<QString, QString> properties; + + enum TARG_MODE { TARG_UNIX_MODE, TARG_WIN_MODE, TARG_MACX_MODE, TARG_MAC9_MODE, TARG_QNX6_MODE }; + TARG_MODE target_mode; + //QString pro_ext; + //QString res_ext; + + private: + friend class ProFileEvaluator; + friend class ProFileEvaluator::Private; + static QString field_sep; // Just a cache for quick construction + QHash<QString, QStringList> base_valuemap; // Cached results of qmake.conf, .qmake.cache & default_pre.prf + ProFileEvaluator::FunctionDefs base_functions; + QStringList feature_roots; }; QT_END_NAMESPACE -- GitLab