From d5cf7892d5e8582ffbd1554428107a04df94c9f8 Mon Sep 17 00:00:00 2001 From: Marcelo Matus Date: Fri, 30 Dec 2005 00:00:32 +0000 Subject: [PATCH] fix features/rename for template constructors/destructors git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@8127 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- SWIG/Source/Swig/naming.c | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/SWIG/Source/Swig/naming.c b/SWIG/Source/Swig/naming.c index f4258fbea..835732b1f 100644 --- a/SWIG/Source/Swig/naming.c +++ b/SWIG/Source/Swig/naming.c @@ -18,7 +18,7 @@ char cvsroot_naming_c[] = "$Header$"; static Hash *naming_hash = 0; -/* #define SWIG_DEBUG */ +/* #define SWIG_DEBUG */ /* ----------------------------------------------------------------------------- * Swig_name_register() * @@ -460,7 +460,6 @@ Swig_name_object_get(Hash *namehash, String *prefix, String *name, SwigType *dec } */ - /* Perform a class-based lookup (if class prefix supplied) */ if (prefix) { if (Len(prefix)) { @@ -476,11 +475,21 @@ Swig_name_object_get(Hash *namehash, String *prefix, String *name, SwigType *dec } Delete(cls); } + /* A template-based class lookup, check name first */ + if (!rn && SwigType_istemplate(name)) { + String *tname = SwigType_templateprefix(name); + if (Strcmp(tname,name) != 0) { + rn = Swig_name_object_get(namehash, prefix, tname, decl); + } + Delete(tname); + } /* A template-based class lookup */ if (!rn && SwigType_istemplate(prefix)) { String *tprefix = SwigType_templateprefix(prefix); if (Strcmp(tprefix,prefix) != 0) { - rn = Swig_name_object_get(namehash, tprefix, name, decl); + String *tname = SwigType_templateprefix(name); + rn = Swig_name_object_get(namehash, tprefix, tname, decl); + Delete(tname); } Delete(tprefix); } @@ -608,7 +617,21 @@ Swig_features_get(Hash *features, String *prefix, String *name, SwigType *decl, if (name && SwigType_istemplate(name) && ((Strcmp(nodeType(node),"constructor") == 0) || (Strcmp(nodeType(node),"destructor") == 0))) { - rname = SwigType_templateprefix(name); + String *prefix = NewStringEmpty(); + String *last = NewStringEmpty(); + String *tprefix; + Swig_scopename_split(name, &prefix, &last); + tprefix = SwigType_templateprefix(last); + Delete(last); + if (Len(prefix)) { + Append(prefix,"::"); + Append(prefix,tprefix); + Delete(tprefix); + rname = prefix; + } else { + rname = tprefix; + Delete(prefix); + } rdecl = Copy(decl); Replaceall(rdecl,name,rname); decl = rdecl;