savio pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=b2d8a216f1c7d9068b1ee41cc500ee93ce2f7057

commit b2d8a216f1c7d9068b1ee41cc500ee93ce2f7057
Author: Savio Sena <sa...@expertisesolutions.com.br>
Date:   Fri Sep 12 16:09:28 2014 -0300

    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<mapped_type*>(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<eina::mutex> 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<eina::mutex> 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<char>::create())
   {
     if(!eina_value_copy(const_cast<Eina_Value const*>(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<Eina_Value const*>(other._raw), _raw))
-      throw eina::system_error(eina::get_error_code());
+      {
+         EFL_CXX_THROW(eina::system_error(eina::get_error_code()));
+      }
     return *this;
   }
 

-- 


Reply via email to