aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cppgenerator.cpp4
-rw-r--r--shibokengenerator.cpp26
-rw-r--r--shibokengenerator.h4
3 files changed, 9 insertions, 25 deletions
diff --git a/cppgenerator.cpp b/cppgenerator.cpp
index bd3adc529..e3574d7cf 100644
--- a/cppgenerator.cpp
+++ b/cppgenerator.cpp
@@ -1868,10 +1868,8 @@ void CppGenerator::writeClassRegister(QTextStream& s, const AbstractMetaClass* m
s << metaClass->baseClassNames().size();
s << ',' << endl;
QStringList bases;
- foreach (QString baseName, metaClass->baseClassNames()) {
- const AbstractMetaClass* base = classes().findClass(baseName);
+ foreach (const AbstractMetaClass* base, getBaseClasses(metaClass))
bases << QString("(PyTypeObject*)&%1").arg(cpythonTypeName(base->typeEntry()));
- }
Indentation indent(INDENT);
s << INDENT << bases.join(", ") << ");" << endl << endl;
}
diff --git a/shibokengenerator.cpp b/shibokengenerator.cpp
index 3e6d6ff34..f26c872c6 100644
--- a/shibokengenerator.cpp
+++ b/shibokengenerator.cpp
@@ -952,28 +952,12 @@ bool ShibokenGenerator::injectedCodeCallsCppFunction(const AbstractMetaFunction*
return false;
}
-QStringList ShibokenGenerator::getBaseClasses(const AbstractMetaClass* metaClass)
+AbstractMetaClassList ShibokenGenerator::getBaseClasses(const AbstractMetaClass* metaClass)
{
- QStringList baseClass;
-
- if (!metaClass->baseClassName().isEmpty() &&
- (metaClass->name() != metaClass->baseClassName()))
- baseClass.append(metaClass->baseClassName());
-
- foreach (AbstractMetaClass* interface, metaClass->interfaces()) {
- AbstractMetaClass* aux = interface->primaryInterfaceImplementor();
- if (!aux)
- continue;
-
- //skip templates
- if (!aux->templateArguments().isEmpty())
- continue;
-
- if (!aux->name().isEmpty() && (metaClass->name() != aux->name()))
- baseClass.append(aux->name());
- }
-
- return baseClass;
+ AbstractMetaClassList baseClasses;
+ foreach (QString parent, metaClass->baseClassNames())
+ baseClasses << classes().findClass(parent);
+ return baseClasses;
}
const AbstractMetaClass* ShibokenGenerator::getMultipleInheritingClass(const AbstractMetaClass* metaClass)
diff --git a/shibokengenerator.h b/shibokengenerator.h
index dd1d521d5..1acf9d204 100644
--- a/shibokengenerator.h
+++ b/shibokengenerator.h
@@ -154,7 +154,9 @@ public:
int arg_count = -1) const;
bool hasInjectedCodeOrSignatureModification(const AbstractMetaFunction* func);
- QStringList getBaseClasses(const AbstractMetaClass* metaClass);
+
+ /// Returns a list of parent classes for a method.
+ AbstractMetaClassList getBaseClasses(const AbstractMetaClass* metaClass);
const AbstractMetaClass* getMultipleInheritingClass(const AbstractMetaClass* metaClass);