From ebebcf64389d4e362ee9efaaf8aad4a1e76149e4 Mon Sep 17 00:00:00 2001 From: Larry Jr Date: Thu, 14 Aug 2014 15:20:49 -0300 Subject: [PATCH] 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 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; }