aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRenato Araujo Oliveira Filho <renato.filho@openbossa.org>2010-12-22 12:39:41 -0300
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-08 16:12:50 -0300
commitf4b51923793402b43abc713be92119e560fc60ba (patch)
treec17445cfc749677b0c189ea672b872b620288a79
parentc036aa708b0232406f6f278ad0578b7b333c0f6a (diff)
Use converter during generation only for primitives types which is
impossible to convert using by Py_BuildValue. Reviewer: Marcelo Lira <marcelo.lira@openbossa.org> Hugo Parente <hugo.lima@openbossa.org>
-rw-r--r--generator/cppgenerator.cpp22
1 files changed, 14 insertions, 8 deletions
diff --git a/generator/cppgenerator.cpp b/generator/cppgenerator.cpp
index d90720018..6e92cd648 100644
--- a/generator/cppgenerator.cpp
+++ b/generator/cppgenerator.cpp
@@ -624,19 +624,25 @@ void CppGenerator::writeVirtualMethodNative(QTextStream &s, const AbstractMetaFu
QString argConv;
QTextStream ac(&argConv);
- bool convert = arg->type()->isObject()
+ const PrimitiveTypeEntry* argType = (const PrimitiveTypeEntry*) arg->type()->typeEntry();
+ bool convert = argType->isObject()
|| arg->type()->isQObject()
- || arg->type()->isValue()
+ || argType->isValue()
|| arg->type()->isValuePointer()
|| arg->type()->isNativePointer()
- || arg->type()->isFlags()
- || arg->type()->isEnum()
- || arg->type()->isContainer()
+ || argType->isFlags()
+ || argType->isEnum()
+ || argType->isContainer()
|| arg->type()->isReference();
- //leave the conversion to python
- if (arg->type()->isPrimitive() && (m_formatUnits.contains(arg->type()->typeEntry()->name()) || m_formatUnits.contains(arg->type()->typeEntry()->qualifiedCppName())))
- convert = false;
+ if (!convert && argType->isPrimitive()) {
+ if (argType->basicAliasedTypeEntry())
+ argType = argType->basicAliasedTypeEntry();
+ if (m_formatUnits.contains(argType->name()))
+ convert = false;
+ else
+ convert = true;
+ }
bool hasConversionRule = !func->conversionRule(TypeSystem::TargetLangCode, arg->argumentIndex() + 1).isEmpty();