fixes for directors and default arguments in the constructor

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@6468 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
William S Fulton 2004-10-21 18:16:21 +00:00
commit cd22d76972
7 changed files with 26 additions and 68 deletions

View file

@ -1890,20 +1890,14 @@ public:
String *classname = NewString("");
Printf(classname, "SwigDirector_%s", supername);
/* insert self and disown parameters */
Parm *p, *ip;
/* insert self parameter */
Parm *p;
ParmList *superparms = Getattr(n, "parms");
ParmList *parms = CopyParmList(superparms);
String *type = NewString("VALUE");
p = NewParm(type, NewString("self"));
set_nextSibling(p, parms);
parms = p;
for (ip = parms; nextSibling(ip); ) ip = nextSibling(ip);
p = NewParm(NewString("bool"), NewString("disown"));
Setattr(p, "arg:byname", "1");
Setattr(n, "director:postfix_args", p);
Setattr(p, "value", "false");
set_nextSibling(ip, p);
if (!Getattr(n,"defaultargs")) {
/* constructor */
@ -1913,7 +1907,7 @@ public:
String *basetype = Getattr(parent, "classtype");
String *target = Swig_method_decl(decl, classname, parms, 0, 0);
call = Swig_csuperclass_call(0, basetype, superparms);
Printf(w->def, "%s::%s: %s, Swig::Director(self, disown) { }", classname, target, call);
Printf(w->def, "%s::%s: %s, Swig::Director(self) { }", classname, target, call);
Delete(target);
Wrapper_print(w, f_directors);
Delete(call);
@ -1935,15 +1929,19 @@ public:
return Language::classDirectorConstructor(n);
}
/* ------------------------------------------------------------
* classDirectorDefaultConstructor()
* ------------------------------------------------------------ */
virtual int classDirectorDefaultConstructor(Node *n) {
String *classname;
Wrapper *w;
classname = Swig_class_name(n);
w = NewWrapper();
Printf(w->def, "SwigDirector_%s::SwigDirector_%s(VALUE self, bool disown) : Swig::Director(self, disown) { }", classname, classname);
Printf(w->def, "SwigDirector_%s::SwigDirector_%s(VALUE self) : Swig::Director(self) { }", classname, classname);
Wrapper_print(w, f_directors);
DelWrapper(w);
Printf(f_directors_h, " SwigDirector_%s(VALUE self, bool disown = true);\n", classname);
Printf(f_directors_h, " SwigDirector_%s(VALUE self);\n", classname);
Delete(classname);
return Language::classDirectorDefaultConstructor(n);
}