aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cppgenerator.cpp8
-rw-r--r--tests/libsample/multiple_derived.h3
-rw-r--r--tests/samplebinding/visibilitychange_test.py42
3 files changed, 52 insertions, 1 deletions
diff --git a/cppgenerator.cpp b/cppgenerator.cpp
index 3abee0234..c64e30ea7 100644
--- a/cppgenerator.cpp
+++ b/cppgenerator.cpp
@@ -247,7 +247,7 @@ void CppGenerator::generateClass(QTextStream &s, const AbstractMetaClass *metaCl
if (!func->isAssignmentOperator()
&& !func->isCastOperator()
&& !func->isModifiedRemoved()
- && !func->isPrivate()
+ && (!func->isPrivate() || func->functionType() == AbstractMetaFunction::EmptyFunction)
&& func->ownerClass() == func->implementingClass())
overloads.append(func);
}
@@ -1620,6 +1620,12 @@ void CppGenerator::writeFunctionCalls(QTextStream& s, const OverloadData& overlo
void CppGenerator::writeSingleFunctionCall(QTextStream& s, const OverloadData& overloadData, const AbstractMetaFunction* func)
{
+ if (func->functionType() == AbstractMetaFunction::EmptyFunction) {
+ s << INDENT << "PyErr_Format(PyExc_TypeError, \"%s is a private method.\", \"" << func->signature().replace("::", ".") << "\");" << endl;
+ s << INDENT << "return " << m_currentErrorCode << ';' << endl;
+ return;
+ }
+
const AbstractMetaClass* implementingClass = overloadData.referenceFunction()->implementingClass();
bool usePyArgs = pythonFunctionWrapperUsesListOfArguments(overloadData) && overloadData.maxArgs() > 1;
diff --git a/tests/libsample/multiple_derived.h b/tests/libsample/multiple_derived.h
index 6154086d2..576b263e0 100644
--- a/tests/libsample/multiple_derived.h
+++ b/tests/libsample/multiple_derived.h
@@ -43,6 +43,8 @@ public:
Base1() : m_value(1) {}
virtual ~Base1() {}
virtual int base1Method() { return m_value; }
+
+ virtual void publicMethod() {};
private:
int m_value;
};
@@ -74,6 +76,7 @@ public:
static MDerived1* transformFromBase2(Base2 *self);
private:
+ virtual void publicMethod() {}
int m_value;
};
diff --git a/tests/samplebinding/visibilitychange_test.py b/tests/samplebinding/visibilitychange_test.py
new file mode 100644
index 000000000..4aa3ccd9d
--- /dev/null
+++ b/tests/samplebinding/visibilitychange_test.py
@@ -0,0 +1,42 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# This file is part of the Shiboken Python Bindings Generator project.
+#
+# Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+#
+# Contact: PySide team <contact@pyside.org>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public License
+# version 2.1 as published by the Free Software Foundation. Please
+# review the following information to ensure the GNU Lesser General
+# Public License version 2.1 requirements will be met:
+# http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+# #
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+# 02110-1301 USA
+
+import unittest
+
+from sample import *
+
+class VisibilityChangeTest(unittest.TestCase):
+
+ def testVisibilityChange(self):
+ b1 = Base1()
+ b1.publicMethod() # ok...
+ d1 = MDerived1()
+ self.assertRaises(TypeError, d1.publicMethod);
+
+if __name__ == '__main__':
+ unittest.main()
+
+