Fixed reference/pointer typedef problem.

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@4825 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Dave Beazley 2003-05-28 21:34:54 +00:00
commit c7480b9897

View file

@ -507,7 +507,6 @@ SwigType *SwigType_typedef_resolve(SwigType *t) {
String *namebase = 0;
String *nameprefix = 0;
int newtype = 0;
static String *noscope = 0;
/*
if (!noscope) {
@ -1247,10 +1246,11 @@ void SwigType_remember_clientdata(SwigType *t, const String_or_char *clientdata)
(*r_tracefunc)(t,mt, (String *) clientdata);
}
if (SwigType_istypedef(t))
if (SwigType_istypedef(t)) {
lt = Copy(t);
else
} else {
lt = SwigType_ltype(t);
}
Setattr(r_ltype, mt, lt);
fr = SwigType_typedef_resolve_all(t); /* Create fully resolved type */
qr = SwigType_typedef_qualified(fr);
@ -1296,6 +1296,17 @@ void SwigType_remember_clientdata(SwigType *t, const String_or_char *clientdata)
Setattr(r_clientdata, fr, NewString(clientdata));
}
}
/* If the remembered type is a reference, we also remember the pointer version.
This is to prevent odd problems with mixing pointers and references--especially
when different functions are using different typenames (via typedef). */
if (SwigType_isreference(t)) {
SwigType *tt = Copy(t);
SwigType_del_reference(tt);
SwigType_add_pointer(tt);
SwigType_remember_clientdata(tt,clientdata);
}
}
void