aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken2/generator/shiboken2/cppgenerator.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2020-09-29 10:07:04 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2020-09-30 13:09:36 +0200
commit1e4c98eb237d174ed01ed3df2a0f2467fb5f09e0 (patch)
treeaa64939c418e1cfc5c9d626838cd445eea104d23 /sources/shiboken2/generator/shiboken2/cppgenerator.cpp
parentfaf7c506a451cef1dc8229a3779eb62796c93e5f (diff)
shiboken2: Generate functions from invisible top level namespaces as global functions
Mainly add those in ShibokenGenerator::getGlobalFunctionGroups() with some adaptions. Task-number: PYSIDE-1075 Change-Id: I6dabac72c204904e76162542b5aa3ea1ac3b56ec Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'sources/shiboken2/generator/shiboken2/cppgenerator.cpp')
-rw-r--r--sources/shiboken2/generator/shiboken2/cppgenerator.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/sources/shiboken2/generator/shiboken2/cppgenerator.cpp b/sources/shiboken2/generator/shiboken2/cppgenerator.cpp
index a366dfa1c..8de293654 100644
--- a/sources/shiboken2/generator/shiboken2/cppgenerator.cpp
+++ b/sources/shiboken2/generator/shiboken2/cppgenerator.cpp
@@ -1739,7 +1739,7 @@ void CppGenerator::writeMethodWrapperPreamble(QTextStream &s, OverloadData &over
const GeneratorContext &context)
{
const AbstractMetaFunction *rfunc = overloadData.referenceFunction();
- const AbstractMetaClass *ownerClass = rfunc->ownerClass();
+ const AbstractMetaClass *ownerClass = rfunc->targetLangOwner();
Q_ASSERT(ownerClass == context.metaClass());
int minArgs = overloadData.minArgs();
int maxArgs = overloadData.maxArgs();
@@ -4779,8 +4779,14 @@ void CppGenerator::writeMethodDefinitionEntry(QTextStream &s, const AbstractMeta
if (overloadData.hasArgumentWithDefaultValue())
s << "|METH_KEYWORDS";
}
- if (func->ownerClass() && overloadData.hasStaticFunction())
+ // METH_STATIC causes a crash when used for global functions (also from
+ // invisible namespaces).
+ auto ownerClass = func->ownerClass();
+ if (ownerClass
+ && !invisibleTopNamespaces().contains(const_cast<AbstractMetaClass *>(ownerClass))
+ && overloadData.hasStaticFunction()) {
s << "|METH_STATIC";
+ }
}
void CppGenerator::writeMethodDefinition(QTextStream &s, const AbstractMetaFunctionList &overloads)