diff options
author | Vadim Zeitlin <vz-swig@zeitlins.org> | 2019-02-11 14:24:46 +0100 |
---|---|---|
committer | Vadim Zeitlin <vz-swig@zeitlins.org> | 2019-02-11 14:24:46 +0100 |
commit | ddf4bbe112bad294e43be3eb33f1be4578b1b799 (patch) | |
tree | 46f190a5ca1ee4ba1537625c0909ce0f1bca8a07 /Source/Swig | |
parent | 43438b66abe11be3609ebb88cf0d3d998c0be145 (diff) | |
parent | 2517f5b05ed62f16d4da1a8045543cc553da732f (diff) | |
download | swig-ddf4bbe112bad294e43be3eb33f1be4578b1b799.tar.gz |
Merge branch 'fix-ignore-param'
Fix for wrongly renaming parameters to "$ignore" in Python.
See https://github.com/swig/swig/pull/1462
Diffstat (limited to 'Source/Swig')
-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) { |