From 51f9351a4f43c2e0b98dcaa98d19b1292e522686 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 20 Apr 2022 10:41:55 +0200 Subject: shiboken6: Replace hasCloneOperator() by isCopyConstructible() hasCloneOperator() is a left-over and does not handle all base classes as does isCopyConstructible(). Pick-to: 6.3 Change-Id: I2dbf8bc9e27b0cc776005904a85020fa25efa5ea Reviewed-by: Qt CI Bot Reviewed-by: Christian Tismer --- .../shiboken6/ApiExtractor/abstractmetabuilder.cpp | 40 ---------------------- .../shiboken6/ApiExtractor/abstractmetabuilder_p.h | 1 - .../shiboken6/ApiExtractor/abstractmetalang.cpp | 16 ++------- sources/shiboken6/ApiExtractor/abstractmetalang.h | 3 -- .../ApiExtractor/tests/testabstractmetaclass.cpp | 3 +- 5 files changed, 3 insertions(+), 60 deletions(-) (limited to 'sources/shiboken6/ApiExtractor') diff --git a/sources/shiboken6/ApiExtractor/abstractmetabuilder.cpp b/sources/shiboken6/ApiExtractor/abstractmetabuilder.cpp index 3f8b9543b..f0f0ddcd3 100644 --- a/sources/shiboken6/ApiExtractor/abstractmetabuilder.cpp +++ b/sources/shiboken6/ApiExtractor/abstractmetabuilder.cpp @@ -632,7 +632,6 @@ void AbstractMetaBuilderPrivate::traverseDom(const FileModelItem &dom, for (AbstractMetaClass *cls : qAsConst(m_metaClasses)) { // setupEquals(cls); // setupComparable(cls); - setupClonable(cls); setupExternalConversion(cls); // sort all inner classes topologically @@ -3165,7 +3164,6 @@ void AbstractMetaBuilderPrivate::inheritTemplateFunctions(AbstractMetaClass *sub auto templateClass = subclass->templateBaseClass(); if (subclass->isTypeDef()) { - subclass->setHasCloneOperator(templateClass->hasCloneOperator()); subclass->setHasEqualsOperator(templateClass->hasEqualsOperator()); subclass->setHasHashFunction(templateClass->hasHashFunction()); subclass->setHasNonPrivateConstructor(templateClass->hasNonPrivateConstructor()); @@ -3250,44 +3248,6 @@ void AbstractMetaBuilderPrivate::parseQ_Properties(AbstractMetaClass *metaClass, } } -static AbstractMetaFunctionCPtr findCopyCtor(AbstractMetaClass* cls) -{ - for (const auto &f : cls->functions()) { - const AbstractMetaFunction::FunctionType t = f->functionType(); - if (t == AbstractMetaFunction::CopyConstructorFunction || t == AbstractMetaFunction::AssignmentOperatorFunction) - return f; - } - return {}; -} - -void AbstractMetaBuilderPrivate::setupClonable(AbstractMetaClass *cls) -{ - bool result = true; - - // find copy ctor for the current class - auto copyCtor = findCopyCtor(cls); - if (!copyCtor.isNull()) { // if exists a copy ctor in this class - result = copyCtor->isPublic(); - } else { // else... lets find one in the parent class - QQueue baseClasses; - if (cls->baseClass()) - baseClasses.enqueue(cls->baseClass()); - - while (!baseClasses.isEmpty()) { - AbstractMetaClass* currentClass = baseClasses.dequeue(); - if (currentClass->baseClass()) - baseClasses.enqueue(currentClass->baseClass()); - - copyCtor = findCopyCtor(currentClass); - if (copyCtor) { - result = copyCtor->isPublic(); - break; - } - } - } - cls->setHasCloneOperator(result); -} - void AbstractMetaBuilderPrivate::setupExternalConversion(AbstractMetaClass *cls) { const auto &convOps = cls->operatorOverloads(OperatorQueryOption::ConversionOp); diff --git a/sources/shiboken6/ApiExtractor/abstractmetabuilder_p.h b/sources/shiboken6/ApiExtractor/abstractmetabuilder_p.h index 152a39345..791986298 100644 --- a/sources/shiboken6/ApiExtractor/abstractmetabuilder_p.h +++ b/sources/shiboken6/ApiExtractor/abstractmetabuilder_p.h @@ -151,7 +151,6 @@ public: void parseQ_Properties(AbstractMetaClass *metaClass, const QStringList &declarations); void setupEquals(AbstractMetaClass *metaClass); void setupComparable(AbstractMetaClass *metaClass); - static void setupClonable(AbstractMetaClass *cls); void setupExternalConversion(AbstractMetaClass *cls); static bool isQualifiedCppIdentifier(QStringView e); diff --git a/sources/shiboken6/ApiExtractor/abstractmetalang.cpp b/sources/shiboken6/ApiExtractor/abstractmetalang.cpp index 59f3000c0..9b9ba31a0 100644 --- a/sources/shiboken6/ApiExtractor/abstractmetalang.cpp +++ b/sources/shiboken6/ApiExtractor/abstractmetalang.cpp @@ -68,7 +68,6 @@ public: m_hasVirtualDestructor(false), m_hasHashFunction(false), m_hasEqualsOperator(false), - m_hasCloneOperator(false), m_isTypeDef(false), m_hasToStringCapability(false), m_valueTypeWithCopyConstructorOnly(false), @@ -109,7 +108,6 @@ public: uint m_hasVirtualDestructor : 1; uint m_hasHashFunction : 1; uint m_hasEqualsOperator : 1; - uint m_hasCloneOperator : 1; uint m_isTypeDef : 1; uint m_hasToStringCapability : 1; uint m_valueTypeWithCopyConstructorOnly : 1; @@ -231,7 +229,7 @@ AbstractMetaFunctionCList AbstractMetaClass::functionsInTargetLang() const AbstractMetaFunctionCList AbstractMetaClass::implicitConversions() const { - if (!hasCloneOperator() && !hasExternalConversionOperators()) + if (!isCopyConstructible() && !hasExternalConversionOperators()) return {}; AbstractMetaFunctionCList returned; @@ -392,16 +390,6 @@ void AbstractMetaClass::setHasEqualsOperator(bool on) d->m_hasEqualsOperator = on; } -bool AbstractMetaClass::hasCloneOperator() const -{ - return d->m_hasCloneOperator; -} - -void AbstractMetaClass::setHasCloneOperator(bool on) -{ - d->m_hasCloneOperator = on; -} - const QList &AbstractMetaClass::propertySpecs() const { return d->m_propertySpecs; @@ -1816,7 +1804,7 @@ bool AbstractMetaClass::isCopyable() const return false; auto copyable = d->m_typeEntry->copyable(); return copyable == ComplexTypeEntry::CopyableSet - || (copyable == ComplexTypeEntry::Unknown && hasCloneOperator()); + || (copyable == ComplexTypeEntry::Unknown && isCopyConstructible()); } bool AbstractMetaClass::isValueTypeWithCopyConstructorOnly() const diff --git a/sources/shiboken6/ApiExtractor/abstractmetalang.h b/sources/shiboken6/ApiExtractor/abstractmetalang.h index df978f598..a1709fcd0 100644 --- a/sources/shiboken6/ApiExtractor/abstractmetalang.h +++ b/sources/shiboken6/ApiExtractor/abstractmetalang.h @@ -291,9 +291,6 @@ public: bool hasEqualsOperator() const; void setHasEqualsOperator(bool on); - bool hasCloneOperator() const; - void setHasCloneOperator(bool on); - const QList &propertySpecs() const; void addPropertySpec(const QPropertySpec &spec); diff --git a/sources/shiboken6/ApiExtractor/tests/testabstractmetaclass.cpp b/sources/shiboken6/ApiExtractor/tests/testabstractmetaclass.cpp index 755947ec4..1572c90ee 100644 --- a/sources/shiboken6/ApiExtractor/tests/testabstractmetaclass.cpp +++ b/sources/shiboken6/ApiExtractor/tests/testabstractmetaclass.cpp @@ -82,8 +82,7 @@ void TestAbstractMetaClass::testClassNameUnderNamespace() QCOMPARE(ctors[1]->minimalSignature(), QLatin1String("ClassName(Namespace::ClassName)")); QVERIFY(!classes[0]->hasPrivateDestructor()); - QVERIFY(classes[0]->hasCloneOperator()); // implicit default copy ctor - QVERIFY(!classes[0]->hasHashFunction()); + QVERIFY(classes[0]->isCopyConstructible()); // implicit default copy ctor // This method is buggy and nobody wants to fix it or needs it fixed :-/ // QVERIFY(classes[0]->hasNonPrivateConstructor()); -- cgit v1.2.3