Merge branch 'SFbug1295' of https://github.com/ptomulik/swig
This commit is contained in:
commit
0bde711222
4 changed files with 30 additions and 61 deletions
|
|
@ -481,6 +481,7 @@ CPP_STD_TEST_CASES += \
|
||||||
li_std_combinations \
|
li_std_combinations \
|
||||||
li_std_deque \
|
li_std_deque \
|
||||||
li_std_except \
|
li_std_except \
|
||||||
|
li_std_except_as_class \
|
||||||
li_std_map \
|
li_std_map \
|
||||||
li_std_pair \
|
li_std_pair \
|
||||||
li_std_pair_using \
|
li_std_pair_using \
|
||||||
|
|
|
||||||
19
Examples/test-suite/li_std_except_as_class.i
Normal file
19
Examples/test-suite/li_std_except_as_class.i
Normal 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"); }
|
||||||
|
|
@ -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
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
%include <typemaps/exception.swg>
|
%include <typemaps/exception.swg>
|
||||||
%include <std/std_except.i>
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Mark all of std exception classes as "exception classes" via
|
Mark all of std exception classes as "exception classes" via
|
||||||
|
|
@ -34,63 +33,4 @@ namespace std {
|
||||||
%std_exception_map(underflow_error, SWIG_OverflowError);
|
%std_exception_map(underflow_error, SWIG_OverflowError);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(SWIG_STD_EXCEPTIONS_AS_CLASSES)
|
%include <std/std_except.i>
|
||||||
|
|
||||||
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
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue