aboutsummaryrefslogtreecommitdiffstats
path: root/generator/shiboken2/cppgenerator.h
diff options
context:
space:
mode:
Diffstat (limited to 'generator/shiboken2/cppgenerator.h')
-rw-r--r--generator/shiboken2/cppgenerator.h84
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;