aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2017-06-15 13:55:58 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2017-06-15 12:11:31 +0000
commit4d4ba7670ac60dc5906fe01f2d950c22aace1c18 (patch)
tree444b10995d01704035b4ae4874fd05172521ec0e /src/lib/corelib
parenteb2e67a44ffa445a1bb360d1f75d5a722c0fa08a (diff)
Make ItemReaderVisitorState::readFile() exception safe
Change-Id: Ia3eb38e92f1337abf92064f9b55222e3afa05811 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'src/lib/corelib')
-rw-r--r--src/lib/corelib/language/itemreadervisitorstate.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/lib/corelib/language/itemreadervisitorstate.cpp b/src/lib/corelib/language/itemreadervisitorstate.cpp
index 96b694d5b..12f9330c5 100644
--- a/src/lib/corelib/language/itemreadervisitorstate.cpp
+++ b/src/lib/corelib/language/itemreadervisitorstate.cpp
@@ -158,9 +158,16 @@ Item *ItemReaderVisitorState::readFile(const QString &filePath, const QStringLis
file->setSearchPaths(searchPaths);
ItemReaderASTVisitor astVisitor(*this, file, itemPool, m_logger);
- cacheValue.setProcessingFlag(true);
- cacheValue.ast()->accept(&astVisitor);
- cacheValue.setProcessingFlag(false);
+ {
+ class ProcessingFlagManager {
+ public:
+ ProcessingFlagManager(ASTCacheValue &v) : m_cacheValue(v) { v.setProcessingFlag(true); }
+ ~ProcessingFlagManager() { m_cacheValue.setProcessingFlag(false); }
+ private:
+ ASTCacheValue &m_cacheValue;
+ } processingFlagManager(cacheValue);
+ cacheValue.ast()->accept(&astVisitor);
+ }
astVisitor.checkItemTypes();
return astVisitor.rootItem();
}