diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2018-07-26 10:41:53 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2018-07-26 14:04:26 +0000 |
commit | a6d12454983f8b1f2f8e7087de4b11ccd9126178 (patch) | |
tree | f0b878e3503504d637654577fb2e82f0a1ec5930 /sources/shiboken2/generator/generator.cpp | |
parent | 831b22fcd6eb9b45c9e7834799a91698ec00a6a4 (diff) |
shiboken: Fix non-deterministic order of some SBK type indexes
Change underlying type of the type database from
a QHash<qualified_name, list of entries> to
a QMultiMap<qualified_name, entry>.
Previously, there was an allEntries() accessor and a function
named entries() building a QHash<qualified_name, entry>.
Simplify this so that there is only an entries() accessor
returning the QMultiMap.
Refactor the various Typedatabase::find() functions to operate on an
iterator range of the QMultiMap.
This unearthed some bugs:
1) In the generators, the call to findType(packageName()) would return
the namespace entry for "sample" instead of the intended
module type entry named "sample" due to the ordering.
Add a new function to search for module type entries and assert
that it finds it.
2) There was a duplicate, empty primitive type entry for
QModelIndexList.
Task-number: PYSIDE-757
Change-Id: I1814e4ca67d306e1488398507707cfd07b3f2c78
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'sources/shiboken2/generator/generator.cpp')
-rw-r--r-- | sources/shiboken2/generator/generator.cpp | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/sources/shiboken2/generator/generator.cpp b/sources/shiboken2/generator/generator.cpp index 63700f2c5..7cf93edc5 100644 --- a/sources/shiboken2/generator/generator.cpp +++ b/sources/shiboken2/generator/generator.cpp @@ -66,17 +66,14 @@ Generator::~Generator() bool Generator::setup(const ApiExtractor& extractor) { m_d->apiextractor = &extractor; - TypeEntryHash allEntries = TypeDatabase::instance()->allEntries(); + const auto &allEntries = TypeDatabase::instance()->entries(); TypeEntry* entryFound = 0; - for (TypeEntryHash::const_iterator it = allEntries.cbegin(), end = allEntries.cend(); it != end; ++it) { - for (TypeEntry *entry : it.value()) { - if (entry->type() == TypeEntry::TypeSystemType && entry->generateCode()) { - entryFound = entry; - break; - } - } - if (entryFound) + for (auto it = allEntries.cbegin(), end = allEntries.cend(); it != end; ++it) { + TypeEntry *entry = it.value(); + if (entry->type() == TypeEntry::TypeSystemType && entry->generateCode()) { + entryFound = entry; break; + } } if (entryFound) m_d->packageName = entryFound->name(); |