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 *namebase = 0;
String *nameprefix = 0; String *nameprefix = 0;
int newtype = 0; int newtype = 0;
static String *noscope = 0;
/* /*
if (!noscope) { if (!noscope) {
@ -1247,10 +1246,11 @@ void SwigType_remember_clientdata(SwigType *t, const String_or_char *clientdata)
(*r_tracefunc)(t,mt, (String *) clientdata); (*r_tracefunc)(t,mt, (String *) clientdata);
} }
if (SwigType_istypedef(t)) if (SwigType_istypedef(t)) {
lt = Copy(t); lt = Copy(t);
else } else {
lt = SwigType_ltype(t); lt = SwigType_ltype(t);
}
Setattr(r_ltype, mt, lt); Setattr(r_ltype, mt, lt);
fr = SwigType_typedef_resolve_all(t); /* Create fully resolved type */ fr = SwigType_typedef_resolve_all(t); /* Create fully resolved type */
qr = SwigType_typedef_qualified(fr); 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)); 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 void