summaryrefslogtreecommitdiffstats
path: root/qmake/library/qmakeparser.cpp
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2017-08-15 16:30:10 +0200
committerLiang Qi <liang.qi@qt.io>2017-08-15 16:31:48 +0200
commit106d3b9bf93325ea93c678270290b2c3dda9b764 (patch)
tree26c56932d60964c83e81d9c33d6f37ebc36d6c56 /qmake/library/qmakeparser.cpp
parent79f679da9483c12979500dd48bc096d33af9ca6f (diff)
parent8bebded9ab02b8eec67c44bfddf802d6bf9cda3c (diff)
Merge remote-tracking branch 'origin/5.9' into dev
Conflicts: src/plugins/platforms/cocoa/qcocoamenu.h src/plugins/platforms/cocoa/qcocoamenu.mm src/plugins/platforms/cocoa/qcocoawindow.mm src/widgets/styles/qstylehelper_p.h Change-Id: I54247c98dd79d2b3826fc062b8b11048c9c7d9bb
Diffstat (limited to 'qmake/library/qmakeparser.cpp')
-rw-r--r--qmake/library/qmakeparser.cpp27
1 files changed, 17 insertions, 10 deletions
diff --git a/qmake/library/qmakeparser.cpp b/qmake/library/qmakeparser.cpp
index 78350c76c4..b5d89c1ba6 100644
--- a/qmake/library/qmakeparser.cpp
+++ b/qmake/library/qmakeparser.cpp
@@ -167,7 +167,7 @@ QMakeParser::QMakeParser(ProFileCache *cache, QMakeVfs *vfs, QMakeParserHandler
ProFile *QMakeParser::parsedProFile(const QString &fileName, ParseFlags flags)
{
ProFile *pro;
- if ((flags & (ParseUseCache|ParseOnlyCached)) && m_cache) {
+ if ((flags & ParseUseCache) && m_cache) {
ProFileCache::Entry *ent;
#ifdef PROPARSER_THREAD_SAFE
QMutexLocker locker(&m_cache->mutex);
@@ -189,13 +189,13 @@ ProFile *QMakeParser::parsedProFile(const QString &fileName, ParseFlags flags)
#endif
if ((pro = ent->pro))
pro->ref();
- } else if (!(flags & ParseOnlyCached)) {
+ } else {
ent = &m_cache->parsed_files[fileName];
#ifdef PROPARSER_THREAD_SAFE
ent->locker = new ProFileCache::Entry::Locker;
locker.unlock();
#endif
- pro = new ProFile(fileName);
+ pro = new ProFile(idForFileName(fileName), fileName);
if (!read(pro, flags)) {
delete pro;
pro = 0;
@@ -214,17 +214,13 @@ ProFile *QMakeParser::parsedProFile(const QString &fileName, ParseFlags flags)
ent->locker = 0;
}
#endif
- } else {
- pro = 0;
}
- } else if (!(flags & ParseOnlyCached)) {
- pro = new ProFile(fileName);
+ } else {
+ pro = new ProFile(idForFileName(fileName), fileName);
if (!read(pro, flags)) {
delete pro;
pro = 0;
}
- } else {
- pro = 0;
}
return pro;
}
@@ -232,11 +228,22 @@ ProFile *QMakeParser::parsedProFile(const QString &fileName, ParseFlags flags)
ProFile *QMakeParser::parsedProBlock(
const QStringRef &contents, const QString &name, int line, SubGrammar grammar)
{
- ProFile *pro = new ProFile(name);
+ ProFile *pro = new ProFile(0, name);
read(pro, contents, line, grammar);
return pro;
}
+int QMakeParser::idForFileName(const QString &fileName)
+{
+#ifdef PROPARSER_THREAD_SAFE
+ QMutexLocker lck(&fileIdMutex);
+#endif
+ int &place = fileIdMap[fileName];
+ if (!place)
+ place = ++fileIdCounter;
+ return place;
+}
+
void QMakeParser::discardFileFromCache(const QString &fileName)
{
if (m_cache)