From b2d8a216f1c7d9068b1ee41cc500ee93ce2f7057 Mon Sep 17 00:00:00 2001 From: Savio Sena Date: Fri, 12 Sep 2014 16:09:28 -0300 Subject: [PATCH] eina-cxx: Added EFL_CXX_NO_EXCEPTIONS flag. This flag allows one to compile Eina++ replacing C++ exceptions with a call to abort(). Please use EFL_CXX_THROW() macro instead of C++ throw() from now on. --- src/bindings/eina_cxx/Eina.hh | 6 ++++++ src/bindings/eina_cxx/eina_accessor.hh | 4 ++-- src/bindings/eina_cxx/eina_error.hh | 6 +++--- src/bindings/eina_cxx/eina_ptrlist.hh | 22 +++++++++++----------- src/bindings/eina_cxx/eina_stringshare.hh | 2 +- src/bindings/eina_cxx/eina_thread.hh | 26 +++++++++++++++----------- src/bindings/eina_cxx/eina_value.hh | 13 +++++++++---- 7 files changed, 47 insertions(+), 32 deletions(-) diff --git a/src/bindings/eina_cxx/Eina.hh b/src/bindings/eina_cxx/Eina.hh index ffc6e49..1633815 100644 --- a/src/bindings/eina_cxx/Eina.hh +++ b/src/bindings/eina_cxx/Eina.hh @@ -1,6 +1,12 @@ #ifndef EINA_HH_ #define EINA_HH_ +#if defined ( EFL_CXX_NO_EXCEPTIONS ) +# define EFL_CXX_THROW(x) std::abort() +#else +# define EFL_CXX_THROW(x) throw (x) +#endif + /** * @file * @brief Eina C++ diff --git a/src/bindings/eina_cxx/eina_accessor.hh b/src/bindings/eina_cxx/eina_accessor.hh index 22b4841..5d9a9c3 100644 --- a/src/bindings/eina_cxx/eina_accessor.hh +++ b/src/bindings/eina_cxx/eina_accessor.hh @@ -90,7 +90,7 @@ struct accessor eina_accessor_free(_impl); _impl = eina_accessor_clone(other._impl); if(!_impl) - throw eina::system_error(efl::eina::get_error_code(), "Error cloning accessor"); + EFL_CXX_THROW(eina::system_error(efl::eina::get_error_code(), "Error cloning accessor")); return *this; } @@ -119,7 +119,7 @@ struct accessor if(!eina_accessor_data_get(_impl, i, &p)) { eina::error_code ec = efl::eina::get_error_code(); - throw eina::system_error(ec, "EFL Eina Error"); + EFL_CXX_THROW(eina::system_error(ec, "EFL Eina Error")); } return *static_cast(p); } diff --git a/src/bindings/eina_cxx/eina_error.hh b/src/bindings/eina_cxx/eina_error.hh index d2718ca..9acfe26 100644 --- a/src/bindings/eina_cxx/eina_error.hh +++ b/src/bindings/eina_cxx/eina_error.hh @@ -238,9 +238,9 @@ inline void throw_on_error() { eina::error_code ec = get_error_code(); if(ec) - { - throw eina::system_error(ec, "EFL Eina Error"); - } + { + EFL_CXX_THROW(eina::system_error(ec, "EFL Eina Error")); + } } /** diff --git a/src/bindings/eina_cxx/eina_ptrlist.hh b/src/bindings/eina_cxx/eina_ptrlist.hh index 42a930f..00a59a5 100644 --- a/src/bindings/eina_cxx/eina_ptrlist.hh +++ b/src/bindings/eina_cxx/eina_ptrlist.hh @@ -616,12 +616,12 @@ public: { Eina_List* new_list = eina_list_append(this->_impl._list, p.get()); if(new_list) - { - this->_impl._list = new_list; - p.release(); - } + { + this->_impl._list = new_list; + p.release(); + } else - throw std::bad_alloc(); + EFL_CXX_THROW(std::bad_alloc()); } /** @@ -669,12 +669,12 @@ public: { Eina_List* new_list = eina_list_prepend(this->_impl._list, p.get()); if(new_list) - { - this->_impl._list = new_list; - p.release(); - } + { + this->_impl._list = new_list; + p.release(); + } else - throw std::bad_alloc(); + EFL_CXX_THROW(std::bad_alloc()); } /** @@ -759,7 +759,7 @@ public: if(this->_impl._list) p.release(); else - throw std::bad_alloc(); + EFL_CXX_THROW(std::bad_alloc()); return iterator(this->_impl._list , i.native_handle() ? ::eina_list_prev(i.native_handle()) diff --git a/src/bindings/eina_cxx/eina_stringshare.hh b/src/bindings/eina_cxx/eina_stringshare.hh index 233c6f3..ffdde73 100644 --- a/src/bindings/eina_cxx/eina_stringshare.hh +++ b/src/bindings/eina_cxx/eina_stringshare.hh @@ -384,7 +384,7 @@ struct stringshare if(i < size()) return (*this)[i]; else - throw std::out_of_range(""); + EFL_CXX_THROW(std::out_of_range("")); } /** diff --git a/src/bindings/eina_cxx/eina_thread.hh b/src/bindings/eina_cxx/eina_thread.hh index 4cf7e90..ad851ba 100644 --- a/src/bindings/eina_cxx/eina_thread.hh +++ b/src/bindings/eina_cxx/eina_thread.hh @@ -88,10 +88,10 @@ struct mutex case EINA_LOCK_SUCCEED: return; case EINA_LOCK_DEADLOCK: - throw system_error(error_code(int(eina::errc::resource_deadlock_would_occur) - , get_generic_category())); + EFL_CXX_THROW(system_error(error_code(int(eina::errc::resource_deadlock_would_occur), + get_generic_category()))); default: - throw system_error(get_error_code()); + EFL_CXX_THROW(system_error(get_error_code())); } } @@ -118,10 +118,10 @@ struct mutex case EINA_LOCK_FAIL: return false; case EINA_LOCK_DEADLOCK: - throw system_error(error_code(int(eina::errc::resource_deadlock_would_occur) - , get_generic_category())); + EFL_CXX_THROW(system_error(error_code(int(eina::errc::resource_deadlock_would_occur), + get_generic_category()))); default: - throw system_error(get_error_code()); + EFL_CXX_THROW(system_error(get_error_code())); } } @@ -147,10 +147,10 @@ struct mutex case EINA_LOCK_SUCCEED: return; case EINA_LOCK_DEADLOCK: - throw system_error(error_code(int(eina::errc::resource_deadlock_would_occur) - , get_generic_category())); + EFL_CXX_THROW(system_error(error_code(int(eina::errc::resource_deadlock_would_occur), + get_generic_category()))); default: - throw system_error(get_error_code()); + EFL_CXX_THROW(system_error(get_error_code())); } } @@ -266,7 +266,9 @@ struct condition_variable eina::unique_lock l(_mutex); Eina_Bool r = eina_condition_signal(&_cond); if(!r) - throw eina::system_error(eina::get_error_code()); + { + EFL_CXX_THROW(eina::system_error(eina::get_error_code())); + } } /** @@ -282,7 +284,9 @@ struct condition_variable eina::unique_lock l(_mutex); Eina_Bool r = eina_condition_broadcast(&_cond); if(!r) - throw eina::system_error(eina::get_error_code()); + { + EFL_CXX_THROW(eina::system_error(eina::get_error_code())); + } } /** diff --git a/src/bindings/eina_cxx/eina_value.hh b/src/bindings/eina_cxx/eina_value.hh index ca99b55..fbf96e6 100644 --- a/src/bindings/eina_cxx/eina_value.hh +++ b/src/bindings/eina_cxx/eina_value.hh @@ -64,10 +64,11 @@ struct _eina_value_traits_base if(::eina_value_get(v, &vv)) return vv; else - throw eina::system_error(eina::get_error_code()); + EFL_CXX_THROW(eina::system_error(eina::get_error_code())); } else - throw eina::system_error(EINA_ERROR_VALUE_FAILED, eina::eina_error_category()); + EFL_CXX_THROW(eina::system_error(EINA_ERROR_VALUE_FAILED, + eina::eina_error_category())); } }; @@ -445,7 +446,9 @@ public: : _raw(_eina_value_traits::create()) { if(!eina_value_copy(const_cast(other._raw), _raw)) - throw eina::system_error(eina::get_error_code()); + { + EFL_CXX_THROW(eina::system_error(eina::get_error_code())); + } } /** @@ -456,7 +459,9 @@ public: { eina_value_flush(_raw); if(!eina_value_copy(const_cast(other._raw), _raw)) - throw eina::system_error(eina::get_error_code()); + { + EFL_CXX_THROW(eina::system_error(eina::get_error_code())); + } return *this; } -- 2.7.4