[C++-sig] pyplusplus template instantiation handling improvement
Roman Yakovenko
roman.yakovenko at gmail.com
Sun May 14 11:12:20 CEST 2006
Hi. I committed a set of changes, that improves pyplusplus template
instantiation
handling. In order to try them you need SVN version of gccxml + pygccxml +
pyplusplus.
You can find more information about pygccxml and pyplusplus here:
http://www.language-binding.net/
Examples
1. you have some template global function do_smth
template< class X >
struct basic_string{};
template< class Ch >
basic_string<Ch> do_smth(){
return basic_string<Ch>();
}
inline void inst(){
do_smth<wchar_t>();
do_smth<char>();
}
gccxml reports that there are 2 functions with the same name - do_smth and
different return types. Obviously this is wrong. This fact causes pyplusplus to
generate wrong code( code, that could not be compiled ).
Another example is class templates:
namespace demangled{
template< unsigned long i1, unsigned long i2, unsigned long i3>
struct item_t{
static const unsigned long v1 = i1;
static const unsigned long v2 = i2;
static const unsigned long v3 = i3;
};
struct buggy{
typedef unsigned long ulong;
typedef item_t< ulong( 0xDEECE66DUL ) | (ulong(0x5) << 32), 0xB,
ulong(1) << 31 >
my_item_t;
my_item_t my_item_var;
};
}
gccxml reports my_item_var class name as "item_t<0deece66d,11,080000000>"
Obviously the reported name is wrong.
Now about solution:
Recently I created a patch to gccxml, that adds demangled string to be dump
to generated file. gccxml already dumps mangled string for every declaration.
For example the mangled name of my_item_t class is:
N9demangled6item_tILm3740067437ELm11ELm2147483648EEE
If we demangle the string we will get:
demangled::item_t<3740067437l, 11l, 2147483648l>
As you can see, mangled string contains the correct name of the class.
So, from now pygccxml + pyplusplus takes into account information extracted
from demangled string.
Enjoy
--
Roman Yakovenko
C++ Python language binding
http://www.language-binding.net/
More information about the Cplusplus-sig
mailing list