summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-07-04 20:54:31 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2009-07-06 09:53:25 +0200
commit2f649be1464e1ba6857f28cfb6c362f8fb0a8ca4 (patch)
treeaecc1c4cd308a79f3f49bca98874bf33de3bb32d
parent93cdff18180f8d3c0cc474aaadfb753702564e32 (diff)
downloadqt-creator-2f649be1464e1ba6857f28cfb6c362f8fb0a8ca4.tar.gz
Disable macro expansion when preprocessing in fast-mode.
-rw-r--r--src/libs/cplusplus/FastPreprocessor.cpp4
-rw-r--r--src/libs/cplusplus/pp-engine.cpp19
-rw-r--r--src/libs/cplusplus/pp-engine.h4
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