summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorVadim Zeitlin <vz-swig@zeitlins.org>2019-02-10 13:40:12 +0100
committerVadim Zeitlin <vz-swig@zeitlins.org>2019-02-10 13:40:12 +0100
commit2517f5b05ed62f16d4da1a8045543cc553da732f (patch)
tree52feb9881b41fd47af06b7fec44d2d6fb28da4d9 /Source
parent509b14ac6f32a8ac6a0abbc8266cc6d274ceb9db (diff)
downloadswig-2517f5b05ed62f16d4da1a8045543cc553da732f.tar.gz
Don't apply %ignore to parameters
Fix regression introduced by 3f5c17824c5f20023bac58f7ebfc8de8532d6881 which resulted in using "$ignore" instead of the real parameter name in Python if an %ignore/%rename($ignore) for the parameter name was used (as could happen not necessarily intentionally when using wild card ignores with regex matches) by explicitly checking if we're dealing with a parameter node in apply_rename(), used by Swig_name_make(), and not renaming it to "$ignore" in this case. Extend the test suite to check for this case. Closes #1460.
Diffstat (limited to 'Source')
-rw-r--r--Source/Swig/naming.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/Source/Swig/naming.c b/Source/Swig/naming.c
index 180e54774..136df1987 100644
--- a/Source/Swig/naming.c
+++ b/Source/Swig/naming.c
@@ -1377,12 +1377,15 @@ void Swig_name_rename_add(String *prefix, String *name, SwigType *decl, Hash *ne
}
-/* Create a name applying rename/namewarn if needed */
-static String *apply_rename(String *newname, int fullname, String *prefix, String *name) {
+/* Create a name for the given node applying rename/namewarn if needed */
+static String *apply_rename(Node* n, String *newname, int fullname, String *prefix, String *name) {
String *result = 0;
if (newname && Len(newname)) {
if (Strcmp(newname, "$ignore") == 0) {
- result = Copy(newname);
+ /* $ignore doesn't apply to parameters and while it's rare to explicitly write %ignore directives for them they could be caught by a wildcard ignore using
+ regex match, just ignore the attempt to ignore them in this case */
+ if (!Equal(nodeType(n), "parm"))
+ result = Copy(newname);
} else {
char *cnewname = Char(newname);
if (cnewname) {
@@ -1480,7 +1483,7 @@ String *Swig_name_make(Node *n, String *prefix, const_String_or_char_ptr cname,
if (rn) {
String *newname = Getattr(rn, "name");
int fullname = GetFlag(rn, "fullname");
- result = apply_rename(newname, fullname, prefix, name);
+ result = apply_rename(n, newname, fullname, prefix, name);
}
if (result && !Equal(result, name)) {
/* operators in C++ allow aliases, we look for them */
@@ -1504,7 +1507,7 @@ String *Swig_name_make(Node *n, String *prefix, const_String_or_char_ptr cname,
int fullname = GetFlag(wrn, "fullname");
if (result)
Delete(result);
- result = apply_rename(rename, fullname, prefix, name);
+ result = apply_rename(n, rename, fullname, prefix, name);
if ((msg) && (Len(msg))) {
if (!Getmeta(nname, "already_warned")) {
if (n) {