aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRenato Araujo Oliveira Filho <renato.filho@openbossa.org>2011-02-04 19:08:43 -0300
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-08 16:13:53 -0300
commitcc58fbc15509bd8ed746a7ef3cb3da4cd7055894 (patch)
tree462175755f66ecd9a41824299305cee0df5774cf
parente78bd2efe4063d522effaaf6a6dc737fe8da8b79 (diff)
Fixed signal initialization for types with namespace and types defined
by typedef. Fixes bug #657. Reviewer: Luciano Wolf <luciano.wolf@openbossa.org> Marcelo Lira <marcelo.lira@openbossa.org>
-rw-r--r--generator/cppgenerator.cpp37
1 files changed, 28 insertions, 9 deletions
diff --git a/generator/cppgenerator.cpp b/generator/cppgenerator.cpp
index 3d33fae13..a2b9aadd7 100644
--- a/generator/cppgenerator.cpp
+++ b/generator/cppgenerator.cpp
@@ -249,12 +249,12 @@ void CppGenerator::generateClass(QTextStream &s, const AbstractMetaClass *metaCl
s << "#include \"" << getModuleHeaderFileName() << '"' << endl << endl;
QString headerfile = fileNameForClass(metaClass);
- headerfile.replace("cpp", "h");
+ headerfile.replace(".cpp", ".h");
s << "#include \"" << headerfile << '"' << endl;
foreach (AbstractMetaClass* innerClass, metaClass->innerClasses()) {
if (shouldGenerate(innerClass)) {
QString headerfile = fileNameForClass(innerClass);
- headerfile.replace("cpp", "h");
+ headerfile.replace(".cpp", ".h");
s << "#include \"" << headerfile << '"' << endl;
}
}
@@ -3134,7 +3134,8 @@ void CppGenerator::writeSignalInitialization(QTextStream& s, const AbstractMetaC
AbstractMetaArgument *a = cppSignal->arguments().at(i);
AbstractMetaType* type = a->type();
- QString cppSignature = SBK_NORMALIZED_TYPE(qPrintable(type->cppSignature()));
+
+ QString cppSignature = SBK_NORMALIZED_TYPE(qPrintable(type->cppSignature()));
QString originalSignature = SBK_NORMALIZED_TYPE(qPrintable(type->originalTypeDescription()));
if (!a->defaultValueExpression().isEmpty()) {
@@ -3144,17 +3145,35 @@ void CppGenerator::writeSignalInitialization(QTextStream& s, const AbstractMetaC
signatures[cppSignal->name()].append(sig);
}
- if ((cppSignature != originalSignature) && !knowTypes.contains(originalSignature)) {
- knowTypes << originalSignature;
- s << INDENT << "Shiboken::TypeResolver::createValueTypeResolver<"
- << translateType(type, metaClass, ExcludeReference | ExcludeConst) << " >"
- << "(\"" << skipNamespace(originalSignature) << "\"); // " << type->cppSignature() << "\n";
+ QString replacedTypeName = cppSignal->typeReplaced(i+1);
+ QString signalTypeName;
+
+ if (replacedTypeName.isEmpty())
+ signalTypeName = skipNamespace(type->originalTypeDescription());
+ else
+ signalTypeName = replacedTypeName;
+
+ if ((!replacedTypeName.isEmpty() || //replace type on typessystem
+ (cppSignature != originalSignature)) && //used a typedef value
+ !knowTypes.contains(signalTypeName)) {
+
+ knowTypes << signalTypeName;
+ QString originalType = translateType(type, metaClass, ExcludeReference | ExcludeConst);
+ bool isObjectType = originalType.endsWith('*');
+ if (isObjectType)
+ originalType = originalType.remove(originalType.size()-1, 1);
+
+ s << INDENT << "Shiboken::TypeResolver::" << (isObjectType ? "createObjectTypeResolver<" : "createValueTypeResolver<")
+ << originalType << " >"
+ << "(\"" << skipNamespace(signalTypeName) << "\");" << endl;
}
- signature += SBK_NORMALIZED_TYPE(skipNamespace(type->originalTypeDescription()).toAscii());
+
+ signature += SBK_NORMALIZED_TYPE(signalTypeName.toAscii());
}
} else {
signature = "void";
}
+
signatures[cppSignal->name()].append(SBK_NORMALIZED_SIGNATURE(signature.toAscii()));
}
}