diff options
author | Marcelo Lira <marcelo.lira@openbossa.org> | 2010-03-22 17:07:57 -0300 |
---|---|---|
committer | Marcelo Lira <marcelo.lira@openbossa.org> | 2010-03-22 17:07:57 -0300 |
commit | 60b44f86deb16f925dc5fac4602c638c47cbc614 (patch) | |
tree | c7bd953ddfcc0b0ee6f1de13bc9baeb2e2323571 /cppgenerator.cpp | |
parent | 53927d41dd236d21e58d2c88371880ebbacf1fef (diff) |
Fixes virtual method writer to handle modification to return type.
No code is generated for return value conversion on virtual method
callers if code is provided to handle said conversion via code injection
or custom conversion rule.
Diffstat (limited to 'cppgenerator.cpp')
-rw-r--r-- | cppgenerator.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/cppgenerator.cpp b/cppgenerator.cpp index 2a70d94fc..6f9a20538 100644 --- a/cppgenerator.cpp +++ b/cppgenerator.cpp @@ -546,11 +546,17 @@ void CppGenerator::writeVirtualMethodNative(QTextStream &s, const AbstractMetaFu s << INDENT << INDENT << ";" << endl; s << INDENT << "}" << endl; - s << INDENT; - s << translateTypeForWrapperMethod(func->type(), func->implementingClass()) << ' ' << CPP_RETURN_VAR << "("; - writeToCppConversion(s, func->type(), func->implementingClass(), PYTHON_RETURN_VAR); - s << ')'; - s << ';' << endl; + bool hasConversionRule = !func->conversionRule(TypeSystem::NativeCode, 0).isEmpty(); + if (hasConversionRule) { + CodeSnipList convRule = getReturnConversionRule(TypeSystem::NativeCode, func, "", CPP_RETURN_VAR); + writeCodeSnips(s, convRule, CodeSnip::Any, TypeSystem::NativeCode, func); + } else if (!injectedCodeHasReturnValueAttribution(func, TypeSystem::NativeCode)) { + s << INDENT; + s << translateTypeForWrapperMethod(func->type(), func->implementingClass()) << ' ' << CPP_RETURN_VAR << "("; + writeToCppConversion(s, func->type(), func->implementingClass(), PYTHON_RETURN_VAR); + s << ')'; + s << ';' << endl; + } } } |