diff --git a/CHANGES.current b/CHANGES.current
index 8192f30b5..2791a7a45 100644
--- a/CHANGES.current
+++ b/CHANGES.current
@@ -1,6 +1,9 @@
Version 1.3.41 (in progress)
============================
+2009-11-08: wsfulton
+ Ignored nested class/struct warnings now display the name of the ignored class/struct.
+
2009-11-07: wsfulton
Bug #1514681 - Fix nested template classes within a namespace generated uncompileable
code and introduced strange side effects to other wrapper code especially code
diff --git a/Doc/Manual/Warnings.html b/Doc/Manual/Warnings.html
index df05478a6..1150c4dc5 100644
--- a/Doc/Manual/Warnings.html
+++ b/Doc/Manual/Warnings.html
@@ -399,8 +399,7 @@ example.i(4): Syntax error in input.
308. Namespace alias 'name' not allowed here. Assuming 'name'
309. [private | protected] inheritance ignored.
310. Template 'name' was already wrapped as 'name' (ignored)
-311. Template partial specialization not supported.
-312. Nested classes not currently supported (ignored).
+312. Nested class not currently supported (name ignored).
313. Unrecognized extern type "name" (ignored).
314. 'identifier' is a lang keyword.
315. Nothing known about 'identifier'.
diff --git a/Examples/test-suite/common.mk b/Examples/test-suite/common.mk
index 473d6579d..cf9faaad9 100644
--- a/Examples/test-suite/common.mk
+++ b/Examples/test-suite/common.mk
@@ -242,6 +242,7 @@ CPP_TEST_CASES += \
namespace_typemap \
namespace_virtual_method \
naturalvar \
+ nested_class \
nested_comment \
newobject1 \
null_pointer \
diff --git a/Examples/test-suite/derived_nested.i b/Examples/test-suite/derived_nested.i
index 2e9ace304..babcac0aa 100644
--- a/Examples/test-suite/derived_nested.i
+++ b/Examples/test-suite/derived_nested.i
@@ -3,6 +3,8 @@ This was reported in bug #909389 */
%module derived_nested
+#pragma SWIG nowarn=SWIGWARN_PARSE_NESTED_CLASS
+
%inline %{
class A { int x; };
@@ -11,5 +13,10 @@ class B {
class D : public A { int z; }; //ok
};
+struct BB {
+ class CC { int y; };
+ class DD : public A { int z; };
+ struct EE : public A { int z; };
+};
%}
diff --git a/Examples/test-suite/nested_class.i b/Examples/test-suite/nested_class.i
new file mode 100644
index 000000000..139c0c4cf
--- /dev/null
+++ b/Examples/test-suite/nested_class.i
@@ -0,0 +1,40 @@
+%module nested_class
+
+#pragma SWIG nowarn=SWIGWARN_PARSE_NESTED_CLASS
+
+%inline %{
+struct Outer {
+ struct Inner1 {
+ int x;
+ };
+
+ class Inner2 {
+ public:
+ int x;
+ };
+
+ class {
+ public:
+ int a;
+ };
+
+ struct {
+ int b;
+ };
+
+ union {
+ int c;
+ double d;
+ };
+
+ class Inner3 {
+ public:
+ int x;
+ } Inner3Name;
+
+ struct Inner4 {
+ int x;
+ } Inner4Name;
+};
+
+%}
diff --git a/Source/CParse/parser.y b/Source/CParse/parser.y
index 1cd7dc750..5eccc2df0 100644
--- a/Source/CParse/parser.y
+++ b/Source/CParse/parser.y
@@ -4395,7 +4395,7 @@ cpp_nested : storage_class cpptype ID LBRACE { cparse_start_line = cparse_line
n->next = 0;
add_nested(n);
} else {
- Swig_warning(WARN_PARSE_NESTED_CLASS, cparse_file, cparse_line, "Nested %s not currently supported (ignored).\n", $2);
+ Swig_warning(WARN_PARSE_NESTED_CLASS, cparse_file, cparse_line, "Nested %s not currently supported (%s ignored).\n", $2, $3);
if (strcmp($2, "class") == 0) {
/* For now, just treat the nested class as a forward
* declaration (SF bug #909387). */
@@ -4416,7 +4416,10 @@ cpp_nested : storage_class cpptype ID LBRACE { cparse_start_line = cparse_line
$$ = 0;
if (cplus_mode == CPLUS_PUBLIC) {
if (strcmp($2,"class") == 0) {
- Swig_warning(WARN_PARSE_NESTED_CLASS,cparse_file, cparse_line,"Nested class not currently supported (ignored)\n");
+ if ($5.id)
+ Swig_warning(WARN_PARSE_NESTED_CLASS, cparse_file, cparse_line,"Nested class not currently supported (%s ignored)\n", $5.id);
+ else
+ Swig_warning(WARN_PARSE_NESTED_CLASS, cparse_file, cparse_line,"Nested class not currently supported (ignored)\n");
} else if ($5.id) {
/* Generate some code for a new class */
Nested *n = (Nested *) malloc(sizeof(Nested));
@@ -4445,7 +4448,7 @@ cpp_nested : storage_class cpptype ID LBRACE { cparse_start_line = cparse_line
} SEMI {
$$ = 0;
if (cplus_mode == CPLUS_PUBLIC) {
- Swig_warning(WARN_PARSE_NESTED_CLASS,cparse_file, cparse_line,"Nested class not currently supported (ignored)\n");
+ Swig_warning(WARN_PARSE_NESTED_CLASS, cparse_file, cparse_line,"Nested %s not currently supported (%s ignored)\n", $2, $3);
}
}
/* This unfortunately introduces 4 shift/reduce conflicts, so instead the somewhat hacky nested_template is used for ignore nested template classes. */
@@ -4454,7 +4457,7 @@ cpp_nested : storage_class cpptype ID LBRACE { cparse_start_line = cparse_line
} SEMI {
$$ = 0;
if (cplus_mode == CPLUS_PUBLIC) {
- Swig_warning(WARN_PARSE_NESTED_CLASS,cparse_file, cparse_line,"Nested class not currently supported (ignored)\n");
+ Swig_warning(WARN_PARSE_NESTED_CLASS, cparse_file, cparse_line,"Nested %s not currently supported (%s ignored)\n", $5, $6);
}
}
*/