add more rename predicates

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@8435 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Marcelo Matus 2006-01-14 21:23:57 +00:00
commit 75867b03a9
2 changed files with 26 additions and 11 deletions

View file

@ -246,7 +246,9 @@ static int NAME(TYPE x) {
%define %isfunction match$kind="function" %enddef %define %isfunction match$kind="function" %enddef
%define %isvariable match$kind="variable" %enddef %define %isvariable match$kind="variable" %enddef
%define %isimmutable "match$feature:immutable"="1" %enddef %define %isimmutable "match$feature:immutable"="1" %enddef
%define %hasconsttype match$hasconsttype="1" %enddef
%define %hasvalue match$hasvalue="1" %enddef %define %hasvalue match$hasvalue="1" %enddef
%define %isextension match$isextension="1" %enddef
%define %isstatic match$storage="static" %enddef %define %isstatic match$storage="static" %enddef
%define %isfriend match$storage="friend" %enddef %define %isfriend match$storage="friend" %enddef
@ -256,7 +258,7 @@ static int NAME(TYPE x) {
%define %isextern match$storage="extern" %enddef %define %isextern match$storage="extern" %enddef
%define %ismember match$ismember="1" %enddef %define %ismember match$ismember="1" %enddef
%define %isglobal notmatch$parentNode$nodeType="class" %enddef %define %isglobal notmatch$ismember="1" %enddef
%define %innamespace match$parentNode$nodeType="namespace" %enddef %define %innamespace match$parentNode$nodeType="namespace" %enddef
%define %ispublic match$access="public" %enddef %define %ispublic match$access="public" %enddef

View file

@ -278,6 +278,10 @@ static void add_symbols(Node *n) {
Symtab *old_scope = 0; Symtab *old_scope = 0;
int isfriend = inclass && is_friend(n); int isfriend = inclass && is_friend(n);
int iscdecl = Cmp(nodeType(n),"cdecl") == 0; int iscdecl = Cmp(nodeType(n),"cdecl") == 0;
if (extendmode) {
Setattr(n,"isextension","1");
}
if (inclass) { if (inclass) {
String *name = Getattr(n, k_name); String *name = Getattr(n, k_name);
if (isfriend) { if (isfriend) {
@ -356,31 +360,37 @@ static void add_symbols(Node *n) {
} }
decl = Getattr(n,k_decl); decl = Getattr(n,k_decl);
if (!SwigType_isfunction(decl)) { if (!SwigType_isfunction(decl)) {
String *name = Getattr(n,k_name);
String *makename = Getattr(n,"parser:makename"); String *makename = Getattr(n,"parser:makename");
if (iscdecl) { if (iscdecl) {
String *storage = Getattr(n, k_storage); String *storage = Getattr(n, k_storage);
if (Cmp(storage,"typedef") == 0) { if (Cmp(storage,"typedef") == 0) {
Setattr(n,k_kind,"typedef"); Setattr(n,k_kind,"typedef");
} else { } else {
SwigType *type = Getattr(n, k_type); SwigType *type = Getattr(n,"type");
String *value = Getattr(n,k_value); String *value = Getattr(n,k_value);
Setattr(n,k_kind,"variable"); Setattr(n,k_kind,"variable");
if (value && Len(value)) { if (value && Len(value)) {
Setattr(n,"hasvalue","1"); Setattr(n,"hasvalue","1");
} }
if (type && !SwigType_ismutable(type)) { if (type) {
SetFlag(n,"feature:immutable"); SwigType *rt = SwigType_typedef_resolve_all(type);
if (SwigType_isconst(rt)) {
SetFlag(n,"hasconsttype");
}
Delete(rt);
} }
if (!type) { if (!type) {
Printf(stderr,"notype name %s\n", Getattr(n,"name")); Printf(stderr,"notype name %s\n", name);
} }
} }
} }
Swig_features_get(Swig_cparse_features(), Namespaceprefix, name, 0, n);
if (makename) { if (makename) {
symname = make_name(n, makename,0); symname = make_name(n, makename,0);
Delattr(n,"parser:makename"); /* temporary information, don't leave it hanging around */ Delattr(n,"parser:makename"); /* temporary information, don't leave it hanging around */
} else { } else {
makename = Getattr(n,k_name); makename = name;
symname = make_name(n, makename,0); symname = make_name(n, makename,0);
} }
@ -389,19 +399,20 @@ static void add_symbols(Node *n) {
} }
if (symname) { if (symname) {
wrn = Swig_name_warning(n, Namespaceprefix, symname,0); wrn = Swig_name_warning(n, Namespaceprefix, symname,0);
Swig_features_get(Swig_cparse_features(), Namespaceprefix, Getattr(n,k_name), 0, n);
} }
} else { } else {
String *name = Getattr(n,k_name);
SwigType *fdecl = Copy(decl); SwigType *fdecl = Copy(decl);
SwigType *fun = SwigType_pop_function(fdecl); SwigType *fun = SwigType_pop_function(fdecl);
if (iscdecl) { if (iscdecl) {
Setattr(n,k_kind,"function"); Setattr(n,k_kind,"function");
} }
Swig_features_get(Swig_cparse_features(),Namespaceprefix,name,fun,n);
symname = make_name(n, Getattr(n,k_name),fun); symname = make_name(n, name,fun);
wrn = Swig_name_warning(n, Namespaceprefix,symname,fun); wrn = Swig_name_warning(n, Namespaceprefix,symname,fun);
Swig_features_get(Swig_cparse_features(),Namespaceprefix,Getattr(n,k_name),fun,n);
Delete(fdecl); Delete(fdecl);
Delete(fun); Delete(fun);
@ -2605,8 +2616,10 @@ template_directive: SWIGTEMPLATE LPAREN idstringopt RPAREN idcolonnt LESSTHAN va
Setattr(templnode,k_symtypename,"1"); Setattr(templnode,k_symtypename,"1");
} }
if ($3) { if ($3) {
Swig_cparse_template_expand(templnode,$3,temparms,tscope); String *symname = Swig_name_make(templnode,0,$3,0,0);
Setattr(templnode,k_symname,$3); Swig_cparse_template_expand(templnode,symname,temparms,tscope);
Setattr(templnode,k_symname,symname);
Delete(symname);
} else { } else {
static int cnt = 0; static int cnt = 0;
String *nname = NewStringf("__dummy_%d__", cnt++); String *nname = NewStringf("__dummy_%d__", cnt++);