summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2010-12-17 11:00:24 -0300
committerMarcelo Lira <marcelo.lira@openbossa.org>2010-12-17 11:03:07 -0300
commit81423ee9987008864cf1d66d009afc815c2419e5 (patch)
tree2d48d5077b1db2b727bfe689f6a926edb9eac78c
parent45d4e4b0eabc87cd50613a469ce400434b833d6d (diff)
downloadshiboken-81423ee9987008864cf1d66d009afc815c2419e5.tar.gz
shiboken-81423ee9987008864cf1d66d009afc815c2419e5.tar.xz
shiboken-81423ee9987008864cf1d66d009afc815c2419e5.zip
Fixed code generation for virtual method ownership release of returned value.
The value returned from Python to C++ shouldn't have its reference counting decremented after Python transferring ownership to C++.
-rw-r--r--generator/cppgenerator.cpp4
-rw-r--r--tests/samplebinding/modelview_test.py2
2 files changed, 2 insertions, 4 deletions
diff --git a/generator/cppgenerator.cpp b/generator/cppgenerator.cpp
index 2b5a4584..8a922729 100644
--- a/generator/cppgenerator.cpp
+++ b/generator/cppgenerator.cpp
@@ -794,13 +794,11 @@ void CppGenerator::writeVirtualMethodNative(QTextStream &s, const AbstractMetaFu
s << (argMod.index - 1) << "));" << endl;
} else if (argMod.ownerships.contains(TypeSystem::NativeCode)) {
if (argMod.index == 0 && argMod.ownerships[TypeSystem::NativeCode] == TypeSystem::CppOwnership) {
- s << INDENT << "if (Shiboken::Object::checkType(" PYTHON_RETURN_VAR ")) {" << endl;
+ s << INDENT << "if (Shiboken::Object::checkType(" PYTHON_RETURN_VAR "))" << endl;
{
Indentation indent(INDENT);
s << INDENT << "Shiboken::Object::releaseOwnership(" PYTHON_RETURN_VAR ");" << endl;
- s << INDENT << "Py_DECREF((PyObject*) " PYTHON_RETURN_VAR ");" << endl;
}
- s << INDENT << '}' << endl;
}
}
}
diff --git a/tests/samplebinding/modelview_test.py b/tests/samplebinding/modelview_test.py
index 9f86166d..7b9bfe7b 100644
--- a/tests/samplebinding/modelview_test.py
+++ b/tests/samplebinding/modelview_test.py
@@ -57,7 +57,7 @@ class ModelViewTest(unittest.TestCase):
model = ListModelDoesntKeepsReference()
view = ObjectView(model)
obj = view.getRawModelData()
- self.assertEqual(type(obj), ObjectType)
+ self.assertEqual(type(obj), MyObject)
self.assertEqual(obj.objectName(), object_name)
def testListModelKeepsReference(self):