diff options
author | renatofilho <renato.filho@openbossa.org> | 2010-10-04 19:16:57 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-08 16:07:20 -0300 |
commit | 128a3194650e30e6e8240d18c1b6b8c6839df9cd (patch) | |
tree | c06b1acbd00bacc2b6146d44b647badd4a647782 /generator | |
parent | e614afda62ea19669667164cea11742396e02169 (diff) |
Fixed signal registration when arguments use typedef.
Fixes bug #397.
Reviewer: Hugo Parente Lima <hugo.pl@gmail.com>
Luciano Wolf <luciano.wolf@openbossa.org>
Diffstat (limited to 'generator')
-rw-r--r-- | generator/cppgenerator.cpp | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/generator/cppgenerator.cpp b/generator/cppgenerator.cpp index dd64dc0a6..a2186e0e6 100644 --- a/generator/cppgenerator.cpp +++ b/generator/cppgenerator.cpp @@ -1991,7 +1991,7 @@ void CppGenerator::writeMethodCall(QTextStream& s, const AbstractMetaFunction* f if (func->injectedCodeSnips(CodeSnip::Any, TypeSystem::TargetLangCode).isEmpty()) { qFatal(qPrintable("No way to call \"" + func->ownerClass()->name() + "::" + func->minimalSignature() - +"\" with the modifications described in the type system file")); + + "\" with the modifications described in the type system file")); } } else if (func->isOperatorOverload()) { QString firstArg("(*" CPP_SELF_VAR ")"); @@ -3008,6 +3008,7 @@ void CppGenerator::writeEnumInitialization(QTextStream& s, const AbstractMetaEnu void CppGenerator::writeSignalInitialization(QTextStream& s, const AbstractMetaClass* metaClass) { QHash<QString, QStringList> signatures; + QStringList knowTypes; foreach (const AbstractMetaFunction* cppSignal, metaClass->cppSignalFunctions()) { QString signature; @@ -3017,7 +3018,23 @@ void CppGenerator::writeSignalInitialization(QTextStream& s, const AbstractMetaC if (i > 0) signature += ", "; AbstractMetaArgument *a = cppSignal->arguments().at(i); - signature += a->type()->cppSignature(); + AbstractMetaType* type = a->type(); + QString cppSignature = translateType(type, metaClass, Generator::ExcludeConst | Generator::ExcludeReference).trimmed(); + QString originalSignature = translateType(type, metaClass, Generator::OriginalName | Generator::ExcludeConst | Generator::ExcludeReference).trimmed(); + if (cppSignature.contains("*")) + cppSignature = cppSignature.replace("*", "").trimmed(); + + if (originalSignature.contains("*")) + originalSignature = originalSignature.replace("*", "").trimmed(); + + + if ((cppSignature != originalSignature) && !knowTypes.contains(originalSignature)) { + knowTypes << originalSignature; + s << INDENT << "Shiboken::TypeResolver::createValueTypeResolver<" + << cppSignature << " >" + << "(\"" << originalSignature << "\");\n"; + } + signature += type->originalTypeDescription(); } } else { signature = "void"; @@ -3404,7 +3421,6 @@ void CppGenerator::writeClassRegister(QTextStream& s, const AbstractMetaClass* m s << INDENT << "Shiboken::TypeResolver::createValueTypeResolver<" << typeName << " >" << "(\"" << typeName << "\");\n"; s << INDENT << "Shiboken::TypeResolver::createObjectTypeResolver<" << typeName << " >" << "(\"" << typeName << "*\");\n"; - QString functionSufix = (isObjectType ? "Object" : "Value"); s << INDENT << "Shiboken::TypeResolver::create" << functionSufix; s << "TypeResolver<" << typeName << " >" << "(typeid(" << typeName << ").name());\n"; |