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;
 }

-- 


Reply via email to