diff --git a/src/lib/eolian_cxx/grammar/inheritance_base_generator.hh b/src/lib/eolian_cxx/grammar/inheritance_base_generator.hh index 36d0821826..31539c6ec2 100644 --- a/src/lib/eolian_cxx/grammar/inheritance_base_generator.hh +++ b/src/lib/eolian_cxx/grammar/inheritance_base_generator.hh @@ -107,12 +107,28 @@ operator<<(std::ostream& out, inheritance_wrappers const& x) << (func.params.size() ? ", " : "") << parameters_c_declaration(func.params) << ")" << endl - << "{" << endl - << tab(1) - << (!function_is_void(func) ? "return ": "") + << "{" << 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 = ": "") << "static_cast(self->this_)->" << func.name << "(" << parameters_cxx_list(func.params) << ");" << endl - << "}" << endl << endl; + << tab(2) << "}" << endl + << tab(1) << "catch (...)" << endl + << tab(2) << "{" << endl + << tab(3) << "eina_error_set( efl::eina::unknown_error() );" << endl + << tab(2) << "}" << endl; + + if (!function_is_void(func)) + out << tab(1) << "return _tmp_ret;" << endl; + + out << "}" << endl << endl; } return out; }