diff options
author | Marcelo Lira <marcelo.lira@openbossa.org> | 2011-07-29 18:50:11 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-08 16:17:07 -0300 |
commit | 967961a9d3e96854d256206bb813ab3bde4409c3 (patch) | |
tree | bc9452eeb1ed4fb52e9d2f6955222190ff0c50f8 /generator | |
parent | e05e6ef74efbfef002b98b64ad4d1105bcef2ad5 (diff) |
I rewrote generator functions of type checking strings in ShibokenGenerator.
Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
Diffstat (limited to 'generator')
-rw-r--r-- | generator/shibokengenerator.cpp | 115 |
1 files changed, 55 insertions, 60 deletions
diff --git a/generator/shibokengenerator.cpp b/generator/shibokengenerator.cpp index c85acaca6..461558bfd 100644 --- a/generator/shibokengenerator.cpp +++ b/generator/shibokengenerator.cpp @@ -29,6 +29,7 @@ #include <QtCore/QDir> #include <QtCore/QDebug> #include <limits> +#include <memory> #define NULL_VALUE "NULL" #define AVOID_PROTECTED_HACK "avoid-protected-hack" @@ -859,79 +860,75 @@ bool ShibokenGenerator::visibilityModifiedToPrivate(const AbstractMetaFunction* QString ShibokenGenerator::cpythonCheckFunction(const AbstractMetaType* metaType, bool genericNumberType) { - QString baseName = cpythonBaseName(metaType); - if (metaType->typeEntry()->isCustom()) { + if (metaType->typeEntry()->isCustom()) return guessCPythonCheckFunction(metaType->typeEntry()->name()); - } else if (isNumber(baseName)) { - return genericNumberType ? "SbkNumber_Check" : baseName+"_Check"; - } else { - QString str; - QTextStream s(&str); - // exclude const on Objects - Options flags = getConverterOptions(metaType); - writeBaseConversion(s, metaType, 0, flags); - s.flush(); - return str + "checkType"; - } + + QString baseName = cpythonBaseName(metaType); + if (isNumber(baseName)) + return genericNumberType ? QString("SbkNumber_Check") : QString("%1_Check").arg(baseName); + + baseName.clear(); + QTextStream s(&baseName); + // exclude const on Objects + Options flags = getConverterOptions(metaType); + writeBaseConversion(s, metaType, 0, flags); + s.flush(); + return QString("%1checkType").arg(baseName); } QString ShibokenGenerator::cpythonCheckFunction(const TypeEntry* type, bool genericNumberType) { - QString baseName = cpythonBaseName(type); - if (type->isCustom()) { + if (type->isCustom()) return guessCPythonCheckFunction(type->name()); - } else if (isNumber(baseName)) { + + QString baseName = cpythonBaseName(type); + if (isNumber(baseName)) return genericNumberType ? "SbkNumber_Check" : baseName+"_Check"; - } else { - QString str; - QTextStream s(&str); - writeBaseConversion(s, type); - s.flush(); - return str + "checkType"; - } + + baseName.clear(); + QTextStream s(&baseName); + writeBaseConversion(s, type); + s.flush(); + return QString("%1checkType").arg(baseName); } QString ShibokenGenerator::guessCPythonCheckFunction(const QString& type) { - QString retval; + if (type == "PyTypeObject") + return "PyType_Check"; + + if (type == "PyBuffer") + return "Shiboken::Buffer::checkType"; + AbstractMetaType* metaType = buildAbstractMetaTypeFromString(type); - if (metaType && !metaType->typeEntry()->isCustom()) { - retval = cpythonCheckFunction(metaType); - delete metaType; - metaType = 0; - } else if (type == "PyTypeObject") { - retval = "PyType_Check"; - } else if (type == "PyBuffer") { - retval = "Shiboken::Buffer::checkType"; - } else { - retval = QString("%1_Check").arg(type); - } - if(metaType) - delete metaType; - return retval; + std::auto_ptr<const AbstractMetaType> metaType_autoptr(metaType); + if (metaType && !metaType->typeEntry()->isCustom()) + return cpythonCheckFunction(metaType); + + return QString("%1_Check").arg(type); } QString ShibokenGenerator::guessCPythonIsConvertible(const QString& type) { - QString retval; + if (type == "PyTypeObject") + return "PyType_Check"; + AbstractMetaType* metaType = buildAbstractMetaTypeFromString(type); - if (metaType) { - retval = cpythonIsConvertibleFunction(metaType); - delete metaType; - } else if (type == "PyTypeObject") { - retval = "PyType_Check"; - } else { - retval = QString("%1_Check").arg(type); - } - return retval; + std::auto_ptr<const AbstractMetaType> metaType_autoptr(metaType); + if (metaType && !metaType->typeEntry()->isCustom()) + return cpythonIsConvertibleFunction(metaType); + + return QString("%1_Check").arg(type); } QString ShibokenGenerator::cpythonIsConvertibleFunction(const TypeEntry* type, bool genericNumberType, bool checkExact) { if (checkExact) return cpythonCheckFunction(type, genericNumberType); + if (type->isCustom()) return guessCPythonIsConvertible(type->name()); + QString baseName; QTextStream s(&baseName); writeBaseConversion(s, type); @@ -942,20 +939,18 @@ QString ShibokenGenerator::cpythonIsConvertibleFunction(const TypeEntry* type, b QString ShibokenGenerator::cpythonIsConvertibleFunction(const AbstractMetaType* metaType, bool genericNumberType) { + if (metaType->typeEntry()->isCustom()) + return guessCPythonCheckFunction(metaType->typeEntry()->name()); QString baseName = cpythonBaseName(metaType); - if (metaType->typeEntry()->isCustom()) { - return guessCPythonCheckFunction(metaType->typeEntry()->name()); - } else if (isNumber(baseName)) { - return genericNumberType ? "SbkNumber_Check" : baseName+"_Check"; - } else { - QString str; - QTextStream s(&str); - writeBaseConversion(s, metaType, 0); - s.flush(); - return str + "isConvertible"; - } - return baseName; + if (isNumber(baseName)) + return genericNumberType ? QString("SbkNumber_Check") : QString("%1_Check").arg(baseName); + + baseName.clear(); + QTextStream s(&baseName); + writeBaseConversion(s, metaType, 0); + s.flush(); + return QString("%1isConvertible").arg(baseName); } QString ShibokenGenerator::argumentString(const AbstractMetaFunction *func, |