mirror of https://github.com/swig/swig
More redefinition/redeclaration warning message improvements
Replicate redefinition/redeclaration warning message improvements in previous commit to nested classes. Adding the symtab to all nodes in Swig_symbol_add() has also fixed some warning displays with %extend 302 warnings, which were completely missing before (extend_placement.i testcase).
This commit is contained in:
parent
856d6f25e9
commit
526bc33376
|
@ -83,6 +83,8 @@ public:
|
||||||
|
|
||||||
// After the class
|
// After the class
|
||||||
|
|
||||||
|
%warnfilter(SWIGWARN_PARSE_REDEFINED) BarT<int>::spam();
|
||||||
|
|
||||||
%inline %{
|
%inline %{
|
||||||
template<class T>
|
template<class T>
|
||||||
class BarT {
|
class BarT {
|
||||||
|
|
|
@ -684,17 +684,8 @@ static void add_symbols(Node *n) {
|
||||||
String *n_name_stripped = SwigType_templateprefix(Getattr(n, "name"));
|
String *n_name_stripped = SwigType_templateprefix(Getattr(n, "name"));
|
||||||
String *c_name_stripped = SwigType_templateprefix(Getattr(c, "name"));
|
String *c_name_stripped = SwigType_templateprefix(Getattr(c, "name"));
|
||||||
int redefined = Swig_need_redefined_warn(n, c, inclass);
|
int redefined = Swig_need_redefined_warn(n, c, inclass);
|
||||||
String *n_name_decl = 0;
|
String *n_name_decl = Swig_name_decl(n);
|
||||||
String *c_name_decl = Swig_name_decl(c);
|
String *c_name_decl = Swig_name_decl(c);
|
||||||
{
|
|
||||||
/* As symbol add failed, temporarily add in missing symbol table for Swig_name_decl */
|
|
||||||
Symtab *n_symtab = Getattr(n, "sym:symtab");
|
|
||||||
if (!n_symtab)
|
|
||||||
Setattr(n, "sym:symtab", Swig_symbol_current());
|
|
||||||
n_name_decl = Swig_name_decl(n);
|
|
||||||
if (!n_symtab)
|
|
||||||
Delattr(n, "sym:symtab");
|
|
||||||
}
|
|
||||||
if (redefined) {
|
if (redefined) {
|
||||||
Printf(en, "Redefinition of identifier '%s' (ignored) as %s", symname_stripped, n_name_decl);
|
Printf(en, "Redefinition of identifier '%s' (ignored) as %s", symname_stripped, n_name_decl);
|
||||||
Printf(ec, "previous definition of '%s' as %s", symname_stripped, c_name_decl);
|
Printf(ec, "previous definition of '%s' as %s", symname_stripped, c_name_decl);
|
||||||
|
|
|
@ -146,20 +146,25 @@ static void add_symbols_c(Node *n) {
|
||||||
String *e = NewStringEmpty();
|
String *e = NewStringEmpty();
|
||||||
String *en = NewStringEmpty();
|
String *en = NewStringEmpty();
|
||||||
String *ec = NewStringEmpty();
|
String *ec = NewStringEmpty();
|
||||||
|
String *symname_stripped = SwigType_templateprefix(symname);
|
||||||
|
String *n_name_stripped = SwigType_templateprefix(Getattr(n, "name"));
|
||||||
|
String *c_name_stripped = SwigType_templateprefix(Getattr(c, "name"));
|
||||||
int redefined = Swig_need_redefined_warn(n, c, true);
|
int redefined = Swig_need_redefined_warn(n, c, true);
|
||||||
|
String *n_name_decl = Swig_name_decl(n);
|
||||||
|
String *c_name_decl = Swig_name_decl(c);
|
||||||
if (redefined) {
|
if (redefined) {
|
||||||
Printf(en, "Identifier '%s' redefined (ignored)", symname);
|
Printf(en, "Redefinition of identifier '%s' (ignored) as %s", symname_stripped, n_name_decl);
|
||||||
Printf(ec, "previous definition of '%s'", symname);
|
Printf(ec, "previous definition of '%s' as %s", symname_stripped, c_name_decl);
|
||||||
} else {
|
} else {
|
||||||
Printf(en, "Redundant redeclaration of '%s'", symname);
|
Printf(en, "Redundant redeclaration of identifier '%s' as %s", symname_stripped, n_name_decl);
|
||||||
Printf(ec, "previous declaration of '%s'", symname);
|
Printf(ec, "previous declaration of '%s' as %s", symname_stripped, c_name_decl);
|
||||||
}
|
}
|
||||||
if (Cmp(symname, Getattr(n, "name"))) {
|
if (!Equal(symname_stripped, n_name_stripped)) {
|
||||||
Printf(en, " (Renamed from '%s')", SwigType_namestr(Getattr(n, "name")));
|
Printf(en, " (Renamed from '%s')", SwigType_namestr(n_name_stripped));
|
||||||
}
|
}
|
||||||
Printf(en, ",");
|
Printf(en, ",");
|
||||||
if (Cmp(symname, Getattr(c, "name"))) {
|
if (!Equal(symname_stripped, c_name_stripped)) {
|
||||||
Printf(ec, " (Renamed from '%s')", SwigType_namestr(Getattr(c, "name")));
|
Printf(ec, " (Renamed from '%s')", SwigType_namestr(c_name_stripped));
|
||||||
}
|
}
|
||||||
Printf(ec, ".");
|
Printf(ec, ".");
|
||||||
SWIG_WARN_NODE_BEGIN(n);
|
SWIG_WARN_NODE_BEGIN(n);
|
||||||
|
@ -173,6 +178,11 @@ static void add_symbols_c(Node *n) {
|
||||||
SWIG_WARN_NODE_END(n);
|
SWIG_WARN_NODE_END(n);
|
||||||
Printf(e, "%s:%d:%s\n%s:%d:%s\n", Getfile(n), Getline(n), en, Getfile(c), Getline(c), ec);
|
Printf(e, "%s:%d:%s\n%s:%d:%s\n", Getfile(n), Getline(n), en, Getfile(c), Getline(c), ec);
|
||||||
Setattr(n, "error", e);
|
Setattr(n, "error", e);
|
||||||
|
Delete(c_name_decl);
|
||||||
|
Delete(n_name_decl);
|
||||||
|
Delete(symname_stripped);
|
||||||
|
Delete(c_name_stripped);
|
||||||
|
Delete(n_name_stripped);
|
||||||
Delete(e);
|
Delete(e);
|
||||||
Delete(en);
|
Delete(en);
|
||||||
Delete(ec);
|
Delete(ec);
|
||||||
|
|
|
@ -711,7 +711,7 @@ void Swig_symbol_cadd(const_String_or_char_ptr name, Node *n) {
|
||||||
* for namespace support, type resolution, and other issues.
|
* for namespace support, type resolution, and other issues.
|
||||||
* ----------------------------------------------------------------------------- */
|
* ----------------------------------------------------------------------------- */
|
||||||
|
|
||||||
Node *Swig_symbol_add(const_String_or_char_ptr symname, Node *n) {
|
static Node *symbol_add(const_String_or_char_ptr symname, Node *n) {
|
||||||
Hash *c, *cl = 0;
|
Hash *c, *cl = 0;
|
||||||
SwigType *decl, *ndecl;
|
SwigType *decl, *ndecl;
|
||||||
String *cstorage, *nstorage;
|
String *cstorage, *nstorage;
|
||||||
|
@ -750,7 +750,6 @@ Node *Swig_symbol_add(const_String_or_char_ptr symname, Node *n) {
|
||||||
|
|
||||||
/* No symbol name defined. We return. */
|
/* No symbol name defined. We return. */
|
||||||
if (!symname) {
|
if (!symname) {
|
||||||
Setattr(n, "sym:symtab", current_symtab);
|
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -948,6 +947,14 @@ Node *Swig_symbol_add(const_String_or_char_ptr symname, Node *n) {
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Node *Swig_symbol_add(const_String_or_char_ptr symname, Node *n) {
|
||||||
|
Node *nn = symbol_add(symname, n);
|
||||||
|
/* Always set the symtab to have correct scope in case of error reporting */
|
||||||
|
if (!Getattr(n, "sym:symtab"))
|
||||||
|
Setattr(n, "sym:symtab", current_symtab);
|
||||||
|
return nn;
|
||||||
|
}
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
* symbol_lookup()
|
* symbol_lookup()
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue