felipealmeida pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=ebebcf64389d4e362ee9efaaf8aad4a1e76149e4
commit ebebcf64389d4e362ee9efaaf8aad4a1e76149e4 Author: Larry Jr <larry....@gmail.com> Date: Thu Aug 14 15:20:49 2014 -0300 catch exceptions in cxx wrappers and throw a eina_error --- .../grammar/inheritance_base_generator.hh | 24 ++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/lib/eolian_cxx/grammar/inheritance_base_generator.hh b/src/lib/eolian_cxx/grammar/inheritance_base_generator.hh index 36d0821..31539c6 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<T*>(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; } --