diff options
-rw-r--r-- | cppgenerator.cpp | 18 | ||||
-rw-r--r-- | libshiboken/conversions.h | 3 | ||||
-rw-r--r-- | libshiboken/typeresolver.cpp | 1 |
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; } |