diff options
author | Hugo Parente Lima <hugo.pl@gmail.com> | 2010-10-29 17:05:46 -0200 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-08 16:08:55 -0300 |
commit | 7e51b29827d887e8156e0cd48d864ffe356412cc (patch) | |
tree | cc5485d985622eff3377bfa8221b57789f3798aa /generator | |
parent | 78d5b68b37b206c81932f188e106b7f239b25cab (diff) |
Don't use ref. on primitive types when using Converter<T>::toPython.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
Renato Araújo <renato.filho@openbossa.org>
Diffstat (limited to 'generator')
-rw-r--r-- | generator/cppgenerator.cpp | 10 | ||||
-rw-r--r-- | generator/shibokengenerator.cpp | 25 | ||||
-rw-r--r-- | generator/shibokengenerator.h | 5 |
3 files changed, 29 insertions, 11 deletions
diff --git a/generator/cppgenerator.cpp b/generator/cppgenerator.cpp index d01beca9b..1ea5b15d6 100644 --- a/generator/cppgenerator.cpp +++ b/generator/cppgenerator.cpp @@ -1477,15 +1477,7 @@ void CppGenerator::writeArgumentConversion(QTextStream& s, bool isWrappedCppClass = type->isValue() || type->isObject(); // exclude const on Objects - Options flags; - bool isCStr = isCString(argType); - if (argType->indirections() && !isCStr) - flags = ExcludeConst; - else if (type->isPrimitive() && !isCStr) - flags = ExcludeConst | ExcludeReference; - else if (type->isValue() && argType->isConstant() && argType->isReference()) - flags = ExcludeConst | ExcludeReference; // const refs become just the value, but pure refs must remain pure. - + Options flags = getConverterOptions(argType); typeName = translateTypeForWrapperMethod(argType, context, flags).trimmed(); if (isWrappedCppClass) diff --git a/generator/shibokengenerator.cpp b/generator/shibokengenerator.cpp index b93009e5e..ee4ccd338 100644 --- a/generator/shibokengenerator.cpp +++ b/generator/shibokengenerator.cpp @@ -515,7 +515,10 @@ void ShibokenGenerator::writeToPythonConversion(QTextStream& s, const AbstractMe if (!type) return; - writeBaseConversion(s, type, context); + // exclude const on Objects + const TypeEntry* typeEntry = type->typeEntry(); + Options flags = getConverterOptions(type); + writeBaseConversion(s, type, context, flags); s << "toPython"; if (!argumentName.isEmpty()) @@ -789,7 +792,10 @@ QString ShibokenGenerator::cpythonCheckFunction(const AbstractMetaType* metaType } else { QString str; QTextStream s(&str); - writeBaseConversion(s, metaType, 0); + // exclude const on Objects + const TypeEntry* typeEntry = metaType->typeEntry(); + Options flags = getConverterOptions(metaType); + writeBaseConversion(s, metaType, 0, flags); s.flush(); return str + "checkType"; } @@ -1645,3 +1651,18 @@ bool ShibokenGenerator::pythonFunctionWrapperUsesListOfArguments(const OverloadD return usePyArgs; } +Generator::Options ShibokenGenerator::getConverterOptions(const AbstractMetaType* metaType) +{ + // exclude const on Objects + Options flags; + const TypeEntry* type = metaType->typeEntry(); + bool isCStr = isCString(metaType); + if (metaType->indirections() && !isCStr) + flags = ExcludeConst; + else if (type->isPrimitive() && !isCStr) + flags = ExcludeConst | ExcludeReference; + else if (type->isValue() && metaType->isConstant() && metaType->isReference()) + flags = ExcludeConst | ExcludeReference; // const refs become just the value, but pure refs must remain pure. + return flags; +} + diff --git a/generator/shibokengenerator.h b/generator/shibokengenerator.h index 7695d1120..74396eb0e 100644 --- a/generator/shibokengenerator.h +++ b/generator/shibokengenerator.h @@ -318,6 +318,11 @@ public: */ AbstractMetaType* buildAbstractMetaTypeFromString(QString typeString); + /** + * Helper function to return the flags to be used by a meta type when + * it needs to write some converter code. + */ + static Options getConverterOptions(const AbstractMetaType* metaType); protected: bool doSetup(const QMap<QString, QString>& args); // verify whether the class is copyable |