diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2019-01-28 10:36:39 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2019-01-30 12:00:13 +0000 |
commit | 8a465c1f6e156975d25938622e0299e64bf08295 (patch) | |
tree | 4d77775d1434dc8fea8c6f0f6f756c26eba69d42 /sources/shiboken2/generator/shiboken2 | |
parent | ff6b6422426ddd69031e2683c039eb1f53fc9df9 (diff) |
shiboken: Make constructor checks more fine-grained
ShibokenGenerator::isValueTypeWithCopyConstructorOnly()
returned false for QWebEngineHistoryItem since the check
for AbstractMetaAttributes::HasRejectedConstructor triggered
on WebEngineHistoryItem(QWebEngineHistoryItemPrivate *priv),
causing the function to bail out.
To prevent this, add a new
AbstractMetaAttributes::HasRejectedDefaultConstructor attribute
and use that in isValueTypeWithCopyConstructorOnly().
Task-number: PYSIDE-906
Change-Id: I4fee83b89f0a4c44e7e8d69e118ed7f2b03ceee1
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'sources/shiboken2/generator/shiboken2')
-rw-r--r-- | sources/shiboken2/generator/shiboken2/shibokengenerator.cpp | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/sources/shiboken2/generator/shiboken2/shibokengenerator.cpp b/sources/shiboken2/generator/shiboken2/shibokengenerator.cpp index ac0b2ffaf..a226f2c00 100644 --- a/sources/shiboken2/generator/shiboken2/shibokengenerator.cpp +++ b/sources/shiboken2/generator/shiboken2/shibokengenerator.cpp @@ -1055,12 +1055,26 @@ bool ShibokenGenerator::isValueTypeWithCopyConstructorOnly(const AbstractMetaCla { if (!metaClass || !metaClass->typeEntry()->isValue()) return false; - if ((metaClass->attributes() & AbstractMetaAttributes::HasRejectedConstructor) != 0) + if (metaClass->attributes().testFlag(AbstractMetaAttributes::HasRejectedDefaultConstructor)) return false; - AbstractMetaFunctionList ctors = metaClass->queryFunctions(AbstractMetaClass::Constructors); - if (ctors.count() != 1) - return false; - return ctors.constFirst()->functionType() == AbstractMetaFunction::CopyConstructorFunction; + const AbstractMetaFunctionList ctors = + metaClass->queryFunctions(AbstractMetaClass::Constructors); + bool copyConstructorFound = false; + for (auto ctor : ctors) { + switch (ctor->functionType()) { + case AbstractMetaFunction::ConstructorFunction: + return false; + case AbstractMetaFunction::CopyConstructorFunction: + copyConstructorFound = true; + break; + case AbstractMetaFunction::MoveConstructorFunction: + break; + default: + Q_ASSERT(false); + break; + } + } + return copyConstructorFound; } bool ShibokenGenerator::isValueTypeWithCopyConstructorOnly(const TypeEntry* type) const |