@@ -719,7 +719,8 @@ void CppGenerator::generateClass(TextStream &s,
719719
720720 s << ' \n ' ;
721721
722- writeClassTypeFunction (s, classContext.metaClass ());
722+ if (!metaClass->isNamespace ())
723+ writeClassTypeFunction (s, metaClass);
723724
724725 // class inject-code native/beginning
725726 if (!typeEntry->codeSnips ().isEmpty ()) {
@@ -5493,7 +5494,9 @@ void CppGenerator::writeSignatureInfo(TextStream &s, const OverloadData &overloa
54935494 }
54945495}
54955496
5496- void CppGenerator::writeEnumsInitialization (TextStream &s, const AbstractMetaEnumList &enums)
5497+ void CppGenerator::writeEnumsInitialization (TextStream &s,
5498+ const char *enclosing,
5499+ const AbstractMetaEnumList &enums)
54975500{
54985501 if (enums.isEmpty ())
54995502 return ;
@@ -5510,7 +5513,7 @@ void CppGenerator::writeEnumsInitialization(TextStream &s, const AbstractMetaEnu
55105513 preambleWritten = true ;
55115514 }
55125515 ConfigurableScope configScope (s, cppEnum.typeEntry ());
5513- etypeUsed |= writeEnumInitialization (s, cppEnum);
5516+ etypeUsed |= writeEnumInitialization (s, enclosing, cppEnum);
55145517 }
55155518 if (preambleWritten && !etypeUsed)
55165519 s << sbkUnusedVariableCast (" EType" );
@@ -5520,7 +5523,7 @@ void CppGenerator::writeEnumsInitFunc(TextStream &s, const QString &funcName,
55205523 const AbstractMetaEnumList &enums)
55215524{
55225525 s << " static void " << funcName << " (PyObject *module)\n {\n " << indent;
5523- writeEnumsInitialization (s, enums);
5526+ writeEnumsInitialization (s, " module " , enums);
55245527 s << outdent << " }\n\n " ;
55255528}
55265529
@@ -5534,19 +5537,11 @@ static qsizetype maxLineLength(const QStringList &list)
55345537 return result;
55355538}
55365539
5537- bool CppGenerator::writeEnumInitialization (TextStream &s, const AbstractMetaEnum &cppEnum)
5540+ bool CppGenerator::writeEnumInitialization (TextStream &s, const char *enclosing,
5541+ const AbstractMetaEnum &cppEnum)
55385542{
55395543 const auto enclosingClass = cppEnum.targetLangEnclosingClass ();
5540- const bool hasUpperEnclosingClass = enclosingClass
5541- && enclosingClass->targetLangEnclosingClass ();
55425544 EnumTypeEntryCPtr enumTypeEntry = cppEnum.typeEntry ();
5543- QString enclosingObjectVariable;
5544- if (enclosingClass)
5545- enclosingObjectVariable = cpythonTypeName (enclosingClass);
5546- else if (hasUpperEnclosingClass)
5547- enclosingObjectVariable = u" enclosingClass" _s;
5548- else
5549- enclosingObjectVariable = u" module" _s;
55505545
55515546 s << " // Initialization of " ;
55525547 s << (cppEnum.isAnonymous () ? " anonymous enum identified by enum value" : " enum" );
@@ -5629,9 +5624,9 @@ bool CppGenerator::writeEnumInitialization(TextStream &s, const AbstractMetaEnum
56295624 for (const auto &enumValue : enumValues) {
56305625 const QString mangledName = mangleName (enumValue.name ());
56315626 const QString pyValue = initializerValues + u' [' + QString::number (idx++) + u' ]' ;
5632- if (enclosingClass || hasUpperEnclosingClass ) {
5627+ if (enclosingClass) {
56335628 s << " tpDict.reset(PepType_GetDict(reinterpret_cast<PyTypeObject *>("
5634- << enclosingObjectVariable << " )));\n "
5629+ << enclosing << " )));\n "
56355630 << " PyDict_SetItemString(tpDict.object(), \" " << mangledName << " \" ,\n "
56365631 << indent << (isSigned ? " PyLong_FromLongLong" : " PyLong_FromUnsignedLongLong" )
56375632 << " (" << pyValue << " ));\n " << outdent;
@@ -5650,7 +5645,7 @@ bool CppGenerator::writeEnumInitialization(TextStream &s, const AbstractMetaEnum
56505645 auto packageLevel = packageName ().count (u' .' ) + 1 ;
56515646 s << " EType = Shiboken::Enum::"
56525647 << " createPythonEnum"
5653- << ' (' << enclosingObjectVariable << " ,\n " << indent
5648+ << ' (' << enclosing << " ,\n " << indent
56545649 << ' "' << packageLevel << ' :' << getClassTargetFullName (cppEnum) << " \" ,\n "
56555650 << initializerName << " , " << initializerValues << " );\n " << outdent
56565651 << enumVarTypeObj << " = EType;\n " ;
@@ -5895,7 +5890,7 @@ void CppGenerator::writeClassRegister(TextStream &s,
58955890 const QString typePtr = u" _" _s + chopType (pyTypeName)
58965891 + u" _Type" _s;
58975892
5898- s << typePtr << " = Shiboken::ObjectType::introduceWrapperType(\n " << indent;
5893+ s << " PyTypeObject *pyType = Shiboken::ObjectType::introduceWrapperType(\n " << indent;
58995894 // 1:enclosingObject
59005895 s << enclosingObjectVariable << " ,\n " ;
59015896
@@ -5940,9 +5935,10 @@ void CppGenerator::writeClassRegister(TextStream &s,
59405935 else
59415936 s << wrapperFlags.join (" | " );
59425937
5943- s << outdent << " );\n auto *pyType = " << pyTypeName << " ; // references "
5944- << typePtr << " \n "
5945- << outdent << " #if PYSIDE6_COMOPT_COMPRESS == 0\n " << indent
5938+ s << outdent << " );\n " ;
5939+ if (!metaClass->isNamespace ())
5940+ s << typePtr << " = pyType;\n " ;
5941+ s << outdent << " #if PYSIDE6_COMOPT_COMPRESS == 0\n " << indent
59465942 << " InitSignatureStrings(pyType, " << initFunctionName << " _SignatureStrings);\n "
59475943 << outdent << " #else\n " << indent
59485944 << " InitSignatureBytes(pyType, " << initFunctionName << " _SignatureBytes, "
@@ -5987,9 +5983,8 @@ void CppGenerator::writeClassRegister(TextStream &s,
59875983
59885984 // Set typediscovery struct or fill the struct of another one
59895985 if (needsTypeDiscoveryFunction (metaClass)) {
5990- s << " Shiboken::ObjectType::setTypeDiscoveryFunctionV2(\n " << indent
5991- << cpythonTypeName (metaClass)
5992- << " , &" << cpythonBaseName (metaClass) << " _typeDiscovery);" << outdent << " \n\n " ;
5986+ s << " Shiboken::ObjectType::setTypeDiscoveryFunctionV2(pyType, &" << cpythonBaseName (metaClass)
5987+ << " _typeDiscovery);\n\n " ;
59935988 }
59945989
59955990 AbstractMetaEnumList classEnums = metaClass->enums ();
@@ -5999,7 +5994,7 @@ void CppGenerator::writeClassRegister(TextStream &s,
59995994 s << " // Pass the ..._EnumFlagInfo to the class.\n "
60005995 << " SbkObjectType_SetEnumFlagInfo(pyType, " << chopType (pyTypeName)
60015996 << " _EnumFlagInfo);\n\n " ;
6002- writeEnumsInitialization (s, classEnums);
5997+ writeEnumsInitialization (s, " pyType " , classEnums);
60035998
60045999 if (metaClass->hasSignals ())
60056000 writeSignalInitialization (s, metaClass);
0 commit comments