diff options
author | Francisco Boni <boboniboni@gmail.com> | 2024-05-02 05:16:24 -0300 |
---|---|---|
committer | Francisco Boni <boboniboni@gmail.com> | 2024-05-13 17:46:38 -0300 |
commit | 30ed48e253c6f9f79ac606d838db5d035c5708ab (patch) | |
tree | d3d8a32283f4961ebf985c6f216dbeb1b8ab6d9b | |
parent | cc573b9012a9d5ddfa78f75ccaf0f6f6c35fe50a (diff) |
pyi: fix considering modified types as eligible implicit conversions
The shiboken generator is considering modified types from converting constructors as eligible candidates for implicit conversion. This decision is not always correct if the type from converting constructors have been modified by the type system reference.
Pick-to: 6.7
Fixes: PYSIDE-2712
Change-Id: I62fa6e03faa6770b451d62ffb0cfee0fc75946bb
Reviewed-by: Shyamnath Premnadh <Shyamnath.Premnadh@qt.io>
Reviewed-by: Francisco Boni <boboniboni@gmail.com>
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
-rw-r--r-- | sources/shiboken6/generator/shiboken/cppgenerator.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/sources/shiboken6/generator/shiboken/cppgenerator.cpp b/sources/shiboken6/generator/shiboken/cppgenerator.cpp index 419704153..7b2c27db2 100644 --- a/sources/shiboken6/generator/shiboken/cppgenerator.cpp +++ b/sources/shiboken6/generator/shiboken/cppgenerator.cpp @@ -5122,10 +5122,15 @@ QString CppGenerator::signatureParameter(const AbstractMetaArgument &arg) const const AbstractMetaFunctionCList conversions = api().implicitConversions(metaType); for (const auto &f : conversions) { - if (f->isConstructor() && !f->arguments().isEmpty()) - signatures << f->arguments().constFirst().type().pythonSignature(); - else if (f->isConversionOperator()) + if (f->isConstructor() && !f->arguments().isEmpty()) { + // PYSIDE-2712: modified types from converting constructors are not always correct + // candidates if they are modified by the type system reference + if (!f->arguments().constFirst().isTypeModified()) { + signatures << f->arguments().constFirst().type().pythonSignature(); + } + } else if (f->isConversionOperator()) { signatures << f->ownerClass()->fullName(); + } } const qsizetype size = signatures.size(); |