From dbeae8cb4378998c691d4ae37b94536428e75a13 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Tue, 13 Jan 2015 14:12:17 +0100 Subject: C++: FastPreprocessor: Add only includes if there are none For the case that the document is based upon another one (see Snapshot::preprocessedDocument(), the only client of FastPreprocessor) the FastPreprocessor added extra unresolved includes. Change-Id: I0a7719fa8806af59f87a48bc6914270efd653e84 Reviewed-by: Erik Verbruggen --- src/libs/cplusplus/FastPreprocessor.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'src/libs/cplusplus/FastPreprocessor.cpp') diff --git a/src/libs/cplusplus/FastPreprocessor.cpp b/src/libs/cplusplus/FastPreprocessor.cpp index e6ef1d37f7..e6ece53074 100644 --- a/src/libs/cplusplus/FastPreprocessor.cpp +++ b/src/libs/cplusplus/FastPreprocessor.cpp @@ -40,11 +40,14 @@ using namespace CPlusPlus; FastPreprocessor::FastPreprocessor(const Snapshot &snapshot) : _snapshot(snapshot) , _preproc(this, &_env) + , _addIncludesToCurrentDoc(false) { } QByteArray FastPreprocessor::run(Document::Ptr newDoc, const QByteArray &source) { std::swap(newDoc, _currentDoc); + _addIncludesToCurrentDoc = _currentDoc->resolvedIncludes().isEmpty() + && _currentDoc->unresolvedIncludes().isEmpty(); const QString fileName = _currentDoc->fileName(); _preproc.setExpandFunctionlikeMacros(false); _preproc.setKeepComments(true); @@ -72,9 +75,11 @@ void FastPreprocessor::sourceNeeded(unsigned line, const QString &fileName, Incl { Q_UNUSED(initialIncludes) Q_ASSERT(_currentDoc); - // CHECKME: Is that cleanName needed? - QString cleanName = QDir::cleanPath(fileName); - _currentDoc->addIncludeFile(Document::Include(fileName, cleanName, line, mode)); + if (_addIncludesToCurrentDoc) { + // CHECKME: Is that cleanName needed? + const QString cleanName = QDir::cleanPath(fileName); + _currentDoc->addIncludeFile(Document::Include(fileName, cleanName, line, mode)); + } mergeEnvironment(fileName); } -- cgit v1.2.1