aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2020-11-27 17:11:47 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2020-11-30 15:53:54 +0000
commit30cdcd7b8e7f70bf6b64450ca622dd4494e3a0ea (patch)
tree044002feaeb24281e9000648a1342073701ee29c
parentf4fd97655f20e2ce4d24704056b7a7a9ab9db355 (diff)
shiboken6: Store AbstractMetaFunction using a QSharedPointer
Store the list functions (global / class member) as a QList<QSharedPointer<const AbstractMetaFunction> instead of a raw pointer list. This makes passing around function lists easier and solves the memory leaks caused by mixing cloned and unmodified functions while collecting the overload lists in the generators. - Change the function signatures accordingly - Add a qSharedPointerConstCast() for non-const access. - Restructure the traversing of added functions in the AbstractMetaBuilder - Remove some unused typedefs and functions unearthed by the change Change-Id: I08a6c5243750e3eb3813bc3f7172899ad2b13e22 Reviewed-by: Christian Tismer <tismer@stackless.com>
-rw-r--r--sources/shiboken6/ApiExtractor/abstractmetabuilder.cpp144
-rw-r--r--sources/shiboken6/ApiExtractor/abstractmetabuilder.h2
-rw-r--r--sources/shiboken6/ApiExtractor/abstractmetabuilder_p.h19
-rw-r--r--sources/shiboken6/ApiExtractor/abstractmetafunction.cpp10
-rw-r--r--sources/shiboken6/ApiExtractor/abstractmetafunction.h4
-rw-r--r--sources/shiboken6/ApiExtractor/abstractmetalang.cpp161
-rw-r--r--sources/shiboken6/ApiExtractor/abstractmetalang.h35
-rw-r--r--sources/shiboken6/ApiExtractor/abstractmetalang_typedefs.h7
-rw-r--r--sources/shiboken6/ApiExtractor/apiextractor.cpp2
-rw-r--r--sources/shiboken6/ApiExtractor/apiextractor.h2
-rw-r--r--sources/shiboken6/ApiExtractor/docparser.cpp6
-rw-r--r--sources/shiboken6/ApiExtractor/docparser.h4
-rw-r--r--sources/shiboken6/ApiExtractor/doxygenparser.cpp10
-rw-r--r--sources/shiboken6/ApiExtractor/messages.cpp2
-rw-r--r--sources/shiboken6/ApiExtractor/messages.h2
-rw-r--r--sources/shiboken6/ApiExtractor/qtdocparser.cpp21
-rw-r--r--sources/shiboken6/ApiExtractor/qtdocparser.h2
-rw-r--r--sources/shiboken6/ApiExtractor/tests/testabstractmetaclass.cpp55
-rw-r--r--sources/shiboken6/ApiExtractor/tests/testabstractmetatype.cpp17
-rw-r--r--sources/shiboken6/ApiExtractor/tests/testaddfunction.cpp39
-rw-r--r--sources/shiboken6/ApiExtractor/tests/testarrayargument.cpp4
-rw-r--r--sources/shiboken6/ApiExtractor/tests/testconversionoperator.cpp6
-rw-r--r--sources/shiboken6/ApiExtractor/tests/testenum.cpp7
-rw-r--r--sources/shiboken6/ApiExtractor/tests/testfunctiontag.cpp2
-rw-r--r--sources/shiboken6/ApiExtractor/tests/testimplicitconversions.cpp16
-rw-r--r--sources/shiboken6/ApiExtractor/tests/testmodifyfunction.cpp43
-rw-r--r--sources/shiboken6/ApiExtractor/tests/testmultipleinheritance.cpp3
-rw-r--r--sources/shiboken6/ApiExtractor/tests/testnamespace.cpp8
-rw-r--r--sources/shiboken6/ApiExtractor/tests/testnestedtypes.cpp4
-rw-r--r--sources/shiboken6/ApiExtractor/tests/testnumericaltypedef.cpp11
-rw-r--r--sources/shiboken6/ApiExtractor/tests/testrefcounttag.cpp8
-rw-r--r--sources/shiboken6/ApiExtractor/tests/testreferencetopointer.cpp4
-rw-r--r--sources/shiboken6/ApiExtractor/tests/testremoveimplconv.cpp2
-rw-r--r--sources/shiboken6/ApiExtractor/tests/testremoveoperatormethod.cpp3
-rw-r--r--sources/shiboken6/ApiExtractor/tests/testresolvetype.cpp3
-rw-r--r--sources/shiboken6/ApiExtractor/tests/testreverseoperators.cpp20
-rw-r--r--sources/shiboken6/ApiExtractor/tests/testtemplates.cpp44
-rw-r--r--sources/shiboken6/ApiExtractor/tests/testvoidarg.cpp9
-rw-r--r--sources/shiboken6/generator/generator.cpp21
-rw-r--r--sources/shiboken6/generator/generator.h8
-rw-r--r--sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp35
-rw-r--r--sources/shiboken6/generator/qtdoc/qtdocgenerator.h13
-rw-r--r--sources/shiboken6/generator/qtdoc/qtxmltosphinx.cpp8
-rw-r--r--sources/shiboken6/generator/shiboken/cppgenerator.cpp246
-rw-r--r--sources/shiboken6/generator/shiboken/cppgenerator.h56
-rw-r--r--sources/shiboken6/generator/shiboken/headergenerator.cpp11
-rw-r--r--sources/shiboken6/generator/shiboken/headergenerator.h4
-rw-r--r--sources/shiboken6/generator/shiboken/overloaddata.cpp126
-rw-r--r--sources/shiboken6/generator/shiboken/overloaddata.h34
-rw-r--r--sources/shiboken6/generator/shiboken/shibokengenerator.cpp123
-rw-r--r--sources/shiboken6/generator/shiboken/shibokengenerator.h58
51 files changed, 724 insertions, 760 deletions
diff --git a/sources/shiboken6/ApiExtractor/abstractmetabuilder.cpp b/sources/shiboken6/ApiExtractor/abstractmetabuilder.cpp
index 33eb85ace..686a28993 100644
--- a/sources/shiboken6/ApiExtractor/abstractmetabuilder.cpp
+++ b/sources/shiboken6/ApiExtractor/abstractmetabuilder.cpp
@@ -72,7 +72,6 @@ AbstractMetaBuilderPrivate::AbstractMetaBuilderPrivate() :
AbstractMetaBuilderPrivate::~AbstractMetaBuilderPrivate()
{
- qDeleteAll(m_globalFunctions);
qDeleteAll(m_templates);
qDeleteAll(m_smartPointers);
qDeleteAll(m_metaClasses);
@@ -103,7 +102,7 @@ const AbstractMetaClassList &AbstractMetaBuilder::smartPointers() const
return d->m_smartPointers;
}
-const AbstractMetaFunctionList &AbstractMetaBuilder::globalFunctions() const
+const AbstractMetaFunctionCList &AbstractMetaBuilder::globalFunctions() const
{
return d->m_globalFunctions;
}
@@ -152,10 +151,9 @@ void AbstractMetaBuilderPrivate::checkFunctionModifications()
if (!clazz)
continue;
- const AbstractMetaFunctionList functions = clazz->functions();
bool found = false;
QStringList possibleSignatures;
- for (AbstractMetaFunction *function : functions) {
+ for (const auto &function : clazz->functions()) {
if (function->implementingClass() == clazz
&& modification.matches(function->minimalSignature())) {
found = true;
@@ -172,7 +170,7 @@ void AbstractMetaBuilderPrivate::checkFunctionModifications()
qCWarning(lcShiboken).noquote().nospace()
<< msgNoFunctionForModification(clazz, signature,
modification.originalSignature(),
- possibleSignatures, functions);
+ possibleSignatures, clazz->functions());
}
}
}
@@ -290,7 +288,7 @@ void AbstractMetaBuilderPrivate::traverseOperatorFunction(const FunctionModelIte
metaFunction->setVisibility(AbstractMetaFunction::Public);
metaFunction->setOriginalAttributes(metaFunction->attributes());
setupFunctionDefaults(metaFunction, baseoperandClass);
- baseoperandClass->addFunction(metaFunction);
+ baseoperandClass->addFunction(AbstractMetaFunctionCPtr(metaFunction));
Q_ASSERT(!metaFunction->wasPrivate());
} else {
delete metaFunction;
@@ -338,7 +336,7 @@ void AbstractMetaBuilderPrivate::traverseStreamOperator(const FunctionModelItem
}
setupFunctionDefaults(streamFunction, funcClass);
- funcClass->addFunction(streamFunction);
+ funcClass->addFunction(AbstractMetaFunctionCPtr(streamFunction));
if (funcClass == streamClass)
funcClass->typeEntry()->addExtraInclude(streamedClass->typeEntry()->include());
else
@@ -449,10 +447,9 @@ void AbstractMetaBuilderPrivate::traverseDom(const FileModelItem &dom)
if (!metaFunc)
continue;
- if (!funcEntry->hasSignature(metaFunc->minimalSignature())) {
- delete metaFunc;
+ AbstractMetaFunctionCPtr metaFuncPtr(metaFunc);
+ if (!funcEntry->hasSignature(metaFunc->minimalSignature()))
continue;
- }
applyFunctionModifications(metaFunc);
@@ -461,7 +458,7 @@ void AbstractMetaBuilderPrivate::traverseDom(const FileModelItem &dom)
delete metaFunc->typeEntry();
metaFunc->setTypeEntry(funcEntry);
- m_globalFunctions << metaFunc;
+ m_globalFunctions << metaFuncPtr;
}
ReportHandler::startProgress("Fixing class inheritance...");
@@ -509,7 +506,7 @@ void AbstractMetaBuilderPrivate::traverseDom(const FileModelItem &dom)
const QStringList &signatures = fte->signatures();
for (const QString &signature : signatures) {
bool ok = false;
- for (AbstractMetaFunction *func : qAsConst(m_globalFunctions)) {
+ for (const auto &func : qAsConst(m_globalFunctions)) {
if (signature == func->minimalSignature()) {
ok = true;
break;
@@ -612,13 +609,10 @@ void AbstractMetaBuilderPrivate::traverseDom(const FileModelItem &dom)
// Functions added to the module on the type system.
const AddedFunctionList &globalUserFunctions = types->globalUserFunctions();
for (const AddedFunctionPtr &addedFunc : globalUserFunctions) {
- AbstractMetaFunction *metaFunc = traverseFunction(addedFunc);
- if (Q_UNLIKELY(!metaFunc)) {
+ if (!traverseAddedGlobalFunction(addedFunc)) {
qFatal("Unable to traverse added global function \"%s\".",
qPrintable(addedFunc->name()));
}
- metaFunc->setFunctionType(AbstractMetaFunction::NormalFunction);
- m_globalFunctions << metaFunc;
}
m_itemToClass.clear();
@@ -633,7 +627,7 @@ static bool metaEnumLessThan(const AbstractMetaEnum &e1, const AbstractMetaEnum
static bool metaClassLessThan(const AbstractMetaClass *c1, const AbstractMetaClass *c2)
{ return c1->fullName() < c2->fullName(); }
-static bool metaFunctionLessThan(const AbstractMetaFunction *f1, const AbstractMetaFunction *f2)
+static bool metaFunctionLessThan(const AbstractMetaFunctionCPtr &f1, const AbstractMetaFunctionCPtr &f2)
{ return f1->name() < f2->name(); }
bool AbstractMetaBuilder::build(const QByteArrayList &arguments,
@@ -1233,12 +1227,13 @@ void AbstractMetaBuilderPrivate::fixReturnTypeOfConversionOperator(AbstractMetaF
metaFunction->setType(metaType);
}
-AbstractMetaFunctionList AbstractMetaBuilderPrivate::classFunctionList(const ScopeModelItem &scopeItem,
- AbstractMetaClass::Attributes *constructorAttributes,
- AbstractMetaClass *currentClass)
+AbstractMetaFunctionRawPtrList
+ AbstractMetaBuilderPrivate::classFunctionList(const ScopeModelItem &scopeItem,
+ AbstractMetaClass::Attributes *constructorAttributes,
+ AbstractMetaClass *currentClass)
{
*constructorAttributes = {};
- AbstractMetaFunctionList result;
+ AbstractMetaFunctionRawPtrList result;
const FunctionList &scopeFunctionList = scopeItem->functions();
result.reserve(scopeFunctionList.size());
for (const FunctionModelItem &function : scopeFunctionList) {
@@ -1258,7 +1253,7 @@ void AbstractMetaBuilderPrivate::traverseFunctions(ScopeModelItem scopeItem,
AbstractMetaClass *metaClass)
{
AbstractMetaAttributes::Attributes constructorAttributes;
- const AbstractMetaFunctionList functions =
+ const AbstractMetaFunctionRawPtrList functions =
classFunctionList(scopeItem, &constructorAttributes, metaClass);
metaClass->setAttributes(metaClass->attributes() | constructorAttributes);
@@ -1325,7 +1320,7 @@ void AbstractMetaBuilderPrivate::traverseFunctions(ScopeModelItem scopeItem,
if (metaFunction->isConversionOperator())
fixReturnTypeOfConversionOperator(metaFunction);
- metaClass->addFunction(metaFunction);
+ metaClass->addFunction(AbstractMetaFunctionCPtr(metaFunction));
applyFunctionModifications(metaFunction);
} else if (metaFunction->isDestructor()) {
metaClass->setHasPrivateDestructor(metaFunction->isPrivate());
@@ -1346,7 +1341,7 @@ void AbstractMetaBuilderPrivate::fillAddedFunctions(AbstractMetaClass *metaClass
// Add the functions added by the typesystem
const AddedFunctionList &addedFunctions = metaClass->typeEntry()->addedFunctions();
for (const AddedFunctionPtr &addedFunc : addedFunctions) {
- if (!traverseFunction(addedFunc, metaClass)) {
+ if (!traverseAddedMemberFunction(addedFunc, metaClass)) {
qFatal("Unable to traverse function \"%s\" added to \"%s\".",
qPrintable(addedFunc->name()), qPrintable(metaClass->name()));
}
@@ -1496,13 +1491,19 @@ static void applyDefaultExpressionModifications(const FunctionModificationList &
}
}
-AbstractMetaFunction* AbstractMetaBuilderPrivate::traverseFunction(const AddedFunctionPtr &addedFunc)
+bool AbstractMetaBuilderPrivate::traverseAddedGlobalFunction(const AddedFunctionPtr &addedFunc)
{
- return traverseFunction(addedFunc, nullptr);
+ AbstractMetaFunction *metaFunction = traverseAddedFunctionHelper(addedFunc);
+ if (metaFunction == nullptr)
+ return false;
+ metaFunction->setFunctionType(AbstractMetaFunction::NormalFunction);
+ m_globalFunctions << AbstractMetaFunctionCPtr(metaFunction);
+ return true;
}
-AbstractMetaFunction* AbstractMetaBuilderPrivate::traverseFunction(const AddedFunctionPtr &addedFunc,
- AbstractMetaClass *metaClass)
+AbstractMetaFunction *
+ AbstractMetaBuilderPrivate::traverseAddedFunctionHelper(const AddedFunctionPtr &addedFunc,
+ AbstractMetaClass *metaClass)
{
QString errorMessage;
@@ -1581,35 +1582,42 @@ AbstractMetaFunction* AbstractMetaBuilderPrivate::traverseFunction(const AddedFu
if (!metaArguments.isEmpty())
fixArgumentNames(metaFunction, metaFunction->modifications(metaClass));
- if (metaClass) {
- const AbstractMetaArgumentList fargs = metaFunction->arguments();
- if (metaClass->isNamespace())
- *metaFunction += AbstractMetaFunction::Static;
- if (metaFunction->name() == metaClass->name()) {
- metaFunction->setFunctionType(AbstractMetaFunction::ConstructorFunction);
- if (fargs.size() == 1) {
- const TypeEntry *te = fargs.constFirst().type().typeEntry();
- if (te->isCustom())
- metaFunction->setExplicit(true);
- if (te->name() == metaFunction->name())
- metaFunction->setFunctionType(AbstractMetaFunction::CopyConstructorFunction);
- }
- } else {
- auto type = AbstractMetaFunction::NormalFunction;
- if (metaFunction->name() == QLatin1String("__getattro__"))
- type = AbstractMetaFunction::GetAttroFunction;
- else if (metaFunction->name() == QLatin1String("__setattro__"))
- type = AbstractMetaFunction::SetAttroFunction;
- metaFunction->setFunctionType(type);
- }
+ return metaFunction;
+}
+
+bool AbstractMetaBuilderPrivate::traverseAddedMemberFunction(const AddedFunctionPtr &addedFunc,
+ AbstractMetaClass *metaClass)
+{
+ AbstractMetaFunction *metaFunction = traverseAddedFunctionHelper(addedFunc, metaClass);
+ if (metaFunction == nullptr)
+ return false;
- metaFunction->setDeclaringClass(metaClass);
- metaFunction->setImplementingClass(metaClass);
- metaClass->addFunction(metaFunction);
- metaClass->setHasNonPrivateConstructor(true);
+ const AbstractMetaArgumentList fargs = metaFunction->arguments();
+ if (metaClass->isNamespace())
+ *metaFunction += AbstractMetaFunction::Static;
+ if (metaFunction->name() == metaClass->name()) {
+ metaFunction->setFunctionType(AbstractMetaFunction::ConstructorFunction);
+ if (fargs.size() == 1) {
+ const TypeEntry *te = fargs.constFirst().type().typeEntry();
+ if (te->isCustom())
+ metaFunction->setExplicit(true);
+ if (te->name() == metaFunction->name())
+ metaFunction->setFunctionType(AbstractMetaFunction::CopyConstructorFunction);
+ }
+ } else {
+ auto type = AbstractMetaFunction::NormalFunction;
+ if (metaFunction->name() == QLatin1String("__getattro__"))
+ type = AbstractMetaFunction::GetAttroFunction;
+ else if (metaFunction->name() == QLatin1String("__setattro__"))
+ type = AbstractMetaFunction::SetAttroFunction;
+ metaFunction->setFunctionType(type);
}
- return metaFunction;
+ metaFunction->setDeclaringClass(metaClass);
+ metaFunction->setImplementingClass(metaClass);
+ metaClass->addFunction(AbstractMetaFunctionCPtr(metaFunction));
+ metaClass->setHasNonPrivateConstructor(true);
+ return true;
}
void AbstractMetaBuilderPrivate::fixArgumentNames(AbstractMetaFunction *func, const FunctionModificationList &mods)
@@ -2640,10 +2648,10 @@ void AbstractMetaBuilderPrivate::inheritTemplateFunctions(AbstractMetaClass *sub
}
const auto &templateTypes = subclass->templateBaseClassInstantiations();
- const AbstractMetaFunctionList existingSubclassFuncs =
+ const AbstractMetaFunctionCList existingSubclassFuncs =
subclass->functions(); // Take copy
- const AbstractMetaFunctionList &templateClassFunctions = templateClass->functions();
- for (const AbstractMetaFunction *function : templateClassFunctions) {
+ const auto &templateClassFunctions = templateClass->functions();
+ for (const auto &function : templateClassFunctions) {
// If the function is modified or the instantiation has an equally named
// function we have shadowing, so we need to skip it.
if (function->isModifiedRemoved(TypeSystem::All)
@@ -2721,7 +2729,7 @@ void AbstractMetaBuilderPrivate::inheritTemplateFunctions(AbstractMetaClass *sub
qPrintable(subclass->name()), qPrintable(templateClass->name()),
qPrintable(errorMessage));
}
- subclass->addFunction(f.release());
+ subclass->addFunction(AbstractMetaFunctionCPtr(f.release()));
}
// Take copy
@@ -2786,17 +2794,14 @@ void AbstractMetaBuilderPrivate::parseQ_Properties(AbstractMetaClass *metaClass,
}
}
-static AbstractMetaFunction* findCopyCtor(AbstractMetaClass* cls)
+static AbstractMetaFunctionCPtr findCopyCtor(AbstractMetaClass* cls)
{
-
- const auto &functions = cls->functions();
-
- for (AbstractMetaFunction *f : qAsConst(functions)) {
+ for (const auto &f : cls->functions()) {
const AbstractMetaFunction::FunctionType t = f->functionType();
if (t == AbstractMetaFunction::CopyConstructorFunction || t == AbstractMetaFunction::AssignmentOperatorFunction)
return f;
}
- return nullptr;
+ return {};
}
void AbstractMetaBuilderPrivate::setupClonable(AbstractMetaClass *cls)
@@ -2804,8 +2809,8 @@ void AbstractMetaBuilderPrivate::setupClonable(AbstractMetaClass *cls)
bool result = true;
// find copy ctor for the current class
- AbstractMetaFunction* copyCtor = findCopyCtor(cls);
- if (copyCtor) { // if exists a copy ctor in this 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<AbstractMetaClass*> baseClasses;
@@ -2829,8 +2834,8 @@ void AbstractMetaBuilderPrivate::setupClonable(AbstractMetaClass *cls)
void AbstractMetaBuilderPrivate::setupExternalConversion(AbstractMetaClass *cls)
{
- const AbstractMetaFunctionList &convOps = cls->operatorOverloads(AbstractMetaClass::ConversionOp);
- for (AbstractMetaFunction *func : convOps) {
+ const auto &convOps = cls->operatorOverloads(AbstractMetaClass::ConversionOp);
+ for (const auto &func : convOps) {
if (func->isModifiedRemoved())
continue;
AbstractMetaClass *metaClass = AbstractMetaClass::findClass(m_metaClasses, func->type().typeEntry());
@@ -2981,8 +2986,7 @@ AbstractMetaClassList AbstractMetaBuilderPrivate::classesTopologicalSorted(const
graph.addEdge(baseIt.value(), classIndex);
}
- const AbstractMetaFunctionList &functions = clazz->functions();
- for (AbstractMetaFunction *func : functions) {
+ for (const auto &func : clazz->functions()) {
const AbstractMetaArgumentList &arguments = func->arguments();
for (const AbstractMetaArgument &arg : arguments) {
// Check methods with default args: If a class is instantiated by value,
diff --git a/sources/shiboken6/ApiExtractor/abstractmetabuilder.h b/sources/shiboken6/ApiExtractor/abstractmetabuilder.h
index 45459a16e..cd9f36ca9 100644
--- a/sources/shiboken6/ApiExtractor/abstractmetabuilder.h
+++ b/sources/shiboken6/ApiExtractor/abstractmetabuilder.h
@@ -68,7 +68,7 @@ public:
const AbstractMetaClassList &classes() const;
const AbstractMetaClassList &templates() const;
const AbstractMetaClassList &smartPointers() const;
- const AbstractMetaFunctionList &globalFunctions() const;
+ const AbstractMetaFunctionCList &globalFunctions() const;
const AbstractMetaEnumList &globalEnums() const;
std::optional<AbstractMetaEnum> findEnum(const TypeEntry *typeEntry) const;
diff --git a/sources/shiboken6/ApiExtractor/abstractmetabuilder_p.h b/sources/shiboken6/ApiExtractor/abstractmetabuilder_p.h
index 0fe66fe38..1dc1dd3d7 100644
--- a/sources/shiboken6/ApiExtractor/abstractmetabuilder_p.h
+++ b/sources/shiboken6/ApiExtractor/abstractmetabuilder_p.h
@@ -97,12 +97,9 @@ public:
const QSet<QString> &enumsDeclarations);
void traverseEnums(const ScopeModelItem &item, AbstractMetaClass *parent,
const QStringList &enumsDeclarations);
- AbstractMetaFunctionList classFunctionList(const ScopeModelItem &scopeItem,
- AbstractMetaClass::Attributes *constructorAttributes,
- AbstractMetaClass *currentClass);
- AbstractMetaFunctionList templateClassFunctionList(const ScopeModelItem &scopeItem,
- AbstractMetaClass *metaClass,
- bool *constructorRejected);
+ AbstractMetaFunctionRawPtrList classFunctionList(const ScopeModelItem &scopeItem,
+ AbstractMetaClass::Attributes *constructorAttributes,
+ AbstractMetaClass *currentClass);
void traverseFunctions(ScopeModelItem item, AbstractMetaClass *parent);
void applyFunctionModifications(AbstractMetaFunction* func);
void traverseFields(const ScopeModelItem &item, AbstractMetaClass *parent);
@@ -110,9 +107,11 @@ public:
AbstractMetaClass *currentClass);
void traverseOperatorFunction(const FunctionModelItem &item,
AbstractMetaClass *currentClass);
- AbstractMetaFunction* traverseFunction(const AddedFunctionPtr &addedFunc);
- AbstractMetaFunction* traverseFunction(const AddedFunctionPtr &addedFunc,
- AbstractMetaClass *metaClass);
+ AbstractMetaFunction *traverseAddedFunctionHelper(const AddedFunctionPtr &addedFunc,
+ AbstractMetaClass *metaClass = nullptr);
+ bool traverseAddedGlobalFunction(const AddedFunctionPtr &addedFunc);
+ bool traverseAddedMemberFunction(const AddedFunctionPtr &addedFunc,
+ AbstractMetaClass *metaClass);
AbstractMetaFunction *traverseFunction(const FunctionModelItem &function,
AbstractMetaClass *currentClass);
std::optional<AbstractMetaField> traverseField(const VariableModelItem &field,
@@ -193,7 +192,7 @@ public:
AbstractMetaClassList m_templates;
AbstractMetaClassList m_smartPointers;
QHash<const _CodeModelItem *, AbstractMetaClass *> m_itemToClass;
- AbstractMetaFunctionList m_globalFunctions;
+ AbstractMetaFunctionCList m_globalFunctions;
AbstractMetaEnumList m_globalEnums;
using RejectMap = QMap<QString, AbstractMetaBuilder::RejectReason>;
diff --git a/sources/shiboken6/ApiExtractor/abstractmetafunction.cpp b/sources/shiboken6/ApiExtractor/abstractmetafunction.cpp
index 79c542f26..df0ce2a1c 100644
--- a/sources/shiboken6/ApiExtractor/abstractmetafunction.cpp
+++ b/sources/shiboken6/ApiExtractor/abstractmetafunction.cpp
@@ -1108,11 +1108,15 @@ QString AbstractMetaFunction::modifiedName() const
return d->modifiedName(this);
}
-AbstractMetaFunction *
-AbstractMetaFunction::find(const AbstractMetaFunctionList &haystack,
+AbstractMetaFunctionCPtr
+AbstractMetaFunction::find(const AbstractMetaFunctionCList &haystack,
const QString &needle)
{
- return findByName(haystack, needle);
+ for (const auto &f : haystack) {
+ if (f->name() == needle)
+ return f;
+ }
+ return {};
}
void AbstractMetaFunction::setAllowThreadModification(TypeSystem::AllowThread am)
diff --git a/sources/shiboken6/ApiExtractor/abstractmetafunction.h b/sources/shiboken6/ApiExtractor/abstractmetafunction.h
index 2db47daeb..9628224af 100644
--- a/sources/shiboken6/ApiExtractor/abstractmetafunction.h
+++ b/sources/shiboken6/ApiExtractor/abstractmetafunction.h
@@ -276,8 +276,8 @@ public:
bool isCallOperator() const;
- static AbstractMetaFunction *
- find(const AbstractMetaFunctionList &haystack, const QString &needle);
+ static AbstractMetaFunctionCPtr
+ find(const AbstractMetaFunctionCList &haystack, const QString &needle);
// for the meta builder only
void setAllowThreadModification(TypeSystem::AllowThread am);
diff --git a/sources/shiboken6/ApiExtractor/abstractmetalang.cpp b/sources/shiboken6/ApiExtractor/abstractmetalang.cpp
index bdddfed6e..4b923309e 100644
--- a/sources/shiboken6/ApiExtractor/abstractmetalang.cpp
+++ b/sources/shiboken6/ApiExtractor/abstractmetalang.cpp
@@ -42,7 +42,7 @@
#include <QtCore/QDebug>
-bool function_sorter(AbstractMetaFunction *a, AbstractMetaFunction *b)
+bool function_sorter(const AbstractMetaFunctionCPtr &a, const AbstractMetaFunctionCPtr &b)
{
return a->signature() < b->signature();
}
@@ -68,11 +68,6 @@ public:
{
}
- ~AbstractMetaClassPrivate()
- {
- qDeleteAll(m_functions);
- }
-
uint m_hasVirtuals : 1;
uint m_isPolymorphic : 1;
uint m_hasNonpublic : 1;
@@ -97,13 +92,13 @@ public:
AbstractMetaClass *m_extendedNamespace = nullptr;
const AbstractMetaClass *m_templateBaseClass = nullptr;
- AbstractMetaFunctionList m_functions;
+ AbstractMetaFunctionCList m_functions;
AbstractMetaFieldList m_fields;
AbstractMetaEnumList m_enums;
QList<QPropertySpec> m_propertySpecs;
AbstractMetaClassList m_innerClasses;
- AbstractMetaFunctionList m_externalConversionOperators;
+ AbstractMetaFunctionCList m_externalConversionOperators;
QStringList m_baseClassNames; // Base class names from C++, including rejected
TypeEntries m_templateArgs;
@@ -146,10 +141,10 @@ bool AbstractMetaClass::isPolymorphic() const
/*******************************************************************************
* Returns a list of all the functions with a given name
*/
-AbstractMetaFunctionList AbstractMetaClass::queryFunctionsByName(const QString &name) const
+AbstractMetaFunctionCList AbstractMetaClass::queryFunctionsByName(const QString &name) const
{
- AbstractMetaFunctionList returned;
- for (AbstractMetaFunction *function : d->m_functions) {
+ AbstractMetaFunctionCList returned;
+ for (const auto &function : d->m_functions) {
if (function->name() == name)
returned.append(function);
}
@@ -161,7 +156,7 @@ AbstractMetaFunctionList AbstractMetaClass::queryFunctionsByName(const QString &
* Returns a list of all the functions retrieved during parsing which should
* be added to the API.
*/
-AbstractMetaFunctionList AbstractMetaClass::functionsInTargetLang() const
+AbstractMetaFunctionCList AbstractMetaClass::functionsInTargetLang() const
{
FunctionQueryOptions default_flags = NormalFunctions | Visible | NotRemovedFromTargetLang;
@@ -172,7 +167,7 @@ AbstractMetaFunctionList AbstractMetaClass::functionsInTargetLang() const
public_flags |= WasPublic;
// Constructors
- AbstractMetaFunctionList returned = queryFunctions(Constructors | default_flags | public_flags);
+ AbstractMetaFunctionCList returned = queryFunctions(Constructors | default_flags | public_flags);
// Final functions
returned += queryFunctions(FinalInTargetLangFunctions | NonStaticFunctions | default_flags | public_flags);
@@ -189,18 +184,18 @@ AbstractMetaFunctionList AbstractMetaClass::functionsInTargetLang() const
return returned;
}
-AbstractMetaFunctionList AbstractMetaClass::implicitConversions() const
+AbstractMetaFunctionCList AbstractMetaClass::implicitConversions() const
{
if (!hasCloneOperator() && !hasExternalConversionOperators())
- return AbstractMetaFunctionList();
+ return {};
- AbstractMetaFunctionList returned;
- const AbstractMetaFunctionList list = queryFunctions(Constructors) + externalConversionOperators();
+ AbstractMetaFunctionCList returned;
+ const auto list = queryFunctions(Constructors) + externalConversionOperators();
// Exclude anything that uses rvalue references, be it a move
// constructor "QPolygon(QPolygon &&)" or something else like
// "QPolygon(QVector<QPoint> &&)".
- for (AbstractMetaFunction *f : list) {
+ for (const auto &f : list) {
if ((f->actualMinimumArgumentCount() == 1 || f->arguments().size() == 1 || f->isConversionOperator())
&& !f->isExplicit()
&& f->functionType() != AbstractMetaFunction::CopyConstructorFunction
@@ -213,11 +208,11 @@ AbstractMetaFunctionList AbstractMetaClass::implicitConversions() const
return returned;
}
-AbstractMetaFunctionList AbstractMetaClass::operatorOverloads(OperatorQueryOptions query) const
+AbstractMetaFunctionCList AbstractMetaClass::operatorOverloads(OperatorQueryOptions query) const
{
- const AbstractMetaFunctionList &list = queryFunctions(OperatorOverloads | Visible);
- AbstractMetaFunctionList returned;
- for (AbstractMetaFunction *f : list) {
+ const auto &list = queryFunctions(OperatorOverloads | Visible);
+ AbstractMetaFunctionCList returned;
+ for (const auto &f : list) {
if (((query & ArithmeticOp) && f->isArithmeticOperator())
|| ((query & BitwiseOp) && f->isBitwiseOperator())
|| ((query & ComparisonOp) && f->isComparisonOperator())
@@ -234,7 +229,7 @@ AbstractMetaFunctionList AbstractMetaClass::operatorOverloads(OperatorQueryOptio
bool AbstractMetaClass::hasArithmeticOperatorOverload() const
{
- for (const AbstractMetaFunction *f : d->m_functions) {
+ for (const auto & f: d->m_functions) {
if (f->ownerClass() == f->implementingClass() && f->isArithmeticOperator() && !f->isPrivate())
return true;
}
@@ -243,7 +238,7 @@ bool AbstractMetaClass::hasArithmeticOperatorOverload() const
bool AbstractMetaClass::hasBitwiseOperatorOverload() const
{
- for (const AbstractMetaFunction *f : d->m_functions) {
+ for (const auto & f: d->m_functions) {
if (f->ownerClass() == f->implementingClass() && f->isBitwiseOperator() && !f->isPrivate())
return true;
}
@@ -252,7 +247,7 @@ bool AbstractMetaClass::hasBitwiseOperatorOverload() const
bool AbstractMetaClass::hasComparisonOperatorOverload() const
{
- for (const AbstractMetaFunction *f : d->m_functions) {
+ for (const auto &f : d->m_functions) {
if (f->ownerClass() == f->implementingClass() && f->isComparisonOperator() && !f->isPrivate())
return true;
}
@@ -261,7 +256,7 @@ bool AbstractMetaClass::hasComparisonOperatorOverload() const
bool AbstractMetaClass::hasLogicalOperatorOverload() const
{
- for (const AbstractMetaFunction *f : d->m_functions) {
+ for (const auto &f : d->m_functions) {
if (f->ownerClass() == f->implementingClass() && f->isLogicalOperator() && !f->isPrivate())
return true;
}
@@ -303,20 +298,20 @@ void AbstractMetaClass::setTemplateBaseClass(const AbstractMetaClass *cls)
d->m_templateBaseClass = cls;
}
-const AbstractMetaFunctionList &AbstractMetaClass::functions() const
+const AbstractMetaFunctionCList &AbstractMetaClass::functions() const
{
return d->m_functions;
}
-void AbstractMetaClass::setFunctions(const AbstractMetaFunctionList &functions)
+void AbstractMetaClass::setFunctions(const AbstractMetaFunctionCList &functions)
{
d->m_functions = functions;
// Functions must be sorted by name before next loop
sortFunctions();
- for (AbstractMetaFunction *f : qAsConst(d->m_functions)) {
- f->setOwnerClass(this);
+ for (const auto &f : qAsConst(d->m_functions)) {
+ qSharedPointerConstCast<AbstractMetaFunction>(f)->setOwnerClass(this);
if (!f->isPublic())
d->m_hasNonpublic = true;
}
@@ -324,8 +319,8 @@ void AbstractMetaClass::setFunctions(const AbstractMetaFunctionList &functions)
bool AbstractMetaClass::hasDefaultToStringFunction() const
{
- const AbstractMetaFunctionList &funcs = queryFunctionsByName(QLatin1String("toString"));
- for (const AbstractMetaFunction *f : funcs) {
+ const auto &funcs = queryFunctionsByName(QLatin1String("toString"));
+ for (const auto &f : funcs) {
if (!f->actualMinimumArgumentCount())
return true;
}
@@ -362,10 +357,10 @@ void AbstractMetaClass::addPropertySpec(const QPropertySpec &spec)
d->m_propertySpecs << spec;
}
-void AbstractMetaClass::addFunction(AbstractMetaFunction *function)
+void AbstractMetaClass::addFunction(const AbstractMetaFunctionCPtr &function)
{
Q_ASSERT(!function->signature().startsWith(QLatin1Char('(')));
- function->setOwnerClass(this);
+ qSharedPointerConstCast<AbstractMetaFunction>(function)->setOwnerClass(this);
if (!function->isDestructor())
d->m_functions << function;
@@ -382,7 +377,7 @@ bool AbstractMetaClass::hasSignal(const AbstractMetaFunction *other) const
if (!other->isSignal())
return false;
- for (const AbstractMetaFunction *f : d->m_functions) {
+ for (const auto &f : d->m_functions) {
if (f->isSignal() && f->compareTo(other) & AbstractMetaFunction::EqualName)
return other->modifiedName() == f->modifiedName();
}
@@ -535,17 +530,17 @@ QString AbstractMetaClass::qualifiedCppName() const
bool AbstractMetaClass::hasFunction(const QString &str) const
{
- return findFunction(str);
+ return !findFunction(str).isNull();
}
-const AbstractMetaFunction *AbstractMetaClass::findFunction(const QString &functionName) const
+AbstractMetaFunctionCPtr AbstractMetaClass::findFunction(const QString &functionName) const
{
return AbstractMetaFunction::find(d->m_functions, functionName);
}
bool AbstractMetaClass::hasProtectedFunctions() const
{
- for (AbstractMetaFunction *func : d->m_functions) {
+ for (const auto &func : d->m_functions) {
if (func->isProtected())
return true;
}
@@ -637,12 +632,12 @@ std::optional<QPropertySpec>
return {};
}
-AbstractMetaFunctionList AbstractMetaClass::externalConversionOperators() const
+const AbstractMetaFunctionCList &AbstractMetaClass::externalConversionOperators() const
{
return d->m_externalConversionOperators;
}
-void AbstractMetaClass::addExternalConversionOperator(AbstractMetaFunction *conversionOp)
+void AbstractMetaClass::addExternalConversionOperator(const AbstractMetaFunctionCPtr &conversionOp)
{
if (!d->m_externalConversionOperators.contains(conversionOp))
d->m_externalConversionOperators.append(conversionOp);
@@ -712,27 +707,18 @@ bool AbstractMetaClass::deleteInMainThread() const
|| (!d->m_baseClasses.isEmpty() && d->m_baseClasses.constFirst()->deleteInMainThread());
}
-static bool functions_contains(const AbstractMetaFunctionList &l, const AbstractMetaFunction *func)
-{
- for (const AbstractMetaFunction *f : l) {
- if ((f->compareTo(func) & AbstractMetaFunction::PrettySimilar) == AbstractMetaFunction::PrettySimilar)
- return true;
- }
- return false;
-}
-
bool AbstractMetaClass::hasConstructors() const
{
return AbstractMetaClass::queryFirstFunction(d->m_functions, Constructors) != nullptr;
}
-const AbstractMetaFunction *AbstractMetaClass::copyConstructor() const
+AbstractMetaFunctionCPtr AbstractMetaClass::copyConstructor() const
{
- for (const AbstractMetaFunction *f : d->m_functions) {
+ for (const auto &f : d->m_functions) {
if (f->functionType() == AbstractMetaFunction::CopyConstructorFunction)
return f;
}
- return nullptr;
+ return {};
}
bool AbstractMetaClass::hasCopyConstructor() const
@@ -742,8 +728,8 @@ bool AbstractMetaClass::hasCopyConstructor() const
bool AbstractMetaClass::hasPrivateCopyConstructor() const
{
- const AbstractMetaFunction *copyCt = copyConstructor();
- return copyCt && copyCt->isPrivate();
+ const auto copyCt = copyConstructor();
+ return !copyCt.isNull() && copyCt->isPrivate();
}
void AbstractMetaClass::addDefaultConstructor()
@@ -761,7 +747,7 @@ void AbstractMetaClass::addDefaultConstructor()
f->setImplementingClass(this);
f->setOriginalAttributes(f->attributes());
- addFunction(f);
+ addFunction(AbstractMetaFunctionCPtr(f));
this->setHasNonPrivateConstructor(true);
}
@@ -794,7 +780,7 @@ void AbstractMetaClass::addDefaultCopyConstructor(bool isPrivate)
f->setImplementingClass(this);
f->setOriginalAttributes(f->attributes());
- addFunction(f);
+ addFunction(AbstractMetaFunctionCPtr(f));
}
bool AbstractMetaClass::hasNonPrivateConstructor() const
@@ -854,11 +840,6 @@ bool AbstractMetaClass::isConstructible() const
return (hasNonPrivateConstructor() || !hasPrivateConstructor()) && !hasPrivateDestructor();
}
-bool AbstractMetaClass::hasFunction(const AbstractMetaFunction *f) const
-{
- return functions_contains(d->m_functions, f);
-}
-
bool AbstractMetaClass::generateExceptionHandling() const
{
return queryFirstFunction(d->m_functions, AbstractMetaClass::Visible
@@ -949,29 +930,29 @@ bool AbstractMetaClass::queryFunction(const AbstractMetaFunction *f, FunctionQue
return true;
}
-AbstractMetaFunctionList AbstractMetaClass::queryFunctionList(const AbstractMetaFunctionList &list,
+AbstractMetaFunctionCList AbstractMetaClass::queryFunctionList(const AbstractMetaFunctionCList &list,
FunctionQueryOptions query)
{
- AbstractMetaFunctionList result;
- for (AbstractMetaFunction *f : list) {
- if (queryFunction(f, query))
+ AbstractMetaFunctionCList result;
+ for (const auto &f : list) {
+ if (queryFunction(f.data(), query))
result.append(f);
}
return result;
}
-const AbstractMetaFunction *AbstractMetaClass::queryFirstFunction(const AbstractMetaFunctionList &list,
+AbstractMetaFunctionCPtr AbstractMetaClass::queryFirstFunction(const AbstractMetaFunctionCList &list,
FunctionQueryOptions query)
{
- AbstractMetaFunctionList result;
- for (AbstractMetaFunction *f : list) {
- if (queryFunction(f, query))
+ AbstractMetaFunctionCList result;
+ for (const auto &f : list) {
+ if (queryFunction(f.data(), query))
return f;
}
- return nullptr;
+ return {};
}
-AbstractMetaFunctionList AbstractMetaClass::queryFunctions(FunctionQueryOptions query) const
+AbstractMetaFunctionCList AbstractMetaClass::queryFunctions(FunctionQueryOptions query) const
{
return AbstractMetaClass::queryFunctionList(d->m_functions, query);
}
@@ -981,7 +962,7 @@ bool AbstractMetaClass::hasSignals() const
return queryFirstFunction(d->m_functions, Signals | Visible | NotRemovedFromTargetLang) != nullptr;
}
-AbstractMetaFunctionList AbstractMetaClass::cppSignalFunctions() const
+AbstractMetaFunctionCList AbstractMetaClass::cppSignalFunctions() const
{
return queryFunctions(Signals | Visible | NotRemovedFromTargetLang);
}
@@ -1056,7 +1037,7 @@ void AbstractMetaClass::getEnumsFromInvisibleNamespacesToBeGenerated(AbstractMet
}
}
-void AbstractMetaClass::getFunctionsFromInvisibleNamespacesToBeGenerated(AbstractMetaFunctionList *funcList) const
+void AbstractMetaClass::getFunctionsFromInvisibleNamespacesToBeGenerated(AbstractMetaFunctionCList *funcList) const
{
if (isNamespace()) {
invisibleNamespaceRecursion([funcList](AbstractMetaClass *c) {
@@ -1088,7 +1069,8 @@ static void addExtraIncludeForType(AbstractMetaClass *metaClass, const AbstractM
}
}
-static void addExtraIncludesForFunction(AbstractMetaClass *metaClass, const AbstractMetaFunction *meta_function)
+static void addExtraIncludesForFunction(AbstractMetaClass *metaClass,
+ const AbstractMetaFunctionCPtr &meta_function)
{
Q_ASSERT(metaClass);
Q_ASSERT(meta_function);
@@ -1106,13 +1088,13 @@ void AbstractMetaClass::fixFunctions()
d->m_functionsFixed = true;
- AbstractMetaFunctionList funcs = functions();
- AbstractMetaFunctionList nonRemovedFuncs;
+ AbstractMetaFunctionCList funcs = functions();
+ AbstractMetaFunctionCList nonRemovedFuncs;
nonRemovedFuncs.reserve(funcs.size());
for (auto f : qAsConst(funcs)) {
// Fishy: Setting up of implementing/declaring/base classes changes
// the applicable modifications; clear cached ones.
- f->clearModificationsCache();
+ qSharedPointerConstCast<AbstractMetaFunction>(f)->clearModificationsCache();
if (!f->isRemovedFromAllLanguages(f->implementingClass()))
nonRemovedFuncs.append(f);
}
@@ -1122,7 +1104,7 @@ void AbstractMetaClass::fixFunctions()
// Since we always traverse the complete hierarchy we are only
// interrested in what each super class implements, not what
// we may have propagated from their base classes again.
- AbstractMetaFunctionList superFuncs;
+ AbstractMetaFunctionCList superFuncs;
// Super classes can never be final
if (superClass->isFinalInTargetLang()) {
qCWarning(lcShiboken).noquote().nospace()
@@ -1130,11 +1112,11 @@ void AbstractMetaClass::fixFunctions()
*superClass -= AbstractMetaAttributes::FinalInTargetLang;
}
superFuncs = superClass->queryFunctions(AbstractMetaClass::ClassImplements);
- AbstractMetaFunctionList virtuals = superClass->queryFunctions(AbstractMetaClass::VirtualInCppFunctions);
+ const auto virtuals = superClass->queryFunctions(AbstractMetaClass::VirtualInCppFunctions);
superFuncs += virtuals;
- QSet<AbstractMetaFunction *> funcsToAdd;
- for (auto sf : qAsConst(superFuncs)) {
+ QSet<AbstractMetaFunctionCPtr> funcsToAdd;
+ for (const auto &sf : qAsConst(superFuncs)) {
if (sf->isRemovedFromAllLanguages(sf->implementingClass()))
continue;
@@ -1145,8 +1127,9 @@ void AbstractMetaClass::fixFunctions()
// we generally don't care about private functions, but we have to get the ones that are
// virtual in case they override abstract functions.
bool add = (sf->isNormal() || sf->isSignal() || sf->isEmptyFunction());
- for (AbstractMetaFunction *f : qAsConst(nonRemovedFuncs)) {
- const AbstractMetaFunction::CompareResult cmp = f->compareTo(sf);
+ for (const auto &cf : qAsConst(nonRemovedFuncs)) {
+ AbstractMetaFunctionPtr f(qSharedPointerConstCast<AbstractMetaFunction>(cf));
+ const AbstractMetaFunction::CompareResult cmp = cf->compareTo(sf.data());
if (cmp & AbstractMetaFunction::EqualModifiedName) {
add = false;
@@ -1172,7 +1155,7 @@ void AbstractMetaClass::fixFunctions()
if (f->visibility() != sf->visibility()) {
qCWarning(lcShiboken, "%s",
- qPrintable(msgFunctionVisibilityModified(this, f)));
+ qPrintable(msgFunctionVisibilityModified(this, f.data())));
#if 0
// If new visibility is private, we can't
// do anything. If it isn't, then we
@@ -1216,7 +1199,7 @@ void AbstractMetaClass::fixFunctions()
if (!hasNonFinalModifier && !isBaseImplPrivate) {
qCWarning(lcShiboken, "%s",
- qPrintable(msgShadowingFunction(sf, f)));
+ qPrintable(msgShadowingFunction(sf.data(), f.data())));
}
}
}
@@ -1248,19 +1231,19 @@ void AbstractMetaClass::fixFunctions()
funcsToAdd << sf;
}
- for (AbstractMetaFunction *f : qAsConst(funcsToAdd)) {
+ for (const auto &f : qAsConst(funcsToAdd)) {
AbstractMetaFunction *copy = f->copy();
(*copy) += AddedMethod;
- funcs.append(copy);
+ funcs.append(AbstractMetaFunctionCPtr(copy));
}
}
bool hasPrivateConstructors = false;
bool hasPublicConstructors = false;
- for (AbstractMetaFunction *func : qAsConst(funcs)) {
+ for (const auto &func : qAsConst(funcs)) {
for (const auto &mod : func->modifications(this)) {
if (mod.isRenameModifier())
- func->setName(mod.renamedToName());
+ qSharedPointerConstCast<AbstractMetaFunction>(func)->setName(mod.renamedToName());
}
// Make sure class is abstract if one of the functions is
diff --git a/sources/shiboken6/ApiExtractor/abstractmetalang.h b/sources/shiboken6/ApiExtractor/abstractmetalang.h
index b72acfe8c..f0c08d673 100644
--- a/sources/shiboken6/ApiExtractor/abstractmetalang.h
+++ b/sources/shiboken6/ApiExtractor/abstractmetalang.h
@@ -99,16 +99,15 @@ public:
void fixFunctions();
- const AbstractMetaFunctionList &functions() const;
- void setFunctions(const AbstractMetaFunctionList &functions);
- void addFunction(AbstractMetaFunction *function);
- bool hasFunction(const AbstractMetaFunction *f) const;
+ const AbstractMetaFunctionCList &functions() const;
+ void setFunctions(const AbstractMetaFunctionCList &functions);
+ void addFunction(const AbstractMetaFunctionCPtr &function);
bool hasFunction(const QString &str) const;
- const AbstractMetaFunction* findFunction(const QString& functionName) const;
+ AbstractMetaFunctionCPtr findFunction(const QString& functionName) const;
bool hasSignal(const AbstractMetaFunction *f) const;
bool hasConstructors() const;
- const AbstractMetaFunction *copyConstructor() const;
+ AbstractMetaFunctionCPtr copyConstructor() const;
bool hasCopyConstructor() const;
bool hasPrivateCopyConstructor() const;
@@ -134,17 +133,17 @@ public:
bool generateExceptionHandling() const;
- AbstractMetaFunctionList queryFunctionsByName(const QString &name) const;
+ AbstractMetaFunctionCList queryFunctionsByName(const QString &name) const;
static bool queryFunction(const AbstractMetaFunction *f, FunctionQueryOptions query);
- static AbstractMetaFunctionList queryFunctionList(const AbstractMetaFunctionList &list,
+ static AbstractMetaFunctionCList queryFunctionList(const AbstractMetaFunctionCList &list,
FunctionQueryOptions query);
- static const AbstractMetaFunction *queryFirstFunction(const AbstractMetaFunctionList &list,
- FunctionQueryOptions query);
+ static AbstractMetaFunctionCPtr queryFirstFunction(const AbstractMetaFunctionCList &list,
+ FunctionQueryOptions query);
- AbstractMetaFunctionList queryFunctions(FunctionQueryOptions query) const;
- AbstractMetaFunctionList functionsInTargetLang() const;
- AbstractMetaFunctionList cppSignalFunctions() const;
- AbstractMetaFunctionList implicitConversions() const;
+ AbstractMetaFunctionCList queryFunctions(FunctionQueryOptions query) const;
+ AbstractMetaFunctionCList functionsInTargetLang() const;
+ AbstractMetaFunctionCList cppSignalFunctions() const;
+ AbstractMetaFunctionCList implicitConversions() const;
/**
* Retrieves all class' operator overloads that meet
@@ -154,7 +153,7 @@ public:
* /return list of operator overload methods that meet the
* query criteria
*/
- AbstractMetaFunctionList operatorOverloads(OperatorQueryOptions query = AllOperators) const;
+ AbstractMetaFunctionCList operatorOverloads(OperatorQueryOptions query = AllOperators) const;
bool hasArithmeticOperatorOverload() const;
bool hasBitwiseOperatorOverload() const;
@@ -178,7 +177,7 @@ public:
void getEnumsToBeGenerated(AbstractMetaEnumList *enumList) const;
void getEnumsFromInvisibleNamespacesToBeGenerated(AbstractMetaEnumList *enumList) const;
- void getFunctionsFromInvisibleNamespacesToBeGenerated(AbstractMetaFunctionList *funcList) const;
+ void getFunctionsFromInvisibleNamespacesToBeGenerated(AbstractMetaFunctionCList *funcList) const;
QString fullName() const;
@@ -300,9 +299,9 @@ public:
/// Returns a list of conversion operators for this class. The conversion
/// operators are defined in other classes of the same module.
- AbstractMetaFunctionList externalConversionOperators() const;
+ const AbstractMetaFunctionCList &externalConversionOperators() const;
/// Adds a converter operator for this class.
- void addExternalConversionOperator(AbstractMetaFunction* conversionOp);
+ void addExternalConversionOperator(const AbstractMetaFunctionCPtr &conversionOp);
/// Returns true if this class has any converter operators defined elsewhere.
bool hasExternalConversionOperators() const;
diff --git a/sources/shiboken6/ApiExtractor/abstractmetalang_typedefs.h b/sources/shiboken6/ApiExtractor/abstractmetalang_typedefs.h
index 91a029c06..66e6e467f 100644
--- a/sources/shiboken6/ApiExtractor/abstractmetalang_typedefs.h
+++ b/sources/shiboken6/ApiExtractor/abstractmetalang_typedefs.h
@@ -40,14 +40,17 @@ class AbstractMetaEnumValue;
class AbstractMetaFunction;
class AbstractMetaType;
+using AbstractMetaFunctionPtr = QSharedPointer<AbstractMetaFunction>;
+using AbstractMetaFunctionCPtr = QSharedPointer<const AbstractMetaFunction>;
+
using AbstractMetaArgumentList = QList<AbstractMetaArgument>;
using AbstractMetaClassList = QList<AbstractMetaClass *>;
using AbstractMetaClassCList = QList<const AbstractMetaClass *>;
using AbstractMetaEnumList = QList<AbstractMetaEnum>;
using AbstractMetaEnumValueList = QList<AbstractMetaEnumValue>;
using AbstractMetaFieldList = QList<AbstractMetaField>;
-using AbstractMetaFunctionList = QList<AbstractMetaFunction *>;
-using AbstractMetaFunctionCList = QList<const AbstractMetaFunction *>;
+using AbstractMetaFunctionRawPtrList = QList<AbstractMetaFunction *>;
+using AbstractMetaFunctionCList = QList<AbstractMetaFunctionCPtr>;
using AbstractMetaTypeList = QList<AbstractMetaType>;
#endif // ABSTRACTMETALANG_TYPEDEFS_H
diff --git a/sources/shiboken6/ApiExtractor/apiextractor.cpp b/sources/shiboken6/ApiExtractor/apiextractor.cpp
index dba0d23da..5e9d18729 100644
--- a/sources/shiboken6/ApiExtractor/apiextractor.cpp
+++ b/sources/shiboken6/ApiExtractor/apiextractor.cpp
@@ -128,7 +128,7 @@ const AbstractMetaEnumList &ApiExtractor::globalEnums() const
return m_builder->globalEnums();
}
-const AbstractMetaFunctionList &ApiExtractor::globalFunctions() const
+const AbstractMetaFunctionCList &ApiExtractor::globalFunctions() const
{
Q_ASSERT(m_builder);
return m_builder->globalFunctions();
diff --git a/sources/shiboken6/ApiExtractor/apiextractor.h b/sources/shiboken6/ApiExtractor/apiextractor.h
index f9a33ae60..856734593 100644
--- a/sources/shiboken6/ApiExtractor/apiextractor.h
+++ b/sources/shiboken6/ApiExtractor/apiextractor.h
@@ -83,7 +83,7 @@ public:
void setLanguageLevel(LanguageLevel languageLevel);
const AbstractMetaEnumList &globalEnums() const;
- const AbstractMetaFunctionList &globalFunctions() const;
+ const AbstractMetaFunctionCList &globalFunctions() const;
const AbstractMetaClassList &classes() const;
const AbstractMetaClassList &smartPointers() const;
AbstractMetaClassList classesTopologicalSorted(const Dependencies &additionalDependencies = Dependencies()) const;
diff --git a/sources/shiboken6/ApiExtractor/docparser.cpp b/sources/shiboken6/ApiExtractor/docparser.cpp
index 52afbfb84..d2f8a5234 100644
--- a/sources/shiboken6/ApiExtractor/docparser.cpp
+++ b/sources/shiboken6/ApiExtractor/docparser.cpp
@@ -73,7 +73,7 @@ QString DocParser::execXQuery(const XQueryPtr &xquery, const QString& query) con
return result;
}
-bool DocParser::skipForQuery(const AbstractMetaFunction *func)
+bool DocParser::skipForQuery(const AbstractMetaFunctionCPtr &func)
{
// Skip private functions and copies created by AbstractMetaClass::fixFunctions()
if (!func || func->isPrivate()
@@ -94,9 +94,9 @@ bool DocParser::skipForQuery(const AbstractMetaFunction *func)
return false;
}
-AbstractMetaFunctionList DocParser::documentableFunctions(const AbstractMetaClass *metaClass)
+AbstractMetaFunctionCList DocParser::documentableFunctions(const AbstractMetaClass *metaClass)
{
- AbstractMetaFunctionList result = metaClass->functionsInTargetLang();
+ auto result = metaClass->functionsInTargetLang();
for (int i = result.size() - 1; i >= 0; --i) {
if (DocParser::skipForQuery(result.at(i)) || result.at(i)->isUserAdded())
result.removeAt(i);
diff --git a/sources/shiboken6/ApiExtractor/docparser.h b/sources/shiboken6/ApiExtractor/docparser.h
index 1dccae4d6..37c914b43 100644
--- a/sources/shiboken6/ApiExtractor/docparser.h
+++ b/sources/shiboken6/ApiExtractor/docparser.h
@@ -112,14 +112,14 @@ public:
*/
virtual Documentation retrieveModuleDocumentation(const QString& name) = 0;
- static bool skipForQuery(const AbstractMetaFunction *func);
+ static bool skipForQuery(const AbstractMetaFunctionCPtr &func);
protected:
QString getDocumentation(const XQueryPtr &xquery, const QString& query,
const DocModificationList& mods) const;
- static AbstractMetaFunctionList documentableFunctions(const AbstractMetaClass *metaClass);
+ static AbstractMetaFunctionCList documentableFunctions(const AbstractMetaClass *metaClass);
private:
QString m_packageName;
diff --git a/sources/shiboken6/ApiExtractor/doxygenparser.cpp b/sources/shiboken6/ApiExtractor/doxygenparser.cpp
index 90afc245c..a731479c3 100644
--- a/sources/shiboken6/ApiExtractor/doxygenparser.cpp
+++ b/sources/shiboken6/ApiExtractor/doxygenparser.cpp
@@ -42,7 +42,7 @@
#include <QtCore/QFile>
#include <QtCore/QDir>
-static QString getSectionKindAttr(const AbstractMetaFunction *func)
+static QString getSectionKindAttr(const AbstractMetaFunctionCPtr &func)
{
if (func->isSignal())
return QLatin1String("signal");
@@ -121,8 +121,8 @@ void DoxygenParser::fillDocumentation(AbstractMetaClass* metaClass)
metaClass->setDocumentation(classDoc);
//Functions Documentation
- const AbstractMetaFunctionList &funcs = DocParser::documentableFunctions(metaClass);
- for (AbstractMetaFunction *func : funcs) {
+ const auto &funcs = DocParser::documentableFunctions(metaClass);
+ for (const auto &func : funcs) {
QString query = QLatin1String("/doxygen/compounddef/sectiondef");
// properties
if (func->isPropertyReader() || func->isPropertyWriter()
@@ -172,13 +172,13 @@ void DoxygenParser::fillDocumentation(AbstractMetaClass* metaClass)
QString doc = getDocumentation(xquery, funcQuery, DocModificationList());
if (doc.isEmpty()) {
qCWarning(lcShibokenDoc, "%s",
- qPrintable(msgCannotFindDocumentation(doxyFilePath, metaClass, func,
+ qPrintable(msgCannotFindDocumentation(doxyFilePath, metaClass, func.data(),
funcQuery)));
} else {
funcDoc.setValue(doc, tag.first);
}
}
- func->setDocumentation(funcDoc);
+ qSharedPointerConstCast<AbstractMetaFunction>(func)->setDocumentation(funcDoc);
isProperty = false;
}
diff --git a/sources/shiboken6/ApiExtractor/messages.cpp b/sources/shiboken6/ApiExtractor/messages.cpp
index e3ea87f76..5bdd58ae2 100644
--- a/sources/shiboken6/ApiExtractor/messages.cpp
+++ b/sources/shiboken6/ApiExtractor/messages.cpp
@@ -52,7 +52,7 @@ QString msgNoFunctionForModification(const AbstractMetaClass *klass,
const QString &signature,
const QString &originalSignature,
const QStringList &possibleSignatures,
- const AbstractMetaFunctionList &allFunctions)
+ const AbstractMetaFunctionCList &allFunctions)
{
QString result;
QTextStream str(&result);
diff --git a/sources/shiboken6/ApiExtractor/messages.h b/sources/shiboken6/ApiExtractor/messages.h
index d26200abf..21b16a264 100644
--- a/sources/shiboken6/ApiExtractor/messages.h
+++ b/sources/shiboken6/ApiExtractor/messages.h
@@ -64,7 +64,7 @@ QString msgNoFunctionForModification(const AbstractMetaClass *klass,
const QString &signature,
const QString &originalSignature,
const QStringList &possibleSignatures,
- const AbstractMetaFunctionList &allFunctions);
+ const AbstractMetaFunctionCList &allFunctions);
QString msgClassOfEnumNotFound(const EnumTypeEntry *entry);
diff --git a/sources/shiboken6/ApiExtractor/qtdocparser.cpp b/sources/shiboken6/ApiExtractor/qtdocparser.cpp
index 815532a38..3b5837c95 100644
--- a/sources/shiboken6/ApiExtractor/qtdocparser.cpp
+++ b/sources/shiboken6/ApiExtractor/qtdocparser.cpp
@@ -106,7 +106,7 @@ enum FunctionMatchFlags
};
static QString functionXQuery(const QString &classQuery,
- const AbstractMetaFunction *func,
+ const AbstractMetaFunctionCPtr &func,
unsigned matchFlags = MatchArgumentCount | MatchArgumentType
| DescriptionOnly)
{
@@ -165,7 +165,7 @@ static QString msgArgumentCountMatch(const AbstractMetaFunction *func,
QString QtDocParser::queryFunctionDocumentation(const QString &sourceFileName,
const AbstractMetaClass* metaClass,
const QString &classQuery,
- const AbstractMetaFunction *func,
+ const AbstractMetaFunctionCPtr &func,
const DocModificationList &signedModifs,
const XQueryPtr &xquery,
QString *errorMessage)
@@ -182,8 +182,11 @@ QString QtDocParser::queryFunctionDocumentation(const QString &sourceFileName,
const QString propertyQuery = classQuery + QLatin1String("/property[@name=\"")
+ prop.name() + QLatin1String("\"]/description");
const QString properyDocumentation = getDocumentation(xquery, propertyQuery, funcModifs);
- if (properyDocumentation.isEmpty())
- *errorMessage = msgCannotFindDocumentation(sourceFileName, metaClass, func, propertyQuery);
+ if (properyDocumentation.isEmpty()) {
+ *errorMessage =
+ msgCannotFindDocumentation(sourceFileName, metaClass, func.data(),
+ propertyQuery);
+ }
return properyDocumentation;
}
@@ -192,7 +195,7 @@ QString QtDocParser::queryFunctionDocumentation(const QString &sourceFileName,
const QString result = getDocumentation(xquery, fullQuery, funcModifs);
if (!result.isEmpty())
return result;
- *errorMessage = msgCannotFindDocumentation(sourceFileName, metaClass, func, fullQuery);
+ *errorMessage = msgCannotFindDocumentation(sourceFileName, metaClass, func.data(), fullQuery);
if (func->arguments().isEmpty()) // No arguments, can't be helped
return result;
// Test whether some mismatch in argument types occurred by checking for
@@ -208,7 +211,7 @@ QString QtDocParser::queryFunctionDocumentation(const QString &sourceFileName,
+ QLatin1String("\" obtained by matching the argument count only."));
return getDocumentation(xquery, countOnlyQuery, funcModifs);
}
- *errorMessage += msgArgumentCountMatch(func, signatures);
+ *errorMessage += msgArgumentCountMatch(func.data(), signatures);
return result;
}
@@ -269,14 +272,14 @@ void QtDocParser::fillDocumentation(AbstractMetaClass* metaClass)
metaClass->setDocumentation(doc);
//Functions Documentation
- const AbstractMetaFunctionList &funcs = DocParser::documentableFunctions(metaClass);
- for (AbstractMetaFunction *func : funcs) {
+ const auto &funcs = DocParser::documentableFunctions(metaClass);
+ for (const auto &func : funcs) {
const QString documentation =
queryFunctionDocumentation(sourceFileName, metaClass, classQuery,
func, signedModifs, xquery, &errorMessage);
if (!errorMessage.isEmpty())
qCWarning(lcShibokenDoc, "%s", qPrintable(errorMessage));
- func->setDocumentation(Documentation(documentation));
+ qSharedPointerConstCast<AbstractMetaFunction>(func)->setDocumentation(Documentation(documentation));
}
#if 0
// Fields
diff --git a/sources/shiboken6/ApiExtractor/qtdocparser.h b/sources/shiboken6/ApiExtractor/qtdocparser.h
index b01139de6..ee6542ca3 100644
--- a/sources/shiboken6/ApiExtractor/qtdocparser.h
+++ b/sources/shiboken6/ApiExtractor/qtdocparser.h
@@ -43,7 +43,7 @@ private:
QString queryFunctionDocumentation(const QString &sourceFileName,
const AbstractMetaClass* metaClass,
const QString &classQuery,
- const AbstractMetaFunction *func,
+ const AbstractMetaFunctionCPtr &func,
const DocModificationList &signedModifs,
const XQueryPtr &xquery,
QString *errorMessage);
diff --git a/sources/shiboken6/ApiExtractor/tests/testabstractmetaclass.cpp b/sources/shiboken6/ApiExtractor/tests/testabstractmetaclass.cpp
index 8e715866e..1fd77a01c 100644
--- a/sources/shiboken6/ApiExtractor/tests/testabstractmetaclass.cpp
+++ b/sources/shiboken6/ApiExtractor/tests/testabstractmetaclass.cpp
@@ -70,7 +70,7 @@ void TestAbstractMetaClass::testClassNameUnderNamespace()
QVERIFY(classes[0]->hasConstructors());
QCOMPARE(classes[0]->functions().size(), 2); // default ctor + copy ctor
- AbstractMetaFunctionList ctors = classes[0]->queryFunctions(AbstractMetaClass::Constructors);
+ auto ctors = classes[0]->queryFunctions(AbstractMetaClass::Constructors);
QCOMPARE(ctors.size(), 2);
if (ctors.constFirst()->minimalSignature() != QLatin1String("ClassName()"))
qSwap(ctors[0], ctors[1]);
@@ -88,11 +88,11 @@ void TestAbstractMetaClass::testClassNameUnderNamespace()
// QVERIFY(classes[0]->hasNonPrivateConstructor());
}
-static AbstractMetaFunctionList virtualFunctions(const AbstractMetaClass *c)
+static AbstractMetaFunctionCList virtualFunctions(const AbstractMetaClass *c)
{
- AbstractMetaFunctionList result;
- const AbstractMetaFunctionList &functions = c->functions();
- for (AbstractMetaFunction *f : functions) {
+ AbstractMetaFunctionCList result;
+ const auto &functions = c->functions();
+ for (const auto &f : functions) {
if (f->isVirtual())
result.append(f);
}
@@ -150,9 +150,9 @@ public:
QVERIFY(f->attributes() & AbstractMetaAttributes::FinalCppClass);
// implementing class, ownclass, declaringclass
- AbstractMetaFunction *ctorA = a->queryFunctions(AbstractMetaClass::Constructors).constFirst();
- AbstractMetaFunction *ctorB = b->queryFunctions(AbstractMetaClass::Constructors).constFirst();
- AbstractMetaFunction *ctorC = c->queryFunctions(AbstractMetaClass::Constructors).constFirst();
+ const auto ctorA = a->queryFunctions(AbstractMetaClass::Constructors).constFirst();
+ const auto ctorB = b->queryFunctions(AbstractMetaClass::Constructors).constFirst();
+ const auto ctorC = c->queryFunctions(AbstractMetaClass::Constructors).constFirst();
QVERIFY(ctorA->isConstructor());
QVERIFY(!ctorA->isVirtual());
QVERIFY(ctorB->isConstructor());
@@ -163,19 +163,19 @@ public:
QCOMPARE(ctorA->ownerClass(), a);
QCOMPARE(ctorA->declaringClass(), a);
- const AbstractMetaFunctionList virtualFunctionsA = virtualFunctions(a);
- const AbstractMetaFunctionList virtualFunctionsB = virtualFunctions(b);
- const AbstractMetaFunctionList virtualFunctionsC = virtualFunctions(c);
- const AbstractMetaFunctionList virtualFunctionsF = virtualFunctions(f);
+ const auto virtualFunctionsA = virtualFunctions(a);
+ const auto virtualFunctionsB = virtualFunctions(b);
+ const auto virtualFunctionsC = virtualFunctions(c);
+ const auto virtualFunctionsF = virtualFunctions(f);
QCOMPARE(virtualFunctionsA.size(), 1); // Add a pureVirtualMethods method !?
QCOMPARE(virtualFunctionsB.size(), 1);
QCOMPARE(virtualFunctionsC.size(), 1);
QCOMPARE(virtualFunctionsF.size(), 1);
- const AbstractMetaFunction* funcA = virtualFunctionsA.constFirst();
- const AbstractMetaFunction* funcB = virtualFunctionsB.constFirst();
- const AbstractMetaFunction* funcC = virtualFunctionsC.constFirst();
- const AbstractMetaFunction* funcF = virtualFunctionsF.constFirst();
+ const auto funcA = virtualFunctionsA.constFirst();
+ const auto funcB = virtualFunctionsB.constFirst();
+ const auto funcC = virtualFunctionsC.constFirst();
+ const auto funcF = virtualFunctionsF.constFirst();
QCOMPARE(funcA->ownerClass(), a);
QVERIFY(funcC->attributes() & AbstractMetaAttributes::VirtualCppMethod);
@@ -242,7 +242,7 @@ void TestAbstractMetaClass::testDefaultValues()
QCOMPARE(classes.count(), 2);
AbstractMetaClass* classA = AbstractMetaClass::findClass(classes, QLatin1String("A"));
QCOMPARE(classA->queryFunctionsByName(QLatin1String("method")).count(), 1);
- AbstractMetaFunction* method = classA->queryFunctionsByName(QLatin1String("method")).constFirst();
+ const auto method = classA->queryFunctionsByName(QLatin1String("method")).constFirst();
const AbstractMetaArgument &arg = method->arguments().constFirst();
QCOMPARE(arg.defaultValueExpression(), arg.originalDefaultValueExpression());
}
@@ -270,8 +270,9 @@ void TestAbstractMetaClass::testModifiedDefaultValues()
AbstractMetaClassList classes = builder->classes();
QCOMPARE(classes.count(), 2);
AbstractMetaClass* classA = AbstractMetaClass::findClass(classes, QLatin1String("A"));
- QCOMPARE(classA->queryFunctionsByName(QLatin1String("method")).count(), 1);
- AbstractMetaFunction *method = classA->queryFunctionsByName(QLatin1String("method")).constFirst();
+ const auto methodMatches = classA->queryFunctionsByName(QLatin1String("method"));
+ QCOMPARE(methodMatches.count(), 1);
+ const auto method = methodMatches.constFirst();
const AbstractMetaArgument &arg = method->arguments().constFirst();
QCOMPARE(arg.defaultValueExpression(), QLatin1String("Hello"));
QCOMPARE(arg.originalDefaultValueExpression(), QLatin1String("A::B()"));
@@ -326,8 +327,8 @@ void TestAbstractMetaClass::testForwardDeclaredInnerClass()
QVERIFY(classA);
const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("A::B"));
QVERIFY(classB);
- const AbstractMetaFunction *fooF = classB->findFunction(QLatin1String("foo"));
- QVERIFY(fooF);
+ const auto fooF = classB->findFunction(QLatin1String("foo"));
+ QVERIFY(!fooF.isNull());
}
void TestAbstractMetaClass::testSpecialFunctions()
@@ -356,11 +357,11 @@ void TestAbstractMetaClass::testSpecialFunctions()
const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A"));
QVERIFY(classA);
- AbstractMetaFunctionList ctors = classA->queryFunctions(AbstractMetaClass::Constructors);
+ auto ctors = classA->queryFunctions(AbstractMetaClass::Constructors);
QCOMPARE(ctors.size(), 2);
QCOMPARE(ctors.constFirst()->functionType(), AbstractMetaFunction::ConstructorFunction);
QCOMPARE(ctors.at(1)->functionType(), AbstractMetaFunction::CopyConstructorFunction);
- AbstractMetaFunctionList assigmentOps = classA->queryFunctionsByName(QLatin1String("operator="));
+ auto assigmentOps = classA->queryFunctionsByName(QLatin1String("operator="));
QCOMPARE(assigmentOps.size(), 1);
QCOMPARE(assigmentOps.constFirst()->functionType(),
AbstractMetaFunction::AssignmentOperatorFunction);
@@ -424,7 +425,7 @@ void TestAbstractMetaClass::testClassDefaultConstructors()
QVERIFY(classA);
QCOMPARE(classA->functions().size(), 2);
- AbstractMetaFunctionList ctors = classA->queryFunctions(AbstractMetaClass::Constructors);
+ auto ctors = classA->queryFunctions(AbstractMetaClass::Constructors);
QCOMPARE(ctors.size(), 2);
if (ctors.constFirst()->minimalSignature() != QLatin1String("A()"))
qSwap(ctors[0], ctors[1]);
@@ -491,7 +492,7 @@ void TestAbstractMetaClass::testClassInheritedDefaultConstructors()
AbstractMetaClass* classA = AbstractMetaClass::findClass(classes, QLatin1String("A"));
QVERIFY(classA);
- AbstractMetaFunctionList ctors = classA->queryFunctions(AbstractMetaClass::Constructors);
+ auto ctors = classA->queryFunctions(AbstractMetaClass::Constructors);
QCOMPARE(ctors.size(), 2);
if (ctors.constFirst()->minimalSignature() != QLatin1String("A()"))
qSwap(ctors[0], ctors[1]);
@@ -529,7 +530,7 @@ void TestAbstractMetaClass::testAbstractClassDefaultConstructors()
AbstractMetaClass* classA = AbstractMetaClass::findClass(classes, QLatin1String("A"));
QVERIFY(classA);
- AbstractMetaFunctionList ctors = classA->queryFunctions(AbstractMetaClass::Constructors);
+ const auto ctors = classA->queryFunctions(AbstractMetaClass::Constructors);
QCOMPARE(ctors.size(), 1);
QCOMPARE(ctors.constFirst()->arguments().size(), 0);
QCOMPARE(ctors.constFirst()->minimalSignature(), QLatin1String("A()"));
@@ -550,7 +551,7 @@ void TestAbstractMetaClass::testObjectTypesMustNotHaveCopyConstructors()
AbstractMetaClass* classA = AbstractMetaClass::findClass(classes, QLatin1String("A"));
QVERIFY(classA);
- AbstractMetaFunctionList ctors = classA->queryFunctions(AbstractMetaClass::Constructors);
+ const auto ctors = classA->queryFunctions(AbstractMetaClass::Constructors);
QCOMPARE(ctors.size(), 1);
QCOMPARE(ctors.constFirst()->arguments().size(), 0);
QCOMPARE(ctors.constFirst()->minimalSignature(), QLatin1String("A()"));
diff --git a/sources/shiboken6/ApiExtractor/tests/testabstractmetatype.cpp b/sources/shiboken6/ApiExtractor/tests/testabstractmetatype.cpp
index e65b0f214..897940cd5 100644
--- a/sources/shiboken6/ApiExtractor/tests/testabstractmetatype.cpp
+++ b/sources/shiboken6/ApiExtractor/tests/testabstractmetatype.cpp
@@ -74,7 +74,7 @@ void TestAbstractMetaType::testConstCharPtrType()
QScopedPointer<AbstractMetaBuilder> builder(TestUtil::parse(cppCode, xmlCode));
QVERIFY(!builder.isNull());
QCOMPARE(builder->globalFunctions().size(), 1);
- AbstractMetaFunction *func = builder->globalFunctions().constFirst();
+ const auto func = builder->globalFunctions().constFirst();
AbstractMetaType rtype = func->type();
// Test properties of const char*
QVERIFY(!rtype.isVoid());
@@ -111,8 +111,7 @@ void TestAbstractMetaType::testApiVersionSupported()
QCOMPARE(classes.size(), 2);
- AbstractMetaFunctionList functions = builder->globalFunctions();
- QCOMPARE(functions.size(), 2);
+ QCOMPARE(builder->globalFunctions().size(), 2);
}
@@ -145,9 +144,9 @@ void TestAbstractMetaType::testCharType()
QCOMPARE(classes.size(), 1);
QCOMPARE(classes.constFirst()->package(), QLatin1String("Foo"));
- AbstractMetaFunctionList functions = builder->globalFunctions();
+ const auto functions = builder->globalFunctions();
QCOMPARE(functions.size(), 1);
- AbstractMetaFunction *func = functions.constFirst();
+ const auto func = functions.constFirst();
AbstractMetaType rtype = func->type();
// Test properties of const char*
QVERIFY(!rtype.isVoid());
@@ -205,9 +204,9 @@ void TestAbstractMetaType::testTypedefWithTemplates()
AbstractMetaClassList classes = builder->classes();
QCOMPARE(classes.size(), 1);
- AbstractMetaFunctionList functions = builder->globalFunctions();
+ const auto functions = builder->globalFunctions();
QCOMPARE(functions.count(), 1);
- AbstractMetaFunction *function = functions.constFirst();
+ const auto function = functions.constFirst();
AbstractMetaArgumentList args = function->arguments();
QCOMPARE(args.count(), 1);
const AbstractMetaArgument &arg = args.constFirst();
@@ -232,9 +231,9 @@ void TestAbstractMetaType::testObjectTypeUsedAsValue()
QCOMPARE(classes.size(), 1);
const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A"));
QVERIFY(classA);
- AbstractMetaFunctionList overloads = classA->queryFunctionsByName(QLatin1String("method"));
+ const auto overloads = classA->queryFunctionsByName(QLatin1String("method"));
QCOMPARE(overloads.count(), 1);
- AbstractMetaFunction* method = overloads.constFirst();
+ const auto method = overloads.constFirst();
QVERIFY(method);
AbstractMetaArgumentList args = method->arguments();
QCOMPARE(args.count(), 1);
diff --git a/sources/shiboken6/ApiExtractor/tests/testaddfunction.cpp b/sources/shiboken6/ApiExtractor/tests/testaddfunction.cpp
index 83720b8cb..7a52b9b33 100644
--- a/sources/shiboken6/ApiExtractor/tests/testaddfunction.cpp
+++ b/sources/shiboken6/ApiExtractor/tests/testaddfunction.cpp
@@ -166,7 +166,7 @@ void TestAddFunction::testAddFunctionConstructor()
const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A"));
QVERIFY(classA);
QCOMPARE(classA->functions().count(), 3); // default and added ctors
- AbstractMetaFunction *addedFunc = classA->functions().constLast();
+ const auto addedFunc = classA->functions().constLast();
QCOMPARE(addedFunc->visibility(), AbstractMetaFunction::Public);
QCOMPARE(addedFunc->functionType(), AbstractMetaFunction::ConstructorFunction);
QCOMPARE(addedFunc->arguments().size(), 1);
@@ -189,7 +189,7 @@ void TestAddFunction::testAddFunctionTagDefaultValues()
const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A"));
QVERIFY(classA);
QCOMPARE(classA->functions().count(), 3); // default ctor, default copy ctor and the added function
- AbstractMetaFunction *addedFunc = classA->functions().constLast();
+ const auto addedFunc = classA->functions().constLast();
QCOMPARE(addedFunc->visibility(), AbstractMetaFunction::Public);
QCOMPARE(addedFunc->functionType(), AbstractMetaFunction::NormalFunction);
QVERIFY(addedFunc->isUserAdded());
@@ -213,7 +213,7 @@ void TestAddFunction::testAddFunctionCodeSnippets()
AbstractMetaClassList classes = builder->classes();
const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A"));
QVERIFY(classA);
- AbstractMetaFunction *addedFunc = classA->functions().constLast();
+ const auto addedFunc = classA->functions().constLast();
QVERIFY(addedFunc->hasInjectedCode());
}
@@ -243,8 +243,8 @@ void TestAddFunction::testAddFunctionWithoutParenteses()
AbstractMetaClassList classes = builder->classes();
const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A"));
QVERIFY(classA);
- const AbstractMetaFunction* addedFunc = classA->findFunction(QLatin1String("func"));
- QVERIFY(addedFunc);
+ const auto addedFunc = classA->findFunction(QLatin1String("func"));
+ QVERIFY(!addedFunc.isNull());
QVERIFY(addedFunc->hasInjectedCode());
QCOMPARE(addedFunc->injectedCodeSnips(TypeSystem::CodeSnipPositionAny, TypeSystem::TargetLangCode).count(), 1);
}
@@ -278,8 +278,8 @@ void TestAddFunction::testAddFunctionWithDefaultArgs()
AbstractMetaClassList classes = builder->classes();
const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A"));
QVERIFY(classA);
- const AbstractMetaFunction* addedFunc = classA->findFunction(QLatin1String("func"));
- QVERIFY(addedFunc);
+ const auto addedFunc = classA->findFunction(QLatin1String("func"));
+ QVERIFY(!addedFunc.isNull());
const AbstractMetaArgument &arg = addedFunc->arguments().at(1);
QCOMPARE(arg.defaultValueExpression(), QLatin1String("2"));
}
@@ -342,8 +342,8 @@ void TestAddFunction::testAddFunctionWithVarargs()
AbstractMetaClassList classes = builder->classes();
const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A"));
QVERIFY(classA);
- const AbstractMetaFunction* addedFunc = classA->findFunction(QLatin1String("func"));
- QVERIFY(addedFunc);
+ const auto addedFunc = classA->findFunction(QLatin1String("func"));
+ QVERIFY(!addedFunc.isNull());
const AbstractMetaArgument &arg = addedFunc->arguments().constLast();
QVERIFY(arg.type().isVarargs());
QVERIFY(arg.type().typeEntry()->isVarargs());
@@ -366,8 +366,8 @@ void TestAddFunction::testAddStaticFunction()
AbstractMetaClassList classes = builder->classes();
const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A"));
QVERIFY(classA);
- const AbstractMetaFunction* addedFunc = classA->findFunction(QLatin1String("func"));
- QVERIFY(addedFunc);
+ const auto addedFunc = classA->findFunction(QLatin1String("func"));
+ QVERIFY(!addedFunc.isNull());
QVERIFY(addedFunc->isStatic());
}
@@ -388,7 +388,7 @@ void TestAddFunction::testAddGlobalFunction()
</typesystem>\n";
QScopedPointer<AbstractMetaBuilder> builder(TestUtil::parse(cppCode, xmlCode));
QVERIFY(!builder.isNull());
- AbstractMetaFunctionList globalFuncs = builder->globalFunctions();
+ const auto globalFuncs = builder->globalFunctions();
QCOMPARE(globalFuncs.count(), 2);
const AbstractMetaClass *classB = AbstractMetaClass::findClass(builder->classes(), QLatin1String("B"));
QVERIFY(classB);
@@ -414,7 +414,7 @@ void TestAddFunction::testAddFunctionWithApiVersion()
QScopedPointer<AbstractMetaBuilder> builder(TestUtil::parse(cppCode, xmlCode,
true, QLatin1String("0.1")));
QVERIFY(!builder.isNull());
- AbstractMetaFunctionList globalFuncs = builder->globalFunctions();
+ const auto globalFuncs = builder->globalFunctions();
QCOMPARE(globalFuncs.count(), 1);
}
@@ -439,7 +439,8 @@ void TestAddFunction::testModifyAddedFunction()
QVERIFY(!builder.isNull());
AbstractMetaClassList classes = builder->classes();
AbstractMetaClass* foo = AbstractMetaClass::findClass(classes, QLatin1String("Foo"));
- const AbstractMetaFunction* method = foo->findFunction(QLatin1String("method"));
+ const auto method = foo->findFunction(QLatin1String("method"));
+ QVERIFY(!method.isNull());
QCOMPARE(method->arguments().size(), 2);
const AbstractMetaArgument &arg = method->arguments().at(1);
QCOMPARE(arg.defaultValueExpression(), QLatin1String("0"));
@@ -469,12 +470,12 @@ void TestAddFunction::testAddFunctionOnTypedef()
AbstractMetaClass* foo = AbstractMetaClass::findClass(classes, QLatin1String("FooInt"));
QVERIFY(foo);
QVERIFY(foo->hasNonPrivateConstructor());
- const AbstractMetaFunctionList &lst = foo->queryFunctions(AbstractMetaClass::Constructors);
- for (const AbstractMetaFunction *f : lst)
+ const auto &lst = foo->queryFunctions(AbstractMetaClass::Constructors);
+ for (const auto &f : lst)
QVERIFY(f->signature().startsWith(f->name()));
QCOMPARE(lst.size(), 2);
- const AbstractMetaFunction* method = foo->findFunction(QLatin1String("method"));
- QVERIFY(method);
+ const auto method = foo->findFunction(QLatin1String("method"));
+ QVERIFY(!method.isNull());
}
void TestAddFunction::testAddFunctionWithTemplateArg()
@@ -490,7 +491,7 @@ void TestAddFunction::testAddFunctionWithTemplateArg()
QScopedPointer<AbstractMetaBuilder> builder(TestUtil::parse(cppCode, xmlCode));
QVERIFY(!builder.isNull());
QCOMPARE(builder->globalFunctions().size(), 1);
- AbstractMetaFunction *func = builder->globalFunctions().constFirst();
+ const auto func = builder->globalFunctions().constFirst();
const AbstractMetaArgument &arg = func->arguments().constFirst();
QCOMPARE(arg.type().instantiations().count(), 1);
}
diff --git a/sources/shiboken6/ApiExtractor/tests/testarrayargument.cpp b/sources/shiboken6/ApiExtractor/tests/testarrayargument.cpp
index df6280725..22cf7ab40 100644
--- a/sources/shiboken6/ApiExtractor/tests/testarrayargument.cpp
+++ b/sources/shiboken6/ApiExtractor/tests/testarrayargument.cpp
@@ -63,8 +63,8 @@ void TestArrayArgument::testArrayArgumentWithSizeDefinedByInteger()
static QString functionMinimalSignature(const AbstractMetaClass *c, const QString &name)
{
- const AbstractMetaFunction *f = c->findFunction(name);
- return f ? f->minimalSignature() : QString();
+ const auto f = c->findFunction(name);
+ return f.isNull() ? QString() : f->minimalSignature();
}
void TestArrayArgument::testArraySignature()
diff --git a/sources/shiboken6/ApiExtractor/tests/testconversionoperator.cpp b/sources/shiboken6/ApiExtractor/tests/testconversionoperator.cpp
index b9345ddbc..32071f533 100644
--- a/sources/shiboken6/ApiExtractor/tests/testconversionoperator.cpp
+++ b/sources/shiboken6/ApiExtractor/tests/testconversionoperator.cpp
@@ -65,14 +65,14 @@ void TestConversionOperator::testConversionOperator()
QCOMPARE(classC->functions().count(), 3);
QCOMPARE(classA->externalConversionOperators().count(), 2);
- AbstractMetaFunction *convOp = nullptr;
- for (AbstractMetaFunction *func : classB->functions()) {
+ AbstractMetaFunctionCPtr convOp;
+ for (const auto &func : classB->functions()) {
if (func->isConversionOperator()) {
convOp = func;
break;
}
}
- QVERIFY(convOp);
+ QVERIFY(!convOp.isNull());
QVERIFY(classA->externalConversionOperators().contains(convOp));
}
diff --git a/sources/shiboken6/ApiExtractor/tests/testenum.cpp b/sources/shiboken6/ApiExtractor/tests/testenum.cpp
index 710361b47..df744e994 100644
--- a/sources/shiboken6/ApiExtractor/tests/testenum.cpp
+++ b/sources/shiboken6/ApiExtractor/tests/testenum.cpp
@@ -64,7 +64,7 @@ void TestEnum::testEnumCppSignature()
QCOMPARE(globalEnums.constFirst().name(), QLatin1String("GlobalEnum"));
// enum as parameter of a function
- AbstractMetaFunctionList functions = builder->globalFunctions();
+ const auto functions = builder->globalFunctions();
QCOMPARE(functions.count(), 1);
QCOMPARE(functions.constFirst()->arguments().count(), 1);
QCOMPARE(functions.constFirst()->arguments().constFirst().type().cppSignature(),
@@ -73,10 +73,9 @@ void TestEnum::testEnumCppSignature()
// enum as parameter of a method
const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A"));
QCOMPARE(classA->enums().count(), 1);
- AbstractMetaFunctionList funcs = classA->queryFunctionsByName(QLatin1String("method"));
+ const auto funcs = classA->queryFunctionsByName(QLatin1String("method"));
QVERIFY(!funcs.isEmpty());
- AbstractMetaFunction *method = funcs.constFirst();
- QVERIFY(method);
+ const auto method = funcs.constFirst();
AbstractMetaArgument arg = method->arguments().constFirst();
QCOMPARE(arg.type().name(), QLatin1String("ClassEnum"));
QCOMPARE(arg.type().cppSignature(), QLatin1String("A::ClassEnum"));
diff --git a/sources/shiboken6/ApiExtractor/tests/testfunctiontag.cpp b/sources/shiboken6/ApiExtractor/tests/testfunctiontag.cpp
index ba8f22706..f58ea6f64 100644
--- a/sources/shiboken6/ApiExtractor/tests/testfunctiontag.cpp
+++ b/sources/shiboken6/ApiExtractor/tests/testfunctiontag.cpp
@@ -82,7 +82,7 @@ void TestFunctionTag::testRenameGlobalFunction()
QVERIFY(func);
QCOMPARE(builder->globalFunctions().size(), 1);
- const AbstractMetaFunction *metaFunc = builder->globalFunctions().constFirst();
+ const auto metaFunc = builder->globalFunctions().constFirst();
QVERIFY(metaFunc);
QCOMPARE(metaFunc->modifications().size(), 1);
diff --git a/sources/shiboken6/ApiExtractor/tests/testimplicitconversions.cpp b/sources/shiboken6/ApiExtractor/tests/testimplicitconversions.cpp
index ef9699cad..928122967 100644
--- a/sources/shiboken6/ApiExtractor/tests/testimplicitconversions.cpp
+++ b/sources/shiboken6/ApiExtractor/tests/testimplicitconversions.cpp
@@ -58,7 +58,7 @@ void TestImplicitConversions::testWithPrivateCtors()
const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A"));
const AbstractMetaClass *classC = AbstractMetaClass::findClass(classes, QLatin1String("C"));
- AbstractMetaFunctionList implicitConvs = classA->implicitConversions();
+ const auto implicitConvs = classA->implicitConversions();
QCOMPARE(implicitConvs.count(), 1);
QCOMPARE(implicitConvs.constFirst()->arguments().constFirst().type().typeEntry(),
classC->typeEntry());
@@ -88,7 +88,7 @@ void TestImplicitConversions::testWithModifiedVisibility()
QCOMPARE(classes.count(), 2);
const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A"));
const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("B"));
- AbstractMetaFunctionList implicitConvs = classA->implicitConversions();
+ const auto implicitConvs = classA->implicitConversions();
QCOMPARE(implicitConvs.count(), 1);
QCOMPARE(implicitConvs.constFirst()->arguments().constFirst().type().typeEntry(),
classB->typeEntry());
@@ -122,7 +122,7 @@ void TestImplicitConversions::testWithAddedCtor()
QCOMPARE(classes.count(), 3);
const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A"));
- AbstractMetaFunctionList implicitConvs = classA->implicitConversions();
+ auto implicitConvs = classA->implicitConversions();
QCOMPARE(implicitConvs.count(), 2);
// Added constructors with custom types should never result in implicit converters.
@@ -149,17 +149,17 @@ void TestImplicitConversions::testWithExternalConversionOperator()
QCOMPARE(classes.count(), 2);
AbstractMetaClass* classA = AbstractMetaClass::findClass(classes, QLatin1String("A"));
AbstractMetaClass* classB = AbstractMetaClass::findClass(classes, QLatin1String("B"));
- AbstractMetaFunctionList implicitConvs = classA->implicitConversions();
+ const auto implicitConvs = classA->implicitConversions();
QCOMPARE(implicitConvs.count(), 1);
- AbstractMetaFunctionList externalConvOps = classA->externalConversionOperators();
+ const auto &externalConvOps = classA->externalConversionOperators();
QCOMPARE(externalConvOps.count(), 1);
- const AbstractMetaFunction *convOp = nullptr;
- for (const AbstractMetaFunction *func : classB->functions()) {
+ AbstractMetaFunctionCPtr convOp;
+ for (const auto &func : classB->functions()) {
if (func->isConversionOperator())
convOp = func;
}
- QVERIFY(convOp);
+ QVERIFY(!convOp.isNull());
QCOMPARE(implicitConvs.constFirst(), convOp);
}
diff --git a/sources/shiboken6/ApiExtractor/tests/testmodifyfunction.cpp b/sources/shiboken6/ApiExtractor/tests/testmodifyfunction.cpp
index 6928448b7..0fa07b75c 100644
--- a/sources/shiboken6/ApiExtractor/tests/testmodifyfunction.cpp
+++ b/sources/shiboken6/ApiExtractor/tests/testmodifyfunction.cpp
@@ -67,8 +67,8 @@ void TestModifyFunction::testRenameArgument()
QVERIFY(!builder.isNull());
AbstractMetaClassList classes = builder->classes();
const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A"));
- const AbstractMetaFunction* func = classA->findFunction(QLatin1String("method"));
- Q_ASSERT(func);
+ const auto func = classA->findFunction(QLatin1String("method"));
+ QVERIFY(!func.isNull());
QCOMPARE(func->argumentName(1), QLatin1String("otherArg"));
}
@@ -95,7 +95,8 @@ void TestModifyFunction::testOwnershipTransfer()
QVERIFY(!builder.isNull());
AbstractMetaClassList classes = builder->classes();
const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("B"));
- const AbstractMetaFunction* func = classB->findFunction(QLatin1String("method"));
+ const auto func = classB->findFunction(QLatin1String("method"));
+ QVERIFY(!func.isNull());
QCOMPARE(func->ownership(func->ownerClass(), TypeSystem::TargetLangCode, 0), TypeSystem::CppOwnership);
}
@@ -143,7 +144,7 @@ void TestModifyFunction::invalidateAfterUse()
QVERIFY(!builder.isNull());
AbstractMetaClassList classes = builder->classes();
const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("B"));
- const AbstractMetaFunction* func = classB->findFunction(QLatin1String("call"));
+ auto func = classB->findFunction(QLatin1String("call"));
QCOMPARE(func->modifications().size(), 1);
QCOMPARE(func->modifications().at(0).argument_mods().size(), 1);
QVERIFY(func->modifications().at(0).argument_mods().at(0).resetAfterUse);
@@ -216,7 +217,7 @@ void TestModifyFunction::testWithApiVersion()
QVERIFY(!builder.isNull());
AbstractMetaClassList classes = builder->classes();
AbstractMetaClass* classB = AbstractMetaClass::findClass(classes, QLatin1String("B"));
- const AbstractMetaFunction* func = classB->findFunction(QLatin1String("method"));
+ auto func = classB->findFunction(QLatin1String("method"));
QCOMPARE(func->ownership(func->ownerClass(), TypeSystem::TargetLangCode, 0), TypeSystem::CppOwnership);
@@ -256,28 +257,28 @@ struct A {
QVERIFY(classA);
// Nothing specified, true
- const AbstractMetaFunction *f1 = classA->findFunction(QLatin1String("f1"));
- QVERIFY(f1);
+ const auto f1 = classA->findFunction(QLatin1String("f1"));
+ QVERIFY(!f1.isNull());
QVERIFY(!f1->allowThread());
// 'auto' specified, should be false for nontrivial function
- const AbstractMetaFunction *f2 = classA->findFunction(QLatin1String("f2"));
- QVERIFY(f2);
+ const auto f2 = classA->findFunction(QLatin1String("f2"));
+ QVERIFY(!f2.isNull());
QVERIFY(f2->allowThread());
// 'no' specified, should be false
- const AbstractMetaFunction *f3 = classA->findFunction(QLatin1String("f3"));
- QVERIFY(f3);
+ const auto f3 = classA->findFunction(QLatin1String("f3"));
+ QVERIFY(!f3.isNull());
QVERIFY(!f3->allowThread());
// Nothing specified, should be false for simple getter
- const AbstractMetaFunction *getter1 = classA->findFunction(QLatin1String("getter1"));
- QVERIFY(getter1);
+ const auto getter1 = classA->findFunction(QLatin1String("getter1"));
+ QVERIFY(!getter1.isNull());
QVERIFY(!getter1->allowThread());
// Forced to true simple getter
- const AbstractMetaFunction *getter2 = classA->findFunction(QLatin1String("getter2"));
- QVERIFY(getter2);
+ const auto getter2 = classA->findFunction(QLatin1String("getter2"));
+ QVERIFY(!getter2.isNull());
QVERIFY(getter2->allowThread()); // Forced to true simple getter
}
@@ -310,8 +311,8 @@ void TestModifyFunction::testGlobalFunctionModification()
ArgumentModification argMod = argMods.constFirst();
QCOMPARE(argMod.replacedDefaultExpression, QLatin1String("A()"));
- const AbstractMetaFunction *func = builder->globalFunctions().constFirst();
- QVERIFY(func);
+ QVERIFY(!builder->globalFunctions().isEmpty());
+ const auto func = builder->globalFunctions().constFirst();
QCOMPARE(func->arguments().count(), 1);
const AbstractMetaArgument &arg = func->arguments().constFirst();
QCOMPARE(arg.type().cppSignature(), QLatin1String("A *"));
@@ -452,19 +453,19 @@ void TestModifyFunction::testScopedModifications()
const AbstractMetaClass *classA = AbstractMetaClass::findClass(builder->classes(), QLatin1String("A"));
QVERIFY(classA);
- const AbstractMetaFunction *f = classA->findFunction(QStringLiteral("unspecified"));
- QVERIFY(f);
+ auto f = classA->findFunction(QStringLiteral("unspecified"));
+ QVERIFY(!f.isNull());
QCOMPARE(f->exceptionSpecification(), ExceptionSpecification::Unknown);
QCOMPARE(f->generateExceptionHandling(), expectedGenerateUnspecified);
QCOMPARE(f->allowThread(), expectedAllowThread);
f = classA->findFunction(QStringLiteral("nonThrowing"));
- QVERIFY(f);
+ QVERIFY(!f.isNull());
QCOMPARE(f->exceptionSpecification(), ExceptionSpecification::NoExcept);
QCOMPARE(f->generateExceptionHandling(), expectedGenerateNonThrowing);
f = classA->findFunction(QStringLiteral("throwing"));
- QVERIFY(f);
+ QVERIFY(!f.isNull());
QCOMPARE(f->exceptionSpecification(), ExceptionSpecification::Throws);
QCOMPARE(f->generateExceptionHandling(), expectedGenerateThrowing);
}
diff --git a/sources/shiboken6/ApiExtractor/tests/testmultipleinheritance.cpp b/sources/shiboken6/ApiExtractor/tests/testmultipleinheritance.cpp
index 7702d37d9..748adfc39 100644
--- a/sources/shiboken6/ApiExtractor/tests/testmultipleinheritance.cpp
+++ b/sources/shiboken6/ApiExtractor/tests/testmultipleinheritance.cpp
@@ -62,8 +62,7 @@ void TestMultipleInheritance::testVirtualClass()
const AbstractMetaClass *classD = AbstractMetaClass::findClass(classes, QLatin1String("D"));
bool functionFound = false;
- const AbstractMetaFunctionList &functions = classD->functions();
- for (AbstractMetaFunction *f : functions) {
+ for (const auto &f : classD->functions()) {
if (f->name() == QLatin1String("theBug")) {
functionFound = true;
break;
diff --git a/sources/shiboken6/ApiExtractor/tests/testnamespace.cpp b/sources/shiboken6/ApiExtractor/tests/testnamespace.cpp
index 7f0addd6b..99aabe780 100644
--- a/sources/shiboken6/ApiExtractor/tests/testnamespace.cpp
+++ b/sources/shiboken6/ApiExtractor/tests/testnamespace.cpp
@@ -57,8 +57,8 @@ void NamespaceTest::testNamespaceMembers()
QVERIFY(ns);
auto metaEnum = ns->findEnum(QLatin1String("Option"));
QVERIFY(metaEnum.has_value());
- const AbstractMetaFunction* func = ns->findFunction(QLatin1String("foo"));
- QVERIFY(func);
+ const auto func = ns->findFunction(QLatin1String("foo"));
+ QVERIFY(!func.isNull());
}
void NamespaceTest::testNamespaceInnerClassMembers()
@@ -89,8 +89,8 @@ void NamespaceTest::testNamespaceInnerClassMembers()
QVERIFY(ins);
const AbstractMetaClass *sc = AbstractMetaClass::findClass(classes, QLatin1String("OuterNamespace::InnerNamespace::SomeClass"));
QVERIFY(sc);
- const AbstractMetaFunction* meth = sc->findFunction(QLatin1String("method"));
- QVERIFY(meth);
+ const auto meth = sc->findFunction(QLatin1String("method"));
+ QVERIFY(!meth.isNull());
}
QTEST_APPLESS_MAIN(NamespaceTest)
diff --git a/sources/shiboken6/ApiExtractor/tests/testnestedtypes.cpp b/sources/shiboken6/ApiExtractor/tests/testnestedtypes.cpp
index 4613eeaa5..71daef051 100644
--- a/sources/shiboken6/ApiExtractor/tests/testnestedtypes.cpp
+++ b/sources/shiboken6/ApiExtractor/tests/testnestedtypes.cpp
@@ -73,7 +73,7 @@ void TestNestedTypes::testNestedTypesModifications()
CodeSnip snip = ins->typeEntry()->codeSnips().constFirst();
QCOMPARE(snip.code().trimmed(), QLatin1String("custom_code1();"));
- AbstractMetaFunction *addedFunc = ins->functions().constFirst();
+ const auto addedFunc = ins->functions().constFirst();
QVERIFY(addedFunc->isUserAdded());
QCOMPARE(addedFunc->visibility(), AbstractMetaFunction::Public);
QCOMPARE(addedFunc->functionType(), AbstractMetaFunction::NormalFunction);
@@ -88,7 +88,7 @@ void TestNestedTypes::testNestedTypesModifications()
const AbstractMetaClass *sc = AbstractMetaClass::findClass(classes, QLatin1String("OuterNamespace::InnerNamespace::SomeClass"));
QVERIFY(ins);
QCOMPARE(sc->functions().count(), 2); // default constructor and removed method
- AbstractMetaFunction *removedFunc = sc->functions().constLast();
+ const auto removedFunc = sc->functions().constLast();
QVERIFY(removedFunc->isModifiedRemoved());
}
diff --git a/sources/shiboken6/ApiExtractor/tests/testnumericaltypedef.cpp b/sources/shiboken6/ApiExtractor/tests/testnumericaltypedef.cpp
index d613074fe..de2f30135 100644
--- a/sources/shiboken6/ApiExtractor/tests/testnumericaltypedef.cpp
+++ b/sources/shiboken6/ApiExtractor/tests/testnumericaltypedef.cpp
@@ -50,9 +50,8 @@ void TestNumericalTypedef::testNumericalTypedef()
QVERIFY(!builder.isNull());
QCOMPARE(builder->globalFunctions().size(), 2);
- const AbstractMetaFunction *funcDouble = builder->globalFunctions().constFirst();
- QVERIFY(funcDouble);
- const AbstractMetaFunction *funcReal = builder->globalFunctions().constLast();
+ auto funcDouble = builder->globalFunctions().constFirst();
+ auto funcReal = builder->globalFunctions().constLast();
QVERIFY(funcReal);
if (funcDouble->name() == QLatin1String("funcReal"))
@@ -90,10 +89,8 @@ void TestNumericalTypedef::testUnsignedNumericalTypedef()
QVERIFY(!builder.isNull());
QCOMPARE(builder->globalFunctions().size(), 2);
- const AbstractMetaFunction *funcUnsignedShort = builder->globalFunctions().constFirst();
- QVERIFY(funcUnsignedShort);
- const AbstractMetaFunction *funcUShort = builder->globalFunctions().constLast();
- QVERIFY(funcUShort);
+ auto funcUnsignedShort = builder->globalFunctions().constFirst();
+ auto funcUShort = builder->globalFunctions().constLast();
if (funcUnsignedShort->name() == QLatin1String("funcUShort"))
std::swap(funcUnsignedShort, funcUShort);
diff --git a/sources/shiboken6/ApiExtractor/tests/testrefcounttag.cpp b/sources/shiboken6/ApiExtractor/tests/testrefcounttag.cpp
index 9f1e32e05..a589827e4 100644
--- a/sources/shiboken6/ApiExtractor/tests/testrefcounttag.cpp
+++ b/sources/shiboken6/ApiExtractor/tests/testrefcounttag.cpp
@@ -55,8 +55,8 @@ void TestRefCountTag::testReferenceCountTag()
QVERIFY(!builder.isNull());
AbstractMetaClassList classes = builder->classes();
const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("B"));
- const AbstractMetaFunction* func = classB->findFunction(QLatin1String("keepObject"));
- QVERIFY(func);
+ const auto func = classB->findFunction(QLatin1String("keepObject"));
+ QVERIFY(!func.isNull());
ReferenceCount refCount = func->modifications().constFirst().argument_mods().constFirst().referenceCounts.constFirst();
QCOMPARE(refCount.action, ReferenceCount::Add);
}
@@ -88,8 +88,8 @@ void TestRefCountTag::testWithApiVersion()
QVERIFY(!builder.isNull());
AbstractMetaClassList classes = builder->classes();
const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("B"));
- const AbstractMetaFunction* func = classB->findFunction(QLatin1String("keepObject"));
- QVERIFY(func);
+ const auto func = classB->findFunction(QLatin1String("keepObject"));
+ QVERIFY(!func.isNull());
ReferenceCount refCount = func->modifications().constFirst().argument_mods().constFirst().referenceCounts.constFirst();
QCOMPARE(refCount.action, ReferenceCount::Add);
diff --git a/sources/shiboken6/ApiExtractor/tests/testreferencetopointer.cpp b/sources/shiboken6/ApiExtractor/tests/testreferencetopointer.cpp
index 6cd719743..b929ebd66 100644
--- a/sources/shiboken6/ApiExtractor/tests/testreferencetopointer.cpp
+++ b/sources/shiboken6/ApiExtractor/tests/testreferencetopointer.cpp
@@ -50,8 +50,8 @@ void TestReferenceToPointer::testReferenceToPointerArgument()
AbstractMetaClassList classes = builder->classes();
const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("B"));
QVERIFY(classB);
- const AbstractMetaFunction* func = classB->findFunction(QLatin1String("dummy"));
- QVERIFY(func);
+ const auto func = classB->findFunction(QLatin1String("dummy"));
+ QVERIFY(!func.isNull());
QCOMPARE(func->arguments().constFirst().type().minimalSignature(), QLatin1String("A*&"));
}
diff --git a/sources/shiboken6/ApiExtractor/tests/testremoveimplconv.cpp b/sources/shiboken6/ApiExtractor/tests/testremoveimplconv.cpp
index bd78ad80d..41103c24e 100644
--- a/sources/shiboken6/ApiExtractor/tests/testremoveimplconv.cpp
+++ b/sources/shiboken6/ApiExtractor/tests/testremoveimplconv.cpp
@@ -62,7 +62,7 @@ void TestRemoveImplConv::testRemoveImplConv()
QVERIFY(classB);
const AbstractMetaClass *classC = AbstractMetaClass::findClass(classes, QLatin1String("C"));
QVERIFY(classC);
- AbstractMetaFunctionList implConv = classC->implicitConversions();
+ const auto implConv = classC->implicitConversions();
QCOMPARE(implConv.count(), 1);
QCOMPARE(implConv.constFirst()->arguments().constFirst().type().typeEntry(),
classB->typeEntry());
diff --git a/sources/shiboken6/ApiExtractor/tests/testremoveoperatormethod.cpp b/sources/shiboken6/ApiExtractor/tests/testremoveoperatormethod.cpp
index 3b9936571..9824d1bf0 100644
--- a/sources/shiboken6/ApiExtractor/tests/testremoveoperatormethod.cpp
+++ b/sources/shiboken6/ApiExtractor/tests/testremoveoperatormethod.cpp
@@ -106,8 +106,7 @@ void TestRemoveOperatorMethod::testRemoveOperatorMethod()
removedSignatures.append(QLatin1String("operator>>(Char&)"));
removedSignatures.append(QLatin1String("operator>>(String&)"));
int notRemoved = classA->functions().size();
- const AbstractMetaFunctionList &functions = classA->functions();
- for (const AbstractMetaFunction *f : functions) {
+ for (const auto &f : classA->functions()) {
QCOMPARE(f->isModifiedRemoved(), bool(removedSignatures.contains(f->minimalSignature())));
notRemoved -= int(f->isModifiedRemoved());
}
diff --git a/sources/shiboken6/ApiExtractor/tests/testresolvetype.cpp b/sources/shiboken6/ApiExtractor/tests/testresolvetype.cpp
index 2203f3648..4c2930234 100644
--- a/sources/shiboken6/ApiExtractor/tests/testresolvetype.cpp
+++ b/sources/shiboken6/ApiExtractor/tests/testresolvetype.cpp
@@ -58,7 +58,8 @@ void TestResolveType::testResolveReturnTypeFromParentScope()
AbstractMetaClassList classes = builder->classes();
const AbstractMetaClass *classD = AbstractMetaClass::findClass(classes, QLatin1String("A::D"));
QVERIFY(classD);
- const AbstractMetaFunction* meth = classD->findFunction(QLatin1String("method"));
+ const auto meth = classD->findFunction(QLatin1String("method"));
+ QVERIFY(!meth.isNull());
QVERIFY(meth);
}
diff --git a/sources/shiboken6/ApiExtractor/tests/testreverseoperators.cpp b/sources/shiboken6/ApiExtractor/tests/testreverseoperators.cpp
index 66dd6edbf..3ad77c86f 100644
--- a/sources/shiboken6/ApiExtractor/tests/testreverseoperators.cpp
+++ b/sources/shiboken6/ApiExtractor/tests/testreverseoperators.cpp
@@ -52,9 +52,9 @@ void TestReverseOperators::testReverseSum()
QVERIFY(classA);
QCOMPARE(classA->functions().count(), 4);
- const AbstractMetaFunction* reverseOp = nullptr;
- const AbstractMetaFunction* normalOp = 0;
- for (const AbstractMetaFunction *func : classA->functions()) {
+ AbstractMetaFunctionCPtr reverseOp;
+ AbstractMetaFunctionCPtr normalOp;
+ for (const auto &func : classA->functions()) {
if (func->name() == QLatin1String("operator+")) {
if (func->isReverseOperator())
reverseOp = func;
@@ -63,10 +63,10 @@ void TestReverseOperators::testReverseSum()
}
}
- QVERIFY(normalOp);
+ QVERIFY(!normalOp.isNull());
QVERIFY(!normalOp->isReverseOperator());
QCOMPARE(normalOp->arguments().count(), 1);
- QVERIFY(reverseOp);
+ QVERIFY(!reverseOp.isNull());
QVERIFY(reverseOp->isReverseOperator());
QCOMPARE(reverseOp->arguments().count(), 1);
}
@@ -98,9 +98,9 @@ void TestReverseOperators::testReverseSumWithAmbiguity()
QVERIFY(classB);
QCOMPARE(classB->functions().count(), 4);
- const AbstractMetaFunction *reverseOp = nullptr;
- const AbstractMetaFunction *normalOp = nullptr;
- for (const AbstractMetaFunction *func : classB->functions()) {
+ AbstractMetaFunctionCPtr reverseOp;
+ AbstractMetaFunctionCPtr normalOp;
+ for (const auto &func : classB->functions()) {
if (func->name() == QLatin1String("operator+")) {
if (func->isReverseOperator())
reverseOp = func;
@@ -108,11 +108,11 @@ void TestReverseOperators::testReverseSumWithAmbiguity()
normalOp = func;
}
}
- QVERIFY(normalOp);
+ QVERIFY(!normalOp.isNull());
QVERIFY(!normalOp->isReverseOperator());
QCOMPARE(normalOp->arguments().count(), 1);
QCOMPARE(normalOp->minimalSignature(), QLatin1String("operator+(B,A)"));
- QVERIFY(reverseOp);
+ QVERIFY(!reverseOp.isNull());
QVERIFY(reverseOp->isReverseOperator());
QCOMPARE(reverseOp->arguments().count(), 1);
QCOMPARE(reverseOp->minimalSignature(), QLatin1String("operator+(A,B)"));
diff --git a/sources/shiboken6/ApiExtractor/tests/testtemplates.cpp b/sources/shiboken6/ApiExtractor/tests/testtemplates.cpp
index 2ddccc900..2a5bd750d 100644
--- a/sources/shiboken6/ApiExtractor/tests/testtemplates.cpp
+++ b/sources/shiboken6/ApiExtractor/tests/testtemplates.cpp
@@ -77,7 +77,8 @@ namespace Internet {
AbstractMetaClass* classB = AbstractMetaClass::findClass(classes, QLatin1String("Bookmarks"));
QVERIFY(classB);
- const AbstractMetaFunction* func = classB->findFunction(QLatin1String("list"));
+ const auto func = classB->findFunction(QLatin1String("list"));
+ QVERIFY(!func.isNull());
AbstractMetaType funcType = func->type();
QVERIFY(!funcType.isVoid());
QCOMPARE(funcType.cppSignature(), QLatin1String("QList<Internet::Url >"));
@@ -116,7 +117,8 @@ namespace Namespace {
QVERIFY(classB);
QVERIFY(!classB->baseClass());
QVERIFY(classB->baseClassName().isEmpty());
- const AbstractMetaFunction* func = classB->findFunction(QLatin1String("foo"));
+ const auto func = classB->findFunction(QLatin1String("foo"));
+ QVERIFY(!func.isNull());
AbstractMetaType argType = func->arguments().constFirst().type();
QCOMPARE(argType.instantiations().count(), 1);
QCOMPARE(argType.typeEntry()->qualifiedCppName(), QLatin1String("QList"));
@@ -146,10 +148,10 @@ void func(List<int> arg) {}
QScopedPointer<AbstractMetaBuilder> builder(TestUtil::parse(cppCode, xmlCode, false));
QVERIFY(!builder.isNull());
- AbstractMetaFunctionList globalFuncs = builder->globalFunctions();
+ const auto globalFuncs = builder->globalFunctions();
QCOMPARE(globalFuncs.count(), 1);
- AbstractMetaFunction *func = globalFuncs.constFirst();
+ const auto func = globalFuncs.constFirst();
QCOMPARE(func->minimalSignature(), QLatin1String("func(List<int>)"));
QCOMPARE(func->arguments().constFirst().type().cppSignature(),
QLatin1String("List<int >"));
@@ -171,10 +173,10 @@ void func(List<int>* arg) {}
QScopedPointer<AbstractMetaBuilder> builder(TestUtil::parse(cppCode, xmlCode, false));
QVERIFY(!builder.isNull());
- AbstractMetaFunctionList globalFuncs = builder->globalFunctions();
+ AbstractMetaFunctionCList globalFuncs = builder->globalFunctions();
QCOMPARE(globalFuncs.count(), 1);
- AbstractMetaFunction* func = globalFuncs.constFirst();
+ const auto func = globalFuncs.constFirst();
QCOMPARE(func->minimalSignature(), QLatin1String("func(List<int>*)"));
QCOMPARE(func->arguments().constFirst().type().cppSignature(),
QLatin1String("List<int > *"));
@@ -196,10 +198,10 @@ void func(List<int>& arg) {}
QScopedPointer<AbstractMetaBuilder> builder(TestUtil::parse(cppCode, xmlCode, false));
QVERIFY(!builder.isNull());
- AbstractMetaFunctionList globalFuncs = builder->globalFunctions();
+ const auto globalFuncs = builder->globalFunctions();
QCOMPARE(globalFuncs.count(), 1);
- AbstractMetaFunction* func = globalFuncs.constFirst();
+ const auto func = globalFuncs.constFirst();
QCOMPARE(func->minimalSignature(), QLatin1String("func(List<int>&)"));
QCOMPARE(func->arguments().constFirst().type().cppSignature(),
QLatin1String("List<int > &"));
@@ -230,13 +232,13 @@ struct List {
QCOMPARE(templates.count(), 1);
const AbstractMetaClass *list = templates.constFirst();
// Verify that the parameter of "void append(List l)" gets fixed to "List<T >"
- const AbstractMetaFunction *append = list->findFunction(QStringLiteral("append"));
- QVERIFY(append);
+ const auto append = list->findFunction(QStringLiteral("append"));
+ QVERIFY(!append.isNull());
QCOMPARE(append->arguments().size(), 1);
QCOMPARE(append->arguments().at(0).type().cppSignature(), QLatin1String("List<T >"));
// Verify that the parameter of "void erase(Iterator)" is not modified
- const AbstractMetaFunction *erase = list->findFunction(QStringLiteral("erase"));
- QVERIFY(erase);
+ const auto erase = list->findFunction(QStringLiteral("erase"));
+ QVERIFY(!erase.isNull());
QCOMPARE(erase->arguments().size(), 1);
QEXPECT_FAIL("", "Clang: Some other code changes the parameter type", Abort);
QCOMPARE(erase->arguments().at(0).type().cppSignature(), QLatin1String("List::Iterator"));
@@ -438,12 +440,12 @@ typedef Vector<int> IntVector;
ContainerTypeEntry::VectorContainer);
QCOMPARE(vector->functions().count(), 4);
- const AbstractMetaFunction* method = vector->findFunction(QLatin1String("method"));
- QVERIFY(method);
+ const auto method = vector->findFunction(QLatin1String("method"));
+ QVERIFY(!method.isNull());
QCOMPARE(method->signature(), QLatin1String("method(const Vector<int > & vector)"));
- const AbstractMetaFunction* otherMethod = vector->findFunction(QLatin1String("otherMethod"));
- QVERIFY(otherMethod);
+ const auto otherMethod = vector->findFunction(QLatin1String("otherMethod"));
+ QVERIFY(!otherMethod.isNull());
QCOMPARE(otherMethod->signature(), QLatin1String("otherMethod()"));
QVERIFY(!otherMethod->type().isVoid());
QCOMPARE(otherMethod->type().cppSignature(), QLatin1String("Vector<int >"));
@@ -572,15 +574,13 @@ void TestTemplates::testTemplateTypeDefs()
QCOMPARE(xmlOptionalInt->templateBaseClass(), optional);
// Check whether the value() method now has an 'int' return
- const AbstractMetaFunction *valueMethod =
- optionalInt->findFunction(QLatin1String("value"));
- QVERIFY(valueMethod);
+ const auto valueMethod = optionalInt->findFunction(QLatin1String("value"));
+ QVERIFY(!valueMethod.isNull());
QCOMPARE(valueMethod->type().cppSignature(), QLatin1String("int"));
// ditto for typesystem XML
- const AbstractMetaFunction *xmlValueMethod =
- xmlOptionalInt->findFunction(QLatin1String("value"));
- QVERIFY(xmlValueMethod);
+ const auto xmlValueMethod = xmlOptionalInt->findFunction(QLatin1String("value"));
+ QVERIFY(!xmlValueMethod.isNull());
QCOMPARE(xmlValueMethod->type().cppSignature(), QLatin1String("int"));
// Check whether the m_value field is of type 'int'
diff --git a/sources/shiboken6/ApiExtractor/tests/testvoidarg.cpp b/sources/shiboken6/ApiExtractor/tests/testvoidarg.cpp
index d39819d0f..6d155dacc 100644
--- a/sources/shiboken6/ApiExtractor/tests/testvoidarg.cpp
+++ b/sources/shiboken6/ApiExtractor/tests/testvoidarg.cpp
@@ -45,7 +45,8 @@ void TestVoidArg::testVoidParsedFunction()
AbstractMetaClassList classes = builder->classes();
const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A"));
QVERIFY(classA);
- const AbstractMetaFunction* addedFunc = classA->findFunction(QLatin1String("a"));
+ const auto addedFunc = classA->findFunction(QLatin1String("a"));
+ QVERIFY(!addedFunc.isNull());
QCOMPARE(addedFunc->arguments().count(), 0);
}
@@ -63,7 +64,8 @@ void TestVoidArg::testVoidAddedFunction()
AbstractMetaClassList classes = builder->classes();
const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A"));
QVERIFY(classA);
- const AbstractMetaFunction* addedFunc = classA->findFunction(QLatin1String("a"));
+ const auto addedFunc = classA->findFunction(QLatin1String("a"));
+ QVERIFY(!addedFunc.isNull());
QCOMPARE(addedFunc->arguments().count(), 0);
}
@@ -80,7 +82,8 @@ void TestVoidArg::testVoidPointerParsedFunction()
AbstractMetaClassList classes = builder->classes();
const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A"));
QVERIFY(classA);
- const AbstractMetaFunction* addedFunc = classA->findFunction(QLatin1String("a"));
+ const auto addedFunc = classA->findFunction(QLatin1String("a"));
+ QVERIFY(!addedFunc.isNull());
QCOMPARE(addedFunc->arguments().count(), 1);
}
diff --git a/sources/shiboken6/generator/generator.cpp b/sources/shiboken6/generator/generator.cpp
index 0c986661b..2bc489897 100644
--- a/sources/shiboken6/generator/generator.cpp
+++ b/sources/shiboken6/generator/generator.cpp
@@ -302,7 +302,7 @@ void Generator::addInstantiatedContainersAndSmartPointers(const AbstractMetaType
}
-void Generator::collectInstantiatedContainersAndSmartPointers(const AbstractMetaFunction *func)
+void Generator::collectInstantiatedContainersAndSmartPointers(const AbstractMetaFunctionCPtr &func)
{
addInstantiatedContainersAndSmartPointers(func->type(), func->signature());
const AbstractMetaArgumentList &arguments = func->arguments();
@@ -314,8 +314,7 @@ void Generator::collectInstantiatedContainersAndSmartPointers(const AbstractMeta
{
if (!metaClass->typeEntry()->generateCode())
return;
- const AbstractMetaFunctionList &funcs = metaClass->functions();
- for (const AbstractMetaFunction *func : funcs)
+ for (const auto &func : metaClass->functions())
collectInstantiatedContainersAndSmartPointers(func);
for (const AbstractMetaField &field : metaClass->fields())
addInstantiatedContainersAndSmartPointers(field.type(), field.name());
@@ -326,7 +325,7 @@ void Generator::collectInstantiatedContainersAndSmartPointers(const AbstractMeta
void Generator::collectInstantiatedContainersAndSmartPointers()
{
- for (const AbstractMetaFunction *func : globalFunctions())
+ for (const auto &func : globalFunctions())
collectInstantiatedContainersAndSmartPointers(func);
for (const AbstractMetaClass *metaClass : classes())
collectInstantiatedContainersAndSmartPointers(metaClass);
@@ -367,7 +366,7 @@ AbstractMetaClassList Generator::classesTopologicalSorted(const Dependencies &ad
return m_d->apiextractor->classesTopologicalSorted(additionalDependencies);
}
-const AbstractMetaFunctionList &Generator::globalFunctions() const
+const AbstractMetaFunctionCList &Generator::globalFunctions() const
{
return m_d->apiextractor->globalFunctions();
}
@@ -527,16 +526,16 @@ void verifyDirectoryFor(const QString &file)
}
}
-AbstractMetaFunctionList Generator::implicitConversions(const TypeEntry *type) const
+AbstractMetaFunctionCList Generator::implicitConversions(const TypeEntry *type) const
{
if (type->isValue()) {
if (const AbstractMetaClass *metaClass = AbstractMetaClass::findClass(classes(), type))
return metaClass->implicitConversions();
}
- return AbstractMetaFunctionList();
+ return {};
}
-AbstractMetaFunctionList Generator::implicitConversions(const AbstractMetaType &metaType) const
+AbstractMetaFunctionCList Generator::implicitConversions(const AbstractMetaType &metaType) const
{
return implicitConversions(metaType.typeEntry());
}
@@ -729,9 +728,9 @@ std::optional<DefaultValue>
const QString qualifiedCppName = cType->qualifiedCppName();
// Obtain a list of constructors sorted by complexity and number of arguments
- QMultiMap<int, const AbstractMetaFunction *> candidates;
- const AbstractMetaFunctionList &constructors = metaClass->queryFunctions(AbstractMetaClass::Constructors);
- for (const AbstractMetaFunction *ctor : constructors) {
+ QMultiMap<int, const AbstractMetaFunctionCPtr> candidates;
+ const auto &constructors = metaClass->queryFunctions(AbstractMetaClass::Constructors);
+ for (const auto &ctor : constructors) {
if (!ctor->isUserAdded() && !ctor->isPrivate()
&& ctor->functionType() == AbstractMetaFunction::ConstructorFunction) {
// No arguments: Default constructible
diff --git a/sources/shiboken6/generator/generator.h b/sources/shiboken6/generator/generator.h
index 28120b5b4..79e2f19b1 100644
--- a/sources/shiboken6/generator/generator.h
+++ b/sources/shiboken6/generator/generator.h
@@ -264,10 +264,10 @@ public:
* \param type a TypeEntry that is expected to be a value-type
* \return a list of constructors that could be used as implicit converters
*/
- AbstractMetaFunctionList implicitConversions(const TypeEntry *type) const;
+ AbstractMetaFunctionCList implicitConversions(const TypeEntry *type) const;
/// Convenience function for implicitConversions(const TypeEntry *type).
- AbstractMetaFunctionList implicitConversions(const AbstractMetaType &metaType) const;
+ AbstractMetaFunctionCList implicitConversions(const AbstractMetaType &metaType) const;
protected:
/// Returns the classes, topologically ordered, used to generate the binding code.
@@ -277,7 +277,7 @@ protected:
AbstractMetaClassList classesTopologicalSorted(const Dependencies &additionalDependencies = Dependencies()) const;
/// Returns all global functions found by APIExtractor
- const AbstractMetaFunctionList &globalFunctions() const;
+ const AbstractMetaFunctionCList &globalFunctions() const;
/// Returns all global enums found by APIExtractor
const AbstractMetaEnumList &globalEnums() const;
@@ -398,7 +398,7 @@ private:
struct GeneratorPrivate;
GeneratorPrivate *m_d;
- void collectInstantiatedContainersAndSmartPointers(const AbstractMetaFunction *func);
+ void collectInstantiatedContainersAndSmartPointers(const AbstractMetaFunctionCPtr &func);
void collectInstantiatedContainersAndSmartPointers(const AbstractMetaClass *metaClass);
void collectInstantiatedContainersAndSmartPointers();
};
diff --git a/sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp b/sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp
index 9a53bd97a..3e61b3e99 100644
--- a/sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp
+++ b/sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp
@@ -58,7 +58,7 @@ static inline QString briefEndElement() { return QStringLiteral("</brief>"); }
static inline QString none() { return QStringLiteral("None"); }
-static bool shouldSkip(const AbstractMetaFunction* func)
+static bool shouldSkip(const AbstractMetaFunctionCPtr &func)
{
// Constructors go to separate section
if (DocParser::skipForQuery(func) || func->isConstructor())
@@ -69,8 +69,8 @@ static bool shouldSkip(const AbstractMetaFunction* func)
return false;
const AbstractMetaArgumentList funcArgs = func->arguments();
- const AbstractMetaFunctionList &ownerFunctions = func->ownerClass()->functions();
- for (AbstractMetaFunction *f : ownerFunctions) {
+ const auto &ownerFunctions = func->ownerClass()->functions();
+ for (const auto &f : ownerFunctions) {
if (f != func
&& f->isConstant()
&& f->name() == func->name()
@@ -92,7 +92,7 @@ static bool shouldSkip(const AbstractMetaFunction* func)
return false;
}
-static bool functionSort(const AbstractMetaFunction* func1, const AbstractMetaFunction* func2)
+static bool functionSort(const AbstractMetaFunctionCPtr &func1, const AbstractMetaFunctionCPtr &func2)
{
return func1->name() < func2->name();
}
@@ -107,7 +107,7 @@ static inline QVersionNumber versionOf(const TypeEntry *te)
return QVersionNumber();
}
-static QString getFuncName(const AbstractMetaFunction* cppFunc) {
+static QString getFuncName(const AbstractMetaFunctionCPtr& cppFunc) {
static bool hashInitialized = false;
static QHash<QString, QString> operatorsHash;
if (!hashInitialized) {
@@ -292,7 +292,7 @@ void QtDocGenerator::generateClass(TextStream &s, const GeneratorContext &classC
writeFunctionList(s, metaClass);
//Function list
- AbstractMetaFunctionList functionList = metaClass->functions();
+ auto functionList = metaClass->functions();
std::sort(functionList.begin(), functionList.end(), functionSort);
s << "\nDetailed Description\n"
@@ -311,7 +311,7 @@ void QtDocGenerator::generateClass(TextStream &s, const GeneratorContext &classC
QStringList uniqueFunctions;
- for (AbstractMetaFunction *func : qAsConst(functionList)) {
+ for (const auto &func : qAsConst(functionList)) {
if (shouldSkip(func))
continue;
@@ -335,8 +335,8 @@ void QtDocGenerator::writeFunctionList(TextStream& s, const AbstractMetaClass* c
QStringList slotList;
QStringList staticFunctionList;
- const AbstractMetaFunctionList &classFunctions = cppClass->functions();
- for (AbstractMetaFunction *func : classFunctions) {
+ const auto &classFunctions = cppClass->functions();
+ for (const auto &func : classFunctions) {
if (shouldSkip(func))
continue;
@@ -427,7 +427,7 @@ void QtDocGenerator::writeConstructors(TextStream& s, const AbstractMetaClass* c
{
static const QString sectionTitle = QLatin1String(".. class:: ");
- AbstractMetaFunctionList lst = cppClass->queryFunctions(AbstractMetaClass::Constructors | AbstractMetaClass::Visible);
+ auto lst = cppClass->queryFunctions(AbstractMetaClass::Constructors | AbstractMetaClass::Visible);
for (int i = lst.size() - 1; i >= 0; --i) {
if (lst.at(i)->isModifiedRemoved() || lst.at(i)->functionType() == AbstractMetaFunction::MoveConstructorFunction)
lst.removeAt(i);
@@ -440,7 +440,7 @@ void QtDocGenerator::writeConstructors(TextStream& s, const AbstractMetaClass* c
s << sectionTitle << cppClass->fullName();
} else {
QByteArray pad;
- for (AbstractMetaFunction *func : qAsConst(lst)) {
+ for (const auto &func : qAsConst(lst)) {
s << pad;
if (first) {
first = false;
@@ -474,12 +474,12 @@ void QtDocGenerator::writeConstructors(TextStream& s, const AbstractMetaClass* c
s << '\n';
- for (AbstractMetaFunction *func : qAsConst(lst))
+ for (const auto &func : qAsConst(lst))
writeFormattedText(s, func->documentation().value(), cppClass);
}
QString QtDocGenerator::parseArgDocStyle(const AbstractMetaClass* /* cppClass */,
- const AbstractMetaFunction* func)
+ const AbstractMetaFunctionCPtr &func)
{
QString ret;
int optArgs = 0;
@@ -589,7 +589,7 @@ void QtDocGenerator::writeDocSnips(TextStream &s,
bool QtDocGenerator::writeInjectDocumentation(TextStream& s,
TypeSystem::DocModificationMode mode,
const AbstractMetaClass* cppClass,
- const AbstractMetaFunction* func)
+ const AbstractMetaFunctionCPtr &func)
{
Indentation indentation(s);
bool didSomething = false;
@@ -630,7 +630,8 @@ bool QtDocGenerator::writeInjectDocumentation(TextStream& s,
return didSomething;
}
-QString QtDocGenerator::functionSignature(const AbstractMetaClass* cppClass, const AbstractMetaFunction* func)
+QString QtDocGenerator::functionSignature(const AbstractMetaClass* cppClass,
+ const AbstractMetaFunctionCPtr &func)
{
QString funcName;
@@ -710,7 +711,7 @@ void QtDocGenerator::writeParameterType(TextStream& s, const AbstractMetaClass*
}
void QtDocGenerator::writeFunctionParametersType(TextStream &s, const AbstractMetaClass *cppClass,
- const AbstractMetaFunction *func) const
+ const AbstractMetaFunctionCPtr &func) const
{
s << '\n';
const AbstractMetaArgumentList &funcArgs = func->arguments();
@@ -743,7 +744,7 @@ void QtDocGenerator::writeFunctionParametersType(TextStream &s, const AbstractMe
}
void QtDocGenerator::writeFunction(TextStream& s, const AbstractMetaClass* cppClass,
- const AbstractMetaFunction* func, bool indexed)
+ const AbstractMetaFunctionCPtr &func, bool indexed)
{
s << functionSignature(cppClass, func);
diff --git a/sources/shiboken6/generator/qtdoc/qtdocgenerator.h b/sources/shiboken6/generator/qtdoc/qtdocgenerator.h
index 356a0e210..e68a5f451 100644
--- a/sources/shiboken6/generator/qtdoc/qtdocgenerator.h
+++ b/sources/shiboken6/generator/qtdoc/qtdocgenerator.h
@@ -81,11 +81,11 @@ private:
void writeFields(TextStream &s, const AbstractMetaClass *cppClass) const;
static QString functionSignature(const AbstractMetaClass* cppClass,
- const AbstractMetaFunction* func);
+ const AbstractMetaFunctionCPtr &func);
void writeFunction(TextStream& s, const AbstractMetaClass* cppClass,
- const AbstractMetaFunction* func, bool indexed = true);
+ const AbstractMetaFunctionCPtr &func, bool indexed = true);
void writeFunctionParametersType(TextStream &s, const AbstractMetaClass *cppClass,
- const AbstractMetaFunction* func) const;
+ const AbstractMetaFunctionCPtr &func) const;
void writeFunctionList(TextStream& s, const AbstractMetaClass* cppClass);
void writeFunctionBlock(TextStream& s, const QString& title, QStringList& functions);
void writeParameterType(TextStream &s, const AbstractMetaClass *cppClass,
@@ -95,13 +95,16 @@ private:
void writeFormattedText(TextStream &s, const Documentation &doc,
const AbstractMetaClass *metaclass = nullptr,
Documentation::Type docType = Documentation::Detailed) const;
- bool writeInjectDocumentation(TextStream& s, TypeSystem::DocModificationMode mode, const AbstractMetaClass* cppClass, const AbstractMetaFunction* func);
+ bool writeInjectDocumentation(TextStream& s, TypeSystem::DocModificationMode mode,
+ const AbstractMetaClass* cppClass,
+ const AbstractMetaFunctionCPtr &func);
void writeDocSnips(TextStream &s, const CodeSnipList &codeSnips, TypeSystem::CodeSnipPosition position, TypeSystem::Language language);
void writeModuleDocumentation();
void writeAdditionalDocumentation() const;
- static QString parseArgDocStyle(const AbstractMetaClass *cppClass, const AbstractMetaFunction *func);
+ static QString parseArgDocStyle(const AbstractMetaClass *cppClass,
+ const AbstractMetaFunctionCPtr &func);
QString translateToPythonType(const AbstractMetaType &type, const AbstractMetaClass *cppClass) const;
QString m_docDataDir;
diff --git a/sources/shiboken6/generator/qtdoc/qtxmltosphinx.cpp b/sources/shiboken6/generator/qtdoc/qtxmltosphinx.cpp
index 45dd1557e..ba4e74cb2 100644
--- a/sources/shiboken6/generator/qtdoc/qtxmltosphinx.cpp
+++ b/sources/shiboken6/generator/qtdoc/qtxmltosphinx.cpp
@@ -413,15 +413,15 @@ QString QtXmlToSphinx::resolveContextForMethod(const QString& methodName) const
}
if (metaClass) {
- AbstractMetaFunctionList funcList;
- const AbstractMetaFunctionList &methods = metaClass->queryFunctionsByName(methodName);
- for (AbstractMetaFunction *func : methods) {
+ AbstractMetaFunctionCList funcList;
+ const auto &methods = metaClass->queryFunctionsByName(methodName);
+ for (const auto &func : methods) {
if (methodName == func->name())
funcList.append(func);
}
const AbstractMetaClass *implementingClass = nullptr;
- for (AbstractMetaFunction *func : qAsConst(funcList)) {
+ for (const auto &func : qAsConst(funcList)) {
implementingClass = func->implementingClass();
if (implementingClass->name() == currentClass)
break;
diff --git a/sources/shiboken6/generator/shiboken/cppgenerator.cpp b/sources/shiboken6/generator/shiboken/cppgenerator.cpp
index 10c49d807..8d46d44cd 100644
--- a/sources/shiboken6/generator/shiboken/cppgenerator.cpp
+++ b/sources/shiboken6/generator/shiboken/cppgenerator.cpp
@@ -207,15 +207,15 @@ QString CppGenerator::fileNameForContext(const GeneratorContext &context) const
return fileNameBase + fileNameSuffix();
}
-QList<AbstractMetaFunctionList>
+QList<AbstractMetaFunctionCList>
CppGenerator::filterGroupedOperatorFunctions(const AbstractMetaClass *metaClass,
uint queryIn)
{
// ( func_name, num_args ) => func_list
- QMap<QPair<QString, int>, AbstractMetaFunctionList> results;
+ QMap<QPair<QString, int>, AbstractMetaFunctionCList> results;
const AbstractMetaClass::OperatorQueryOptions query(queryIn);
- const AbstractMetaFunctionList &funcs = metaClass->operatorOverloads(query);
- for (AbstractMetaFunction *func : funcs) {
+ const auto &funcs = metaClass->operatorOverloads(query);
+ for (const auto &func : funcs) {
if (func->isModifiedRemoved()
|| func->usesRValueReferences()
|| func->name() == QLatin1String("operator[]")
@@ -232,26 +232,28 @@ QList<AbstractMetaFunctionList>
QPair<QString, int > op(func->name(), args);
results[op].append(func);
}
- QList<AbstractMetaFunctionList> result;
+ QList<AbstractMetaFunctionCList> result;
result.reserve(results.size());
for (auto it = results.cbegin(), end = results.cend(); it != end; ++it)
result.append(it.value());
return result;
}
-const AbstractMetaFunction *CppGenerator::boolCast(const AbstractMetaClass *metaClass) const
+AbstractMetaFunctionCPtr CppGenerator::boolCast(const AbstractMetaClass *metaClass) const
{
if (!useIsNullAsNbNonZero())
- return nullptr;
+ return {};
// TODO: This could be configurable someday
- const AbstractMetaFunction *func = metaClass->findFunction(QLatin1String("isNull"));
- if (!func || func->isVoid() || !func->type().typeEntry()->isPrimitive() || !func->isPublic())
- return nullptr;
+ const auto func = metaClass->findFunction(QLatin1String("isNull"));
+ if (func.isNull() || func->isVoid() || !func->type().typeEntry()->isPrimitive()
+ || !func->isPublic()) {
+ return {};
+ }
auto pte = static_cast<const PrimitiveTypeEntry *>(func->type().typeEntry());
while (pte->referencedTypeEntry())
pte = pte->referencedTypeEntry();
- return func && func->isConstant() && pte->name() == QLatin1String("bool")
- && func->arguments().isEmpty() ? func : nullptr;
+ return func->isConstant() && pte->name() == QLatin1String("bool")
+ && func->arguments().isEmpty() ? func : AbstractMetaFunctionCPtr{};
}
std::optional<AbstractMetaType>
@@ -273,8 +275,6 @@ void CppGenerator::clearTpFuncs()
};
}
-using FunctionGroupMap = QMap<QString, AbstractMetaFunctionList>;
-
// Prevent ELF symbol qt_version_tag from being generated into the source
static const char includeQDebug[] =
"#ifndef QT_NO_VERSION_TAGGING\n"
@@ -477,10 +477,10 @@ void CppGenerator::generateClass(TextStream &s, const GeneratorContext &classCon
s << "}\n\n";
}
- const AbstractMetaFunctionList &funcs = filterFunctions(metaClass);
+ const auto &funcs = filterFunctions(metaClass);
int maxOverrides = 0;
writeCacheResetNative(s, classContext);
- for (const AbstractMetaFunction *func : funcs) {
+ for (const auto &func : funcs) {
const bool notAbstract = !func->isAbstract();
if ((func->isPrivate() && notAbstract && !func->isVisibilityModifiedToPrivate())
|| (func->isModifiedRemoved() && notAbstract))
@@ -506,10 +506,10 @@ void CppGenerator::generateClass(TextStream &s, const GeneratorContext &classCon
<< "extern \"C\" {\n";
const auto &functionGroups = getFunctionGroups(metaClass);
for (auto it = functionGroups.cbegin(), end = functionGroups.cend(); it != end; ++it) {
- AbstractMetaFunctionList overloads;
+ AbstractMetaFunctionCList overloads;
QSet<QString> seenSignatures;
bool staticEncountered = false;
- for (AbstractMetaFunction *func : it.value()) {
+ for (const auto &func : it.value()) {
if (!func->isAssignmentOperator()
&& !func->usesRValueReferences()
&& !func->isCastOperator()
@@ -533,14 +533,14 @@ void CppGenerator::generateClass(TextStream &s, const GeneratorContext &classCon
if (!staticEncountered) {
for (int i = overloads.size() - 1; i >= 0; --i) {
if (overloads.at(i)->isStatic())
- delete overloads.takeAt(i);
+ overloads.removeAt(i);
}
}
if (overloads.isEmpty())
continue;
- const AbstractMetaFunction *rfunc = overloads.constFirst();
+ const auto rfunc = overloads.constFirst();
if (contains(sequenceProtocols(), rfunc->name())
|| contains(mappingProtocols(), rfunc->name())) {
continue;
@@ -578,8 +578,8 @@ void CppGenerator::generateClass(TextStream &s, const GeneratorContext &classCon
auto pointerToInnerType =
buildAbstractMetaTypeFromString(pointerToInnerTypeName);
Q_ASSERT(pointerToInnerType.has_value());
- AbstractMetaFunction *mutableRfunc = overloads.constFirst();
- mutableRfunc->setType(pointerToInnerType.value());
+ auto mutableRfunc = overloads.constFirst();
+ qSharedPointerConstCast<AbstractMetaFunction>(mutableRfunc)->setType(pointerToInnerType.value());
} else if (smartPointerTypeEntry->refCountMethodName().isEmpty()
|| smartPointerTypeEntry->refCountMethodName() != rfunc->name()) {
// Skip all public methods of the smart pointer except for the raw getter and
@@ -652,7 +652,8 @@ void CppGenerator::generateClass(TextStream &s, const GeneratorContext &classCon
writeSetattroFunction(s, attroCheck, classContext);
}
- if (const AbstractMetaFunction *f = boolCast(metaClass)) {
+ const auto f = boolCast(metaClass);
+ if (!f.isNull()) {
ErrorCode errorCode(-1);
s << "static int " << cpythonBaseName(metaClass) << "___nb_bool(PyObject *self)\n"
<< "{\n" << indent;
@@ -670,15 +671,15 @@ void CppGenerator::generateClass(TextStream &s, const GeneratorContext &classCon
}
if (supportsNumberProtocol(metaClass) && !metaClass->typeEntry()->isSmartPointer()) {
- const QList<AbstractMetaFunctionList> opOverloads = filterGroupedOperatorFunctions(
+ const QList<AbstractMetaFunctionCList> opOverloads = filterGroupedOperatorFunctions(
metaClass,
AbstractMetaClass::ArithmeticOp
| AbstractMetaClass::LogicalOp
| AbstractMetaClass::BitwiseOp);
- for (const AbstractMetaFunctionList &allOverloads : opOverloads) {
- AbstractMetaFunctionList overloads;
- for (AbstractMetaFunction *func : allOverloads) {
+ for (const AbstractMetaFunctionCList &allOverloads : opOverloads) {
+ AbstractMetaFunctionCList overloads;
+ for (const auto &func : allOverloads) {
if (!func->isModifiedRemoved()
&& !func->isPrivate()
&& (func->ownerClass() == func->implementingClass() || func->isAbstract()))
@@ -790,7 +791,7 @@ void CppGenerator::writeCacheResetNative(TextStream &s, const GeneratorContext &
}
void CppGenerator::writeConstructorNative(TextStream &s, const GeneratorContext &classContext,
- const AbstractMetaFunction *func) const
+ const AbstractMetaFunctionCPtr &func) const
{
const QString qualifiedName = classContext.wrapperName() + QLatin1String("::");
s << functionSignature(func, qualifiedName, QString(),
@@ -821,7 +822,7 @@ Shiboken::Object::destroy(wrapper, this);
)" << outdent << "}\n";
}
-static bool allArgumentsRemoved(const AbstractMetaFunction *func)
+static bool allArgumentsRemoved(const AbstractMetaFunctionCPtr& func)
{
if (func->arguments().isEmpty())
return false;
@@ -833,7 +834,7 @@ static bool allArgumentsRemoved(const AbstractMetaFunction *func)
return true;
}
-QString CppGenerator::getVirtualFunctionReturnTypeName(const AbstractMetaFunction *func) const
+QString CppGenerator::getVirtualFunctionReturnTypeName(const AbstractMetaFunctionCPtr &func) const
{
if (func->type().isVoid())
return QLatin1String("\"\"");
@@ -869,7 +870,7 @@ QString CppGenerator::getVirtualFunctionReturnTypeName(const AbstractMetaFunctio
// When writing an overridden method of a wrapper class, write the part
// calling the C++ function in case no overload in Python exists.
void CppGenerator::writeVirtualMethodCppCall(TextStream &s,
- const AbstractMetaFunction *func,
+ const AbstractMetaFunctionCPtr &func,
const QString &funcName,
const CodeSnipList &snips,
const AbstractMetaArgument *lastArg,
@@ -905,7 +906,7 @@ void CppGenerator::writeVirtualMethodCppCall(TextStream &s,
// Determine the return statement (void or a result value).
QString CppGenerator::virtualMethodReturn(TextStream &s,
- const AbstractMetaFunction *func,
+ const AbstractMetaFunctionCPtr &func,
const FunctionModificationList &functionModifications) const
{
if (func->isVoid())
@@ -958,7 +959,7 @@ QString CppGenerator::virtualMethodReturn(TextStream &s,
}
void CppGenerator::writeVirtualMethodNative(TextStream &s,
- const AbstractMetaFunction *func,
+ const AbstractMetaFunctionCPtr &func,
int cacheIndex) const
{
//skip metaObject function, this will be written manually ahead
@@ -978,7 +979,7 @@ void CppGenerator::writeVirtualMethodNative(TextStream &s,
const QString returnStatement = virtualMethodReturn(s, func, functionModifications);
if (func->isAbstract() && func->isModifiedRemoved()) {
- qCWarning(lcShiboken, "%s", qPrintable(msgPureVirtualFunctionRemoved(func)));
+ qCWarning(lcShiboken, "%s", qPrintable(msgPureVirtualFunctionRemoved(func.data())));
s << returnStatement << '\n' << outdent << "}\n\n";
return;
}
@@ -1255,14 +1256,11 @@ void CppGenerator::writeMetaObjectMethod(TextStream &s,
s << "int " << wrapperClassName << "::qt_metacall(QMetaObject::Call call, int id, void **args)\n";
s << "{\n" << indent;
- AbstractMetaFunction *func = nullptr;
- AbstractMetaFunctionList list =
- classContext.metaClass()->queryFunctionsByName(QLatin1String("qt_metacall"));
- if (list.size() == 1)
- func = list[0];
+ const auto list = classContext.metaClass()->queryFunctionsByName(QLatin1String("qt_metacall"));
CodeSnipList snips;
- if (func) {
+ if (list.size() == 1) {
+ const auto func = list.constFirst();
snips = func->injectedCodeSnips();
if (func->isUserAdded()) {
CodeSnipList snips = func->injectedCodeSnips();
@@ -1506,10 +1504,10 @@ return result;)";
CustomConversion *customConversion = metaClass->typeEntry()->customConversion();
// Implicit conversions.
- AbstractMetaFunctionList implicitConvs;
+ AbstractMetaFunctionCList implicitConvs;
if (!customConversion || !customConversion->replaceOriginalTargetToNativeConversions()) {
- const AbstractMetaFunctionList &allImplicitConvs = implicitConversions(metaClass->typeEntry());
- for (AbstractMetaFunction *func : allImplicitConvs) {
+ const auto &allImplicitConvs = implicitConversions(metaClass->typeEntry());
+ for (const auto &func : allImplicitConvs) {
if (!func->isUserAdded())
implicitConvs << func;
}
@@ -1519,7 +1517,7 @@ return result;)";
s << "// Implicit conversions.\n";
AbstractMetaType targetType = buildAbstractMetaTypeFromAbstractMetaClass(metaClass);
- for (const AbstractMetaFunction *conv : qAsConst(implicitConvs)) {
+ for (const auto &conv : qAsConst(implicitConvs)) {
if (conv->isModifiedRemoved())
continue;
@@ -1693,10 +1691,10 @@ void CppGenerator::writeConverterRegister(TextStream &s, const AbstractMetaClass
CustomConversion *customConversion = metaClass->typeEntry()->customConversion();
// Add implicit conversions.
- AbstractMetaFunctionList implicitConvs;
+ AbstractMetaFunctionCList implicitConvs;
if (!customConversion || !customConversion->replaceOriginalTargetToNativeConversions()) {
- const AbstractMetaFunctionList &allImplicitConvs = implicitConversions(metaClass->typeEntry());
- for (AbstractMetaFunction *func : allImplicitConvs) {
+ const auto &allImplicitConvs = implicitConversions(metaClass->typeEntry());
+ for (const auto &func : allImplicitConvs) {
if (!func->isUserAdded())
implicitConvs << func;
}
@@ -1706,7 +1704,7 @@ void CppGenerator::writeConverterRegister(TextStream &s, const AbstractMetaClass
s << "// Add implicit conversions to type converter.\n";
AbstractMetaType targetType = buildAbstractMetaTypeFromAbstractMetaClass(metaClass);
- for (const AbstractMetaFunction *conv : qAsConst(implicitConvs)) {
+ for (const auto &conv : qAsConst(implicitConvs)) {
if (conv->isModifiedRemoved())
continue;
AbstractMetaType sourceType;
@@ -1778,7 +1776,7 @@ void CppGenerator::writeSmartPointerConverterFunctions(TextStream &s,
void CppGenerator::writeMethodWrapperPreamble(TextStream &s, OverloadData &overloadData,
const GeneratorContext &context) const
{
- const AbstractMetaFunction *rfunc = overloadData.referenceFunction();
+ const auto rfunc = overloadData.referenceFunction();
const AbstractMetaClass *ownerClass = rfunc->targetLangOwner();
Q_ASSERT(ownerClass == context.metaClass());
int minArgs = overloadData.minArgs();
@@ -1852,13 +1850,13 @@ static const char *fullName = ")" << fullPythonFunctionName(rfunc, true)
}
}
-void CppGenerator::writeConstructorWrapper(TextStream &s, const AbstractMetaFunctionList &overloads,
+void CppGenerator::writeConstructorWrapper(TextStream &s, const AbstractMetaFunctionCList &overloads,
const GeneratorContext &classContext) const
{
ErrorCode errorCode(-1);
OverloadData overloadData(overloads, this);
- const AbstractMetaFunction *rfunc = overloadData.referenceFunction();
+ const auto rfunc = overloadData.referenceFunction();
const AbstractMetaClass *metaClass = rfunc->ownerClass();
s << "static int\n";
@@ -1949,7 +1947,7 @@ void CppGenerator::writeConstructorWrapper(TextStream &s, const AbstractMetaFunc
// Constructor code injections, position=end
bool hasCodeInjectionsAtEnd = false;
- for (AbstractMetaFunction *func : overloads) {
+ for (const auto &func : overloads) {
const CodeSnipList &injectedCodeSnips = func->injectedCodeSnips();
for (const CodeSnip &cs : injectedCodeSnips) {
if (cs.position == TypeSystem::CodeSnipPositionEnd) {
@@ -1961,7 +1959,7 @@ void CppGenerator::writeConstructorWrapper(TextStream &s, const AbstractMetaFunc
if (hasCodeInjectionsAtEnd) {
// FIXME: C++ arguments are not available in code injection on constructor when position = end.
s <<"switch (overloadId) {\n";
- for (AbstractMetaFunction *func : overloads) {
+ for (const auto &func : overloads) {
Indentation indent(s);
const CodeSnipList &injectedCodeSnips = func->injectedCodeSnips();
for (const CodeSnip &cs : injectedCodeSnips) {
@@ -1986,11 +1984,11 @@ void CppGenerator::writeConstructorWrapper(TextStream &s, const AbstractMetaFunc
s<< outdent << "}\n\n";
}
-void CppGenerator::writeMethodWrapper(TextStream &s, const AbstractMetaFunctionList &overloads,
+void CppGenerator::writeMethodWrapper(TextStream &s, const AbstractMetaFunctionCList &overloads,
const GeneratorContext &classContext) const
{
OverloadData overloadData(overloads, this);
- const AbstractMetaFunction *rfunc = overloadData.referenceFunction();
+ const auto rfunc = overloadData.referenceFunction();
int maxArgs = overloadData.maxArgs();
@@ -2098,7 +2096,7 @@ void CppGenerator::writeMethodWrapper(TextStream &s, const AbstractMetaFunctionL
void CppGenerator::writeArgumentsInitializer(TextStream &s, OverloadData &overloadData) const
{
- const AbstractMetaFunction *rfunc = overloadData.referenceFunction();
+ const auto rfunc = overloadData.referenceFunction();
s << "PyTuple_GET_SIZE(args);\n";
writeUnusedVariableCast(s, QLatin1String("numArgs"));
@@ -2258,7 +2256,7 @@ void CppGenerator::writeCppSelfDefinition(TextStream &s,
}
void CppGenerator::writeCppSelfDefinition(TextStream &s,
- const AbstractMetaFunction *func,
+ const AbstractMetaFunctionCPtr &func,
const GeneratorContext &context,
bool hasStaticOverload) const
{
@@ -2282,7 +2280,7 @@ void CppGenerator::writeCppSelfDefinition(TextStream &s,
void CppGenerator::writeErrorSection(TextStream &s, OverloadData &overloadData) const
{
- const AbstractMetaFunction *rfunc = overloadData.referenceFunction();
+ const auto rfunc = overloadData.referenceFunction();
s << '\n' << cpythonFunctionName(rfunc) << "_TypeError:\n";
Indentation indentation(s);
QString funcName = fullPythonFunctionName(rfunc, true);
@@ -2366,7 +2364,8 @@ void CppGenerator::writeTypeCheck(TextStream &s, AbstractMetaType argType,
s << typeCheck;
}
-static void checkTypeViability(const AbstractMetaFunction *func, const AbstractMetaType &type, int argIdx)
+static void checkTypeViability(const AbstractMetaFunctionCPtr &func,
+ const AbstractMetaType &type, int argIdx)
{
if (type.isVoid()
|| !type.typeEntry()->isPrimitive()
@@ -2394,7 +2393,7 @@ static void checkTypeViability(const AbstractMetaFunction *func, const AbstractM
qCWarning(lcShiboken).noquote().nospace() << message;
}
-static void checkTypeViability(const AbstractMetaFunction *func)
+static void checkTypeViability(const AbstractMetaFunctionCPtr &func)
{
if (func->isUserAdded())
return;
@@ -2409,8 +2408,7 @@ void CppGenerator::writeTypeCheck(TextStream &s, const OverloadData *overloadDat
QSet<const TypeEntry *> numericTypes;
const OverloadDataList &overloads = overloadData->previousOverloadData()->nextOverloadData();
for (OverloadData *od : overloads) {
- const AbstractMetaFunctionCList &odOverloads = od->overloads();
- for (const AbstractMetaFunction *func : odOverloads) {
+ for (const auto &func : od->overloads()) {
checkTypeViability(func);
const AbstractMetaType &argType = od->argument(func)->type();
if (!argType.isPrimitive())
@@ -2460,7 +2458,7 @@ static const QStringList &knownPythonTypes()
}
std::optional<AbstractMetaType>
- CppGenerator::getArgumentType(const AbstractMetaFunction *func, int argPos) const
+ CppGenerator::getArgumentType(const AbstractMetaFunctionCPtr &func, int argPos) const
{
if (argPos < 0 || argPos > func->arguments().size()) {
qCWarning(lcShiboken).noquote().nospace()
@@ -2479,7 +2477,7 @@ std::optional<AbstractMetaType>
auto argType = buildAbstractMetaTypeFromString(typeReplaced);
if (!argType.has_value() && !knownPythonTypes().contains(typeReplaced)) {
qCWarning(lcShiboken, "%s",
- qPrintable(msgUnknownTypeInArgumentTypeReplacement(typeReplaced, func)));
+ qPrintable(msgUnknownTypeInArgumentTypeReplacement(typeReplaced, func.data())));
}
return argType;
}
@@ -2630,7 +2628,7 @@ static void addConversionRuleCodeSnippet(CodeSnipList &snippetList, QString &rul
snippetList << snip;
}
-void CppGenerator::writeConversionRule(TextStream &s, const AbstractMetaFunction *func,
+void CppGenerator::writeConversionRule(TextStream &s, const AbstractMetaFunctionCPtr &func,
TypeSystem::Language language) const
{
@@ -2644,7 +2642,7 @@ void CppGenerator::writeConversionRule(TextStream &s, const AbstractMetaFunction
writeCodeSnips(s, snippets, TypeSystem::CodeSnipPositionBeginning, TypeSystem::TargetLangCode, func);
}
-void CppGenerator::writeConversionRule(TextStream &s, const AbstractMetaFunction *func,
+void CppGenerator::writeConversionRule(TextStream &s, const AbstractMetaFunctionCPtr &func,
TypeSystem::Language language, const QString &outputVar) const
{
CodeSnipList snippets;
@@ -2653,7 +2651,7 @@ void CppGenerator::writeConversionRule(TextStream &s, const AbstractMetaFunction
writeCodeSnips(s, snippets, TypeSystem::CodeSnipPositionAny, language, func);
}
-void CppGenerator::writeNoneReturn(TextStream &s, const AbstractMetaFunction *func,
+void CppGenerator::writeNoneReturn(TextStream &s, const AbstractMetaFunctionCPtr &func,
bool thereIsReturnValue)
{
if (thereIsReturnValue && (func->isVoid() || func->argumentRemoved(0))
@@ -2666,7 +2664,7 @@ void CppGenerator::writeNoneReturn(TextStream &s, const AbstractMetaFunction *fu
void CppGenerator::writeOverloadedFunctionDecisor(TextStream &s, const OverloadData &overloadData) const
{
s << "// Overloaded function decisor\n";
- const AbstractMetaFunction *rfunc = overloadData.referenceFunction();
+ const auto rfunc = overloadData.referenceFunction();
const AbstractMetaFunctionCList &functionOverloads = overloadData.overloadsWithoutRepetition();
for (int i = 0; i < functionOverloads.count(); i++) {
const auto func = functionOverloads.at(i);
@@ -2701,7 +2699,7 @@ void CppGenerator::writeOverloadedFunctionDecisorEngine(TextStream &s,
const OverloadData *parentOverloadData) const
{
bool hasDefaultCall = parentOverloadData->nextArgumentHasDefaultValue();
- const AbstractMetaFunction *referenceFunction = parentOverloadData->referenceFunction();
+ auto referenceFunction = parentOverloadData->referenceFunction();
// If the next argument has not an argument with a default value, it is still possible
// that one of the overloads for the current overload data has its final occurrence here.
@@ -2709,8 +2707,7 @@ void CppGenerator::writeOverloadedFunctionDecisorEngine(TextStream &s,
// variable to be used further on this method on the conditional that identifies default
// method calls.
if (!hasDefaultCall) {
- const AbstractMetaFunctionCList &overloads = parentOverloadData->overloads();
- for (const AbstractMetaFunction *func : overloads) {
+ for (const auto &func : parentOverloadData->overloads()) {
if (parentOverloadData->isFinalOccurrence(func)) {
referenceFunction = func;
hasDefaultCall = true;
@@ -2740,7 +2737,7 @@ void CppGenerator::writeOverloadedFunctionDecisorEngine(TextStream &s,
// The current overload data describes the last argument of a signature,
// so the method can be identified right now.
if (isLastArgument || (signatureFound && !hasDefaultCall)) {
- const AbstractMetaFunction *func = parentOverloadData->referenceFunction();
+ const auto func = parentOverloadData->referenceFunction();
s << "overloadId = " << parentOverloadData->headOverloadData()->overloads().indexOf(func)
<< "; // " << func->minimalSignature() << '\n';
return;
@@ -2759,10 +2756,10 @@ void CppGenerator::writeOverloadedFunctionDecisorEngine(TextStream &s,
s << "if (numArgs == " << numArgs << ") {\n";
{
Indentation indent(s);
- const AbstractMetaFunction *func = referenceFunction;
+ auto func = referenceFunction;
for (OverloadData *overloadData : overloads) {
- const AbstractMetaFunction *defValFunc = overloadData->getFunctionWithDefaultValue();
- if (defValFunc) {
+ const auto defValFunc = overloadData->getFunctionWithDefaultValue();
+ if (!defValFunc.isNull()) {
func = defValFunc;
break;
}
@@ -2778,7 +2775,7 @@ void CppGenerator::writeOverloadedFunctionDecisorEngine(TextStream &s,
&& !overloadData->getFunctionWithDefaultValue()
&& !overloadData->findNextArgWithDefault();
- const AbstractMetaFunction *refFunc = overloadData->referenceFunction();
+ const auto refFunc = overloadData->referenceFunction();
QStringList typeChecks;
@@ -2794,7 +2791,7 @@ void CppGenerator::writeOverloadedFunctionDecisorEngine(TextStream &s,
if (usePyArgs)
pyArgName = pythonArgsAt(od->argPos());
StringStream tck(TextStream::Language::Cpp);
- const AbstractMetaFunction *func = od->referenceFunction();
+ auto func = od->referenceFunction();
if (func->isConstructor() && func->arguments().count() == 1) {
const AbstractMetaClass *ownerClass = func->ownerClass();
@@ -2874,7 +2871,7 @@ void CppGenerator::writeFunctionCalls(TextStream &s, const OverloadData &overloa
writeSingleFunctionCall(s, overloadData, overloads.constFirst(), context);
} else {
for (int i = 0; i < overloads.count(); i++) {
- const AbstractMetaFunction *func = overloads.at(i);
+ const auto func = overloads.at(i);
s << "case " << i << ": // " << func->signature() << "\n{\n";
{
Indentation indent(s);
@@ -2896,7 +2893,7 @@ void CppGenerator::writeFunctionCalls(TextStream &s, const OverloadData &overloa
void CppGenerator::writeSingleFunctionCall(TextStream &s,
const OverloadData &overloadData,
- const AbstractMetaFunction *func,
+ const AbstractMetaFunctionCPtr &func,
const GeneratorContext &context) const
{
if (func->isDeprecated()) {
@@ -3240,7 +3237,7 @@ void CppGenerator::writeAddPythonToCppConversion(TextStream &s, const QString &c
s << ");\n";
}
-void CppGenerator::writeNamedArgumentResolution(TextStream &s, const AbstractMetaFunction *func,
+void CppGenerator::writeNamedArgumentResolution(TextStream &s, const AbstractMetaFunctionCPtr &func,
bool usePyArgs, const OverloadData &overloadData) const
{
const AbstractMetaArgumentList &args = OverloadData::getArgumentsWithDefaultValues(func);
@@ -3320,7 +3317,7 @@ void CppGenerator::writeNamedArgumentResolution(TextStream &s, const AbstractMet
s << "}\n";
}
-QString CppGenerator::argumentNameFromIndex(const AbstractMetaFunction *func, int argIndex,
+QString CppGenerator::argumentNameFromIndex(const AbstractMetaFunctionCPtr &func, int argIndex,
const AbstractMetaClass **wrappedClass,
QString *errorMessage) const
{
@@ -3372,7 +3369,7 @@ const char defaultExceptionHandling[] = R"(} catch (const std::exception &e) {
}
)";
-void CppGenerator::writeMethodCall(TextStream &s, const AbstractMetaFunction *func,
+void CppGenerator::writeMethodCall(TextStream &s, const AbstractMetaFunctionCPtr &func,
const GeneratorContext &context, int maxArgs) const
{
s << "// " << func->minimalSignature() << (func->isReverseOperator() ? " [reverse operator]": "") << '\n';
@@ -3382,7 +3379,7 @@ void CppGenerator::writeMethodCall(TextStream &s, const AbstractMetaFunction *fu
if (cs.position == TypeSystem::CodeSnipPositionEnd) {
auto klass = func->ownerClass();
s << "overloadId = "
- << klass->functions().indexOf(const_cast<AbstractMetaFunction *>(func))
+ << klass->functions().indexOf(func)
<< ";\n";
break;
}
@@ -4168,9 +4165,9 @@ void CppGenerator::writeClassDefinition(TextStream &s,
QString cppClassName = metaClass->qualifiedCppName();
const QString className = chopType(cpythonTypeName(metaClass));
QString baseClassName;
- AbstractMetaFunctionList ctors;
- const AbstractMetaFunctionList &allCtors = metaClass->queryFunctions(AbstractMetaClass::Constructors);
- for (AbstractMetaFunction *f : allCtors) {
+ AbstractMetaFunctionCList ctors;
+ const auto &allCtors = metaClass->queryFunctions(AbstractMetaClass::Constructors);
+ for (const auto &f : allCtors) {
if (!f->isPrivate() && !f->isModifiedRemoved() && !classContext.forSmartPointer())
ctors.append(f);
}
@@ -4242,8 +4239,7 @@ void CppGenerator::writeClassDefinition(TextStream &s,
// search for special functions
clearTpFuncs();
- const AbstractMetaFunctionList &funcs = metaClass->functions();
- for (AbstractMetaFunction *func : funcs) {
+ for (const auto &func : metaClass->functions()) {
if (m_tpFuncs.contains(func->name()))
m_tpFuncs[func->name()] = cpythonFunctionName(func);
}
@@ -4269,8 +4265,8 @@ void CppGenerator::writeClassDefinition(TextStream &s,
if (!metaClass->typeEntry()->hashFunction().isEmpty())
tp_hash = QLatin1Char('&') + cpythonBaseName(metaClass) + QLatin1String("_HashFunc");
- const AbstractMetaFunction *callOp = metaClass->findFunction(QLatin1String("operator()"));
- if (callOp && !callOp->isModifiedRemoved())
+ const auto callOp = metaClass->findFunction(QLatin1String("operator()"));
+ if (!callOp.isNull() && !callOp->isModifiedRemoved())
tp_call = QLatin1Char('&') + cpythonFunctionName(callOp);
QString computedClassTargetFullName;
@@ -4330,8 +4326,8 @@ void CppGenerator::writeMappingMethods(TextStream &s,
const GeneratorContext &context) const
{
for (const auto & m : mappingProtocols()) {
- const AbstractMetaFunction *func = metaClass->findFunction(m.name);
- if (!func)
+ const auto func = metaClass->findFunction(m.name);
+ if (func.isNull())
continue;
QString funcName = cpythonFunctionName(func);
CodeSnipList snips = func->injectedCodeSnips(TypeSystem::CodeSnipPositionAny, TypeSystem::TargetLangCode);
@@ -4354,8 +4350,8 @@ void CppGenerator::writeSequenceMethods(TextStream &s,
bool injectedCode = false;
for (const auto &seq : sequenceProtocols()) {
- const AbstractMetaFunction *func = metaClass->findFunction(seq.name);
- if (!func)
+ const auto func = metaClass->findFunction(seq.name);
+ if (func.isNull())
continue;
injectedCode = true;
QString funcName = cpythonFunctionName(func);
@@ -4395,7 +4391,8 @@ void CppGenerator::writeTypeAsSequenceDefinition(TextStream &s, const AbstractMe
bool hasFunctions = false;
QMap<QString, QString> funcs;
for (const auto &seq : sequenceProtocols()) {
- if (const AbstractMetaFunction *func = metaClass->findFunction(seq.name)) {
+ const auto func = metaClass->findFunction(seq.name);
+ if (!func.isNull()) {
funcs.insert(seq.name, QLatin1Char('&') + cpythonFunctionName(func));
hasFunctions = true;
}
@@ -4430,7 +4427,8 @@ void CppGenerator::writeTypeAsMappingDefinition(TextStream &s, const AbstractMet
};
QMap<QString, QString> funcs;
for (const auto &m : mappingProtocols()) {
- if (const AbstractMetaFunction *func = metaClass->findFunction(m.name)) {
+ const auto func = metaClass->findFunction(m.name);
+ if (!func.isNull()) {
const QString entry = QLatin1String("reinterpret_cast<void *>(&")
+ cpythonFunctionName(func) + QLatin1Char(')');
funcs.insert(m.name, entry);
@@ -4482,14 +4480,14 @@ void CppGenerator::writeTypeAsNumberDefinition(TextStream &s, const AbstractMeta
{
QMap<QString, QString> nb;
- const QList<AbstractMetaFunctionList> opOverloads =
+ const QList<AbstractMetaFunctionCList> opOverloads =
filterGroupedOperatorFunctions(metaClass,
AbstractMetaClass::ArithmeticOp
| AbstractMetaClass::LogicalOp
| AbstractMetaClass::BitwiseOp);
- for (const AbstractMetaFunctionList &opOverload : opOverloads) {
- const AbstractMetaFunction *rfunc = opOverload.at(0);
+ for (const AbstractMetaFunctionCList &opOverload : opOverloads) {
+ const auto rfunc = opOverload.at(0);
QString opName = ShibokenGenerator::pythonOperatorFunctionName(rfunc);
nb[opName] = cpythonFunctionName(rfunc);
}
@@ -4781,9 +4779,10 @@ void CppGenerator::writeRichCompareFunction(TextStream &s,
s << "switch (op) {\n";
{
Indentation indent(s);
- const QList<AbstractMetaFunctionList> &groupedFuncs = filterGroupedOperatorFunctions(metaClass, AbstractMetaClass::ComparisonOp);
- for (const AbstractMetaFunctionList &overloads : groupedFuncs) {
- const AbstractMetaFunction *rfunc = overloads[0];
+ const QList<AbstractMetaFunctionCList> &groupedFuncs =
+ filterGroupedOperatorFunctions(metaClass, AbstractMetaClass::ComparisonOp);
+ for (const AbstractMetaFunctionCList &overloads : groupedFuncs) {
+ const auto rfunc = overloads[0];
QString operatorId = ShibokenGenerator::pythonRichCompareOperatorId(rfunc);
s << "case " << operatorId << ':' << '\n';
@@ -4794,7 +4793,7 @@ void CppGenerator::writeRichCompareFunction(TextStream &s,
op = op.right(op.size() - QLatin1String("operator").size());
int alternativeNumericTypes = 0;
- for (const AbstractMetaFunction *func : overloads) {
+ for (const auto &func : overloads) {
if (!func->isStatic() &&
ShibokenGenerator::isNumber(func->arguments().at(0).type().typeEntry()))
alternativeNumericTypes++;
@@ -4804,7 +4803,7 @@ void CppGenerator::writeRichCompareFunction(TextStream &s,
OverloadData overloadData(overloads, this);
const OverloadDataList &nextOverloads = overloadData.nextOverloadData();
for (OverloadData *od : nextOverloads) {
- const AbstractMetaFunction *func = od->referenceFunction();
+ const auto func = od->referenceFunction();
if (func->isStatic())
continue;
auto argTypeO = getArgumentType(func, 1);
@@ -4893,12 +4892,12 @@ void CppGenerator::writeRichCompareFunction(TextStream &s,
<< outdent << "}\n\n";
}
-void CppGenerator::writeMethodDefinitionEntry(TextStream &s, const AbstractMetaFunctionList &overloads) const
+void CppGenerator::writeMethodDefinitionEntry(TextStream &s, const AbstractMetaFunctionCList &overloads) const
{
Q_ASSERT(!overloads.isEmpty());
OverloadData overloadData(overloads, this);
bool usePyArgs = pythonFunctionWrapperUsesListOfArguments(overloadData);
- const AbstractMetaFunction *func = overloadData.referenceFunction();
+ const auto func = overloadData.referenceFunction();
int min = overloadData.minArgs();
int max = overloadData.maxArgs();
@@ -4924,10 +4923,10 @@ void CppGenerator::writeMethodDefinitionEntry(TextStream &s, const AbstractMetaF
}
}
-void CppGenerator::writeMethodDefinition(TextStream &s, const AbstractMetaFunctionList &overloads) const
+void CppGenerator::writeMethodDefinition(TextStream &s, const AbstractMetaFunctionCList &overloads) const
{
Q_ASSERT(!overloads.isEmpty());
- const AbstractMetaFunction *func = overloads.constFirst();
+ const auto func = overloads.constFirst();
if (m_tpFuncs.contains(func->name()))
return;
@@ -4941,16 +4940,16 @@ void CppGenerator::writeMethodDefinition(TextStream &s, const AbstractMetaFuncti
s << ',' << '\n';
}
-void CppGenerator::writeSignatureInfo(TextStream &s, const AbstractMetaFunctionList &overloads) const
+void CppGenerator::writeSignatureInfo(TextStream &s, const AbstractMetaFunctionCList &overloads) const
{
OverloadData overloadData(overloads, this);
- const AbstractMetaFunction *rfunc = overloadData.referenceFunction();
+ const auto rfunc = overloadData.referenceFunction();
QString funcName = fullPythonFunctionName(rfunc, false);
int idx = overloads.length() - 1;
bool multiple = idx > 0;
- for (const AbstractMetaFunction *f : overloads) {
+ for (const auto &f : overloads) {
QStringList args;
// PYSIDE-1328: `self`-ness cannot be computed in Python because there are mixed cases.
// Toplevel functions like `PySide6.QtCore.QEnum` are always self-less.
@@ -5130,8 +5129,8 @@ void CppGenerator::writeEnumInitialization(TextStream &s, const AbstractMetaEnum
void CppGenerator::writeSignalInitialization(TextStream &s, const AbstractMetaClass *metaClass)
{
// Try to check something and print some warnings
- const AbstractMetaFunctionList &signalFuncs = metaClass->cppSignalFunctions();
- for (const AbstractMetaFunction *cppSignal : signalFuncs) {
+ const auto &signalFuncs = metaClass->cppSignalFunctions();
+ for (const auto &cppSignal : signalFuncs) {
if (cppSignal->declaringClass() != metaClass)
continue;
const AbstractMetaArgumentList &arguments = cppSignal->arguments();
@@ -5548,8 +5547,7 @@ void CppGenerator::writeInitQtMetaTypeFunctionBody(TextStream &s, const Generato
bool canBeValue = false;
if (!metaClass->isObjectType()) {
// check if there's a empty ctor
- const AbstractMetaFunctionList &funcs = metaClass->functions();
- for (AbstractMetaFunction *func : funcs) {
+ for (const auto &func : metaClass->functions()) {
if (func->isConstructor() && !func->arguments().count()) {
canBeValue = true;
break;
@@ -5777,8 +5775,8 @@ void CppGenerator::writeGetattroFunction(TextStream &s, AttroCheck attroCheck,
}
s << "}\n";
- const AbstractMetaFunctionList &funcs = getMethodsWithBothStaticAndNonStaticMethods(metaClass);
- for (const AbstractMetaFunction *func : funcs) {
+ const auto &funcs = getMethodsWithBothStaticAndNonStaticMethods(metaClass);
+ for (const auto &func : funcs) {
QString defName = cpythonMethodDefinitionName(func);
s << "static PyMethodDef non_static_" << defName << " = {\n";
{
@@ -5892,8 +5890,8 @@ bool CppGenerator::finishGeneration()
const auto functionGroups = getGlobalFunctionGroups();
for (auto it = functionGroups.cbegin(), end = functionGroups.cend(); it != end; ++it) {
- AbstractMetaFunctionList overloads;
- for (AbstractMetaFunction *func : it.value()) {
+ AbstractMetaFunctionCList overloads;
+ for (const auto &func : it.value()) {
if (!func->isModifiedRemoved()) {
overloads.append(func);
if (func->typeEntry())
@@ -6248,7 +6246,7 @@ bool CppGenerator::finishGeneration()
return file.done() != FileOut::Failure;
}
-static ArgumentOwner getArgumentOwner(const AbstractMetaFunction *func, int argIndex)
+static ArgumentOwner getArgumentOwner(const AbstractMetaFunctionCPtr &func, int argIndex)
{
ArgumentOwner argOwner = func->argumentOwner(func->ownerClass(), argIndex);
if (argOwner.index == ArgumentOwner::InvalidIndex)
@@ -6256,8 +6254,8 @@ static ArgumentOwner getArgumentOwner(const AbstractMetaFunction *func, int argI
return argOwner;
}
-bool CppGenerator::writeParentChildManagement(TextStream &s, const AbstractMetaFunction *func, int argIndex,
- bool useHeuristicPolicy) const
+bool CppGenerator::writeParentChildManagement(TextStream &s, const AbstractMetaFunctionCPtr &func,
+ int argIndex, bool useHeuristicPolicy) const
{
const int numArgs = func->arguments().count();
bool ctorHeuristicEnabled = func->isConstructor() && useCtorHeuristic() && useHeuristicPolicy;
@@ -6316,7 +6314,7 @@ bool CppGenerator::writeParentChildManagement(TextStream &s, const AbstractMetaF
return false;
}
-void CppGenerator::writeParentChildManagement(TextStream &s, const AbstractMetaFunction *func,
+void CppGenerator::writeParentChildManagement(TextStream &s, const AbstractMetaFunctionCPtr &func,
bool useHeuristicForReturn) const
{
const int numArgs = func->arguments().count();
@@ -6331,7 +6329,7 @@ void CppGenerator::writeParentChildManagement(TextStream &s, const AbstractMetaF
writeReturnValueHeuristics(s, func);
}
-void CppGenerator::writeReturnValueHeuristics(TextStream &s, const AbstractMetaFunction *func) const
+void CppGenerator::writeReturnValueHeuristics(TextStream &s, const AbstractMetaFunctionCPtr &func) const
{
const AbstractMetaType &type = func->type();
if (!useReturnValueHeuristic()
diff --git a/sources/shiboken6/generator/shiboken/cppgenerator.h b/sources/shiboken6/generator/shiboken/cppgenerator.h
index 0c5be6ebc..0539a19ec 100644
--- a/sources/shiboken6/generator/shiboken/cppgenerator.h
+++ b/sources/shiboken6/generator/shiboken/cppgenerator.h
@@ -44,7 +44,7 @@ public:
protected:
QString fileNameSuffix() const override;
QString fileNameForContext(const GeneratorContext &context) const override;
- static QList<AbstractMetaFunctionList>
+ static QList<AbstractMetaFunctionCList>
filterGroupedOperatorFunctions(const AbstractMetaClass *metaClass, uint query);
void generateClass(TextStream &s, const GeneratorContext &classContext) override;
bool finishGeneration() override;
@@ -55,18 +55,18 @@ private:
const TypeEntry *enclosingEntry = nullptr) const;
void writeCacheResetNative(TextStream &s, const GeneratorContext &classContext) const;
void writeConstructorNative(TextStream &s, const GeneratorContext &classContext,
- const AbstractMetaFunction *func) const;
+ const AbstractMetaFunctionCPtr &func) const;
void writeDestructorNative(TextStream &s, const GeneratorContext &classContext) const;
- QString getVirtualFunctionReturnTypeName(const AbstractMetaFunction *func) const;
- void writeVirtualMethodNative(TextStream &s, const AbstractMetaFunction *func,
+ QString getVirtualFunctionReturnTypeName(const AbstractMetaFunctionCPtr &func) const;
+ void writeVirtualMethodNative(TextStream &s, const AbstractMetaFunctionCPtr &func,
int cacheIndex) const;
- void writeVirtualMethodCppCall(TextStream &s, const AbstractMetaFunction *func,
+ void writeVirtualMethodCppCall(TextStream &s, const AbstractMetaFunctionCPtr &func,
const QString &funcName, const CodeSnipList &snips,
const AbstractMetaArgument *lastArg, const TypeEntry *retType,
const QString &returnStatement) const;
QString virtualMethodReturn(TextStream &s,
- const AbstractMetaFunction *func,
+ const AbstractMetaFunctionCPtr &func,
const FunctionModificationList &functionModifications) const;
void writeMetaObjectMethod(TextStream &s, const GeneratorContext &classContext) const;
void writeMetaCast(TextStream &s, const GeneratorContext &classContext) const;
@@ -90,15 +90,15 @@ private:
void writeMethodWrapperPreamble(TextStream &s, OverloadData &overloadData,
const GeneratorContext &context) const;
- void writeConstructorWrapper(TextStream &s, const AbstractMetaFunctionList &overloads,
+ void writeConstructorWrapper(TextStream &s, const AbstractMetaFunctionCList &overloads,
const GeneratorContext &classContext) const;
- void writeMethodWrapper(TextStream &s, const AbstractMetaFunctionList &overloads,
+ void writeMethodWrapper(TextStream &s, const AbstractMetaFunctionCList &overloads,
const GeneratorContext &classContext) const;
void writeArgumentsInitializer(TextStream &s, OverloadData &overloadData) const;
void writeCppSelfConversion(TextStream &s, const GeneratorContext &context,
const QString &className, bool useWrapperClass) const;
void writeCppSelfDefinition(TextStream &s,
- const AbstractMetaFunction *func,
+ const AbstractMetaFunctionCPtr &func,
const GeneratorContext &context,
bool hasStaticOverload = false) const;
void writeCppSelfDefinition(TextStream &s,
@@ -162,7 +162,7 @@ private:
* \return The type of the argument indicated by \p argPos.
*/
std::optional<AbstractMetaType>
- getArgumentType(const AbstractMetaFunction *func, int argPos) const;
+ getArgumentType(const AbstractMetaFunctionCPtr &func, int argPos) const;
void writePythonToCppTypeConversion(TextStream &s,
const AbstractMetaType &type,
@@ -172,10 +172,11 @@ private:
const QString &defaultValue = QString()) const;
/// Writes the conversion rule for arguments of regular and virtual methods.
- void writeConversionRule(TextStream &s, const AbstractMetaFunction *func, TypeSystem::Language language) const;
+ void writeConversionRule(TextStream &s, const AbstractMetaFunctionCPtr &func,
+ TypeSystem::Language language) const;
/// Writes the conversion rule for the return value of a method.
- void writeConversionRule(TextStream &s, const AbstractMetaFunction *func, TypeSystem::Language language,
- const QString &outputVar) const;
+ void writeConversionRule(TextStream &s, const AbstractMetaFunctionCPtr &func,
+ TypeSystem::Language language, const QString &outputVar) const;
/**
* Set the Python method wrapper return value variable to Py_None if
@@ -186,7 +187,8 @@ private:
* \param thereIsReturnValue indicates if the return type of any of the other overloads
* for this function is different from 'void'
*/
- static void writeNoneReturn(TextStream &s, const AbstractMetaFunction *func, bool thereIsReturnValue);
+ static void writeNoneReturn(TextStream &s, const AbstractMetaFunctionCPtr &func,
+ bool thereIsReturnValue);
/**
* Writes the Python function wrapper overload decisor that selects which C++
@@ -207,7 +209,7 @@ private:
/// Writes the call to a single function usually from a collection of overloads.
void writeSingleFunctionCall(TextStream &s,
const OverloadData &overloadData,
- const AbstractMetaFunction *func,
+ const AbstractMetaFunctionCPtr &func,
const GeneratorContext &context) const;
/// Returns the name of a C++ to Python conversion function.
@@ -261,14 +263,14 @@ private:
const QString &pythonToCppFunc,
const QString &isConvertibleFunc) const;
- void writeNamedArgumentResolution(TextStream &s, const AbstractMetaFunction *func,
+ void writeNamedArgumentResolution(TextStream &s, const AbstractMetaFunctionCPtr &func,
bool usePyArgs, const OverloadData &overloadData) const;
/// Returns a string containing the name of an argument for the given function and argument index.
- QString argumentNameFromIndex(const AbstractMetaFunction *func, int argIndex,
+ QString argumentNameFromIndex(const AbstractMetaFunctionCPtr &func, int argIndex,
const AbstractMetaClass **wrappedClass,
QString *errorMessage = nullptr) const;
- void writeMethodCall(TextStream &s, const AbstractMetaFunction *func,
+ void writeMethodCall(TextStream &s, const AbstractMetaFunctionCPtr &func,
const GeneratorContext &context, int maxArgs = 0) const;
QString getInitFunctionName(const GeneratorContext &context) const;
@@ -284,9 +286,9 @@ private:
void writeClassDefinition(TextStream &s,
const AbstractMetaClass *metaClass,
const GeneratorContext &classContext);
- void writeMethodDefinitionEntry(TextStream &s, const AbstractMetaFunctionList &overloads) const;
- void writeMethodDefinition(TextStream &s, const AbstractMetaFunctionList &overloads) const;
- void writeSignatureInfo(TextStream &s, const AbstractMetaFunctionList &overloads) const;
+ void writeMethodDefinitionEntry(TextStream &s, const AbstractMetaFunctionCList &overloads) const;
+ void writeMethodDefinition(TextStream &s, const AbstractMetaFunctionCList &overloads) const;
+ void writeSignatureInfo(TextStream &s, const AbstractMetaFunctionCList &overloads) const;
/// Writes the implementation of all methods part of python sequence protocol
void writeSequenceMethods(TextStream &s,
const AbstractMetaClass *metaClass,
@@ -356,9 +358,11 @@ private:
void writeExtendedConverterInitialization(TextStream &s, const TypeEntry *externalType,
const AbstractMetaClassCList &conversions) const;
- void writeParentChildManagement(TextStream &s, const AbstractMetaFunction *func, bool userHeuristicForReturn) const;
- bool writeParentChildManagement(TextStream &s, const AbstractMetaFunction *func, int argIndex, bool userHeuristicPolicy) const;
- void writeReturnValueHeuristics(TextStream &s, const AbstractMetaFunction *func) const;
+ void writeParentChildManagement(TextStream &s, const AbstractMetaFunctionCPtr &func,
+ bool userHeuristicForReturn) const;
+ bool writeParentChildManagement(TextStream &s, const AbstractMetaFunctionCPtr &func,
+ int argIndex, bool userHeuristicPolicy) const;
+ void writeReturnValueHeuristics(TextStream &s, const AbstractMetaFunctionCPtr &func) const;
void writeInitQtMetaTypeFunctionBody(TextStream &s, const GeneratorContext &context) const;
/**
@@ -394,9 +398,9 @@ private:
QString writeReprFunction(TextStream &s, const GeneratorContext &context,
uint indirections) const;
- const AbstractMetaFunction *boolCast(const AbstractMetaClass *metaClass) const;
+ AbstractMetaFunctionCPtr boolCast(const AbstractMetaClass *metaClass) const;
bool hasBoolCast(const AbstractMetaClass *metaClass) const
- { return boolCast(metaClass) != nullptr; }
+ { return !boolCast(metaClass).isNull(); }
std::optional<AbstractMetaType>
findSmartPointerInstantiation(const TypeEntry *entry) const;
diff --git a/sources/shiboken6/generator/shiboken/headergenerator.cpp b/sources/shiboken6/generator/shiboken/headergenerator.cpp
index 05c76b4d8..bb968a0ee 100644
--- a/sources/shiboken6/generator/shiboken/headergenerator.cpp
+++ b/sources/shiboken6/generator/shiboken/headergenerator.cpp
@@ -143,9 +143,9 @@ void HeaderGenerator::generateClass(TextStream &s, const GeneratorContext &class
<< " : public " << metaClass->qualifiedCppName()
<< "\n{\npublic:\n" << indent;
- const AbstractMetaFunctionList &funcs = filterFunctions(metaClass);
+ const auto &funcs = filterFunctions(metaClass);
int maxOverrides = 0;
- for (AbstractMetaFunction *func : funcs) {
+ for (const auto &func : funcs) {
if ((func->attributes() & AbstractMetaAttributes::FinalCppMethod) == 0) {
writeFunction(s, func);
// PYSIDE-803: Build a boolean cache for unused overrides.
@@ -222,7 +222,7 @@ void *qt_metacast(const char *_clname) override;
s << "#endif // SBK_" << outerHeaderGuard << "_H\n\n";
}
-void HeaderGenerator::writeFunction(TextStream &s, const AbstractMetaFunction *func)
+void HeaderGenerator::writeFunction(TextStream &s, const AbstractMetaFunctionCPtr &func)
{
// do not write copy ctors here.
@@ -282,8 +282,7 @@ void HeaderGenerator::writeFunction(TextStream &s, const AbstractMetaFunction *f
s << " override";
s << ";\n";
// Check if this method hide other methods in base classes
- const AbstractMetaFunctionList &ownerFuncs = func->ownerClass()->functions();
- for (const AbstractMetaFunction *f : ownerFuncs) {
+ for (const auto &f : func->ownerClass()->functions()) {
if (f != func
&& !f->isConstructor()
&& !f->isPrivate()
@@ -618,7 +617,7 @@ void HeaderGenerator::writeSbkTypeFunction(TextStream &s, const AbstractMetaType
void HeaderGenerator::writeInheritedOverloads(TextStream &s) const
{
- for (const AbstractMetaFunction *func : qAsConst(m_inheritedOverloads)) {
+ for (const auto &func : qAsConst(m_inheritedOverloads)) {
s << "inline ";
s << functionSignature(func, QString(), QString(), Generator::EnumAsInts|Generator::OriginalTypeDescription)
<< " { ";
diff --git a/sources/shiboken6/generator/shiboken/headergenerator.h b/sources/shiboken6/generator/shiboken/headergenerator.h
index 12087519d..a5cf2f272 100644
--- a/sources/shiboken6/generator/shiboken/headergenerator.h
+++ b/sources/shiboken6/generator/shiboken/headergenerator.h
@@ -54,7 +54,7 @@ protected:
private:
void writeCopyCtor(TextStream &s, const AbstractMetaClass *metaClass) const;
void writeProtectedFieldAccessors(TextStream &s, const AbstractMetaField &field) const;
- void writeFunction(TextStream &s, const AbstractMetaFunction *func);
+ void writeFunction(TextStream &s, const AbstractMetaFunctionCPtr &func);
void writeSbkTypeFunction(TextStream &s, const AbstractMetaEnum &cppEnum) const;
void writeSbkTypeFunction(TextStream &s, const AbstractMetaClass *cppClass) const;
void writeSbkTypeFunction(TextStream &s, const AbstractMetaType &metaType) const;
@@ -63,7 +63,7 @@ private:
void writeProtectedEnumSurrogate(TextStream &s, const AbstractMetaEnum &cppEnum) const;
void writeInheritedOverloads(TextStream &s) const;
- QSet<const AbstractMetaFunction *> m_inheritedOverloads;
+ QSet<AbstractMetaFunctionCPtr> m_inheritedOverloads;
};
#endif // HEADERGENERATOR_H
diff --git a/sources/shiboken6/generator/shiboken/overloaddata.cpp b/sources/shiboken6/generator/shiboken/overloaddata.cpp
index 6113cdda1..1ff9a74a8 100644
--- a/sources/shiboken6/generator/shiboken/overloaddata.cpp
+++ b/sources/shiboken6/generator/shiboken/overloaddata.cpp
@@ -135,7 +135,7 @@ struct OverloadSortData
*/
static QString getImplicitConversionTypeName(const AbstractMetaType &containerType,
const AbstractMetaType &instantiation,
- const AbstractMetaFunction *function,
+ const AbstractMetaFunctionCPtr &function,
const QString &implicitConvTypeName = QString())
{
QString impConv;
@@ -274,8 +274,8 @@ void OverloadData::sortNextOverloads()
for (const QString &primitive : qAsConst(nonIntegerPrimitives))
sortData.mapType(getImplicitConversionTypeName(ov->argType(), instantiation, nullptr, primitive));
} else {
- const AbstractMetaFunctionList &funcs = m_generator->implicitConversions(instantiation);
- for (const AbstractMetaFunction *function : funcs)
+ const auto &funcs = m_generator->implicitConversions(instantiation);
+ for (const auto &function : funcs)
sortData.mapType(getImplicitConversionTypeName(ov->argType(), instantiation, function));
}
}
@@ -309,8 +309,8 @@ void OverloadData::sortNextOverloads()
int targetTypeId = sortData.map[targetTypeEntryName];
// Process implicit conversions
- const AbstractMetaFunctionList &functions = m_generator->implicitConversions(targetType);
- for (AbstractMetaFunction *function : functions) {
+ const auto &functions = m_generator->implicitConversions(targetType);
+ for (const auto &function : functions) {
QString convertibleType;
if (function->isConversionOperator())
convertibleType = function->ownerClass()->typeEntry()->name();
@@ -362,8 +362,8 @@ void OverloadData::sortNextOverloads()
}
} else {
- const AbstractMetaFunctionList &funcs = m_generator->implicitConversions(instantiation);
- for (const AbstractMetaFunction *function : funcs) {
+ const auto &funcs = m_generator->implicitConversions(instantiation);
+ for (const auto &function : funcs) {
QString convertibleTypeName = getImplicitConversionTypeName(ov->argType(), instantiation, function);
if (!graph.containsEdge(targetTypeId, sortData.map[convertibleTypeName])) { // Avoid cyclic dependency.
graph.addEdge(sortData.map[convertibleTypeName], targetTypeId);
@@ -477,11 +477,11 @@ void OverloadData::sortNextOverloads()
* \- int
*
*/
-OverloadData::OverloadData(const AbstractMetaFunctionList &overloads, const ShibokenGenerator *generator)
+OverloadData::OverloadData(const AbstractMetaFunctionCList &overloads, const ShibokenGenerator *generator)
: m_minArgs(256), m_maxArgs(0), m_argPos(-1), m_argType(nullptr),
m_headOverloadData(this), m_previousOverloadData(nullptr), m_generator(generator)
{
- for (const AbstractMetaFunction *func : overloads) {
+ for (const auto &func : overloads) {
m_overloads.append(func);
int argSize = func->arguments().size() - numberOfRemovedArguments(func);
if (m_minArgs > argSize)
@@ -506,7 +506,7 @@ OverloadData::OverloadData(const AbstractMetaFunctionList &overloads, const Shib
m_headOverloadData->m_minArgs = maxArgs();
}
-OverloadData::OverloadData(OverloadData *headOverloadData, const AbstractMetaFunction *func,
+OverloadData::OverloadData(OverloadData *headOverloadData, const AbstractMetaFunctionCPtr &func,
const AbstractMetaType &argType, int argPos)
: m_minArgs(256), m_maxArgs(0), m_argPos(argPos), m_argType(argType),
m_headOverloadData(headOverloadData), m_previousOverloadData(nullptr),
@@ -516,7 +516,7 @@ OverloadData::OverloadData(OverloadData *headOverloadData, const AbstractMetaFun
this->addOverload(func);
}
-void OverloadData::addOverload(const AbstractMetaFunction *func)
+void OverloadData::addOverload(const AbstractMetaFunctionCPtr &func)
{
int origNumArgs = func->arguments().size();
int removed = numberOfRemovedArguments(func);
@@ -541,7 +541,7 @@ void OverloadData::addOverload(const AbstractMetaFunction *func)
m_overloads.append(func);
}
-OverloadData *OverloadData::addOverloadData(const AbstractMetaFunction *func,
+OverloadData *OverloadData::addOverloadData(const AbstractMetaFunctionCPtr &func,
const AbstractMetaArgument &arg)
{
const AbstractMetaType &argType = arg.type();
@@ -579,7 +579,7 @@ OverloadData *OverloadData::addOverloadData(const AbstractMetaFunction *func,
QStringList OverloadData::returnTypes() const
{
QSet<QString> retTypes;
- for (const AbstractMetaFunction *func : m_overloads) {
+ for (const auto &func : m_overloads) {
if (!func->typeReplaced(0).isEmpty())
retTypes << func->typeReplaced(0);
else if (!func->argumentRemoved(0))
@@ -596,7 +596,7 @@ bool OverloadData::hasNonVoidReturnType() const
bool OverloadData::hasVarargs() const
{
- for (const AbstractMetaFunction *func : m_overloads) {
+ for (const auto &func : m_overloads) {
AbstractMetaArgumentList args = func->arguments();
if (args.size() > 1 && args.constLast().type().isVarargs())
return true;
@@ -606,16 +606,16 @@ bool OverloadData::hasVarargs() const
bool OverloadData::hasAllowThread() const
{
- for (const AbstractMetaFunction *func : m_overloads) {
+ for (const auto &func : m_overloads) {
if (func->allowThread())
return true;
}
return false;
}
-bool OverloadData::hasStaticFunction(const AbstractMetaFunctionList &overloads)
+bool OverloadData::hasStaticFunction(const AbstractMetaFunctionCList &overloads)
{
- for (const AbstractMetaFunction *func : qAsConst(overloads)) {
+ for (const auto &func : overloads) {
if (func->isStatic())
return true;
}
@@ -624,16 +624,16 @@ bool OverloadData::hasStaticFunction(const AbstractMetaFunctionList &overloads)
bool OverloadData::hasStaticFunction() const
{
- for (const AbstractMetaFunction *func : m_overloads) {
+ for (const auto &func : m_overloads) {
if (func->isStatic())
return true;
}
return false;
}
-bool OverloadData::hasInstanceFunction(const AbstractMetaFunctionList &overloads)
+bool OverloadData::hasInstanceFunction(const AbstractMetaFunctionCList &overloads)
{
- for (const AbstractMetaFunction *func : qAsConst(overloads)) {
+ for (const auto &func : overloads) {
if (!func->isStatic())
return true;
}
@@ -642,14 +642,14 @@ bool OverloadData::hasInstanceFunction(const AbstractMetaFunctionList &overloads
bool OverloadData::hasInstanceFunction() const
{
- for (const AbstractMetaFunction *func : m_overloads) {
+ for (const auto &func : m_overloads) {
if (!func->isStatic())
return true;
}
return false;
}
-bool OverloadData::hasStaticAndInstanceFunctions(const AbstractMetaFunctionList &overloads)
+bool OverloadData::hasStaticAndInstanceFunctions(const AbstractMetaFunctionCList &overloads)
{
return OverloadData::hasStaticFunction(overloads) && OverloadData::hasInstanceFunction(overloads);
}
@@ -659,12 +659,12 @@ bool OverloadData::hasStaticAndInstanceFunctions() const
return OverloadData::hasStaticFunction() && OverloadData::hasInstanceFunction();
}
-const AbstractMetaFunction *OverloadData::referenceFunction() const
+AbstractMetaFunctionCPtr OverloadData::referenceFunction() const
{
return m_overloads.constFirst();
}
-const AbstractMetaArgument *OverloadData::argument(const AbstractMetaFunction *func) const
+const AbstractMetaArgument *OverloadData::argument(const AbstractMetaFunctionCPtr &func) const
{
if (isHeadOverloadData() || !m_overloads.contains(func))
return nullptr;
@@ -704,7 +704,7 @@ OverloadDataList OverloadData::overloadDataOnPosition(int argPos) const
bool OverloadData::nextArgumentHasDefaultValue() const
{
for (OverloadData *overloadData : m_nextOverloadData) {
- if (overloadData->getFunctionWithDefaultValue())
+ if (!overloadData->getFunctionWithDefaultValue().isNull())
return true;
}
return false;
@@ -712,7 +712,7 @@ bool OverloadData::nextArgumentHasDefaultValue() const
static OverloadData *_findNextArgWithDefault(OverloadData *overloadData)
{
- if (overloadData->getFunctionWithDefaultValue())
+ if (!overloadData->getFunctionWithDefaultValue().isNull())
return overloadData;
OverloadData *result = nullptr;
@@ -730,7 +730,7 @@ OverloadData *OverloadData::findNextArgWithDefault()
return _findNextArgWithDefault(this);
}
-bool OverloadData::isFinalOccurrence(const AbstractMetaFunction *func) const
+bool OverloadData::isFinalOccurrence(const AbstractMetaFunctionCPtr &func) const
{
for (const OverloadData *pd : m_nextOverloadData) {
if (pd->overloads().contains(func))
@@ -742,10 +742,10 @@ bool OverloadData::isFinalOccurrence(const AbstractMetaFunction *func) const
AbstractMetaFunctionCList OverloadData::overloadsWithoutRepetition() const
{
AbstractMetaFunctionCList overloads = m_overloads;
- for (const AbstractMetaFunction *func : m_overloads) {
+ for (const auto &func : m_overloads) {
if (func->minimalSignature().endsWith(QLatin1String("const")))
continue;
- for (const AbstractMetaFunction *f : qAsConst(overloads)) {
+ for (const auto &f : qAsConst(overloads)) {
if ((func->minimalSignature() + QLatin1String("const")) == f->minimalSignature()) {
overloads.removeOne(f);
break;
@@ -755,9 +755,9 @@ AbstractMetaFunctionCList OverloadData::overloadsWithoutRepetition() const
return overloads;
}
-const AbstractMetaFunction *OverloadData::getFunctionWithDefaultValue() const
+AbstractMetaFunctionCPtr OverloadData::getFunctionWithDefaultValue() const
{
- for (const AbstractMetaFunction *func : m_overloads) {
+ for (const auto &func : m_overloads) {
int removedArgs = 0;
for (int i = 0; i <= m_argPos + removedArgs; i++) {
if (func->argumentRemoved(i + 1))
@@ -766,14 +766,14 @@ const AbstractMetaFunction *OverloadData::getFunctionWithDefaultValue() const
if (func->arguments().at(m_argPos + removedArgs).hasDefaultValueExpression())
return func;
}
- return nullptr;
+ return {};
}
QList<int> OverloadData::invalidArgumentLengths() const
{
QSet<int> validArgLengths;
- for (const AbstractMetaFunction *func : qAsConst(m_headOverloadData->m_overloads)) {
+ for (const auto &func : qAsConst(m_headOverloadData->m_overloads)) {
const AbstractMetaArgumentList args = func->arguments();
int offset = 0;
for (int i = 0; i < args.size(); ++i) {
@@ -796,7 +796,7 @@ QList<int> OverloadData::invalidArgumentLengths() const
return invalidArgLengths;
}
-int OverloadData::numberOfRemovedArguments(const AbstractMetaFunction *func, int finalArgPos)
+int OverloadData::numberOfRemovedArguments(const AbstractMetaFunctionCPtr &func, int finalArgPos)
{
int removed = 0;
if (finalArgPos < 0) {
@@ -813,33 +813,10 @@ int OverloadData::numberOfRemovedArguments(const AbstractMetaFunction *func, int
return removed;
}
-QPair<int, int> OverloadData::getMinMaxArguments(const AbstractMetaFunctionList &overloads)
-{
- int minArgs = 10000;
- int maxArgs = 0;
- for (const AbstractMetaFunction *func : overloads) {
- int origNumArgs = func->arguments().size();
- int removed = numberOfRemovedArguments(func);
- int numArgs = origNumArgs - removed;
- if (maxArgs < numArgs)
- maxArgs = numArgs;
- if (minArgs > numArgs)
- minArgs = numArgs;
- for (int j = 0; j < origNumArgs; j++) {
- if (func->argumentRemoved(j + 1))
- continue;
- int fixedArgIndex = j - removed;
- if (fixedArgIndex < minArgs && func->arguments().at(j).hasDefaultValueExpression())
- minArgs = fixedArgIndex;
- }
- }
- return {minArgs, maxArgs};
-}
-
-bool OverloadData::isSingleArgument(const AbstractMetaFunctionList &overloads)
+bool OverloadData::isSingleArgument(const AbstractMetaFunctionCList &overloads)
{
bool singleArgument = true;
- for (const AbstractMetaFunction *func : overloads) {
+ for (const auto &func : overloads) {
if (func->arguments().size() - numberOfRemovedArguments(func) != 1) {
singleArgument = false;
break;
@@ -870,13 +847,13 @@ QString OverloadData::dumpGraph() const
QString result;
QTextStream s(&result);
if (m_argPos == -1) {
- const AbstractMetaFunction *rfunc = referenceFunction();
+ const auto rfunc = referenceFunction();
s << "digraph OverloadedFunction {\n";
s << " graph [fontsize=12 fontname=freemono labelloc=t splines=true overlap=false rankdir=LR];\n";
// Shows all function signatures
s << "legend [fontsize=9 fontname=freemono shape=rect label=\"";
- for (const AbstractMetaFunction *func : m_overloads) {
+ for (const auto &func : m_overloads) {
s << "f" << functionNumber(func) << " : "
<< toHtml(func->type().cppSignature())
<< ' ' << toHtml(func->minimalSignature()) << "\\l";
@@ -904,7 +881,7 @@ QString OverloadData::dumpGraph() const
<< "</td></tr>";
// Shows type changes for all function signatures
- for (const AbstractMetaFunction *func : m_overloads) {
+ for (const auto &func : m_overloads) {
if (func->typeReplaced(0).isEmpty())
continue;
s << "<tr><td bgcolor=\"gray\" align=\"right\">f" << functionNumber(func);
@@ -927,7 +904,7 @@ QString OverloadData::dumpGraph() const
// Overloads for the signature to present point
s << "<tr><td bgcolor=\"gray\" align=\"right\">overloads</td><td bgcolor=\"gray\" align=\"left\">";
- for (const AbstractMetaFunction *func : m_overloads)
+ for (const auto &func : m_overloads)
s << 'f' << functionNumber(func) << ' ';
s << "</td></tr>";
@@ -959,12 +936,12 @@ QString OverloadData::dumpGraph() const
// Overloads for the signature to present point
s << "<tr><td bgcolor=\"gray\" align=\"right\">overloads</td><td bgcolor=\"gray\" align=\"left\">";
- for (const AbstractMetaFunction *func : m_overloads)
+ for (const auto &func : m_overloads)
s << 'f' << functionNumber(func) << ' ';
s << "</td></tr>";
// Show default values (original and modified) for various functions
- for (const AbstractMetaFunction *func : m_overloads) {
+ for (const auto &func : m_overloads) {
const AbstractMetaArgument *arg = argument(func);
if (!arg)
continue;
@@ -990,7 +967,7 @@ QString OverloadData::dumpGraph() const
return result;
}
-int OverloadData::functionNumber(const AbstractMetaFunction *func) const
+int OverloadData::functionNumber(const AbstractMetaFunctionCPtr &func) const
{
return m_headOverloadData->m_overloads.indexOf(func);
}
@@ -1011,29 +988,18 @@ QString OverloadData::argumentTypeReplaced() const
return m_argTypeReplaced;
}
-bool OverloadData::hasArgumentWithDefaultValue(const AbstractMetaFunctionList &overloads)
-{
- if (OverloadData::getMinMaxArguments(overloads).second == 0)
- return false;
- for (const AbstractMetaFunction *func : overloads) {
- if (hasArgumentWithDefaultValue(func))
- return true;
- }
- return false;
-}
-
bool OverloadData::hasArgumentWithDefaultValue() const
{
if (maxArgs() == 0)
return false;
- for (const AbstractMetaFunction *func : m_overloads) {
+ for (const auto &func : m_overloads) {
if (hasArgumentWithDefaultValue(func))
return true;
}
return false;
}
-bool OverloadData::hasArgumentWithDefaultValue(const AbstractMetaFunction *func)
+bool OverloadData::hasArgumentWithDefaultValue(const AbstractMetaFunctionCPtr &func)
{
const AbstractMetaArgumentList &arguments = func->arguments();
for (const AbstractMetaArgument &arg : arguments) {
@@ -1045,7 +1011,7 @@ bool OverloadData::hasArgumentWithDefaultValue(const AbstractMetaFunction *func)
return false;
}
-AbstractMetaArgumentList OverloadData::getArgumentsWithDefaultValues(const AbstractMetaFunction *func)
+AbstractMetaArgumentList OverloadData::getArgumentsWithDefaultValues(const AbstractMetaFunctionCPtr &func)
{
AbstractMetaArgumentList args;
const AbstractMetaArgumentList &arguments = func->arguments();
diff --git a/sources/shiboken6/generator/shiboken/overloaddata.h b/sources/shiboken6/generator/shiboken/overloaddata.h
index 86f76843f..317b1d022 100644
--- a/sources/shiboken6/generator/shiboken/overloaddata.h
+++ b/sources/shiboken6/generator/shiboken/overloaddata.h
@@ -43,7 +43,7 @@ using OverloadDataList = QList<OverloadData *>;
class OverloadData
{
public:
- OverloadData(const AbstractMetaFunctionList &overloads, const ShibokenGenerator *generator);
+ OverloadData(const AbstractMetaFunctionCList &overloads, const ShibokenGenerator *generator);
~OverloadData();
int minArgs() const { return m_headOverloadData->m_minArgs; }
@@ -68,22 +68,22 @@ public:
bool hasStaticFunction() const;
/// Returns true if any of the overloads passed as argument is static.
- static bool hasStaticFunction(const AbstractMetaFunctionList &overloads);
+ static bool hasStaticFunction(const AbstractMetaFunctionCList &overloads);
/// Returns true if any of the overloads for the current OverloadData is not static.
bool hasInstanceFunction() const;
/// Returns true if any of the overloads passed as argument is not static.
- static bool hasInstanceFunction(const AbstractMetaFunctionList &overloads);
+ static bool hasInstanceFunction(const AbstractMetaFunctionCList &overloads);
/// Returns true if among the overloads for the current OverloadData there are static and non-static methods altogether.
bool hasStaticAndInstanceFunctions() const;
/// Returns true if among the overloads passed as argument there are static and non-static methods altogether.
- static bool hasStaticAndInstanceFunctions(const AbstractMetaFunctionList &overloads);
+ static bool hasStaticAndInstanceFunctions(const AbstractMetaFunctionCList &overloads);
- const AbstractMetaFunction *referenceFunction() const;
- const AbstractMetaArgument *argument(const AbstractMetaFunction *func) const;
+ AbstractMetaFunctionCPtr referenceFunction() const;
+ const AbstractMetaArgument *argument(const AbstractMetaFunctionCPtr &func) const;
OverloadDataList overloadDataOnPosition(int argPos) const;
bool isHeadOverloadData() const { return this == m_headOverloadData; }
@@ -92,12 +92,12 @@ public:
OverloadData *headOverloadData() const { return m_headOverloadData; }
/// Returns the function that has a default value at the current OverloadData argument position, otherwise returns null.
- const AbstractMetaFunction *getFunctionWithDefaultValue() const;
+ AbstractMetaFunctionCPtr getFunctionWithDefaultValue() const;
bool nextArgumentHasDefaultValue() const;
/// Returns the nearest occurrence, including this instance, of an argument with a default value.
OverloadData *findNextArgWithDefault();
- bool isFinalOccurrence(const AbstractMetaFunction *func) const;
+ bool isFinalOccurrence(const AbstractMetaFunctionCPtr &func) const;
/// Returns the list of overloads removing repeated constant functions (ex.: "foo()" and "foo()const", the second is removed).
AbstractMetaFunctionCList overloadsWithoutRepetition() const;
@@ -107,10 +107,9 @@ public:
QList<int> invalidArgumentLengths() const;
- static int numberOfRemovedArguments(const AbstractMetaFunction *func, int finalArgPos = -1);
- static QPair<int, int> getMinMaxArguments(const AbstractMetaFunctionList &overloads);
+ static int numberOfRemovedArguments(const AbstractMetaFunctionCPtr &func, int finalArgPos = -1);
/// Returns true if all overloads have no more than one argument.
- static bool isSingleArgument(const AbstractMetaFunctionList &overloads);
+ static bool isSingleArgument(const AbstractMetaFunctionCList &overloads);
void dumpGraph(const QString &filename) const;
QString dumpGraph() const;
@@ -119,27 +118,26 @@ public:
QString argumentTypeReplaced() const;
bool hasArgumentWithDefaultValue() const;
- static bool hasArgumentWithDefaultValue(const AbstractMetaFunctionList &overloads);
- static bool hasArgumentWithDefaultValue(const AbstractMetaFunction *func);
+ static bool hasArgumentWithDefaultValue(const AbstractMetaFunctionCPtr &func);
/// Returns a list of function arguments which have default values and were not removed.
- static AbstractMetaArgumentList getArgumentsWithDefaultValues(const AbstractMetaFunction *func);
+ static AbstractMetaArgumentList getArgumentsWithDefaultValues(const AbstractMetaFunctionCPtr &func);
#ifndef QT_NO_DEBUG_STREAM
void formatDebug(QDebug &) const;
#endif
private:
- OverloadData(OverloadData *headOverloadData, const AbstractMetaFunction *func,
+ OverloadData(OverloadData *headOverloadData, const AbstractMetaFunctionCPtr &func,
const AbstractMetaType &argType, int argPos);
- void addOverload(const AbstractMetaFunction *func);
- OverloadData *addOverloadData(const AbstractMetaFunction *func, const AbstractMetaArgument &arg);
+ void addOverload(const AbstractMetaFunctionCPtr &func);
+ OverloadData *addOverloadData(const AbstractMetaFunctionCPtr &func, const AbstractMetaArgument &arg);
void sortNextOverloads();
bool sortByOverloadNumberModification();
- int functionNumber(const AbstractMetaFunction *func) const;
+ int functionNumber(const AbstractMetaFunctionCPtr &func) const;
OverloadDataList overloadDataOnPosition(OverloadData *overloadData, int argPos) const;
int m_minArgs;
diff --git a/sources/shiboken6/generator/shiboken/shibokengenerator.cpp b/sources/shiboken6/generator/shiboken/shibokengenerator.cpp
index 4d3ac58b2..eac7f87f7 100644
--- a/sources/shiboken6/generator/shiboken/shibokengenerator.cpp
+++ b/sources/shiboken6/generator/shiboken/shibokengenerator.cpp
@@ -226,8 +226,7 @@ bool ShibokenGenerator::shouldGenerateCppWrapper(const AbstractMetaClass *metaCl
if (!result && metaClass->hasProtectedFunctions()) {
int protectedFunctions = 0;
int protectedOperators = 0;
- const AbstractMetaFunctionList &funcs = metaClass->functions();
- for (const AbstractMetaFunction *func : funcs) {
+ for (const auto &func : metaClass->functions()) {
if (!func->isProtected() || func->isSignal() || func->isModifiedRemoved())
continue;
if (func->isOperatorOverload())
@@ -243,7 +242,7 @@ bool ShibokenGenerator::shouldGenerateCppWrapper(const AbstractMetaClass *metaCl
return result;
}
-bool ShibokenGenerator::shouldWriteVirtualMethodNative(const AbstractMetaFunction *func) const
+bool ShibokenGenerator::shouldWriteVirtualMethodNative(const AbstractMetaFunctionCPtr &func) const
{
// PYSIDE-803: Extracted this because it is used multiple times.
const AbstractMetaClass *metaClass = func->ownerClass();
@@ -274,7 +273,7 @@ QString ShibokenGenerator::fullPythonClassName(const AbstractMetaClass *metaClas
return fullClassName;
}
-QString ShibokenGenerator::fullPythonFunctionName(const AbstractMetaFunction *func, bool forceFunc)
+QString ShibokenGenerator::fullPythonFunctionName(const AbstractMetaFunctionCPtr &func, bool forceFunc)
{
QString funcName;
if (func->isOperatorOverload())
@@ -316,7 +315,7 @@ QString ShibokenGenerator::protectedFieldSetterName(const AbstractMetaField &fie
return QLatin1String("protected_") + field.name() + QLatin1String("_setter");
}
-QString ShibokenGenerator::cpythonFunctionName(const AbstractMetaFunction *func) const
+QString ShibokenGenerator::cpythonFunctionName(const AbstractMetaFunctionCPtr &func) const
{
QString result;
@@ -340,7 +339,7 @@ QString ShibokenGenerator::cpythonFunctionName(const AbstractMetaFunction *func)
return result;
}
-QString ShibokenGenerator::cpythonMethodDefinitionName(const AbstractMetaFunction *func)
+QString ShibokenGenerator::cpythonMethodDefinitionName(const AbstractMetaFunctionCPtr &func)
{
if (!func->ownerClass())
return QString();
@@ -424,7 +423,7 @@ static QString searchForEnumScope(const AbstractMetaClass *metaClass, const QStr
}
// Handle QFlags<> for guessScopeForDefaultValue()
-QString ShibokenGenerator::guessScopeForDefaultFlagsValue(const AbstractMetaFunction *func,
+QString ShibokenGenerator::guessScopeForDefaultFlagsValue(const AbstractMetaFunctionCPtr &func,
const AbstractMetaArgument &arg,
const QString &value) const
{
@@ -489,7 +488,7 @@ QString ShibokenGenerator::guessScopeForDefaultFlagsValue(const AbstractMetaFunc
* New situations may arise in the future and
* this method should be updated, do it with care.
*/
-QString ShibokenGenerator::guessScopeForDefaultValue(const AbstractMetaFunction *func,
+QString ShibokenGenerator::guessScopeForDefaultValue(const AbstractMetaFunctionCPtr &func,
const AbstractMetaArgument &arg) const
{
QString value = arg.defaultValueExpression();
@@ -628,7 +627,7 @@ void ShibokenGenerator::writeToCppConversion(TextStream &s, const AbstractMetaTy
s << cpythonToCppConversionFunction(type, context) << inArgName << ", &" << outArgName << ')';
}
-bool ShibokenGenerator::shouldRejectNullPointerArgument(const AbstractMetaFunction *func, int argIndex) const
+bool ShibokenGenerator::shouldRejectNullPointerArgument(const AbstractMetaFunctionCPtr &func, int argIndex) const
{
if (argIndex < 0 || argIndex >= func->arguments().count())
return false;
@@ -652,7 +651,7 @@ bool ShibokenGenerator::shouldRejectNullPointerArgument(const AbstractMetaFuncti
return false;
}
-QString ShibokenGenerator::getFormatUnitString(const AbstractMetaFunction *func, bool incRef)
+QString ShibokenGenerator::getFormatUnitString(const AbstractMetaFunctionCPtr &func, bool incRef)
{
QString result;
const char objType = (incRef ? 'O' : 'N');
@@ -943,11 +942,11 @@ QString ShibokenGenerator::pythonOperatorFunctionName(const QString &cppOpFuncNa
return value;
}
-QString ShibokenGenerator::pythonOperatorFunctionName(const AbstractMetaFunction *func)
+QString ShibokenGenerator::pythonOperatorFunctionName(const AbstractMetaFunctionCPtr &func)
{
QString op = pythonOperatorFunctionName(func->originalName());
if (op == unknownOperator())
- qCWarning(lcShiboken).noquote().nospace() << msgUnknownOperator(func);
+ qCWarning(lcShiboken).noquote().nospace() << msgUnknownOperator(func.data());
if (func->arguments().isEmpty()) {
if (op == QLatin1String("__sub__"))
op = QLatin1String("__neg__");
@@ -966,7 +965,7 @@ QString ShibokenGenerator::pythonRichCompareOperatorId(const QString &cppOpFuncN
return QLatin1String("Py_") + pythonOperators().value(cppOpFuncName).toUpper();
}
-QString ShibokenGenerator::pythonRichCompareOperatorId(const AbstractMetaFunction *func)
+QString ShibokenGenerator::pythonRichCompareOperatorId(const AbstractMetaFunctionCPtr &func)
{
return pythonRichCompareOperatorId(func->originalName());
}
@@ -1260,7 +1259,7 @@ QString ShibokenGenerator::cpythonToPythonConversionFunction(const TypeEntry *ty
return QStringLiteral("Shiboken::Conversions::copyToPython(%1, &").arg(converterObject(type));
}
-QString ShibokenGenerator::argumentString(const AbstractMetaFunction *func,
+QString ShibokenGenerator::argumentString(const AbstractMetaFunctionCPtr &func,
const AbstractMetaArgument &argument,
Options options) const
{
@@ -1301,7 +1300,7 @@ QString ShibokenGenerator::argumentString(const AbstractMetaFunction *func,
}
void ShibokenGenerator::writeArgument(TextStream &s,
- const AbstractMetaFunction *func,
+ const AbstractMetaFunctionCPtr &func,
const AbstractMetaArgument &argument,
Options options) const
{
@@ -1309,7 +1308,7 @@ void ShibokenGenerator::writeArgument(TextStream &s,
}
void ShibokenGenerator::writeFunctionArguments(TextStream &s,
- const AbstractMetaFunction *func,
+ const AbstractMetaFunctionCPtr &func,
Options options) const
{
AbstractMetaArgumentList arguments = func->arguments();
@@ -1342,7 +1341,7 @@ GeneratorContext ShibokenGenerator::contextForClass(const AbstractMetaClass *c)
return result;
}
-QString ShibokenGenerator::functionReturnType(const AbstractMetaFunction *func, Options options) const
+QString ShibokenGenerator::functionReturnType(const AbstractMetaFunctionCPtr &func, Options options) const
{
QString modifiedReturnType = QString(func->typeReplaced(0));
if (!modifiedReturnType.isEmpty() && !(options & OriginalTypeDescription))
@@ -1350,7 +1349,7 @@ QString ShibokenGenerator::functionReturnType(const AbstractMetaFunction *func,
return translateType(func->type(), func->implementingClass(), options);
}
-QString ShibokenGenerator::functionSignature(const AbstractMetaFunction *func,
+QString ShibokenGenerator::functionSignature(const AbstractMetaFunctionCPtr &func,
const QString &prepend,
const QString &append,
Options options,
@@ -1385,7 +1384,7 @@ QString ShibokenGenerator::functionSignature(const AbstractMetaFunction *func,
}
void ShibokenGenerator::writeArgumentNames(TextStream &s,
- const AbstractMetaFunction *func,
+ const AbstractMetaFunctionCPtr &func,
Options options) const
{
const AbstractMetaArgumentList arguments = func->arguments();
@@ -1409,7 +1408,7 @@ void ShibokenGenerator::writeArgumentNames(TextStream &s,
}
void ShibokenGenerator::writeFunctionCall(TextStream &s,
- const AbstractMetaFunction *func,
+ const AbstractMetaFunctionCPtr &func,
Options options) const
{
if (!(options & Generator::SkipName))
@@ -1424,7 +1423,7 @@ void ShibokenGenerator::writeUnusedVariableCast(TextStream &s, const QString &va
s << "SBK_UNUSED(" << variableName<< ")\n";
}
-static bool filterFunction(const AbstractMetaFunction *func, bool avoidProtectedHack)
+static bool filterFunction(const AbstractMetaFunctionCPtr &func, bool avoidProtectedHack)
{
switch (func->functionType()) {
case AbstractMetaFunction::DestructorFunction:
@@ -1444,12 +1443,12 @@ static bool filterFunction(const AbstractMetaFunction *func, bool avoidProtected
return true;
}
-AbstractMetaFunctionList ShibokenGenerator::filterFunctions(const AbstractMetaClass *metaClass) const
+AbstractMetaFunctionCList ShibokenGenerator::filterFunctions(const AbstractMetaClass *metaClass) const
{
- AbstractMetaFunctionList result;
- const AbstractMetaFunctionList &funcs = metaClass->functions();
+ AbstractMetaFunctionCList result;
+ const AbstractMetaFunctionCList &funcs = metaClass->functions();
result.reserve(funcs.size());
- for (AbstractMetaFunction *func : funcs) {
+ for (const auto &func : funcs) {
if (filterFunction(func, avoidProtectedHack()))
result.append(func);
}
@@ -1463,8 +1462,8 @@ ShibokenGenerator::ExtendedConverterData ShibokenGenerator::getExtendedConverter
// Use only the classes for the current module.
if (!shouldGenerate(metaClass))
continue;
- const AbstractMetaFunctionList &overloads = metaClass->operatorOverloads(AbstractMetaClass::ConversionOp);
- for (AbstractMetaFunction *convOp : overloads) {
+ const auto &overloads = metaClass->operatorOverloads(AbstractMetaClass::ConversionOp);
+ for (const auto &convOp : overloads) {
// Get only the conversion operators that return a type from another module,
// that are value-types and were not removed in the type system.
const TypeEntry *convType = convOp->type().typeEntry();
@@ -1562,7 +1561,7 @@ void ShibokenGenerator::processCodeSnip(QString &code) const
}
ShibokenGenerator::ArgumentVarReplacementList
- ShibokenGenerator::getArgumentReplacement(const AbstractMetaFunction *func,
+ ShibokenGenerator::getArgumentReplacement(const AbstractMetaFunctionCPtr &func,
bool usePyArgs, TypeSystem::Language language,
const AbstractMetaArgument *lastArg) const
{
@@ -1643,7 +1642,7 @@ void ShibokenGenerator::writeCodeSnips(TextStream &s,
const CodeSnipList &codeSnips,
TypeSystem::CodeSnipPosition position,
TypeSystem::Language language,
- const AbstractMetaFunction *func,
+ const AbstractMetaFunctionCPtr &func,
const AbstractMetaArgument *lastArg) const
{
QString code = getCodeSnippets(codeSnips, position, language);
@@ -1677,7 +1676,7 @@ void ShibokenGenerator::writeCodeSnips(TextStream &s,
const QRegularExpressionMatch match = pyArgsRegexCheck.match(code);
if (match.hasMatch()) {
qCWarning(lcShiboken).noquote().nospace()
- << msgWrongIndex("%PYARG", match.captured(1), func);
+ << msgWrongIndex("%PYARG", match.captured(1), func.data());
return;
}
code.replace(QLatin1String("%PYARG_1"), QLatin1String(PYTHON_ARG));
@@ -1707,7 +1706,7 @@ void ShibokenGenerator::writeCodeSnips(TextStream &s,
while (rit.hasNext()) {
QRegularExpressionMatch match = rit.next();
qCWarning(lcShiboken).noquote().nospace()
- << msgWrongIndex("%ARG#_TYPE", match.captured(1), func);
+ << msgWrongIndex("%ARG#_TYPE", match.captured(1), func.data());
}
// Replace template variable for return variable name.
@@ -1838,8 +1837,8 @@ void ShibokenGenerator::writeCodeSnips(TextStream &s,
// dispatcher.
bool hasProtectedOverload = false;
if (func->isUserAdded()) {
- const AbstractMetaFunctionList &funcs = getFunctionOverloads(func->ownerClass(), func->name());
- for (const AbstractMetaFunction *f : funcs)
+ const auto &funcs = getFunctionOverloads(func->ownerClass(), func->name());
+ for (const auto &f : funcs)
hasProtectedOverload |= f->isProtected();
}
@@ -2024,7 +2023,7 @@ void ShibokenGenerator::replaceConverterTypeSystemVariable(TypeSystemConverterVa
}
bool ShibokenGenerator::injectedCodeCallsCppFunction(const GeneratorContext &context,
- const AbstractMetaFunction *func)
+ const AbstractMetaFunctionCPtr &func)
{
if (func->injectedCodeContains(u"%FUNCTION_NAME("))
return true;
@@ -2090,8 +2089,8 @@ bool ShibokenGenerator::classNeedsGetattroFunctionImpl(const AbstractMetaClass *
return true;
const auto &functionGroup = getFunctionGroups(metaClass);
for (auto it = functionGroup.cbegin(), end = functionGroup.cend(); it != end; ++it) {
- AbstractMetaFunctionList overloads;
- for (AbstractMetaFunction *func : qAsConst(it.value())) {
+ AbstractMetaFunctionCList overloads;
+ for (const auto &func : qAsConst(it.value())) {
if (func->isAssignmentOperator() || func->isCastOperator() || func->isModifiedRemoved()
|| func->isPrivate() || func->ownerClass() != func->implementingClass()
|| func->isConstructor() || func->isOperatorOverload())
@@ -2106,15 +2105,14 @@ bool ShibokenGenerator::classNeedsGetattroFunctionImpl(const AbstractMetaClass *
return false;
}
-AbstractMetaFunctionList
- ShibokenGenerator::getMethodsWithBothStaticAndNonStaticMethods(const AbstractMetaClass *metaClass) const
+AbstractMetaFunctionCList ShibokenGenerator::getMethodsWithBothStaticAndNonStaticMethods(const AbstractMetaClass *metaClass) const
{
- AbstractMetaFunctionList methods;
+ AbstractMetaFunctionCList methods;
if (metaClass) {
const auto &functionGroups = getFunctionGroups(metaClass);
for (auto it = functionGroups.cbegin(), end = functionGroups.cend(); it != end; ++it) {
- AbstractMetaFunctionList overloads;
- for (AbstractMetaFunction *func : qAsConst(it.value())) {
+ AbstractMetaFunctionCList overloads;
+ for (const auto &func : qAsConst(it.value())) {
if (func->isAssignmentOperator() || func->isCastOperator() || func->isModifiedRemoved()
|| func->isPrivate() || func->ownerClass() != func->implementingClass()
|| func->isConstructor() || func->isOperatorOverload())
@@ -2205,7 +2203,7 @@ static void dumpFunction(AbstractMetaFunctionList lst)
}
*/
-static bool isGroupable(const AbstractMetaFunction *func)
+static bool isGroupable(const AbstractMetaFunctionCPtr &func)
{
switch (func->functionType()) {
case AbstractMetaFunction::DestructorFunction:
@@ -2224,10 +2222,10 @@ static bool isGroupable(const AbstractMetaFunction *func)
return true;
}
-static void insertIntoFunctionGroups(const AbstractMetaFunctionList &lst,
+static void insertIntoFunctionGroups(const AbstractMetaFunctionCList &lst,
ShibokenGenerator::FunctionGroups *results)
{
- for (AbstractMetaFunction *func : lst) {
+ for (const auto &func : lst) {
if (isGroupable(func))
(*results)[func->name()].append(func);
}
@@ -2262,15 +2260,15 @@ ShibokenGenerator::FunctionGroups ShibokenGenerator::getFunctionGroups(const Abs
ShibokenGenerator::FunctionGroups ShibokenGenerator::getFunctionGroupsImpl(const AbstractMetaClass *scope)
{
- AbstractMetaFunctionList lst = scope->functions();
+ AbstractMetaFunctionCList lst = scope->functions();
scope->getFunctionsFromInvisibleNamespacesToBeGenerated(&lst);
FunctionGroups results;
- for (AbstractMetaFunction *func : lst) {
+ for (const auto &func : lst) {
if (isGroupable(func)) {
auto it = results.find(func->name());
if (it == results.end()) {
- results.insert(func->name(), AbstractMetaFunctionList(1, func));
+ results.insert(func->name(), AbstractMetaFunctionCList(1, func));
} else {
// If there are virtuals methods in the mix (PYSIDE-570,
// QFileSystemModel::index(QString,int) and
@@ -2287,40 +2285,43 @@ ShibokenGenerator::FunctionGroups ShibokenGenerator::getFunctionGroupsImpl(const
return results;
}
-AbstractMetaFunctionList ShibokenGenerator::getInheritedOverloads(const AbstractMetaFunction *func, QSet<QString> *seen)
+AbstractMetaFunctionCList
+ ShibokenGenerator::getInheritedOverloads(const AbstractMetaFunctionCPtr &func, QSet<QString> *seen)
{
- AbstractMetaFunctionList results;
+ AbstractMetaFunctionCList results;
AbstractMetaClass *basis;
if (func->ownerClass() && (basis = func->ownerClass()->baseClass())) {
for (; basis; basis = basis->baseClass()) {
- const AbstractMetaFunction *inFunc = basis->findFunction(func->name());
- if (inFunc && !seen->contains(inFunc->minimalSignature())) {
+ const auto inFunc = basis->findFunction(func->name());
+ if (!inFunc.isNull() && !seen->contains(inFunc->minimalSignature())) {
seen->insert(inFunc->minimalSignature());
AbstractMetaFunction *newFunc = inFunc->copy();
newFunc->setImplementingClass(func->implementingClass());
- results << newFunc;
+ results << AbstractMetaFunctionCPtr(newFunc);
}
}
}
return results;
}
-AbstractMetaFunctionList ShibokenGenerator::getFunctionAndInheritedOverloads(const AbstractMetaFunction *func, QSet<QString> *seen)
+AbstractMetaFunctionCList
+ ShibokenGenerator::getFunctionAndInheritedOverloads(const AbstractMetaFunctionCPtr &func,
+ QSet<QString> *seen)
{
- AbstractMetaFunctionList results;
+ AbstractMetaFunctionCList results;
seen->insert(func->minimalSignature());
- results << const_cast<AbstractMetaFunction *>(func) << getInheritedOverloads(func, seen);
+ results << func << getInheritedOverloads(func, seen);
return results;
}
-AbstractMetaFunctionList ShibokenGenerator::getFunctionOverloads(const AbstractMetaClass *scope,
+AbstractMetaFunctionCList ShibokenGenerator::getFunctionOverloads(const AbstractMetaClass *scope,
const QString &functionName) const
{
- AbstractMetaFunctionList lst = scope ? scope->functions() : globalFunctions();
+ const auto &lst = scope ? scope->functions() : globalFunctions();
- AbstractMetaFunctionList results;
+ AbstractMetaFunctionCList results;
QSet<QString> seenSignatures;
- for (AbstractMetaFunction *func : qAsConst(lst)) {
+ for (const auto &func : qAsConst(lst)) {
if (func->name() != functionName)
continue;
if (isGroupable(func)) {
@@ -2416,7 +2417,7 @@ bool ShibokenGenerator::doSetup()
const auto &functionGroups = getGlobalFunctionGroups();
for (auto it = functionGroups.cbegin(), end = functionGroups.cend(); it != end; ++it) {
- for (AbstractMetaFunction *func : it.value())
+ for (const auto &func : it.value())
getCode(snips, func->injectedCodeSnips());
}
@@ -2633,7 +2634,7 @@ QString ShibokenGenerator::pythonArgsAt(int i)
}
void ShibokenGenerator::replaceTemplateVariables(QString &code,
- const AbstractMetaFunction *func) const
+ const AbstractMetaFunctionCPtr &func) const
{
const AbstractMetaClass *cpp_class = func->ownerClass();
if (cpp_class)
diff --git a/sources/shiboken6/generator/shiboken/shibokengenerator.h b/sources/shiboken6/generator/shiboken/shibokengenerator.h
index 9bca5f85e..b20a64515 100644
--- a/sources/shiboken6/generator/shiboken/shibokengenerator.h
+++ b/sources/shiboken6/generator/shiboken/shibokengenerator.h
@@ -81,7 +81,7 @@ public:
};
Q_DECLARE_FLAGS(AttroCheck, AttroCheckFlag);
- using FunctionGroups = QMap<QString, AbstractMetaFunctionList>; // Sorted
+ using FunctionGroups = QMap<QString, AbstractMetaFunctionCList>; // Sorted
ShibokenGenerator();
~ShibokenGenerator() override;
@@ -110,8 +110,8 @@ protected:
* \param func the metafunction to be searched in subclasses.
* \param seen the function's minimal signatures already seen.
*/
- static AbstractMetaFunctionList getFunctionAndInheritedOverloads(const AbstractMetaFunction *func,
- QSet<QString> *seen);
+ static AbstractMetaFunctionCList getFunctionAndInheritedOverloads(const AbstractMetaFunctionCPtr &func,
+ QSet<QString> *seen);
/// Write user's custom code snippets at class or module level.
void writeClassCodeSnips(TextStream &s,
@@ -128,7 +128,7 @@ protected:
const CodeSnipList &codeSnips,
TypeSystem::CodeSnipPosition position,
TypeSystem::Language language,
- const AbstractMetaFunction *func,
+ const AbstractMetaFunctionCPtr &func,
const AbstractMetaArgument *lastArg = nullptr) const;
/// Replaces variables for the user's custom code at global or class level.
@@ -143,7 +143,7 @@ protected:
* \return true if the function's code snippets call the wrapped C++ function
*/
static bool injectedCodeCallsCppFunction(const GeneratorContext &context,
- const AbstractMetaFunction *func);
+ const AbstractMetaFunctionCPtr &func);
/**
* Function which parse the metafunction information
@@ -151,7 +151,7 @@ protected:
* \param option some extra options
* \param arg_count the number of function arguments
*/
- QString functionSignature(const AbstractMetaFunction *func,
+ QString functionSignature(const AbstractMetaFunctionCPtr &func,
const QString &prepend = QString(),
const QString &append = QString(),
Options options = NoOption,
@@ -164,7 +164,7 @@ protected:
AttroCheck checkAttroFunctionNeeds(const AbstractMetaClass *metaClass) const;
/// Returns a list of methods of the given class where each one is part of a different overload with both static and non-static method.
- AbstractMetaFunctionList getMethodsWithBothStaticAndNonStaticMethods(const AbstractMetaClass *metaClass) const;
+ AbstractMetaFunctionCList getMethodsWithBothStaticAndNonStaticMethods(const AbstractMetaClass *metaClass) const;
void writeToPythonConversion(TextStream &s, const AbstractMetaType &type,
const AbstractMetaClass *context, const QString &argumentName) const;
@@ -174,18 +174,18 @@ protected:
const QString &outArgName) const;
/// Returns true if the argument is a pointer that rejects nullptr values.
- bool shouldRejectNullPointerArgument(const AbstractMetaFunction *func, int argIndex) const;
+ bool shouldRejectNullPointerArgument(const AbstractMetaFunctionCPtr &func, int argIndex) const;
/// Verifies if the class should have a C++ wrapper generated for it, instead of only a Python wrapper.
bool shouldGenerateCppWrapper(const AbstractMetaClass *metaClass) const;
/// Condition to call WriteVirtualMethodNative. Was extracted because also used to count these calls.
- bool shouldWriteVirtualMethodNative(const AbstractMetaFunction *func) const;
+ bool shouldWriteVirtualMethodNative(const AbstractMetaFunctionCPtr &func) const;
QString wrapperName(const AbstractMetaClass *metaClass) const;
static QString fullPythonClassName(const AbstractMetaClass *metaClass);
- static QString fullPythonFunctionName(const AbstractMetaFunction *func, bool forceFunc);
+ static QString fullPythonFunctionName(const AbstractMetaFunctionCPtr &func, bool forceFunc);
bool wrapperDiagnostics() const { return m_wrapperDiagnostics; }
@@ -197,9 +197,9 @@ protected:
static QString pythonPrimitiveTypeName(const PrimitiveTypeEntry *type);
static QString pythonOperatorFunctionName(const QString &cppOpFuncName);
- static QString pythonOperatorFunctionName(const AbstractMetaFunction *func);
+ static QString pythonOperatorFunctionName(const AbstractMetaFunctionCPtr &func);
static QString pythonRichCompareOperatorId(const QString &cppOpFuncName);
- static QString pythonRichCompareOperatorId(const AbstractMetaFunction *func);
+ static QString pythonRichCompareOperatorId(const AbstractMetaFunctionCPtr &func);
static QString fixedCppTypeName(const CustomConversion::TargetToNativeConversion *toNative);
static QString fixedCppTypeName(const AbstractMetaType &type);
@@ -259,8 +259,8 @@ protected:
QString cpythonToPythonConversionFunction(const AbstractMetaClass *metaClass) const;
QString cpythonToPythonConversionFunction(const TypeEntry *type) const;
- QString cpythonFunctionName(const AbstractMetaFunction *func) const;
- static QString cpythonMethodDefinitionName(const AbstractMetaFunction *func);
+ QString cpythonFunctionName(const AbstractMetaFunctionCPtr &func) const;
+ static QString cpythonMethodDefinitionName(const AbstractMetaFunctionCPtr &func);
static QString cpythonGettersSettersDefinitionName(const AbstractMetaClass *metaClass);
static QString cpythonGetattroFunctionName(const AbstractMetaClass *metaClass);
static QString cpythonSetattroFunctionName(const AbstractMetaClass *metaClass);
@@ -276,9 +276,9 @@ protected:
static QString cpythonWrapperCPtr(const TypeEntry *type, const QString &argName);
/// Guesses the scope to where belongs an argument's default value.
- QString guessScopeForDefaultValue(const AbstractMetaFunction *func,
+ QString guessScopeForDefaultValue(const AbstractMetaFunctionCPtr &func,
const AbstractMetaArgument &arg) const;
- QString guessScopeForDefaultFlagsValue(const AbstractMetaFunction *func,
+ QString guessScopeForDefaultFlagsValue(const AbstractMetaFunctionCPtr &func,
const AbstractMetaArgument &arg,
const QString &value) const;
@@ -290,7 +290,7 @@ protected:
/// Returns the special cast function name, the function used to proper cast class with multiple inheritance.
static QString cpythonSpecialCastFunctionName(const AbstractMetaClass *metaClass);
- static QString getFormatUnitString(const AbstractMetaFunction *func, bool incRef = false);
+ static QString getFormatUnitString(const AbstractMetaFunctionCPtr &func, bool incRef = false);
/// Returns the file name for the module global header. If no module name is provided the current will be used.
QString getModuleHeaderFileName(const QString &moduleName = QString()) const;
@@ -347,12 +347,12 @@ protected:
void collectContainerTypesFromConverterMacros(const QString &code, bool toPythonMacro);
void writeFunctionCall(TextStream &s,
- const AbstractMetaFunction *metaFunc,
+ const AbstractMetaFunctionCPtr &metaFunc,
Options options = NoOption) const;
void writeUnusedVariableCast(TextStream &s, const QString &variableName) const;
- AbstractMetaFunctionList filterFunctions(const AbstractMetaClass *metaClass) const;
+ AbstractMetaFunctionCList filterFunctions(const AbstractMetaClass *metaClass) const;
// All data about extended converters: the type entries of the target type, and a
// list of AbstractMetaClasses accepted as argument for the conversion.
@@ -393,7 +393,7 @@ private:
* \param func the metafunction to be searched in subclasses.
* \param seen the function's minimal signatures already seen.
*/
- static AbstractMetaFunctionList getInheritedOverloads(const AbstractMetaFunction *func,
+ static AbstractMetaFunctionCList getInheritedOverloads(const AbstractMetaFunctionCPtr & func,
QSet<QString> *seen);
/**
@@ -401,8 +401,8 @@ private:
* \param scope scope used to search for overloads.
* \param functionName the function name.
*/
- AbstractMetaFunctionList getFunctionOverloads(const AbstractMetaClass *scope,
- const QString &functionName) const;
+ AbstractMetaFunctionCList getFunctionOverloads(const AbstractMetaClass *scope,
+ const QString &functionName) const;
/**
* Write a function argument in the C++ in the text stream \p s.
* This function just call \code s << argumentString(); \endcode
@@ -412,7 +412,7 @@ private:
* \param options some extra options.
*/
void writeArgument(TextStream &s,
- const AbstractMetaFunction *func,
+ const AbstractMetaFunctionCPtr &func,
const AbstractMetaArgument &argument,
Options options = NoOption) const;
/**
@@ -421,16 +421,16 @@ private:
* \param argument metaargument information to be parsed.
* \param options some extra options.
*/
- QString argumentString(const AbstractMetaFunction *func,
+ QString argumentString(const AbstractMetaFunctionCPtr &func,
const AbstractMetaArgument &argument,
Options options = NoOption) const;
- QString functionReturnType(const AbstractMetaFunction *func, Options options = NoOption) const;
+ QString functionReturnType(const AbstractMetaFunctionCPtr &func, Options options = NoOption) const;
/// Utility function for writeCodeSnips.
using ArgumentVarReplacementPair = QPair<AbstractMetaArgument, QString>;
using ArgumentVarReplacementList = QList<ArgumentVarReplacementPair>;
- ArgumentVarReplacementList getArgumentReplacement(const AbstractMetaFunction* func,
+ ArgumentVarReplacementList getArgumentReplacement(const AbstractMetaFunctionCPtr &func,
bool usePyArgs, TypeSystem::Language language,
const AbstractMetaArgument *lastArg) const;
@@ -479,15 +479,15 @@ private:
/// \param count the number of function arguments
/// \param options some extra options used during the parser
void writeArgumentNames(TextStream &s,
- const AbstractMetaFunction *func,
+ const AbstractMetaFunctionCPtr &func,
Options options = NoOption) const;
void writeFunctionArguments(TextStream &s,
- const AbstractMetaFunction *func,
+ const AbstractMetaFunctionCPtr &func,
Options options = NoOption) const;
void replaceTemplateVariables(QString &code,
- const AbstractMetaFunction *func) const;
+ const AbstractMetaFunctionCPtr &func) const;
bool m_useCtorHeuristic = false;
bool m_userReturnValueHeuristic = false;