add %exceptionclass and %noexceptionclass directives and manage the feature:exceptionclass in a consistent way

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@7548 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Marcelo Matus 2005-09-29 13:04:42 +00:00
commit 33a752b0bd
4 changed files with 28 additions and 14 deletions

View file

@ -5,21 +5,29 @@
#include <stdexcept>
%}
namespace std {
/* Mark all of them as exception classes */
%feature("exceptionclass") exception;
%feature("exceptionclass") bad_exception;
%feature("exceptionclass") logic_error;
%feature("exceptionclass") domain_error;
%feature("exceptionclass") invalid_argument;
%feature("exceptionclass") length_error;
%feature("exceptionclass") out_of_range;
%feature("exceptionclass") runtime_error;
%feature("exceptionclass") range_error;
%feature("exceptionclass") overflow_error;
%feature("exceptionclass") underflow_error;
/*
Mark all of std exception classes as "exception classes" via
the "exceptionclass" feature.
If needed, you can disable it by using %noexceptionclass.
*/
%exceptionclass exception;
%exceptionclass bad_exception;
%exceptionclass logic_error;
%exceptionclass domain_error;
%exceptionclass invalid_argument;
%exceptionclass length_error;
%exceptionclass out_of_range;
%exceptionclass runtime_error;
%exceptionclass range_error;
%exceptionclass overflow_error;
%exceptionclass underflow_error;
}
namespace std {
struct exception
{

View file

@ -66,6 +66,10 @@
#endif
#define %noexception %feature("except","")
#define %exceptionclass %feature("exceptionclass","1")
#define %noexceptionclass %feature("exceptionclass","0")
#define %newobject %feature("new")
/* Warnings */

View file

@ -467,7 +467,9 @@ class Allocate : public Dispatcher {
}
Node *c = Swig_symbol_clookup(t,0);
if (c) {
Setattr(c,"feature:exceptionclass","1");
if (!Getattr(c,"feature:exceptionclass")) {
Setattr(c,"feature:exceptionclass","1");
}
}
p = nextSibling(p);
Delete(t);

View file

@ -1954,7 +1954,7 @@ public:
have_constructor = 0;
have_repr = 0;
if (Getattr(n,"feature:exceptionclass")) {
if (checkAttribute(n,"feature:exceptionclass","1")) {
classic = 1;
modern = 0;
}