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
This commit is contained in:
William S Fulton 2009-11-08 01:18:45 +00:00
commit 9d65c100b9
6 changed files with 59 additions and 6 deletions

View file

@ -1,6 +1,9 @@
Version 1.3.41 (in progress) 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 2009-11-07: wsfulton
Bug #1514681 - Fix nested template classes within a namespace generated uncompileable Bug #1514681 - Fix nested template classes within a namespace generated uncompileable
code and introduced strange side effects to other wrapper code especially code code and introduced strange side effects to other wrapper code especially code

View file

@ -399,8 +399,7 @@ example.i(4): Syntax error in input.
<li>308. Namespace alias '<em>name</em>' not allowed here. Assuming '<em>name</em>' <li>308. Namespace alias '<em>name</em>' not allowed here. Assuming '<em>name</em>'
<li>309. [private | protected] inheritance ignored. <li>309. [private | protected] inheritance ignored.
<li>310. Template '<em>name</em>' was already wrapped as '<em>name</em>' (ignored) <li>310. Template '<em>name</em>' was already wrapped as '<em>name</em>' (ignored)
<li>311. Template partial specialization not supported. <li>312. Nested class not currently supported (<em>name</em> ignored).
<li>312. Nested classes not currently supported (ignored).
<li>313. Unrecognized extern type "<em>name</em>" (ignored). <li>313. Unrecognized extern type "<em>name</em>" (ignored).
<li>314. '<em>identifier</em>' is a <em>lang</em> keyword. <li>314. '<em>identifier</em>' is a <em>lang</em> keyword.
<li>315. Nothing known about '<em>identifier</em>'. <li>315. Nothing known about '<em>identifier</em>'.

View file

@ -242,6 +242,7 @@ CPP_TEST_CASES += \
namespace_typemap \ namespace_typemap \
namespace_virtual_method \ namespace_virtual_method \
naturalvar \ naturalvar \
nested_class \
nested_comment \ nested_comment \
newobject1 \ newobject1 \
null_pointer \ null_pointer \

View file

@ -3,6 +3,8 @@ This was reported in bug #909389 */
%module derived_nested %module derived_nested
#pragma SWIG nowarn=SWIGWARN_PARSE_NESTED_CLASS
%inline %{ %inline %{
class A { int x; }; class A { int x; };
@ -11,5 +13,10 @@ class B {
class D : public A { int z; }; //ok 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; };
};
%} %}

View file

@ -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;
};
%}

View file

@ -4395,7 +4395,7 @@ cpp_nested : storage_class cpptype ID LBRACE { cparse_start_line = cparse_line
n->next = 0; n->next = 0;
add_nested(n); add_nested(n);
} else { } 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) { if (strcmp($2, "class") == 0) {
/* For now, just treat the nested class as a forward /* For now, just treat the nested class as a forward
* declaration (SF bug #909387). */ * declaration (SF bug #909387). */
@ -4416,7 +4416,10 @@ cpp_nested : storage_class cpptype ID LBRACE { cparse_start_line = cparse_line
$$ = 0; $$ = 0;
if (cplus_mode == CPLUS_PUBLIC) { if (cplus_mode == CPLUS_PUBLIC) {
if (strcmp($2,"class") == 0) { 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) { } else if ($5.id) {
/* Generate some code for a new class */ /* Generate some code for a new class */
Nested *n = (Nested *) malloc(sizeof(Nested)); Nested *n = (Nested *) malloc(sizeof(Nested));
@ -4445,7 +4448,7 @@ cpp_nested : storage_class cpptype ID LBRACE { cparse_start_line = cparse_line
} SEMI { } SEMI {
$$ = 0; $$ = 0;
if (cplus_mode == CPLUS_PUBLIC) { 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. */ /* 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 { } SEMI {
$$ = 0; $$ = 0;
if (cplus_mode == CPLUS_PUBLIC) { 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);
} }
} }
*/ */