diff options
Diffstat (limited to 'generator/shiboken2/cppgenerator.h')
-rw-r--r-- | generator/shiboken2/cppgenerator.h | 84 |
1 files changed, 58 insertions, 26 deletions
diff --git a/generator/shiboken2/cppgenerator.h b/generator/shiboken2/cppgenerator.h index 104ab41..5dc3f5a 100644 --- a/generator/shiboken2/cppgenerator.h +++ b/generator/shiboken2/cppgenerator.h @@ -39,10 +39,11 @@ class CppGenerator : public ShibokenGenerator public: CppGenerator(); protected: - QString fileNameForClass(const AbstractMetaClass* metaClass) const; + QString fileNamePrefix() const; + QString fileNameForContext(GeneratorContext &context) const; QList<AbstractMetaFunctionList> filterGroupedOperatorFunctions(const AbstractMetaClass* metaClass, uint query); - void generateClass(QTextStream& s, const AbstractMetaClass* metaClass); + void generateClass(QTextStream& s, GeneratorContext &classContext); bool finishGeneration(); private: @@ -57,21 +58,31 @@ private: void writeEnumConverterFunctions(QTextStream& s, const TypeEntry* enumType); void writeEnumConverterFunctions(QTextStream& s, const AbstractMetaEnum* metaEnum); - void writeConverterFunctions(QTextStream& s, const AbstractMetaClass* metaClass); + void writeConverterFunctions(QTextStream &s, const AbstractMetaClass *metaClass, + GeneratorContext &classContext); void writeCustomConverterFunctions(QTextStream& s, const CustomConversion* customConversion); - void writeConverterRegister(QTextStream& s, const AbstractMetaClass* metaClass); + void writeConverterRegister(QTextStream &s, const AbstractMetaClass *metaClass, + GeneratorContext &classContext); void writeCustomConverterRegister(QTextStream& s, const CustomConversion* customConversion, const QString& converterVar); void writeContainerConverterRegister(QTextStream& s, const AbstractMetaType* container, const QString& converterVar); void writeContainerConverterFunctions(QTextStream& s, const AbstractMetaType* containerType); - void writeMethodWrapperPreamble(QTextStream& s, OverloadData& overloadData); - void writeConstructorWrapper(QTextStream& s, const AbstractMetaFunctionList overloads); + void writeMethodWrapperPreamble(QTextStream &s, OverloadData &overloadData, + GeneratorContext &context); + void writeConstructorWrapper(QTextStream &s, const AbstractMetaFunctionList overloads, GeneratorContext &classContext); void writeDestructorWrapper(QTextStream& s, const AbstractMetaClass* metaClass); - void writeMethodWrapper(QTextStream& s, const AbstractMetaFunctionList overloads); + void writeMethodWrapper(QTextStream &s, const AbstractMetaFunctionList overloads, + GeneratorContext &classContext); void writeArgumentsInitializer(QTextStream& s, OverloadData& overloadData); - void writeCppSelfDefinition(QTextStream& s, const AbstractMetaFunction* func, bool hasStaticOverload = false); - void writeCppSelfDefinition(QTextStream& s, const AbstractMetaClass* metaClass, bool hasStaticOverload = false, bool cppSelfAsReference = false); + void writeCppSelfDefinition(QTextStream &s, + const AbstractMetaFunction *func, + GeneratorContext &context, + bool hasStaticOverload = false); + void writeCppSelfDefinition(QTextStream &s, + GeneratorContext &context, + bool hasStaticOverload = false, + bool cppSelfAsReference = false); void writeErrorSection(QTextStream& s, OverloadData& overloadData); void writeFunctionReturnErrorCheckSection(QTextStream& s, bool hasReturnValue = true); @@ -84,8 +95,9 @@ private: void writeTypeDiscoveryFunction(QTextStream& s, const AbstractMetaClass* metaClass); - void writeSetattroFunction(QTextStream& s, const AbstractMetaClass* metaClass); - void writeGetattroFunction(QTextStream& s, const AbstractMetaClass* metaClass); + void writeSetattroFunction(QTextStream &s, GeneratorContext &context); + void writeGetattroFunction(QTextStream &s, GeneratorContext &context); + QString writeSmartPointerGetterCast(); /** * Writes Python to C++ conversions for arguments on Python wrappers. @@ -152,10 +164,15 @@ private: void writeOverloadedFunctionDecisorEngine(QTextStream& s, const OverloadData* parentOverloadData); /// Writes calls to all the possible method/function overloads. - void writeFunctionCalls(QTextStream& s, const OverloadData& overloadData); + void writeFunctionCalls(QTextStream &s, + const OverloadData &overloadData, + GeneratorContext &context); /// Writes the call to a single function usually from a collection of overloads. - void writeSingleFunctionCall(QTextStream& s, const OverloadData& overloadData, const AbstractMetaFunction* func); + void writeSingleFunctionCall(QTextStream &s, + const OverloadData &overloadData, + const AbstractMetaFunction *func, + GeneratorContext &context); /// Returns the name of a C++ to Python conversion function. static QString cppToPythonFunctionName(const QString& sourceTypeName, QString targetTypeName = QString()); @@ -207,32 +224,47 @@ private: /// Returns a string containing the name of an argument for the given function and argument index. QString argumentNameFromIndex(const AbstractMetaFunction* func, int argIndex, const AbstractMetaClass** wrappedClass); - void writeMethodCall(QTextStream& s, const AbstractMetaFunction* func, int maxArgs = 0); + void writeMethodCall(QTextStream &s, const AbstractMetaFunction *func, + GeneratorContext &context, int maxArgs = 0); - void writeClassRegister(QTextStream& s, const AbstractMetaClass* metaClass); - void writeClassDefinition(QTextStream& s, const AbstractMetaClass* metaClass); + QString getInitFunctionName(GeneratorContext &context) const; + + void writeClassRegister(QTextStream &s, + const AbstractMetaClass *metaClass, + GeneratorContext &classContext); + void writeClassDefinition(QTextStream &s, + const AbstractMetaClass *metaClass, + GeneratorContext &classContext); void writeMethodDefinitionEntry(QTextStream& s, const AbstractMetaFunctionList overloads); void writeMethodDefinition(QTextStream& s, const AbstractMetaFunctionList overloads); /// Writes the implementation of all methods part of python sequence protocol - void writeSequenceMethods(QTextStream& s, const AbstractMetaClass* metaClass); + void writeSequenceMethods(QTextStream &s, + const AbstractMetaClass *metaClass, + GeneratorContext &context); void writeTypeAsSequenceDefinition(QTextStream& s, const AbstractMetaClass* metaClass); /// Writes the PyMappingMethods structure for types that supports the python mapping protocol. void writeTypeAsMappingDefinition(QTextStream& s, const AbstractMetaClass* metaClass); - void writeMappingMethods(QTextStream& s, const AbstractMetaClass* metaClass); + void writeMappingMethods(QTextStream &s, + const AbstractMetaClass *metaClass, + GeneratorContext &context); void writeTypeAsNumberDefinition(QTextStream& s, const AbstractMetaClass* metaClass); void writeTpTraverseFunction(QTextStream& s, const AbstractMetaClass* metaClass); void writeTpClearFunction(QTextStream& s, const AbstractMetaClass* metaClass); - void writeCopyFunction(QTextStream& s, const AbstractMetaClass *metaClass); + void writeCopyFunction(QTextStream &s, GeneratorContext &context); - void writeGetterFunction(QTextStream& s, const AbstractMetaField* metaField); - void writeSetterFunction(QTextStream& s, const AbstractMetaField* metaField); + void writeGetterFunction(QTextStream &s, + const AbstractMetaField *metaField, + GeneratorContext &context); + void writeSetterFunction(QTextStream &s, + const AbstractMetaField *metaField, + GeneratorContext &context); - void writeRichCompareFunction(QTextStream& s, const AbstractMetaClass* metaClass); + void writeRichCompareFunction(QTextStream &s, GeneratorContext &context); void writeToPythonFunction(QTextStream& s, const AbstractMetaClass* metaClass); void writeEnumsInitialization(QTextStream& s, AbstractMetaEnumList& enums); @@ -263,7 +295,7 @@ private: void writeParentChildManagement(QTextStream& s, const AbstractMetaFunction* func, bool userHeuristicForReturn); bool writeParentChildManagement(QTextStream& s, const AbstractMetaFunction* func, int argIndex, bool userHeuristicPolicy); void writeReturnValueHeuristics(QTextStream& s, const AbstractMetaFunction* func, const QString& self = QLatin1String(PYTHON_SELF_VAR)); - void writeInitQtMetaTypeFunctionBody(QTextStream& s, const AbstractMetaClass* metaClass) const; + void writeInitQtMetaTypeFunctionBody(QTextStream &s, GeneratorContext &context) const; /** * Returns the multiple inheritance initializer function for the given class. @@ -288,14 +320,14 @@ private: /// Returns true if generator should produce getters and setters for the given class. bool shouldGenerateGetSetList(const AbstractMetaClass* metaClass); - void writeHashFunction(QTextStream& s, const AbstractMetaClass* metaClass); + void writeHashFunction(QTextStream &s, GeneratorContext &context); /// Write default implementations for sequence protocol - void writeStdListWrapperMethods(QTextStream& s, const AbstractMetaClass* metaClass); + void writeStdListWrapperMethods(QTextStream &s, GeneratorContext &context); /// Helper function for writeStdListWrapperMethods. void writeIndexError(QTextStream& s, const QString& errorMsg); - QString writeReprFunction(QTextStream& s, const AbstractMetaClass* metaClass); + QString writeReprFunction(QTextStream &s, GeneratorContext &context); bool hasBoolCast(const AbstractMetaClass* metaClass) const; |