From: Vadim Z. <vz...@ze...> - 2010-06-02 21:40:00
|
On Wed, 02 Jun 2010 18:10:55 +0100 William S Fulton <ws...@fu...> wrote: WSF> Vadim Zeitlin wrote: WSF> > Hello, WSF> > WSF> > Consider this (contrived) example: WSF> > WSF> > % cat -n enum_with_same_name.i WSF> > 1 %module enum_with_same_name; WSF> > 2 WSF> > 3 %inline %{ WSF> > 4 enum Month { Jan, May, Dec }; WSF> > 5 enum Severity { May, Can, Must }; WSF> > 6 %} WSF> This is illegal C/C++, so SWIG won't work with this invalid code. Sorry, I've simplified too much. The original C++ code does the equivalent of enum Month { Month_Jan, Month_May, Month_Dec }; enum Severity { Severity_May, ... }; but I use %rename to get rid of the common enum prefix (this works very nicely in conjunction with %rxspencer/rxsmatch and I'd really like to see RE support in the official SWIG version BTW, I wonder if 2.0 could integrate it...) to avoid having to write Month.Month_May in C#. So I guess this could be seen as not a bug but a feature request. FWIW I received an off list reply from David Piepgrass proposing the following workaround namespace Dummy1 { enum Month { Jan, May, Dec }; } namespace Dummy2 { enum Severity { May, Can, Must }; } typedef Dummy1::Month Month; typedef Dummy2::Severity Severity; But this would require changes to the original sources that I'd like to avoid, my current %rename("%(rxspencer:[([A-Z][a-z]+)+_(.*)][@2])s",%$isenumitem) ""; works really well with the naming convention that we use. The only idea I have so far is to use some "UniqueDummyPrefix@1__@2" as replacement and then post-process SWIG output to get rid of everything up to and including the double underscore. But this is really ugly so I'm still looking for any better ideas. TIA, VZ |