diff options
author | Marcelo Lira <marcelo.lira@openbossa.org> | 2011-08-06 17:28:00 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-08 16:17:09 -0300 |
commit | 714ddb6c74b4db4853ca2e34bb50f2888e75ec8d (patch) | |
tree | 7d04cd087ad99fef6442f6be4fbe0342eb722682 /generator/cppgenerator.cpp | |
parent | 8794f303c16f67812093d0311530b4447ff5c94c (diff) |
The type checking now pays attention to the <no-null-pointer/> tag.
An unit test was also added for it.
Diffstat (limited to 'generator/cppgenerator.cpp')
-rw-r--r-- | generator/cppgenerator.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/generator/cppgenerator.cpp b/generator/cppgenerator.cpp index 44d62f4f6..70290253d 100644 --- a/generator/cppgenerator.cpp +++ b/generator/cppgenerator.cpp @@ -1469,7 +1469,7 @@ void CppGenerator::writeInvalidPyObjectCheck(QTextStream& s, const QString& pyOb s << INDENT << "return " << m_currentErrorCode << ';' << endl; } -void CppGenerator::writeTypeCheck(QTextStream& s, const AbstractMetaType* argType, QString argumentName, bool isNumber, QString customType) +void CppGenerator::writeTypeCheck(QTextStream& s, const AbstractMetaType* argType, QString argumentName, bool isNumber, QString customType, bool rejectNull) { AbstractMetaType* metaType; std::auto_ptr<AbstractMetaType> metaType_autoptr; @@ -1482,12 +1482,17 @@ void CppGenerator::writeTypeCheck(QTextStream& s, const AbstractMetaType* argTyp } } + QString typeCheck; if (customCheck.isEmpty()) - s << cpythonIsConvertibleFunction(argType, argType->isEnum() ? false : isNumber); + typeCheck = cpythonIsConvertibleFunction(argType, argType->isEnum() ? false : isNumber); else - s << customCheck; + typeCheck = customCheck; + typeCheck.append(QString("(%1)").arg(argumentName)); - s << '(' << argumentName << ')'; + if (rejectNull) + typeCheck = QString("(%1 != Py_None && %2)").arg(argumentName).arg(typeCheck); + + s << typeCheck; } void CppGenerator::writeTypeCheck(QTextStream& s, const OverloadData* overloadData, QString argumentName) @@ -1510,7 +1515,8 @@ void CppGenerator::writeTypeCheck(QTextStream& s, const OverloadData* overloadDa const AbstractMetaType* argType = overloadData->argType(); bool numberType = numericTypes.count() == 1 || ShibokenGenerator::isPyInt(argType); QString customType = (overloadData->hasArgumentTypeReplace() ? overloadData->argumentTypeReplaced() : ""); - writeTypeCheck(s, argType, argumentName, numberType, customType); + bool rejectNull = shouldRejectNullPointerArgument(overloadData->referenceFunction(), overloadData->argPos()); + writeTypeCheck(s, argType, argumentName, numberType, customType, rejectNull); } void CppGenerator::writeArgumentConversion(QTextStream& s, |