Suppress incorrect warning when a keyword is used in template classes
Closes https://github.com/swig/swig/issues/845
This commit is contained in:
parent
e517128e08
commit
e6b270b6dc
5 changed files with 116 additions and 3 deletions
|
|
@ -57,6 +57,7 @@ static Node *currentOuterClass = 0; /* for nested classes */
|
|||
static const char *last_cpptype = 0;
|
||||
static int inherit_list = 0;
|
||||
static Parm *template_parameters = 0;
|
||||
static int parsing_template_declaration = 0;
|
||||
static int extendmode = 0;
|
||||
static int compact_default_args = 0;
|
||||
static int template_reduce = 0;
|
||||
|
|
@ -262,6 +263,7 @@ static String *add_oldname = 0;
|
|||
|
||||
|
||||
static String *make_name(Node *n, String *name,SwigType *decl) {
|
||||
String *made_name = 0;
|
||||
int destructor = name && (*(Char(name)) == '~');
|
||||
|
||||
if (yyrename) {
|
||||
|
|
@ -275,7 +277,13 @@ static String *make_name(Node *n, String *name,SwigType *decl) {
|
|||
}
|
||||
|
||||
if (!name) return 0;
|
||||
return Swig_name_make(n,Namespaceprefix,name,decl,add_oldname);
|
||||
|
||||
if (parsing_template_declaration)
|
||||
SetFlag(n, "parsing_template_declaration");
|
||||
made_name = Swig_name_make(n, Namespaceprefix, name, decl, add_oldname);
|
||||
Delattr(n, "parsing_template_declaration");
|
||||
|
||||
return made_name;
|
||||
}
|
||||
|
||||
/* Generate an unnamed identifier */
|
||||
|
|
@ -440,7 +448,10 @@ static void add_symbols(Node *n) {
|
|||
symname = Copy(Getattr(n,"unnamed"));
|
||||
}
|
||||
if (symname) {
|
||||
if (parsing_template_declaration)
|
||||
SetFlag(n, "parsing_template_declaration");
|
||||
wrn = Swig_name_warning(n, Namespaceprefix, symname,0);
|
||||
Delattr(n, "parsing_template_declaration");
|
||||
}
|
||||
} else {
|
||||
String *name = Getattr(n,"name");
|
||||
|
|
@ -453,7 +464,10 @@ static void add_symbols(Node *n) {
|
|||
Swig_features_get(Swig_cparse_features(),Namespaceprefix,name,fun,n);
|
||||
|
||||
symname = make_name(n, name,fun);
|
||||
if (parsing_template_declaration)
|
||||
SetFlag(n, "parsing_template_declaration");
|
||||
wrn = Swig_name_warning(n, Namespaceprefix,symname,fun);
|
||||
Delattr(n, "parsing_template_declaration");
|
||||
|
||||
Delete(fdecl);
|
||||
Delete(fun);
|
||||
|
|
@ -3850,9 +3864,10 @@ cpp_forward_class_decl : storage_class cpptype idcolon SEMI {
|
|||
------------------------------------------------------------ */
|
||||
|
||||
cpp_template_decl : TEMPLATE LESSTHAN template_parms GREATERTHAN {
|
||||
if (currentOuterClass)
|
||||
Setattr(currentOuterClass, "template_parameters", template_parameters);
|
||||
if (currentOuterClass)
|
||||
Setattr(currentOuterClass, "template_parameters", template_parameters);
|
||||
template_parameters = $3;
|
||||
parsing_template_declaration = 1;
|
||||
} cpp_temp_possible {
|
||||
String *tname = 0;
|
||||
int error = 0;
|
||||
|
|
@ -4105,6 +4120,7 @@ cpp_template_decl : TEMPLATE LESSTHAN template_parms GREATERTHAN {
|
|||
template_parameters = Getattr(currentOuterClass, "template_parameters");
|
||||
else
|
||||
template_parameters = 0;
|
||||
parsing_template_declaration = 0;
|
||||
}
|
||||
|
||||
/* Explicit template instantiation */
|
||||
|
|
|
|||
|
|
@ -799,6 +799,8 @@ static int need_name_warning(Node *n) {
|
|||
need = 0;
|
||||
} else if (Getattr(n, "templatetype")) {
|
||||
need = 0;
|
||||
} else if (GetFlag(n, "parsing_template_declaration")) {
|
||||
need = 0;
|
||||
}
|
||||
return need;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue