diff options
Diffstat (limited to 'cppgenerator.cpp')
-rw-r--r-- | cppgenerator.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/cppgenerator.cpp b/cppgenerator.cpp index 68222adbe..226f7e507 100644 --- a/cppgenerator.cpp +++ b/cppgenerator.cpp @@ -1827,6 +1827,8 @@ void CppGenerator::writeClassDefinition(QTextStream& s, const AbstractMetaClass* QString cppClassName = metaClass->qualifiedCppName(); QString className = cpythonTypeName(metaClass).replace(QRegExp("_Type$"), ""); QString baseClassName('0'); + AbstractMetaFunctionList ctors = metaClass->queryFunctions(AbstractMetaClass::Constructors); + bool onlyPrivCtor = !metaClass->hasNonPrivateConstructor(); if (metaClass->hasArithmeticOperatorOverload() || metaClass->hasLogicalOperatorOverload() @@ -1847,7 +1849,10 @@ void CppGenerator::writeClassDefinition(QTextStream& s, const AbstractMetaClass* "Shiboken::deallocWrapperWithPrivateDtor" : "0"; tp_init = "0"; } else { - tp_flags = "Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_CHECKTYPES";//|Py_TPFLAGS_HAVE_GC"; + if (onlyPrivCtor) + tp_flags = "Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES"; + else + tp_flags = "Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_CHECKTYPES"; QString deallocClassName; if (shouldGenerateCppWrapper(metaClass)) @@ -1857,14 +1862,13 @@ void CppGenerator::writeClassDefinition(QTextStream& s, const AbstractMetaClass* tp_dealloc = "&Shiboken::deallocWrapper"; cpp_dtor = "&Shiboken::callCppDestructor<" + metaClass->qualifiedCppName() + " >"; - AbstractMetaFunctionList ctors = metaClass->queryFunctions(AbstractMetaClass::Constructors); - tp_init = ctors.isEmpty() ? "0" : cpythonFunctionName(ctors.first()); + tp_init = onlyPrivCtor ? "0" : cpythonFunctionName(ctors.first()); } if (classNeedsGetattroFunction(metaClass)) tp_getattro = cpythonGetattroFunctionName(metaClass); - if (metaClass->hasPrivateDestructor()) + if (metaClass->hasPrivateDestructor() || onlyPrivCtor) tp_new = "0"; else tp_new = "Shiboken::SbkBaseWrapper_TpNew"; |