aboutsummaryrefslogtreecommitdiffstats
path: root/shibokengenerator.cpp
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2009-09-29 10:18:39 -0300
committerMarcelo Lira <marcelo.lira@openbossa.org>2009-10-01 11:19:35 -0300
commit4213b0176ae9af91221dbe38e1dead10638ff054 (patch)
tree414d08c2d3f8f0b3d9c36b8bdfe8ca5e607a19a2 /shibokengenerator.cpp
parent1129ff5d3b65dfa6b8221a1df5383781bd6862d2 (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.cpp33
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);