Remove accidental commit of CHANGES.current
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12350 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
1adc50e730
commit
babfccc072
2 changed files with 148 additions and 22 deletions
|
|
@ -5,28 +5,6 @@ See the RELEASENOTES file for a summary of changes in each release.
|
|||
Version 2.0.2 (in progress)
|
||||
===========================
|
||||
|
||||
2010-12-08: wsfulton
|
||||
The name mangling for some complex types was incorrect. This is now fixed and results
|
||||
in types being more interchangeable when there are typedefs involved.
|
||||
namespace foo {
|
||||
template<class T> class bar {};
|
||||
typedef int Integer;
|
||||
void test2(bar<Integer *> *x) { return x; }
|
||||
}
|
||||
The typewrapper class for x changes from
|
||||
SWIGTYPE_p_foo__barT_int_p_t to
|
||||
SWIGTYPE_p_foo__barT_p_int_t.
|
||||
|
||||
The name mangling involving qualifiers was not consistent, for example with the const qualifier in
|
||||
MyTemplate< const ::DD * > the type wrapper class changes from
|
||||
SWIGTYPE_p_MyTemplateT_DD_const_p_t to
|
||||
SWIGTYPE_p_MyTemplateT_p_q_const__DD_t
|
||||
|
||||
There a number of other subtle name mangling changes not listed. The runtime version
|
||||
has hence been changed from 4 to 5.
|
||||
|
||||
TODO: write a testcase in Java showing reference_type working or whatever I fixed in STL.
|
||||
|
||||
2010-12-14: wsfulton
|
||||
Fix $basemangle expansion in array typemaps. For example if type is int *[3],
|
||||
$basemangle expands to _p_int.
|
||||
|
|
|
|||
|
|
@ -900,6 +900,145 @@ String *SwigType_lcaststr(const SwigType *s, const_String_or_char_ptr name) {
|
|||
return result;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* Alternative implementation for manglestr_default. Mangling is similar to the original
|
||||
except for a few subtle differences for example in templates:
|
||||
namespace foo {
|
||||
template<class T> class bar {};
|
||||
typedef int Integer;
|
||||
void test2(bar<Integer *> *x);
|
||||
}
|
||||
Mangling is more consistent and changes from
|
||||
_p_foo__barT_int_p_t to
|
||||
_p_foo__barT_p_int_t.
|
||||
*/
|
||||
static void mangle_stringcopy(String *destination, const char *source, int count) {
|
||||
while (count-- > 0) {
|
||||
char newc = '_';
|
||||
if (!(*source == '.' || *source == ':' || *source == ' '))
|
||||
newc = *source;
|
||||
/* TODO: occasionally '*' or numerics need converting to '_', eg in array dimensions and template expressions */
|
||||
Putc(newc, destination);
|
||||
source++;
|
||||
}
|
||||
}
|
||||
|
||||
static void mangle_subtype(String *mangled, SwigType *s);
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* mangle_namestr()
|
||||
*
|
||||
* Mangles a type taking care of template expansions. Similar to SwigType_namestr().
|
||||
* The type may include a trailing '.', for example "p."
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
static void mangle_namestr(String *mangled, SwigType *t) {
|
||||
int length = Len(t);
|
||||
if (SwigType_isqualifier(t)) {
|
||||
Append(mangled, "q_");
|
||||
mangle_stringcopy(mangled, Char(t)+2, length-4);
|
||||
Append(mangled, "__");
|
||||
} else if (SwigType_ismemberpointer(t)) {
|
||||
Append(mangled, "m_");
|
||||
mangle_stringcopy(mangled, Char(t)+2, length-4);
|
||||
Append(mangled, "__");
|
||||
} else if (SwigType_isarray(t)) {
|
||||
Append(mangled, "a_");
|
||||
mangle_stringcopy(mangled, Char(t)+2, length-4);
|
||||
Append(mangled, "__");
|
||||
} else if (SwigType_isfunction(t)) {
|
||||
List *p = SwigType_parmlist(t);
|
||||
int sz = Len(p);
|
||||
int i;
|
||||
Append(mangled, "f_");
|
||||
for (i = 0; i < sz; i++) {
|
||||
mangle_subtype(mangled, Getitem(p, i));
|
||||
Putc('_', mangled);
|
||||
}
|
||||
Append(mangled, (sz > 0) ? "_" : "__");
|
||||
} else if (SwigType_isvarargs(t)) {
|
||||
Append(mangled, "___");
|
||||
} else {
|
||||
char *d = Char(t);
|
||||
char *c = strstr(d, "<(");
|
||||
if (!c || !strstr(c + 2, ")>")) {
|
||||
/* not a template type */
|
||||
mangle_stringcopy(mangled, Char(t), Len(t));
|
||||
} else {
|
||||
/* a template type */
|
||||
String *suffix;
|
||||
List *p;
|
||||
int i, sz;
|
||||
mangle_stringcopy(mangled, d, c-d);
|
||||
Putc('T', mangled);
|
||||
Putc('_', mangled);
|
||||
|
||||
p = SwigType_parmlist(c + 1);
|
||||
sz = Len(p);
|
||||
for (i = 0; i < sz; i++) {
|
||||
mangle_subtype(mangled, Getitem(p, i));
|
||||
Putc('_', mangled);
|
||||
}
|
||||
Putc('t', mangled);
|
||||
suffix = SwigType_templatesuffix(t);
|
||||
if (Len(suffix) > 0) {
|
||||
mangle_namestr(mangled, suffix);
|
||||
} else {
|
||||
Append(mangled, suffix);
|
||||
}
|
||||
Delete(suffix);
|
||||
Delete(p);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void mangle_subtype(String *mangled, SwigType *s) {
|
||||
List *elements;
|
||||
int nelements, i;
|
||||
|
||||
assert(s);
|
||||
elements = SwigType_split(s);
|
||||
nelements = Len(elements);
|
||||
for (i = 0; i < nelements; i++) {
|
||||
SwigType *element = Getitem(elements, i);
|
||||
mangle_namestr(mangled, element);
|
||||
}
|
||||
Delete(elements);
|
||||
}
|
||||
|
||||
static String *manglestr_default(const SwigType *s) {
|
||||
String *mangled = NewString("_");
|
||||
SwigType *sr = SwigType_typedef_resolve_all(s);
|
||||
SwigType *sq = SwigType_typedef_qualified(sr);
|
||||
SwigType *ss = SwigType_remove_global_scope_prefix(sq);
|
||||
SwigType *type = ss;
|
||||
SwigType *lt;
|
||||
|
||||
if (SwigType_istemplate(ss)) {
|
||||
SwigType *ty = Swig_symbol_template_deftype(ss, 0);
|
||||
Delete(ss);
|
||||
ss = ty;
|
||||
type = ss;
|
||||
}
|
||||
|
||||
lt = SwigType_ltype(type);
|
||||
|
||||
Replace(lt, "struct ", "", DOH_REPLACE_ANY);
|
||||
Replace(lt, "class ", "", DOH_REPLACE_ANY);
|
||||
Replace(lt, "union ", "", DOH_REPLACE_ANY);
|
||||
Replace(lt, "enum ", "", DOH_REPLACE_ANY);
|
||||
|
||||
mangle_subtype(mangled, lt);
|
||||
|
||||
Delete(ss);
|
||||
Delete(sq);
|
||||
Delete(sr);
|
||||
|
||||
return mangled;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
static String *manglestr_default(const SwigType *s) {
|
||||
char *c;
|
||||
String *result = 0;
|
||||
|
|
@ -969,8 +1108,17 @@ static String *manglestr_default(const SwigType *s) {
|
|||
Delete(sr);
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
String *SwigType_manglestr(const SwigType *s) {
|
||||
#if 0
|
||||
/* Debugging checks to ensure a proper SwigType is passed in and not a stringified type */
|
||||
String *angle = Strstr(s, "<");
|
||||
if (angle && Strncmp(angle, "<(", 2) != 0)
|
||||
Printf(stderr, "SwigType_manglestr error: %s\n", s);
|
||||
else if (Strstr(s, "*") || Strstr(s, "&") || Strstr(s, "["))
|
||||
Printf(stderr, "SwigType_manglestr error: %s\n", s);
|
||||
#endif
|
||||
return manglestr_default(s);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue