the function 'need_protected' outside parser.y,
ie, if more subtle cases appear, they can be
fixed without changing parser.y.
Now parser.y looks much more like the original 1.32.
Source/CParse/parser.y: moving and fixing 'need_protected'
Source/CParse/util.c: moving and fixing 'need_protected'
Examples/test-suite/director_protected.i: more %rename cases
Examples/test-suite/director_using.i: fixing bad module name
The errors in question where related to the mix of
%rename + (typedef|static) + protected + dirprot_mode:
%rename(s) Foo::p;
%rename(q) Foo::r;
%inline {
class Foo {
public:
virtual ~Foo() {}
int p(){ return 1;}
int r(){ return 1;}
protected:
typedef int q();
static int s();
};
since q and s look like functions, the parser was adding them
completly to the symbol table, and clashing latter with the
attemped renames.
The error was only visible when dirprot was enabled, with
the old behavior it was ok.
Marcelo
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@5533 626c5289-ae23-0410-ae9c-e8d60b6d4f22
%inline %{
class Foo {
protected:
void x();
public:
void y();
};
%}
will work in plain or plain director mode, but it will complain the
same as before with director protected support.
The reason is that the parser emmits the warning, and at that stage it
is not possible to decide if the protected Foo::x() could or not
conflict with the renamed Foo::y(), since Foo::x() could be virtual,
even when no "virtual" attribute is used.
Core:
parser.y: Detect the dirprot mode and prevents the generation of
protected symbols at the parsing stage.
lang.cxx: Export the director_protected_mode for parser.y and the
director protected member detection is much cleaner.
main.cxx: Fix the -dirprot flag, it was working in SWIG_FEATURE but
not in the command line.(minor thing not relate to the error).
swigmod.h: added Lang::dirprot_mode() for cleaner detection.
utils.cxx: is_member_director() centralizes and improve the test.
Test suite:
protected_rename.i: added %inline, so it can compile now.
director_protected.i: more cases, checking using %rename.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@5530 626c5289-ae23-0410-ae9c-e8d60b6d4f22