aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cppgenerator.cpp18
-rw-r--r--libshiboken/conversions.h3
-rw-r--r--libshiboken/typeresolver.cpp1
3 files changed, 21 insertions, 1 deletions
diff --git a/cppgenerator.cpp b/cppgenerator.cpp
index 6ff3978e7..350795958 100644
--- a/cppgenerator.cpp
+++ b/cppgenerator.cpp
@@ -3481,6 +3481,24 @@ void CppGenerator::finishGeneration()
if (pte->generateCode())
s << INDENT << "Shiboken::TypeResolver::createValueTypeResolver<" << pte->name() << " >(\"" << pte->name() << "\");" << endl;
}
+ // Register type resolver for all containers found in signals.
+ QSet<QString> typeResolvers;
+ foreach (AbstractMetaClass* metaClass, classes()) {
+ if (!metaClass->isQObject() || !metaClass->typeEntry()->generateCode())
+ continue;
+ foreach (AbstractMetaFunction* func, metaClass->functions()) {
+ if (func->isSignal()) {
+ foreach (AbstractMetaArgument* arg, func->arguments()) {
+ if (arg->type()->isContainer()) {
+ QString value = translateType(arg->type(), metaClass);
+ typeResolvers << QMetaObject::normalizedType(value.toAscii().constData());
+ }
+ }
+ }
+ }
+ }
+ foreach (QString type, typeResolvers)
+ s << INDENT << "Shiboken::TypeResolver::createValueTypeResolver<" << type << " >(\"" << type << "\");" << endl;
s << endl << INDENT << "if (PyErr_Occurred()) {" << endl;
{
diff --git a/libshiboken/conversions.h b/libshiboken/conversions.h
index 065820447..c3e3c4fab 100644
--- a/libshiboken/conversions.h
+++ b/libshiboken/conversions.h
@@ -562,6 +562,7 @@ struct StdListConverter
}
return true;
}
+ static PyObject* toPython(void* cppObj) { return toPython(*reinterpret_cast<StdList*>(cppObj)); }
static PyObject* toPython(const StdList& cppobj)
{
PyObject* result = PyList_New((int) cppobj.size());
@@ -610,6 +611,7 @@ struct StdPairConverter
}
return true;
}
+ static PyObject* toPython(void* cppObj) { return toPython(*reinterpret_cast<StdPair*>(cppObj)); }
static PyObject* toPython(const StdPair& cppobj)
{
typename StdPair::first_type first(cppobj.first);
@@ -658,6 +660,7 @@ struct StdMapConverter
return true;
}
+ static PyObject* toPython(void* cppObj) { return toPython(*reinterpret_cast<StdMap*>(cppObj)); }
static PyObject* toPython(const StdMap& cppobj)
{
PyObject* result = PyDict_New();
diff --git a/libshiboken/typeresolver.cpp b/libshiboken/typeresolver.cpp
index d2e042ba4..37b8b0174 100644
--- a/libshiboken/typeresolver.cpp
+++ b/libshiboken/typeresolver.cpp
@@ -69,7 +69,6 @@ void Shiboken::initTypeResolver()
static void registerTypeResolver(TypeResolver* resolver)
{
- assert(typeResolverMap.find(resolver->typeName()) == typeResolverMap.end());
typeResolverMap[resolver->typeName()] = resolver;
}