diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2017-06-15 13:55:58 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2017-06-15 12:11:31 +0000 |
commit | 4d4ba7670ac60dc5906fe01f2d950c22aace1c18 (patch) | |
tree | 444b10995d01704035b4ae4874fd05172521ec0e | |
parent | eb2e67a44ffa445a1bb360d1f75d5a722c0fa08a (diff) |
Make ItemReaderVisitorState::readFile() exception safe
Change-Id: Ia3eb38e92f1337abf92064f9b55222e3afa05811
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
-rw-r--r-- | src/lib/corelib/language/itemreadervisitorstate.cpp | 13 |
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(); } |