%extend and default args fixes
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@6366 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
89207a4952
commit
dc85fd5f30
1 changed files with 20 additions and 11 deletions
|
|
@ -1092,7 +1092,6 @@ Language::staticmemberfunctionHandler(Node *n) {
|
||||||
String *symname = Getattr(n,"sym:name");
|
String *symname = Getattr(n,"sym:name");
|
||||||
SwigType *type = Getattr(n,"type");
|
SwigType *type = Getattr(n,"type");
|
||||||
ParmList *parms = Getattr(n,"parms");
|
ParmList *parms = Getattr(n,"parms");
|
||||||
String *code = Getattr(n,"code");
|
|
||||||
String *cb = Getattr(n,"feature:callback");
|
String *cb = Getattr(n,"feature:callback");
|
||||||
String *cname, *mrename;
|
String *cname, *mrename;
|
||||||
|
|
||||||
|
|
@ -1108,18 +1107,28 @@ Language::staticmemberfunctionHandler(Node *n) {
|
||||||
}
|
}
|
||||||
mrename = Swig_name_member(ClassPrefix, symname);
|
mrename = Swig_name_member(ClassPrefix, symname);
|
||||||
|
|
||||||
|
if (Extend) {
|
||||||
|
String *code = Getattr(n,"code");
|
||||||
|
String *defaultargs = Getattr(n,"defaultargs");
|
||||||
|
String *mangled = Swig_name_mangle(mrename);
|
||||||
|
Delete(mrename);
|
||||||
|
mrename = mangled;
|
||||||
|
|
||||||
|
if (!defaultargs && code) {
|
||||||
|
/* Hmmm. An added static member. We have to create a little wrapper for this */
|
||||||
|
String *body;
|
||||||
|
String *tmp = NewStringf("%s(%s)", cname, ParmList_str_defaultargs(parms));
|
||||||
|
body = SwigType_str(type,tmp);
|
||||||
|
Printv(body,code,"\n",NIL);
|
||||||
|
Setattr(n,"wrap:code",body);
|
||||||
|
Delete(tmp);
|
||||||
|
Delete(body);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Setattr(n,"name",cname);
|
Setattr(n,"name",cname);
|
||||||
Setattr(n,"sym:name",mrename);
|
Setattr(n,"sym:name",mrename);
|
||||||
|
|
||||||
if ((Extend) && (code)) {
|
|
||||||
/* Hmmm. An added static member. We have to create a little wrapper for this */
|
|
||||||
String *tmp = NewStringf("%s(%s)", cname, ParmList_str(parms));
|
|
||||||
String *wrap = SwigType_str(type,tmp);
|
|
||||||
Printv(wrap,code,"\n",NIL);
|
|
||||||
Setattr(n,"wrap:code",wrap);
|
|
||||||
Delete(tmp);
|
|
||||||
Delete(wrap);
|
|
||||||
}
|
|
||||||
if (cb) {
|
if (cb) {
|
||||||
String *cbname = NewStringf(cb,symname);
|
String *cbname = NewStringf(cb,symname);
|
||||||
Setattr(n,"feature:callback:name", Swig_name_member(ClassPrefix, cbname));
|
Setattr(n,"feature:callback:name", Swig_name_member(ClassPrefix, cbname));
|
||||||
|
|
@ -2295,7 +2304,7 @@ int Language::functionWrapper(Node *n) {
|
||||||
SwigType *type = Getattr(n,"type");
|
SwigType *type = Getattr(n,"type");
|
||||||
ParmList *parms = Getattr(n,"parms");
|
ParmList *parms = Getattr(n,"parms");
|
||||||
|
|
||||||
Printf(stdout,"functionWrapper : %s\n", SwigType_str(type, NewStringf("%s(%s)", name, ParmList_str(parms))));
|
Printf(stdout,"functionWrapper : %s\n", SwigType_str(type, NewStringf("%s(%s)", name, ParmList_str_defaultargs(parms))));
|
||||||
Printf(stdout," action : %s\n", Getattr(n,"wrap:action"));
|
Printf(stdout," action : %s\n", Getattr(n,"wrap:action"));
|
||||||
return SWIG_OK;
|
return SWIG_OK;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue