From 23d9abf135bbc41ef2dce8da79dadc64d2f9d630 Mon Sep 17 00:00:00 2001 From: Marcelo Matus Date: Mon, 20 Mar 2006 00:14:24 +0000 Subject: [PATCH] fix template + enum issue reported by James Bigler git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@9018 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- Examples/test-suite/template_enum.i | 26 ++++++++++++++++++++++++++ Source/Swig/symbol.c | 5 +++++ Source/Swig/typeobj.c | 12 +++++++++++- 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/Examples/test-suite/template_enum.i b/Examples/test-suite/template_enum.i index 46a92facd..0d6fbf5b9 100644 --- a/Examples/test-suite/template_enum.i +++ b/Examples/test-suite/template_enum.i @@ -13,3 +13,29 @@ public: %template(foo_i) foo; %template(foo_d) foo; + +%inline { + +namespace Manta { + template class ColorSpace { + public: + typedef typename Traits::ComponentType ComponentType; + enum { NumComponents = Traits::NumComponents}; + + ComponentType data[NumComponents]; + }; +} + +namespace Manta { + class RGBTraits { + public: + typedef float ComponentType; + enum {NumComponents = 3}; + }; +} +} + + +namespace Manta { + %template(Color) ColorSpace; +}; diff --git a/Source/Swig/symbol.c b/Source/Swig/symbol.c index 31a68e215..248180ff3 100644 --- a/Source/Swig/symbol.c +++ b/Source/Swig/symbol.c @@ -1415,6 +1415,11 @@ Swig_symbol_type_qualify(const SwigType *t, Symtab *st) { List *elements; String *result = NewStringEmpty(); int i,len; + char *c = Char(t); + if (strncmp(c,"::",2) == 0) { + StringAppend(result, t); + return result; + } elements = SwigType_split(t); diff --git a/Source/Swig/typeobj.c b/Source/Swig/typeobj.c index 24c92f800..f8b73c494 100644 --- a/Source/Swig/typeobj.c +++ b/Source/Swig/typeobj.c @@ -595,7 +595,17 @@ SwigType_array_getdim(SwigType *t, int n) { c++; n--; } - if (n == 0) return SwigType_parm(c); + if (n == 0) { + String *dim = SwigType_parm(c); + if (SwigType_istemplate(dim)) { + String *ndim = SwigType_namestr(dim); + Delete(dim); + dim = ndim; + } + + return dim; + } + return 0; }