aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken2/ApiExtractor/abstractmetalang.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2020-03-18 15:47:30 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2020-03-20 01:00:50 +0100
commit2e5cdd6bd8e99544fd9370900d30edda2c05c6f9 (patch)
treed832051067b428c4cd99872741e30c12e24e51b8 /sources/shiboken2/ApiExtractor/abstractmetalang.cpp
parent719277aee248afe75abfac77414540827517ad3f (diff)
shiboken: Fix classes with virtual destructors not being considered polymorphic
Previously, the polymorphic attribute was set in AbstractMetaClass::addFunction() depending on hasVirtualDestructor(). This does not work when the destructor is the last function traversed. Modify setHasVirtualDestructor() to set the hasVirtuals and polymorphic attributes, too. Fixes: PYSIDE-1246 Change-Id: If7b32a05110f96b5c4befde5f1d37475c9a5f240 Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'sources/shiboken2/ApiExtractor/abstractmetalang.cpp')
-rw-r--r--sources/shiboken2/ApiExtractor/abstractmetalang.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/sources/shiboken2/ApiExtractor/abstractmetalang.cpp b/sources/shiboken2/ApiExtractor/abstractmetalang.cpp
index 0ce7df00a..ad694eb4f 100644
--- a/sources/shiboken2/ApiExtractor/abstractmetalang.cpp
+++ b/sources/shiboken2/ApiExtractor/abstractmetalang.cpp
@@ -1582,7 +1582,7 @@ void AbstractMetaClass::addFunction(AbstractMetaFunction *function)
else
Q_ASSERT(false); //memory leak
- m_hasVirtuals |= function->isVirtual() || hasVirtualDestructor();
+ m_hasVirtuals |= function->isVirtual();
m_isPolymorphic |= m_hasVirtuals;
m_hasNonpublic |= !function->isPublic();
}
@@ -2019,6 +2019,13 @@ void AbstractMetaClass::addDefaultCopyConstructor(bool isPrivate)
addFunction(f);
}
+void AbstractMetaClass::setHasVirtualDestructor(bool value)
+{
+ m_hasVirtualDestructor = value;
+ if (value)
+ m_hasVirtuals = m_isPolymorphic = 1;
+}
+
bool AbstractMetaClass::hasFunction(const AbstractMetaFunction *f) const
{
return functions_contains(m_functions, f);