summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam S Fulton <wsf@fultondesigns.co.uk>2010-06-03 17:44:42 +0000
committerWilliam S Fulton <wsf@fultondesigns.co.uk>2010-06-03 17:44:42 +0000
commit257ce20f30b2535fff7b52f18df5595be6b4ec9b (patch)
tree8d378629301fbe2b7976aa6ce1b85579f91a9375
parentd30054b5f63a75d2688518b82b90b10507a62259 (diff)
downloadswig-257ce20f30b2535fff7b52f18df5595be6b4ec9b.tar.gz
Fix uncompileable code when %rename results in two enum items with the same name
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12098 626c5289-ae23-0410-ae9c-e8d60b6d4f22
-rw-r--r--CHANGES.current3
-rw-r--r--Examples/test-suite/common.mk1
-rw-r--r--Examples/test-suite/enum_rename.i12
-rw-r--r--Source/Modules/typepass.cxx2
4 files changed, 17 insertions, 1 deletions
diff --git a/CHANGES.current b/CHANGES.current
index 9982286c2..331e9d8dd 100644
--- a/CHANGES.current
+++ b/CHANGES.current
@@ -5,3 +5,6 @@ See the RELEASENOTES file for a summary of changes in each release.
Version 2.0.1 (in progress)
===========================
+2010-06-03: wsfulton
+ Fix uncompileable code when %rename results in two enum items
+ with the same name. Reported by Vadim Zeitlin.
diff --git a/Examples/test-suite/common.mk b/Examples/test-suite/common.mk
index 97708be47..5033f1957 100644
--- a/Examples/test-suite/common.mk
+++ b/Examples/test-suite/common.mk
@@ -180,6 +180,7 @@ CPP_TEST_CASES += \
disown \
dynamic_cast \
empty \
+ enum_rename \
enum_scope_template \
enum_template \
enum_thorough \
diff --git a/Examples/test-suite/enum_rename.i b/Examples/test-suite/enum_rename.i
new file mode 100644
index 000000000..455826f8b
--- /dev/null
+++ b/Examples/test-suite/enum_rename.i
@@ -0,0 +1,12 @@
+%module enum_rename
+
+%warnfilter(SWIGWARN_PARSE_REDEFINED) S_May;
+
+// %rename with rxspencer can do the equivalent of these two renames, which was resulting in uncompileable code
+%rename(May) M_May;
+%rename(May) S_May;
+
+%inline %{
+ enum Month { M_Jan, M_May, M_Dec };
+ enum Severity { S_May, S_Can, S_Must };
+%}
diff --git a/Source/Modules/typepass.cxx b/Source/Modules/typepass.cxx
index 57a7663eb..e0e06d54e 100644
--- a/Source/Modules/typepass.cxx
+++ b/Source/Modules/typepass.cxx
@@ -796,7 +796,7 @@ class TypePass:private Dispatcher {
bool reset;
String *enumvalue = Getattr(c, "enumvalue");
- if (GetFlag(c, "feature:ignore")) {
+ if (GetFlag(c, "feature:ignore") || !Getattr(c, "sym:name")) {
reset = enumvalue ? true : false;
previous_ignored = true;
} else {