diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2009-07-04 20:54:31 +0200 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2009-07-06 09:53:25 +0200 |
commit | 2f649be1464e1ba6857f28cfb6c362f8fb0a8ca4 (patch) | |
tree | aecc1c4cd308a79f3f49bca98874bf33de3bb32d | |
parent | 93cdff18180f8d3c0cc474aaadfb753702564e32 (diff) | |
download | qt-creator-2f649be1464e1ba6857f28cfb6c362f8fb0a8ca4.tar.gz |
Disable macro expansion when preprocessing in fast-mode.
-rw-r--r-- | src/libs/cplusplus/FastPreprocessor.cpp | 4 | ||||
-rw-r--r-- | src/libs/cplusplus/pp-engine.cpp | 19 | ||||
-rw-r--r-- | src/libs/cplusplus/pp-engine.h | 4 |
3 files changed, 23 insertions, 4 deletions
diff --git a/src/libs/cplusplus/FastPreprocessor.cpp b/src/libs/cplusplus/FastPreprocessor.cpp index 00b6f8eeda..087679aeea 100644 --- a/src/libs/cplusplus/FastPreprocessor.cpp +++ b/src/libs/cplusplus/FastPreprocessor.cpp @@ -38,14 +38,14 @@ FastPreprocessor::FastPreprocessor(const Snapshot &snapshot) QByteArray FastPreprocessor::run(QString fileName, const QString &source) { -#ifdef QTCREATOR_WITH_MERGED_ENVIRONMENT + _preproc.setExpandMacros(false); + if (Document::Ptr doc = _snapshot.value(fileName)) { _merged.insert(fileName); foreach (const Document::Include &i, doc->includes()) mergeEnvironment(i.fileName()); } -#endif const QByteArray preprocessed = _preproc(fileName, source); return preprocessed; diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp index c7688c986b..370e3decb4 100644 --- a/src/libs/cplusplus/pp-engine.cpp +++ b/src/libs/cplusplus/pp-engine.cpp @@ -533,7 +533,8 @@ Preprocessor::Preprocessor(Client *client, Environment *env) env(env), _expand(env), _result(0), - _markGeneratedTokens(false) + _markGeneratedTokens(false), + _expandMacros(true) { resetIfLevel (); } @@ -620,6 +621,16 @@ void Preprocessor::out(const char *s) _result->append(s); } +bool Preprocessor::expandMacros() const +{ + return _expandMacros; +} + +void Preprocessor::setExpandMacros(bool expandMacros) +{ + _expandMacros = expandMacros; +} + Preprocessor::State Preprocessor::createStateFromSource(const QByteArray &source) const { State state; @@ -806,8 +817,12 @@ void Preprocessor::preprocess(const QString &fileName, const QByteArray &source, ++_dot; // skip T_IDENTIFIER const QByteArray spell = tokenSpell(*identifierToken); + if (! _expandMacros) { + out(spell); + continue; + } - if (env->isBuiltinMacro(spell)) + else if (env->isBuiltinMacro(spell)) expandBuiltinMacro(identifierToken, spell); else { diff --git a/src/libs/cplusplus/pp-engine.h b/src/libs/cplusplus/pp-engine.h index 1be7c9275d..1ec8579cb8 100644 --- a/src/libs/cplusplus/pp-engine.h +++ b/src/libs/cplusplus/pp-engine.h @@ -72,6 +72,9 @@ public: const QByteArray &source, QByteArray *result); + bool expandMacros() const; + void setExpandMacros(bool expandMacros); + private: enum { MAX_LEVEL = 512 }; @@ -188,6 +191,7 @@ private: bool _markGeneratedTokens; QString _originalSource; + bool _expandMacros; }; } // namespace CPlusPlus |