This commit is contained in:
William S Fulton 2013-01-05 17:59:18 +00:00
commit 0bde711222
4 changed files with 30 additions and 61 deletions

View file

@ -481,6 +481,7 @@ CPP_STD_TEST_CASES += \
li_std_combinations \
li_std_deque \
li_std_except \
li_std_except_as_class \
li_std_map \
li_std_pair \
li_std_pair_using \

View file

@ -0,0 +1,19 @@
/* File : li_std_except_as_class.i */
%module li_std_except_as_class
/* NOTE: SF bug 1295:
* if there were also functions throwing 'std::logic_error' and
* 'std::exception' then the bug would not be fully replicated */
%{
#include <exception>
#include <stdexcept>
void test_domain_error() throw(std::domain_error)
{ throw std::domain_error("std::domain_error"); }
%}
%include <std_string.i>
#define SWIG_STD_EXCEPTIONS_AS_CLASSES
%include <std_except.i>
void test_domain_error() throw(std::domain_error)
{ throw std::domain_error("std::domain_error"); }

View file

@ -0,0 +1,9 @@
from li_std_except_as_class import *
# std::domain_error hierarchy
try: test_domain_error()
except domain_error: pass
try: test_domain_error()
except logic_error: pass
try: test_domain_error()
except exception: pass

View file

@ -1,5 +1,4 @@
%include <typemaps/exception.swg>
%include <std/std_except.i>
/*
Mark all of std exception classes as "exception classes" via
@ -34,63 +33,4 @@ namespace std {
%std_exception_map(underflow_error, SWIG_OverflowError);
}
#if defined(SWIG_STD_EXCEPTIONS_AS_CLASSES)
namespace std {
struct exception
{
virtual ~exception() throw();
virtual const char* what() const throw();
};
struct bad_exception : exception
{
};
struct logic_error : exception
{
logic_error(const string& msg);
};
struct domain_error : logic_error
{
domain_error(const string& msg);
};
struct invalid_argument : logic_error
{
invalid_argument(const string& msg);
};
struct length_error : logic_error
{
length_error(const string& msg);
};
struct out_of_range : logic_error
{
out_of_range(const string& msg);
};
struct runtime_error : exception
{
runtime_error(const string& msg);
};
struct range_error : runtime_error
{
range_error(const string& msg);
};
struct overflow_error : runtime_error
{
overflow_error(const string& msg);
};
struct underflow_error : runtime_error
{
underflow_error(const string& msg);
};
}
#endif
%include <std/std_except.i>