eolian_cxx: Fix C++ generated inheritance wrappers

Summary:
Fix a bug that happens when a Eolian C++ wrapper have no default
constructor (because it have obligatory constructing methods) and it is
being used as a return of a inheritance wrappers.
Switched to a conversion of the native type as the default return, instead
of a value initialized wrapper.

Reviewers: q66, felipealmeida

Subscribers: cedric

Differential Revision: https://phab.enlightenment.org/D2769
This commit is contained in:
Vitor Sousa 2015-06-25 15:58:43 +01:00 committed by Daniel Kolesa
parent c709f1dca2
commit 22094b6a27
1 changed files with 6 additions and 8 deletions

View File

@ -129,26 +129,24 @@ operator<<(std::ostream& out, inheritance_wrappers const& x)
<< ")" << endl
<< "{" << endl;
if (!function_is_void(func))
out << tab(1) << reinterpret_type(func.ret) << " _tmp_ret{};" << endl;
out << tab(1)
<< "try" << endl
<< tab(2) << "{" << endl
<< tab(3)
<< (!function_is_void(func) ? "_tmp_ret = ": "")
<< (!function_is_void(func) ? "return ": "")
<< "static_cast<T*>(self->this_)->"
<< func.name << "(" << parameters_cxx_list(func.params) << ");" << endl
<< tab(2) << "}" << endl
<< tab(1) << "catch (...)" << endl
<< tab(2) << "{" << endl
<< tab(3) << "eina_error_set( ::efl::eina::unknown_error() );" << endl
<< tab(2) << "}" << endl;
<< tab(3) << "eina_error_set( ::efl::eina::unknown_error() );" << endl;
if (!function_is_void(func))
out << tab(1) << "return _tmp_ret;" << endl;
out << tab(3) << func.ret.front().native << " _tmp_ret{};" << endl
<< tab(3) << "return " << to_cxx(func.ret, "_tmp_ret") << ";" << endl;
out << "}" << endl;
out << tab(2) << "}" << endl
<< "}" << endl;
out << scope_guard_tail(x._cls, func) << endl;
}