aboutsummaryrefslogtreecommitdiffstats
path: root/generator
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2011-08-18 23:42:34 -0300
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-08 16:17:12 -0300
commit7f5a81448b4a9f1516bf3989c8faa16f38162f2b (patch)
tree02e1c70d85b8e79b52ced6944f79d8ce838d1a6c /generator
parentb9dba4ed938302740b4ea7ea2d4824518077444e (diff)
Centralized the place where the TypeResolver creation is written.
Reviewed by Lauro Moura <lauro.neto@openbossa.org> Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
Diffstat (limited to 'generator')
-rw-r--r--generator/cppgenerator.cpp36
1 files changed, 25 insertions, 11 deletions
diff --git a/generator/cppgenerator.cpp b/generator/cppgenerator.cpp
index 216d32367..a3044e06e 100644
--- a/generator/cppgenerator.cpp
+++ b/generator/cppgenerator.cpp
@@ -144,26 +144,40 @@ QList<AbstractMetaFunctionList> CppGenerator::filterGroupedOperatorFunctions(con
return results.values();
}
+static QString typeResolverString(const QString& type, QString typeName = QString(), bool isObject = false)
+{
+ if (typeName.isEmpty())
+ typeName = QString("\"%1\"").arg(type);
+ else if (!typeName.startsWith("typeid("))
+ typeName = QString("\"%1\"").arg(typeName);
+ return QString("Shiboken::TypeResolver::create%1TypeResolver< %2 >(%3)")
+ .arg(isObject ? "Object" : "Value")
+ .arg(type)
+ .arg(typeName);
+}
+
void CppGenerator::writeRegisterType(QTextStream& s, const AbstractMetaClass* metaClass)
{
QString typeName = metaClass->qualifiedCppName();
+ QString cppTypeName = QString("::%1").arg(typeName);
QString reducedName = reduceTypeName(metaClass);
if (!isObjectType(metaClass)) {
- s << INDENT << "Shiboken::TypeResolver::createValueTypeResolver< ::" << typeName << " >" << "(\"" << typeName << "\");\n";
+ s << INDENT << typeResolverString(cppTypeName, typeName) << ';' << endl;
if (!reducedName.isEmpty())
- s << INDENT << "Shiboken::TypeResolver::createValueTypeResolver< ::" << typeName << " >" << "(\"" << reducedName << "\");\n";
+ s << INDENT << typeResolverString(cppTypeName, reducedName) << ';' << endl;
}
- s << INDENT << "Shiboken::TypeResolver::createObjectTypeResolver< ::" << typeName << " >" << "(\"" << typeName << "*\");\n";
+ s << INDENT << typeResolverString(cppTypeName, typeName+'*', true) << ';' << endl;
if (!reducedName.isEmpty())
- s << INDENT << "Shiboken::TypeResolver::createObjectTypeResolver< ::" << typeName << " >" << "(\"" << reducedName << "*\");\n";
- QString functionSufix = (isObjectType(metaClass) ? "Object" : "Value");
- s << INDENT << "Shiboken::TypeResolver::create" << functionSufix;
- s << "TypeResolver< ::" << typeName << " >" << "(typeid(::" << typeName << ").name());\n";
+ s << INDENT << typeResolverString(cppTypeName, reducedName+'*', true) << ';' << endl;
+
+ s << INDENT << typeResolverString(cppTypeName, QString("typeid(::%1).name()").arg(typeName), isObjectType(metaClass)) << ';' << endl;
+
if (shouldGenerateCppWrapper(metaClass)) {
- s << INDENT << "Shiboken::TypeResolver::create" << functionSufix;
- s << "TypeResolver< ::" << typeName << " >" << "(typeid(::" << wrapperName(metaClass) << ").name());\n";
+ s << INDENT;
+ s << typeResolverString(cppTypeName, QString("typeid(::%1).name()").arg(wrapperName(metaClass)), isObjectType(metaClass));
+ s << ';' << endl;
}
}
@@ -3943,7 +3957,7 @@ void CppGenerator::finishGeneration()
s << INDENT << "// Register primitive types on TypeResolver" << endl;
foreach(const PrimitiveTypeEntry* pte, primitiveTypes()) {
if (pte->generateCode())
- s << INDENT << "Shiboken::TypeResolver::createValueTypeResolver< " << pte->name() << " >(\"" << pte->name() << "\");" << endl;
+ s << INDENT << typeResolverString(pte->name()) << ';' << endl;
}
// Register type resolver for all containers found in signals.
QSet<QByteArray> typeResolvers;
@@ -3964,7 +3978,7 @@ void CppGenerator::finishGeneration()
}
}
foreach (QByteArray type, typeResolvers)
- s << INDENT << "Shiboken::TypeResolver::createValueTypeResolver< ::" << type << " >(\"" << type << "\");" << endl;
+ s << INDENT << typeResolverString(type) << ';' << endl;
s << endl << INDENT << "Shiboken::Module::registerTypes(module, " << cppApiVariableName() << ");" << endl;