From da00bdb12dba1383983a62a385da6aa1036d12e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Tomulik?= Date: Fri, 4 Jan 2013 15:43:44 +0100 Subject: [PATCH 1/2] added python test case li_std_except_as_class for SF bug 1295 --- Examples/test-suite/common.mk | 1 + Examples/test-suite/li_std_except_as_class.i | 19 +++++++++++++++++++ .../python/li_std_except_as_class_runme.py | 9 +++++++++ 3 files changed, 29 insertions(+) create mode 100644 Examples/test-suite/li_std_except_as_class.i create mode 100644 Examples/test-suite/python/li_std_except_as_class_runme.py diff --git a/Examples/test-suite/common.mk b/Examples/test-suite/common.mk index 0c790caf6..4ba669497 100644 --- a/Examples/test-suite/common.mk +++ b/Examples/test-suite/common.mk @@ -480,6 +480,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 \ diff --git a/Examples/test-suite/li_std_except_as_class.i b/Examples/test-suite/li_std_except_as_class.i new file mode 100644 index 000000000..00de76eac --- /dev/null +++ b/Examples/test-suite/li_std_except_as_class.i @@ -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 +#include +void test_domain_error() throw(std::domain_error) +{ throw std::domain_error("std::domain_error"); } +%} + +%include +#define SWIG_STD_EXCEPTIONS_AS_CLASSES +%include +void test_domain_error() throw(std::domain_error) +{ throw std::domain_error("std::domain_error"); } diff --git a/Examples/test-suite/python/li_std_except_as_class_runme.py b/Examples/test-suite/python/li_std_except_as_class_runme.py new file mode 100644 index 000000000..386a878bf --- /dev/null +++ b/Examples/test-suite/python/li_std_except_as_class_runme.py @@ -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 From a6f733602e56a00f91deedb86d0b5a02b37a99a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Tomulik?= Date: Fri, 4 Jan 2013 16:57:04 +0100 Subject: [PATCH 2/2] added patch for SF bug #1295 --- Lib/typemaps/std_except.swg | 62 +------------------------------------ 1 file changed, 1 insertion(+), 61 deletions(-) diff --git a/Lib/typemaps/std_except.swg b/Lib/typemaps/std_except.swg index 3ce479a50..cb5ed3050 100644 --- a/Lib/typemaps/std_except.swg +++ b/Lib/typemaps/std_except.swg @@ -1,5 +1,4 @@ %include -%include /* 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