add more rename predicates

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@8435 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Marcelo Matus 2006-01-14 21:23:57 +00:00
commit 59690474bf
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 %isvariable match$kind="variable" %enddef
%define %isimmutable "match$feature:immutable"="1" %enddef
%define %hasconsttype match$hasconsttype="1" %enddef
%define %hasvalue match$hasvalue="1" %enddef
%define %isextension match$isextension="1" %enddef
%define %isstatic match$storage="static" %enddef
%define %isfriend match$storage="friend" %enddef
@ -256,7 +258,7 @@ static int NAME(TYPE x) {
%define %isextern match$storage="extern" %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 %ispublic match$access="public" %enddef

View file

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