aboutsummaryrefslogtreecommitdiffstats
path: root/cppgenerator.cpp
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2010-02-20 18:18:34 -0300
committerMarcelo Lira <marcelo.lira@openbossa.org>2010-02-20 18:33:31 -0300
commita71641d51bca4ca7ae4435f7674b7b33dab39457 (patch)
treee39f00a1e52183104bb943934605f3f6e7da29af /cppgenerator.cpp
parent5ce831e73fc4b8bee7a5b62d7485eee11f498a92 (diff)
Adds the convenience method 'isPairContainer' to ShibokenGenerator.
It checks if an AbstractMetaType represents a C++ pair container. Also updated code to make use of the new method. Reviewed by Lauro Moura <lauro.neto@openbossa.org>
Diffstat (limited to 'cppgenerator.cpp')
-rw-r--r--cppgenerator.cpp14
1 files changed, 5 insertions, 9 deletions
diff --git a/cppgenerator.cpp b/cppgenerator.cpp
index 17ff3f4f1..538e60a1e 100644
--- a/cppgenerator.cpp
+++ b/cppgenerator.cpp
@@ -1046,16 +1046,11 @@ void CppGenerator::writeInvalidCppObjectCheck(QTextStream& s, QString pyArgName,
void CppGenerator::writeTypeCheck(QTextStream& s, const AbstractMetaType* argType, QString argumentName, bool isNumber, QString customType)
{
- bool isPairContainer = argType->isContainer()
- && ((ContainerTypeEntry*)argType->typeEntry())->type() == ContainerTypeEntry::PairContainer;
bool writeIsConvertibleCheck = !implicitConversions(argType).isEmpty()
|| argType->typeEntry()->isObject()
|| argType->isValuePointer();
- if (writeIsConvertibleCheck)
- s << '(';
-
- if (isPairContainer)
+ if (writeIsConvertibleCheck || isCString(argType) || isPairContainer(argType))
s << '(';
if (!customType.isEmpty())
@@ -1069,10 +1064,11 @@ void CppGenerator::writeTypeCheck(QTextStream& s, const AbstractMetaType* argTyp
s << '(' << argumentName << ')';
- if (isPairContainer)
+ if (isPairContainer(argType))
s << " && PySequence_Size(" << argumentName << ") == 2)";
-
- if (writeIsConvertibleCheck)
+ else if (isCString(argType))
+ s << " || " << argumentName << " == Py_None)";
+ else if (writeIsConvertibleCheck)
s << " || " << cpythonIsConvertibleFunction(argType) << '(' << argumentName << "))";
}