avoid using of temporal value for wrapping type user + const reference argument
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@6895 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
e67b13b202
commit
aa048182d7
2 changed files with 31 additions and 2 deletions
|
|
@ -52,3 +52,23 @@
|
||||||
|
|
||||||
%template(templatedfunction) templatedfunction<int>;
|
%template(templatedfunction) templatedfunction<int>;
|
||||||
|
|
||||||
|
|
||||||
|
// Deafult args with references
|
||||||
|
%inline
|
||||||
|
%{
|
||||||
|
|
||||||
|
typedef int size_type;
|
||||||
|
|
||||||
|
struct Hello
|
||||||
|
{
|
||||||
|
static const size_type hello = 3;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int rfoo( const size_type& x = Hello::hello, const Hello& y = Hello() )
|
||||||
|
{
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
%}
|
||||||
|
|
|
||||||
|
|
@ -173,15 +173,24 @@ int Swig_cargs(Wrapper *w, ParmList *p) {
|
||||||
if (tycode == T_REFERENCE) {
|
if (tycode == T_REFERENCE) {
|
||||||
if (pvalue) {
|
if (pvalue) {
|
||||||
SwigType *tvalue;
|
SwigType *tvalue;
|
||||||
String *defname, *defvalue, *rvalue;
|
String *defname, *defvalue, *rvalue, *qvalue;
|
||||||
rvalue = SwigType_typedef_resolve_all(pvalue);
|
rvalue = SwigType_typedef_resolve_all(pvalue);
|
||||||
|
qvalue = SwigType_typedef_qualified(rvalue);
|
||||||
defname = NewStringf("%s_defvalue", lname);
|
defname = NewStringf("%s_defvalue", lname);
|
||||||
tvalue = Copy(type);
|
tvalue = Copy(type);
|
||||||
SwigType_del_reference(tvalue);
|
SwigType_del_reference(tvalue);
|
||||||
defvalue = NewStringf("%s = %s", SwigType_lstr(tvalue,defname), rvalue);
|
tycode = SwigType_type(tvalue);
|
||||||
|
if (tycode != T_USER) {
|
||||||
|
/* plain primitive type, we copy the the def value */
|
||||||
|
defvalue = NewStringf("%s = %s", SwigType_lstr(tvalue,defname),qvalue);
|
||||||
|
} else {
|
||||||
|
/* user type, we copy the reference value */
|
||||||
|
defvalue = NewStringf("%s = %s",SwigType_str(type,defname),qvalue);
|
||||||
|
}
|
||||||
Wrapper_add_localv(w,defname, defvalue, NIL);
|
Wrapper_add_localv(w,defname, defvalue, NIL);
|
||||||
Delete(tvalue);
|
Delete(tvalue);
|
||||||
Delete(rvalue);
|
Delete(rvalue);
|
||||||
|
Delete(qvalue);
|
||||||
Delete(defname);
|
Delete(defname);
|
||||||
Delete(defvalue);
|
Delete(defvalue);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue