aboutsummaryrefslogtreecommitdiffstats
path: root/generator
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2011-07-29 04:23:51 -0300
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-08 16:17:06 -0300
commit3c39aa5f2e05ad34e67f07b2f7262f419f9ce3b6 (patch)
tree64732f5eae7f640170bdb56aae8fbee625196b58 /generator
parent4e839b8209e31ea48b264622240b3c4939e6cefd (diff)
Moved the generation of Python result error checking to a single function.
Diffstat (limited to 'generator')
-rw-r--r--generator/cppgenerator.cpp42
-rw-r--r--generator/cppgenerator.h1
2 files changed, 16 insertions, 27 deletions
diff --git a/generator/cppgenerator.cpp b/generator/cppgenerator.cpp
index 165506a14..7327e6722 100644
--- a/generator/cppgenerator.cpp
+++ b/generator/cppgenerator.cpp
@@ -235,14 +235,7 @@ void CppGenerator::writeToPythonFunction(QTextStream& s, const AbstractMetaClass
s << INDENT << "PyObject* " PYTHON_RETURN_VAR " = Shiboken::PythonConverter< ::" << metaClass->qualifiedCppName();
s << " >::transformToPython(" CPP_SELF_VAR ");" << endl;
- s << INDENT << "if (PyErr_Occurred() || !" PYTHON_RETURN_VAR ") {" << endl;
- {
- Indentation indentation(INDENT);
- s << INDENT << "Py_XDECREF(" PYTHON_RETURN_VAR ");" << endl;
- s << INDENT << "return 0;" << endl;
- }
- s << INDENT << '}' << endl;
-
+ writeFunctionReturnErrorCheckSection(s);
s << INDENT << "return " PYTHON_RETURN_VAR ";" << endl;
s << '}' << endl;
m_currentErrorCode = previousErrorCode;
@@ -1258,15 +1251,7 @@ void CppGenerator::writeMethodWrapper(QTextStream& s, const AbstractMetaFunction
s << endl;
- s << INDENT << "if (PyErr_Occurred()" << ((hasReturnValue && !rfunc->isInplaceOperator()) ? " || !" PYTHON_RETURN_VAR : "");
- s << ") {" << endl;
- {
- Indentation indent(INDENT);
- if (hasReturnValue && !rfunc->isInplaceOperator())
- s << INDENT << "Py_XDECREF(" PYTHON_RETURN_VAR ");" << endl;
- s << INDENT << "return " << m_currentErrorCode << ';' << endl;
- }
- s << INDENT << '}' << endl;
+ writeFunctionReturnErrorCheckSection(s, hasReturnValue && !rfunc->isInplaceOperator());
if (hasReturnValue) {
if (rfunc->isInplaceOperator()) {
@@ -1522,6 +1507,18 @@ void CppGenerator::writeErrorSection(QTextStream& s, OverloadData& overloadData)
s << INDENT << "return " << m_currentErrorCode << ';' << endl;
}
+void CppGenerator::writeFunctionReturnErrorCheckSection(QTextStream& s, bool hasReturnValue)
+{
+ s << INDENT << "if (PyErr_Occurred()" << (hasReturnValue ? " || !" PYTHON_RETURN_VAR : "") << ") {" << endl;
+ {
+ Indentation indent(INDENT);
+ if (hasReturnValue)
+ s << INDENT << "Py_XDECREF(" PYTHON_RETURN_VAR ");" << endl;
+ s << INDENT << "return " << m_currentErrorCode << ';' << endl;
+ }
+ s << INDENT << '}' << endl;
+}
+
void CppGenerator::writeInvalidPyObjectCheck(QTextStream& s, const QString& pyObj)
{
writeInvalidPyObjectCheck(s, pyObj, m_currentErrorCode);
@@ -2886,17 +2883,8 @@ void CppGenerator::writeCopyFunction(QTextStream& s, const AbstractMetaClass *me
s << INDENT << "PyObject* " << PYTHON_RETURN_VAR << " = ";
s << "Shiboken::Converter< ::" << metaClass->qualifiedCppName() << " >::toPython(*";
s << CPP_SELF_VAR << ");" << endl;
-
s << endl;
-
- s << INDENT << "if (PyErr_Occurred() || !" PYTHON_RETURN_VAR ") {" << endl;
- {
- Indentation indent(INDENT);
- s << INDENT << "Py_XDECREF(" PYTHON_RETURN_VAR ");" << endl;
- s << INDENT << "return 0;" << endl;
- }
- s << INDENT << "}" << endl;
-
+ writeFunctionReturnErrorCheckSection(s);
s << INDENT << "return " PYTHON_RETURN_VAR ";" << endl;
s << "}" << endl;
s << endl;
diff --git a/generator/cppgenerator.h b/generator/cppgenerator.h
index a324422df..8f8509030 100644
--- a/generator/cppgenerator.h
+++ b/generator/cppgenerator.h
@@ -57,6 +57,7 @@ private:
void writeCppSelfDefinition(QTextStream& s, const AbstractMetaClass* metaClass, bool hasStaticOverload = false);
void writeErrorSection(QTextStream& s, OverloadData& overloadData);
+ void writeFunctionReturnErrorCheckSection(QTextStream& s, bool hasReturnValue = true);
/// Writes the check section for the validity of wrapped C++ objects.
void writeInvalidPyObjectCheck(QTextStream& s, const QString& pyObj);