diff options
author | Marcelo Lira <marcelo.lira@openbossa.org> | 2009-09-29 10:18:39 -0300 |
---|---|---|
committer | Marcelo Lira <marcelo.lira@openbossa.org> | 2009-10-01 11:19:35 -0300 |
commit | 4213b0176ae9af91221dbe38e1dead10638ff054 (patch) | |
tree | 414d08c2d3f8f0b3d9c36b8bdfe8ca5e607a19a2 /shibokengenerator.cpp | |
parent | 1129ff5d3b65dfa6b8221a1df5383781bd6862d2 (diff) |
modified the generator do deal with all value type conversions in
the same manner as it does with object types, in other words
using pointers instead of copies when converting the Python
wrappers to C++
Diffstat (limited to 'shibokengenerator.cpp')
-rw-r--r-- | shibokengenerator.cpp | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/shibokengenerator.cpp b/shibokengenerator.cpp index 22cc3de50..a76b99900 100644 --- a/shibokengenerator.cpp +++ b/shibokengenerator.cpp @@ -218,11 +218,6 @@ QString ShibokenGenerator::getFunctionReturnType(const AbstractMetaFunction* fun return func->ownerClass()->qualifiedCppName() + '*'; return translateTypeForWrapperMethod(func->type(), func->implementingClass()); - - //TODO: check these lines - //QString modifiedReturnType = QString(func->typeReplaced(0)); - //return modifiedReturnType.isNull() ? - //translateType(func->type(), func->implementingClass()) : modifiedReturnType; } QString ShibokenGenerator::writeBaseConversion(QTextStream& s, const AbstractMetaType* type, @@ -270,9 +265,24 @@ void ShibokenGenerator::writeToPythonConversion(QTextStream& s, const AbstractMe void ShibokenGenerator::writeToCppConversion(QTextStream& s, const AbstractMetaType* type, const AbstractMetaClass* context, QString argumentName) { - if (type->isValuePointer()) - s << '&'; - writeBaseConversion(s, type, context); + QString typeName; + if (type->isPrimitive()) { + const PrimitiveTypeEntry* ptype = (const PrimitiveTypeEntry*) type->typeEntry(); + if (ptype->basicAliasedTypeEntry()) + ptype = ptype->basicAliasedTypeEntry(); + typeName = ptype->name(); + } else { + typeName = translateTypeForWrapperMethod(type, context); + } + + if (type->isObject() || type->isQObject()) { + if (typeName.startsWith("const ")) + typeName.remove(0, 6); + if (!typeName.endsWith('*')) + typeName.append('*'); + } + + s << "Shiboken::Converter< " << typeName << " >::"; s << "toCpp(" << argumentName << ')'; } @@ -809,7 +819,10 @@ void ShibokenGenerator::writeCodeSnips(QTextStream& s, for (int i = 0; i < func->arguments().size(); i++) { if (func->argumentRemoved(i+1)) removed++; - code.replace("%" + QString::number(i+1), QString("cpp_arg%1").arg(i - removed)); + QString star; + if (func->arguments().at(i)->type()->isValue()) + star = QString('*'); + code.replace("%" + QString::number(i+1), QString(star + "cpp_arg%1").arg(i - removed)); } // replace template variables for not removed arguments @@ -820,6 +833,8 @@ void ShibokenGenerator::writeCodeSnips(QTextStream& s, continue; if (i > 0) argumentNames += ", "; + if (arg->type()->isValue()) + argumentNames += '*'; argumentNames += QString("cpp_arg%1").arg(i++); } code.replace("%ARGUMENT_NAMES", argumentNames); |