From 6c62738a9a051c4e06444c6d37c766f7ccc696c8 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 15 Sep 2021 10:04:31 +0200 Subject: shiboken6: Store the AbstractMetaArgument instead of the type in Overloaddata This makes subsequent refactorings easier. Task-number: PYSIDE-1660 Change-Id: I2ca708c2e3313c48483c8769eb186123bff5da9b Reviewed-by: Christian Tismer --- sources/shiboken6/generator/shiboken/cppgenerator.cpp | 2 +- sources/shiboken6/generator/shiboken/overloaddata.cpp | 16 ++++++++++------ sources/shiboken6/generator/shiboken/overloaddata.h | 13 ++++++++----- 3 files changed, 19 insertions(+), 12 deletions(-) (limited to 'sources') diff --git a/sources/shiboken6/generator/shiboken/cppgenerator.cpp b/sources/shiboken6/generator/shiboken/cppgenerator.cpp index eacfc681e..4fd5d4094 100644 --- a/sources/shiboken6/generator/shiboken/cppgenerator.cpp +++ b/sources/shiboken6/generator/shiboken/cppgenerator.cpp @@ -2463,7 +2463,7 @@ void CppGenerator::writeTypeCheck(TextStream &s, for (const auto &sibling : siblings) { for (const auto &func : sibling->overloads()) { checkTypeViability(func); - const AbstractMetaType &argType = sibling->argument(func)->type(); + const AbstractMetaType &argType = sibling->overloadArgument(func)->type(); if (!argType.isPrimitive()) continue; if (ShibokenGenerator::isNumber(argType.typeEntry())) diff --git a/sources/shiboken6/generator/shiboken/overloaddata.cpp b/sources/shiboken6/generator/shiboken/overloaddata.cpp index 103770396..46a2ee201 100644 --- a/sources/shiboken6/generator/shiboken/overloaddata.cpp +++ b/sources/shiboken6/generator/shiboken/overloaddata.cpp @@ -485,9 +485,10 @@ OverloadData::OverloadData(const AbstractMetaFunctionCList &overloads, OverloadDataNode::OverloadDataNode(const AbstractMetaFunctionCPtr &func, OverloadDataRootNode *parent, - const AbstractMetaType &argType, int argPos, + const AbstractMetaArgument &argument, + int argPos, const QString argTypeReplaced) : - m_argType(argType), + m_argument(argument), m_argTypeReplaced(argTypeReplaced), m_parent(parent), m_argPos(argPos) @@ -525,7 +526,7 @@ OverloadDataNode *OverloadDataRootNode::addOverloadDataNode(const AbstractMetaFu if (overloadData.isNull()) { QString typeReplaced = func->typeReplaced(arg.argumentIndex() + 1); const int argpos = argPos() + 1; - overloadData.reset(new OverloadDataNode(func, this, argType, argpos, + overloadData.reset(new OverloadDataNode(func, this, arg, argpos, typeReplaced)); m_children.append(overloadData); } @@ -634,7 +635,7 @@ AbstractMetaFunctionCPtr OverloadDataRootNode::referenceFunction() const return m_overloads.constFirst(); } -const AbstractMetaArgument *OverloadDataNode::argument(const AbstractMetaFunctionCPtr &func) const +const AbstractMetaArgument *OverloadDataNode::overloadArgument(const AbstractMetaFunctionCPtr &func) const { if (isRoot() || !m_overloads.contains(func)) return nullptr; @@ -901,7 +902,7 @@ void OverloadDataNode::dumpNodeGraph(QTextStream &s) const // Show default values (original and modified) for various functions for (const auto &func : m_overloads) { - const AbstractMetaArgument *arg = argument(func); + const AbstractMetaArgument *arg = overloadArgument(func); if (!arg) continue; const int n = root->functionNumber(func); @@ -1037,7 +1038,10 @@ void OverloadDataNode::formatDebug(QDebug &d) const { d << "OverloadDataNode("; formatReferenceFunction(d); - d << ", argType=" << m_argType << ", argPos=" << m_argPos; + d << ", argPos=" << m_argPos; + if (m_argument.argumentIndex() != m_argPos) + d << ", argIndex=" << m_argument.argumentIndex(); + d << ", argType=\"" << m_argument.type().cppSignature() << '"'; if (!m_argTypeReplaced.isEmpty()) d << ", argTypeReplaced=\"" << m_argTypeReplaced << '"'; formatOverloads(d); diff --git a/sources/shiboken6/generator/shiboken/overloaddata.h b/sources/shiboken6/generator/shiboken/overloaddata.h index 0271fd3d0..e72b64778 100644 --- a/sources/shiboken6/generator/shiboken/overloaddata.h +++ b/sources/shiboken6/generator/shiboken/overloaddata.h @@ -30,6 +30,7 @@ #define OVERLOADDATA_H #include +#include #include #include @@ -104,7 +105,7 @@ class OverloadDataNode : public OverloadDataRootNode public: explicit OverloadDataNode(const AbstractMetaFunctionCPtr &func, OverloadDataRootNode *parent, - const AbstractMetaType &argType, int argPos, + const AbstractMetaArgument &arg, int argPos, const QString argTypeReplaced = {}); void addOverload(const AbstractMetaFunctionCPtr &func); @@ -112,23 +113,25 @@ public: const OverloadDataRootNode *parent() const override; void dumpNodeGraph(QTextStream &s) const; - const AbstractMetaType &argType() const { return m_argType; } + const AbstractMetaArgument &argument() const + { return m_argument; } + const AbstractMetaType &argType() const { return m_argument.type(); } bool hasArgumentTypeReplace() const { return !m_argTypeReplaced.isEmpty(); } const QString &argumentTypeReplaced() const { return m_argTypeReplaced; } - const AbstractMetaArgument *argument(const AbstractMetaFunctionCPtr &func) const; + const AbstractMetaArgument *overloadArgument(const AbstractMetaFunctionCPtr &func) const; #ifndef QT_NO_DEBUG_STREAM void formatDebug(QDebug &d) const override; #endif private: - AbstractMetaType m_argType; + AbstractMetaArgument m_argument; QString m_argTypeReplaced; OverloadDataRootNode *m_parent = nullptr; - int m_argPos = -1; + int m_argPos = -1; // Position excluding modified/removed arguments. }; class OverloadData : public OverloadDataRootNode -- cgit v1.2.3