Skip to content

Commit 924ec80

Browse files
shiboken6: Factor out helper writeTemplateCustomConverterRegister()
It is now used for containers and will be later reused for smart pointers. Task-number: PYSIDE-3107 Change-Id: I0790c38cbcf8f9f4cb500d252c00d1c9e66deb7b Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
1 parent 234e819 commit 924ec80

File tree

2 files changed

+23
-8
lines changed

2 files changed

+23
-8
lines changed

sources/shiboken6/generator/shiboken/cppgenerator.cpp

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2120,6 +2120,24 @@ void CppGenerator::writeCustomConverterRegister(TextStream &s,
21202120
}
21212121
}
21222122

2123+
void CppGenerator::writeTemplateCustomConverterRegister(TextStream &s,
2124+
const AbstractMetaType &type,
2125+
QString converter)
2126+
{
2127+
auto customConversion = CustomConversion::getCustomConversion(type.typeEntry());
2128+
if (!customConversion || customConversion->targetToNativeConversions().isEmpty())
2129+
return;
2130+
if (converter.isEmpty())
2131+
converter = converterVar;
2132+
const QString typeName = fixedCppTypeName(type);
2133+
for (const auto &conv : customConversion->targetToNativeConversions()) {
2134+
const QString &sourceTypeName = conv.sourceTypeName();
2135+
QString toCpp = pythonToCppFunctionName(sourceTypeName, typeName);
2136+
QString isConv = convertibleToCppFunctionName(sourceTypeName, typeName);
2137+
writeAddPythonToCppConversion(s, converter, toCpp, isConv);
2138+
}
2139+
}
2140+
21232141
void CppGenerator::writeContainerConverterFunctions(TextStream &s,
21242142
const AbstractMetaType &containerType) const
21252143
{
@@ -4438,8 +4456,7 @@ QString CppGenerator::writeContainerConverterInitialization(TextStream &s,
44384456
s << '&' << targetTypeName << "_Type";
44394457
}
44404458

4441-
const QString typeName = fixedCppTypeName(type);
4442-
s << ", " << cppToPythonFunctionName(typeName, targetTypeName) << ");\n";
4459+
s << ", " << cppToPythonFunctionName(fixedCppTypeName(type), targetTypeName) << ");\n";
44434460

44444461
s << registerConverterName(cppSignature, converter);
44454462
if (usePySideExtensions() && cppSignature.startsWith("const "_L1)
@@ -4448,12 +4465,7 @@ QString CppGenerator::writeContainerConverterInitialization(TextStream &s,
44484465
s << registerConverterName(underlyingType, converter);
44494466
}
44504467

4451-
for (const auto &conv : typeEntry->customConversion()->targetToNativeConversions()) {
4452-
const QString &sourceTypeName = conv.sourceTypeName();
4453-
QString toCpp = pythonToCppFunctionName(sourceTypeName, typeName);
4454-
QString isConv = convertibleToCppFunctionName(sourceTypeName, typeName);
4455-
writeAddPythonToCppConversion(s, converter, toCpp, isConv);
4456-
}
4468+
writeTemplateCustomConverterRegister(s, type, converter);
44574469

44584470
auto typedefItPair = api.typedefTargetToName().equal_range(type.cppSignature());
44594471
if (typedefItPair.first != typedefItPair.second) {

sources/shiboken6/generator/shiboken/cppgenerator.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,9 @@ class CppGenerator : public ShibokenGenerator
114114
static void writeCustomConverterRegister(TextStream &s,
115115
const CustomConversionPtr &customConversion,
116116
const QString &converterVar);
117+
static void writeTemplateCustomConverterRegister(TextStream &s,
118+
const AbstractMetaType &type,
119+
QString converter = {});
117120

118121
void writeContainerConverterFunctions(TextStream &s,
119122
const AbstractMetaType &containerType) const;

0 commit comments

Comments
 (0)