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.
This commit is contained in:
Savio Sena 2014-09-12 16:09:28 -03:00
parent becdaf89c8
commit b2d8a216f1
7 changed files with 47 additions and 32 deletions

View File

@ -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++

View File

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

View File

@ -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"));
}
}
/**

View File

@ -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())

View File

@ -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(""));
}
/**

View File

@ -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()));
}
}
/**

View File

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