From 9d65c100b977bd74151ac2c1c6cd03d1a27ed641 Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Sun, 8 Nov 2009 01:18:45 +0000 Subject: [PATCH] Ignored nested class/struct warnings now display the name of the ignored class/struct. git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@11728 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- CHANGES.current | 3 +++ Doc/Manual/Warnings.html | 3 +-- Examples/test-suite/common.mk | 1 + Examples/test-suite/derived_nested.i | 7 +++++ Examples/test-suite/nested_class.i | 40 ++++++++++++++++++++++++++++ Source/CParse/parser.y | 11 +++++--- 6 files changed, 59 insertions(+), 6 deletions(-) create mode 100644 Examples/test-suite/nested_class.i 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); } } */