cppbind: Tweak from_nasal error reporting

This commit is contained in:
Thomas Geymayer
2013-03-04 23:15:13 +01:00
parent 6eff167a28
commit 2db8859076
2 changed files with 10 additions and 15 deletions
@@ -25,14 +25,15 @@
namespace nasal namespace nasal
{ {
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
bad_nasal_cast::bad_nasal_cast() bad_nasal_cast::bad_nasal_cast():
sg_exception("conversion failed", "bad_nasal_cast")
{ {
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
bad_nasal_cast::bad_nasal_cast(const std::string& msg): bad_nasal_cast::bad_nasal_cast(const std::string& msg):
_msg( msg ) sg_exception(msg, "bad_nasal_cast")
{ {
} }
@@ -43,17 +44,14 @@ namespace nasal
} }
//----------------------------------------------------------------------------
const char* bad_nasal_cast::what() const throw()
{
return _msg.empty() ? bad_cast::what() : _msg.c_str();
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
std::string from_nasal_helper(naContext c, naRef ref, const std::string*) std::string from_nasal_helper(naContext c, naRef ref, const std::string*)
{ {
naRef na_str = naStringValue(c, ref); naRef na_str = naStringValue(c, ref);
if( !naIsString(na_str) )
if( naIsNil(na_str) )
return std::string();
else if( !naIsString(na_str) )
throw bad_nasal_cast("Not convertible to string"); throw bad_nasal_cast("Not convertible to string");
return std::string(naStr_data(na_str), naStr_len(na_str)); return std::string(naStr_data(na_str), naStr_len(na_str));
@@ -23,6 +23,7 @@
#include "nasal_traits.hxx" #include "nasal_traits.hxx"
#include <simgear/nasal/nasal.h> #include <simgear/nasal/nasal.h>
#include <simgear/structure/exception.hxx>
#include <boost/utility/enable_if.hpp> #include <boost/utility/enable_if.hpp>
#include <boost/type_traits.hpp> #include <boost/type_traits.hpp>
@@ -42,7 +43,8 @@ namespace nasal
* Thrown when converting a type from/to Nasal has failed * Thrown when converting a type from/to Nasal has failed
*/ */
class bad_nasal_cast: class bad_nasal_cast:
public std::bad_cast public std::bad_cast,
public sg_exception
{ {
public: public:
/** /**
@@ -59,11 +61,6 @@ namespace nasal
virtual ~bad_nasal_cast() throw(); virtual ~bad_nasal_cast() throw();
/**
* Get a description of the cause of the failed cast.
*/
virtual const char* what() const throw();
protected: protected:
std::string _msg; std::string _msg;
}; };