Fix classes not being added into Java method's throws clause when %catches is used

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@11584 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
William S Fulton 2009-08-16 00:04:29 +00:00
commit c7b7078dd0
5 changed files with 22 additions and 3 deletions

View file

@ -1,6 +1,10 @@
Version 1.3.40 (in progress)
============================
2009-08-16: wsfulton
[Java] When %catches is used, fix so that any classes specified in the "throws"
attribute of the "throws" typemap are generated into the Java method's throws clause.
2009-08-16: wsfulton
[C#] Fix exception handling when %catches is used, reported by Juan Manuel Alvarez.

View file

@ -40,6 +40,16 @@ public class java_throws_runme {
if (!pass)
throw new RuntimeException("Test 2 failed");
// Check the exception class in the throw typemap
pass = false;
try {
java_throws.catches_function(100);
}
catch (IllegalAccessException e) { pass = true; }
if (!pass)
throw new RuntimeException("Test 3 failed");
// Check newfree typemap throws attribute
try {
TestClass tc = java_throws.makeTestClass();

View file

@ -42,12 +42,16 @@ short full_of_exceptions(int num) {
#if defined(_MSC_VER)
#pragma warning(disable: 4290) // C++ exception specification ignored except to indicate a function is not __declspec(nothrow)
#endif
void throw_spec_function(int value) throw (int) { throw (int)0; }
bool throw_spec_function(int value) throw (int) { throw (int)0; }
#if defined(_MSC_VER)
#pragma warning(default: 4290) // C++ exception specification ignored except to indicate a function is not __declspec(nothrow)
#endif
%}
%catches(int) catches_function(int value);
%inline %{
bool catches_function(int value) { throw (int)0; }
%}
// Check newfree typemap throws attribute
%newobject makeTestClass;

View file

@ -980,7 +980,7 @@ public:
// Get any Java exception classes in the throws typemap
ParmList *throw_parm_list = NULL;
if ((throw_parm_list = Getattr(n, "throws"))) {
if ((throw_parm_list = Getattr(n, "catchlist"))) {
Swig_typemap_attach_parms("throws", throw_parm_list, f);
for (p = throw_parm_list; p; p = nextSibling(p)) {
if ((tm = Getattr(p, "tmap:throws"))) {
@ -3679,6 +3679,7 @@ public:
Printf(declaration, " virtual %s", target);
Delete(target);
// Add any exception specifications to the methods in the director class
// Get any Java exception classes in the throws typemap
ParmList *throw_parm_list = NULL;

View file

@ -1404,7 +1404,7 @@ MODULA3():
// Get any Modula 3 exception classes in the throws typemap
ParmList *throw_parm_list = NULL;
if ((throw_parm_list = Getattr(n, "throws"))) {
if ((throw_parm_list = Getattr(n, "catchlist"))) {
Swig_typemap_attach_parms("throws", throw_parm_list, f);
Parm *p;
for (p = throw_parm_list; p; p = nextSibling(p)) {