From 640d60c198aa0282727f32297b1069c2a4e7adcb Mon Sep 17 00:00:00 2001 From: Marcelo Matus Date: Mon, 9 Jan 2006 17:43:46 +0000 Subject: [PATCH] make both %rename directive formats equivalent git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@8320 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- SWIG/Source/CParse/parser.y | 69 +++++++++++++++++++++++++++---------- 1 file changed, 51 insertions(+), 18 deletions(-) diff --git a/SWIG/Source/CParse/parser.y b/SWIG/Source/CParse/parser.y index 4d3e7f54a..a04f645eb 100644 --- a/SWIG/Source/CParse/parser.y +++ b/SWIG/Source/CParse/parser.y @@ -2043,21 +2043,54 @@ pragma_lang : LPAREN ID RPAREN { $$ = $2; } ------------------------------------------------------------ */ rename_directive : rename_namewarn declarator idstring SEMI { - SwigType *t = $2.type; - Hash *kws = NewHash(); - Setattr(kws,k_name,$3); - - if (!Len(t)) t = 0; - if ($1) { - Swig_name_rename_add(Namespaceprefix,$2.id,t,kws,$2.parms); + SwigType *t = $2.type; + Hash *kws = NewHash(); + String *fixname; + fixname = feature_identifier_fix($2.id); + Setattr(kws,k_name,$3); + if (!Len(t)) t = 0; + /* Special declarator check */ + if (t) { + if (SwigType_isfunction(t)) { + SwigType *decl = SwigType_pop_function(t); + if (SwigType_ispointer(t)) { + String *nname = NewStringf("*%s",fixname); + if ($1) { + Swig_name_rename_add(Namespaceprefix, nname,decl,kws,$2.parms); + } else { + Swig_name_namewarn_add(Namespaceprefix,nname,decl,kws); + } + Delete(nname); } else { - Swig_name_namewarn_add(Namespaceprefix,$2.id,t,kws); + if ($1) { + Swig_name_rename_add(Namespaceprefix,(fixname),decl,kws,$2.parms); + } else { + Swig_name_namewarn_add(Namespaceprefix,(fixname),decl,kws); + } } - $$ = 0; - scanner_clear_rename(); + Delete(decl); + } else if (SwigType_ispointer(t)) { + String *nname = NewStringf("*%s",fixname); + if ($1) { + Swig_name_rename_add(Namespaceprefix,(nname),0,kws,$2.parms); + } else { + Swig_name_namewarn_add(Namespaceprefix,(nname),0,kws); + } + Delete(nname); + } + } else { + if ($1) { + Swig_name_rename_add(Namespaceprefix,(fixname),0,kws,$2.parms); + } else { + Swig_name_namewarn_add(Namespaceprefix,(fixname),0,kws); + } + } + $$ = 0; + scanner_clear_rename(); } | rename_namewarn LPAREN kwargs RPAREN declarator cpp_const SEMI { String *fixname; + Hash *kws = $3; SwigType *t = $5.type; fixname = feature_identifier_fix($5.id); if (!Len(t)) t = 0; @@ -2069,33 +2102,33 @@ rename_directive : rename_namewarn declarator idstring SEMI { if (SwigType_ispointer(t)) { String *nname = NewStringf("*%s",fixname); if ($1) { - Swig_name_rename_add(Namespaceprefix, nname,decl,$3,$5.parms); + Swig_name_rename_add(Namespaceprefix, nname,decl,kws,$5.parms); } else { - Swig_name_namewarn_add(Namespaceprefix,nname,decl,$3); + Swig_name_namewarn_add(Namespaceprefix,nname,decl,kws); } Delete(nname); } else { if ($1) { - Swig_name_rename_add(Namespaceprefix,(fixname),decl,$3,$5.parms); + Swig_name_rename_add(Namespaceprefix,(fixname),decl,kws,$5.parms); } else { - Swig_name_namewarn_add(Namespaceprefix,(fixname),decl,$3); + Swig_name_namewarn_add(Namespaceprefix,(fixname),decl,kws); } } Delete(decl); } else if (SwigType_ispointer(t)) { String *nname = NewStringf("*%s",fixname); if ($1) { - Swig_name_rename_add(Namespaceprefix,(nname),0,$3,$5.parms); + Swig_name_rename_add(Namespaceprefix,(nname),0,kws,$5.parms); } else { - Swig_name_namewarn_add(Namespaceprefix,(nname),0,$3); + Swig_name_namewarn_add(Namespaceprefix,(nname),0,kws); } Delete(nname); } } else { if ($1) { - Swig_name_rename_add(Namespaceprefix,(fixname),0,$3,$5.parms); + Swig_name_rename_add(Namespaceprefix,(fixname),0,kws,$5.parms); } else { - Swig_name_namewarn_add(Namespaceprefix,(fixname),0,$3); + Swig_name_namewarn_add(Namespaceprefix,(fixname),0,kws); } } $$ = 0;