diff options
author | Vadim Zeitlin <vz-swig@zeitlins.org> | 2019-02-10 13:40:12 +0100 |
---|---|---|
committer | Vadim Zeitlin <vz-swig@zeitlins.org> | 2019-02-10 13:40:12 +0100 |
commit | 2517f5b05ed62f16d4da1a8045543cc553da732f (patch) | |
tree | 52feb9881b41fd47af06b7fec44d2d6fb28da4d9 /Source | |
parent | 509b14ac6f32a8ac6a0abbc8266cc6d274ceb9db (diff) | |
download | swig-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.c | 13 |
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) { |