From de78b80de9d1c49d8360ccfef874892430c5e462 Mon Sep 17 00:00:00 2001 From: Seth R Johnson Date: Thu, 22 Feb 2018 10:10:12 -0500 Subject: [PATCH] Renames performed by `%namewarn` with `rename=` are printed in warning message This is necessary for regex-like renames (where you can't use the #define trick as is done in many of the %keywordwarn directives). It's now unnecessary to print the "renaming to '`x`'" code explicitly by the kw.swg files. --- Examples/test-suite/errors/c_class.stderr | 2 +- Examples/test-suite/errors/cpp_namewarn.i | 10 +++++----- .../test-suite/errors/cpp_namewarn.stderr | 20 +++++++++---------- Lib/csharp/csharpkw.swg | 4 ++-- Lib/d/dkw.swg | 2 +- Lib/go/gokw.swg | 2 +- Lib/java/javakw.swg | 2 +- Lib/lua/luakw.swg | 2 +- Lib/php/phpkw.swg | 6 +++--- Lib/python/pythonkw.swg | 2 +- Lib/r/rkw.swg | 4 ++-- Lib/ruby/rubykw.swg | 2 +- Source/Swig/naming.c | 14 +++++++++++-- 13 files changed, 41 insertions(+), 31 deletions(-) diff --git a/Examples/test-suite/errors/c_class.stderr b/Examples/test-suite/errors/c_class.stderr index 306e144e5..388091799 100644 --- a/Examples/test-suite/errors/c_class.stderr +++ b/Examples/test-suite/errors/c_class.stderr @@ -1,2 +1,2 @@ c_class.i:3: Warning 301: class keyword used, but not in C++ mode. -c_class.i:3: Warning 314: 'class' is a python keyword, renaming to '_class' +c_class.i:3: Warning 314: 'class' is a python keyword: renaming 'class' to '_class' diff --git a/Examples/test-suite/errors/cpp_namewarn.i b/Examples/test-suite/errors/cpp_namewarn.i index c0edc4b4e..5c62cebeb 100644 --- a/Examples/test-suite/errors/cpp_namewarn.i +++ b/Examples/test-suite/errors/cpp_namewarn.i @@ -1,10 +1,10 @@ %module xxx -%namewarn("314:'key1' is a keyword, renaming to '_key1'", rename="_%s") "key1"; -%namewarn("314:'key2' is a keyword, renaming to '_key2'", rename="_%s") "key2"; -%namewarn("314:'key3' is a keyword, renaming to '_key3'", rename="_%s") "key3"; -%namewarn("314:'key4' is a keyword, renaming to '_key4'", rename="_%s") "key4"; -%namewarn("314:'key5' is a keyword, renaming to '_key5'", rename="_%s") "key5"; +%namewarn("314:'key1' is a keyword", rename="_%s") "key1"; +%namewarn("314:'key2' is a keyword", rename="_%s") "key2"; +%namewarn("314:'key3' is a keyword", rename="_%s") "key3"; +%namewarn("314:'key4' is a keyword", rename="_%s") "key4"; +%namewarn("314:'key5' is a keyword", rename="_%s") "key5"; // Non-templated %ignore KlassA::key1; diff --git a/Examples/test-suite/errors/cpp_namewarn.stderr b/Examples/test-suite/errors/cpp_namewarn.stderr index e5b893268..53c5cdb9c 100644 --- a/Examples/test-suite/errors/cpp_namewarn.stderr +++ b/Examples/test-suite/errors/cpp_namewarn.stderr @@ -1,10 +1,10 @@ -cpp_namewarn.i:58: Warning 314: 'key1' is a keyword, renaming to '_key1' -cpp_namewarn.i:59: Warning 314: 'key2' is a keyword, renaming to '_key2' -cpp_namewarn.i:60: Warning 314: 'key3' is a keyword, renaming to '_key3' -cpp_namewarn.i:65: Warning 314: 'key1' is a keyword, renaming to '_key1' -cpp_namewarn.i:66: Warning 314: 'key2' is a keyword, renaming to '_key2' -cpp_namewarn.i:67: Warning 314: 'key3' is a keyword, renaming to '_key3' -cpp_namewarn.i:72: Warning 314: 'key1' is a keyword, renaming to '_key1' -cpp_namewarn.i:73: Warning 314: 'key2' is a keyword, renaming to '_key2' -cpp_namewarn.i:74: Warning 314: 'key3' is a keyword, renaming to '_key3' -cpp_namewarn.i:80: Warning 314: 'key5' is a keyword, renaming to '_key5' +cpp_namewarn.i:58: Warning 314: 'key1' is a keyword: renaming 'key1' to '_key1' +cpp_namewarn.i:59: Warning 314: 'key2' is a keyword: renaming 'key2' to '_key2' +cpp_namewarn.i:60: Warning 314: 'key3' is a keyword: renaming 'key3' to '_key3' +cpp_namewarn.i:65: Warning 314: 'key1' is a keyword: renaming 'key1' to '_key1' +cpp_namewarn.i:66: Warning 314: 'key2' is a keyword: renaming 'key2' to '_key2' +cpp_namewarn.i:67: Warning 314: 'key3' is a keyword: renaming 'key3' to '_key3' +cpp_namewarn.i:72: Warning 314: 'key1' is a keyword: renaming 'key1' to '_key1' +cpp_namewarn.i:73: Warning 314: 'key2' is a keyword: renaming 'key2' to '_key2' +cpp_namewarn.i:74: Warning 314: 'key3' is a keyword: renaming 'key3' to '_key3' +cpp_namewarn.i:80: Warning 314: 'key5' is a keyword diff --git a/Lib/csharp/csharpkw.swg b/Lib/csharp/csharpkw.swg index 824f61874..1904fce94 100644 --- a/Lib/csharp/csharpkw.swg +++ b/Lib/csharp/csharpkw.swg @@ -2,9 +2,9 @@ #define CSHARP_CSHARPKW_SWG_ /* Warnings for C# keywords */ -#define CSHARPKW(x) %keywordwarn("'" `x` "' is a C# keyword, renaming to '" `x` "_'",rename="%s_") `x` +#define CSHARPKW(x) %keywordwarn("'" `x` "' is a C# keyword",rename="%s_") `x` -#define CSHARPCLASSKW(x) %keywordwarn("'" `x` "' is a special method name used in the C# wrapper classes, class renamed to '" `x` "_'",%$isclass,rename="%s_") `x` +#define CSHARPCLASSKW(x) %keywordwarn("'" `x` "' is a special method name used in the C# wrapper classes",%$isclass,rename="%s_") `x` /* from diff --git a/Lib/d/dkw.swg b/Lib/d/dkw.swg index 581093f96..2a189ed64 100644 --- a/Lib/d/dkw.swg +++ b/Lib/d/dkw.swg @@ -2,7 +2,7 @@ #define D_DKW_SWG_ /* Warnings for D keywords */ -#define DKEYWORD(x) %keywordwarn("'" `x` "' is a D keyword, renaming to '_" `x` "'",rename="_%s") `x` +#define DKEYWORD(x) %keywordwarn("'" `x` "' is a D keyword",rename="_%s") `x` // Source: http://www.digitalmars.com/d/{1.0,2.0}/lex.html and DKEYWORD(Error); diff --git a/Lib/go/gokw.swg b/Lib/go/gokw.swg index dd9f35aa3..354283002 100644 --- a/Lib/go/gokw.swg +++ b/Lib/go/gokw.swg @@ -1,6 +1,6 @@ /* Rename keywords. */ -#define GOKW(x) %keywordwarn("'" `x` "' is a Go keyword, renaming to 'X"`x`"'",rename="X%s") `x` +#define GOKW(x) %keywordwarn("'" `x` "' is a Go keyword",rename="X%s") `x` #define GOBN(x) %builtinwarn("'" `x` "' conflicts with a built-in name in Go") "::"`x` GOKW(break); diff --git a/Lib/java/javakw.swg b/Lib/java/javakw.swg index 99cd54770..8a5b76eef 100644 --- a/Lib/java/javakw.swg +++ b/Lib/java/javakw.swg @@ -2,7 +2,7 @@ #define JAVA_JAVAKW_SWG_ /* Warnings for Java keywords */ -#define JAVAKW(x) %keywordwarn("'" `x` "' is a java keyword, renaming to '_"`x`"'",rename="_%s") `x` +#define JAVAKW(x) %keywordwarn("'" `x` "' is a java keyword",rename="_%s") `x` /* from diff --git a/Lib/lua/luakw.swg b/Lib/lua/luakw.swg index fc2f92bfe..394e40053 100644 --- a/Lib/lua/luakw.swg +++ b/Lib/lua/luakw.swg @@ -2,7 +2,7 @@ Warnings for Lua keywords, built-in names and bad names. */ -#define LUAKW(x) %keywordwarn("'" `x` "' is a Lua keyword, renaming to 'c_" `x` "'", rename="c_%s") `x` +#define LUAKW(x) %keywordwarn("'" `x` "' is a Lua keyword", rename="c_%s") `x` #define LUABN(x) %namewarn(%warningmsg(SWIGWARN_PARSE_BUILTIN_NAME, "'" `x` "' conflicts with a basic function in Lua"), %$not %$ismember) `x` /* diff --git a/Lib/php/phpkw.swg b/Lib/php/phpkw.swg index b6855ce9a..443ac8bf8 100644 --- a/Lib/php/phpkw.swg +++ b/Lib/php/phpkw.swg @@ -3,13 +3,13 @@ * ----------------------------------------------------------------------------- */ /* Keyword (case insensitive) */ -#define PHPKW(x) %keywordwarn("'" `x` "' is a PHP keyword, renaming to 'c_" `x` "'",sourcefmt="%(lower)s",rename="c_%s") `x` +#define PHPKW(x) %keywordwarn("'" `x` "' is a PHP keyword",sourcefmt="%(lower)s",rename="c_%s") `x` /* Keyword, except ok as a function */ #define PHPKW_ok_as_function(x) %keywordwarn("'" `x` "' is a PHP keyword, renaming to 'c_" `x` "'",%$not %$isfunction,sourcefmt="%(lower)s",rename="c_%s") `x` /* Class (case insensitive) */ -#define PHPCN(x) %keywordwarn("'" `x` "' is a PHP reserved class name, renaming to 'c_" `x` "'",%$isclass,sourcefmt="%(lower)s",rename="c_%s") `x` +#define PHPCN(x) %keywordwarn("'" `x` "' is a PHP reserved class name",%$isclass,sourcefmt="%(lower)s",rename="c_%s") `x` /* Constant (case insensitive) */ #define PHPBN1a(x) %namewarn(%warningmsg(SWIGWARN_PARSE_BUILTIN_NAME, "enum conflicts with a built-in constant '"`x`"' in PHP"),%$isenumitem,sourcefmt="%(lower)s") `x` @@ -25,7 +25,7 @@ PHPBN2a(X); PHPBN2b(X) %enddef -#define PHPFN(x) %keywordwarn("'" `x` "' is a PHP built-in function, renaming to 'c_" `x` "'",sourcefmt="%(lower)s",%$isfunction,%$not %$ismember,rename="c_%s") `x` +#define PHPFN(x) %keywordwarn("'" `x` "' is a PHP built-in function",sourcefmt="%(lower)s",%$isfunction,%$not %$ismember,rename="c_%s") `x` /* From: http://php.net/manual/en/reserved.keywords.php * "You cannot use any of the following words as constants, class names, diff --git a/Lib/python/pythonkw.swg b/Lib/python/pythonkw.swg index 0138e40e4..a21034524 100644 --- a/Lib/python/pythonkw.swg +++ b/Lib/python/pythonkw.swg @@ -2,7 +2,7 @@ Warnings for Python keywords, built-in names and bad names. */ -#define PYTHONKW(x) %keywordwarn("'" `x` "' is a python keyword, renaming to '_" `x` "'", rename="_%s") `x` +#define PYTHONKW(x) %keywordwarn("'" `x` "' is a python keyword", rename="_%s") `x` #define PYTHONBN(x) %builtinwarn("'" `x` "' conflicts with a built-in name in python") `x` diff --git a/Lib/r/rkw.swg b/Lib/r/rkw.swg index 074d7dfd9..c4af7084f 100644 --- a/Lib/r/rkw.swg +++ b/Lib/r/rkw.swg @@ -2,8 +2,8 @@ Warnings for R keywords, built-in names and bad names. */ -#define RKW(x) %keywordwarn("'" `x` "' is a R keyword, renaming to '_" `x`"'", rename="_%s") `x` -#define RSWIGKW(x) %keywordwarn("'" `x` "' is a SWIG R reserved parameter name, renaming to '_" `x`"'", rename="_%s") `x` +#define RKW(x) %keywordwarn("'" `x` "' is a R keyword", rename="_%s") `x` +#define RSWIGKW(x) %keywordwarn("'" `x` "' is a SWIG R reserved parameter name", rename="_%s") `x` /* Warnings for R reserved words taken from diff --git a/Lib/ruby/rubykw.swg b/Lib/ruby/rubykw.swg index 194687b95..6b4685eb8 100644 --- a/Lib/ruby/rubykw.swg +++ b/Lib/ruby/rubykw.swg @@ -2,7 +2,7 @@ #define RUBY_RUBYKW_SWG_ /* Warnings for Ruby keywords */ -#define RUBYKW(x) %keywordwarn("'" `x` "' is a ruby keyword, renaming to 'C_" `x` "'",rename="C_%s",fullname=1) `x` +#define RUBYKW(x) %keywordwarn("'" `x` "' is a ruby keyword",rename="C_%s",fullname=1) `x` /* diff --git a/Source/Swig/naming.c b/Source/Swig/naming.c index dca5e2b72..ed66b5ecf 100644 --- a/Source/Swig/naming.c +++ b/Source/Swig/naming.c @@ -1517,6 +1517,15 @@ String *Swig_name_make(Node *n, String *prefix, const_String_or_char_ptr cname, result = apply_rename(n, rename, fullname, prefix, name); if ((msg) && (Len(msg))) { if (!Getmeta(nname, "already_warned")) { + String* suffix = 0; + if (Strcmp(result, "$ignore") == 0) { + suffix = NewStringf(": ignoring '%s'\n", name); + } else if (Strcmp(result, name) != 0) { + suffix = NewStringf(": renaming '%s' to '%s'\n", name, result); + } else { + /* No rename was performed */ + suffix = NewString("\n"); + } if (n) { /* Parameter renaming is not fully implemented. Mainly because there is no C/C++ syntax to * for %rename to fully qualify a function's parameter name from outside the function. Hence it @@ -1524,13 +1533,14 @@ String *Swig_name_make(Node *n, String *prefix, const_String_or_char_ptr cname, int suppress_parameter_rename_warning = Equal(nodeType(n), "parm"); if (!suppress_parameter_rename_warning) { SWIG_WARN_NODE_BEGIN(n); - Swig_warning(0, Getfile(n), Getline(n), "%s\n", msg); + Swig_warning(0, Getfile(n), Getline(n), "%s%s", msg, suffix); SWIG_WARN_NODE_END(n); } } else { - Swig_warning(0, Getfile(name), Getline(name), "%s\n", msg); + Swig_warning(0, Getfile(name), Getline(name), "%s%s", msg, suffix); } Setmeta(nname, "already_warned", "1"); + Delete(suffix); } } }