fixes for directors and default arguments in the constructor
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@6468 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
b7d96fdf23
commit
79bec67051
7 changed files with 26 additions and 68 deletions
|
|
@ -86,7 +86,7 @@ namespace Swig {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/* wrap a ocaml object, optionally taking ownership */
|
/* wrap a ocaml object, optionally taking ownership */
|
||||||
Director(CAML_VALUE self, bool disown = false) : swig_self(self), swig_disown_flag(disown), swig_up( false ) {
|
Director(CAML_VALUE self) : swig_self(self), swig_disown_flag(false), swig_up( false ) {
|
||||||
register_global_root(&swig_self);
|
register_global_root(&swig_self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,7 @@ namespace Swig {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/* wrap a python object, optionally taking ownership */
|
/* wrap a python object, optionally taking ownership */
|
||||||
Director(PyObject* self, bool disown) : swig_self(self), swig_disown_flag(disown) {
|
Director(PyObject* self) : swig_self(self), swig_disown_flag(false) {
|
||||||
swig_incref();
|
swig_incref();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -103,7 +103,7 @@ namespace Swig {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/* wrap a Ruby object, optionally taking ownership */
|
/* wrap a Ruby object, optionally taking ownership */
|
||||||
Director(VALUE self, bool disown) : swig_self(self), swig_disown_flag(disown) {
|
Director(VALUE self) : swig_self(self), swig_disown_flag(false) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* discard our reference at destruction */
|
/* discard our reference at destruction */
|
||||||
|
|
|
||||||
|
|
@ -1782,8 +1782,8 @@ public:
|
||||||
String *classname = NewString("");
|
String *classname = NewString("");
|
||||||
Printf(classname, "SwigDirector_%s", supername);
|
Printf(classname, "SwigDirector_%s", supername);
|
||||||
|
|
||||||
/* insert self and disown parameters */
|
/* insert self parameter */
|
||||||
Parm *p, *q, *ip;
|
Parm *p, *q;
|
||||||
ParmList *superparms = Getattr(n, "parms");
|
ParmList *superparms = Getattr(n, "parms");
|
||||||
ParmList *parms = CopyParmList(superparms);
|
ParmList *parms = CopyParmList(superparms);
|
||||||
String *type = NewString("CAML_VALUE");
|
String *type = NewString("CAML_VALUE");
|
||||||
|
|
@ -1792,12 +1792,6 @@ public:
|
||||||
set_nextSibling(q, superparms);
|
set_nextSibling(q, superparms);
|
||||||
set_nextSibling(p, parms);
|
set_nextSibling(p, parms);
|
||||||
parms = p;
|
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", "0");
|
|
||||||
set_nextSibling(ip, p);
|
|
||||||
|
|
||||||
if (!Getattr(n,"defaultargs")) {
|
if (!Getattr(n,"defaultargs")) {
|
||||||
/* constructor */
|
/* constructor */
|
||||||
|
|
@ -1807,9 +1801,7 @@ public:
|
||||||
String *basetype = Getattr(parent, "classtype");
|
String *basetype = Getattr(parent, "classtype");
|
||||||
String *target = Swig_method_decl(decl, classname, parms, 0, 0);
|
String *target = Swig_method_decl(decl, classname, parms, 0, 0);
|
||||||
call = Swig_csuperclass_call(0, basetype, superparms);
|
call = Swig_csuperclass_call(0, basetype, superparms);
|
||||||
Printf( w->def,
|
Printf( w->def, "%s::%s: %s, Swig::Director(self) { }", classname, target, call );
|
||||||
"%s::%s: %s, Swig::Director(self, disown) { }",
|
|
||||||
classname, target, call );
|
|
||||||
Delete(target);
|
Delete(target);
|
||||||
Wrapper_print(w, f_directors);
|
Wrapper_print(w, f_directors);
|
||||||
Delete(call);
|
Delete(call);
|
||||||
|
|
@ -1843,8 +1835,8 @@ public:
|
||||||
String *classname;
|
String *classname;
|
||||||
classname = Swig_class_name(n);
|
classname = Swig_class_name(n);
|
||||||
|
|
||||||
/* insert self and disown parameters */
|
/* insert self parameter */
|
||||||
Parm *p, *q, *ip;
|
Parm *p, *q;
|
||||||
ParmList *superparms = Getattr(n, "parms");
|
ParmList *superparms = Getattr(n, "parms");
|
||||||
ParmList *parms = CopyParmList(superparms);
|
ParmList *parms = CopyParmList(superparms);
|
||||||
String *type = NewString("CAML_VALUE");
|
String *type = NewString("CAML_VALUE");
|
||||||
|
|
@ -1852,20 +1844,14 @@ public:
|
||||||
q = Copy(p);
|
q = Copy(p);
|
||||||
set_nextSibling(p, parms);
|
set_nextSibling(p, parms);
|
||||||
parms = p;
|
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", "0");
|
|
||||||
set_nextSibling(ip, p);
|
|
||||||
|
|
||||||
{
|
{
|
||||||
Wrapper *w = NewWrapper();
|
Wrapper *w = NewWrapper();
|
||||||
Printf(w->def, "SwigDirector_%s::SwigDirector_%s(CAML_VALUE self, bool disown) : Swig::Director(self, disown) { }", classname, classname);
|
Printf(w->def, "SwigDirector_%s::SwigDirector_%s(CAML_VALUE self) : Swig::Director(self) { swig_disown(); }", classname, classname);
|
||||||
Wrapper_print(w, f_directors);
|
Wrapper_print(w, f_directors);
|
||||||
DelWrapper(w);
|
DelWrapper(w);
|
||||||
}
|
}
|
||||||
Printf(f_directors_h, " SwigDirector_%s(CAML_VALUE self, bool disown = true);\n", classname);
|
Printf(f_directors_h, " SwigDirector_%s(CAML_VALUE self);\n", classname);
|
||||||
Delete(classname);
|
Delete(classname);
|
||||||
Setattr(n,"parms",q);
|
Setattr(n,"parms",q);
|
||||||
return Language::classDirectorDefaultConstructor(n);
|
return Language::classDirectorDefaultConstructor(n);
|
||||||
|
|
|
||||||
|
|
@ -1696,8 +1696,8 @@ public:
|
||||||
String *classname = NewString("");
|
String *classname = NewString("");
|
||||||
Printf(classname, "SwigDirector_%s", supername);
|
Printf(classname, "SwigDirector_%s", supername);
|
||||||
|
|
||||||
/* insert self and disown parameters */
|
/* insert self parameter */
|
||||||
Parm *p, *ip;
|
Parm *p;
|
||||||
ParmList *superparms = Getattr(n, "parms");
|
ParmList *superparms = Getattr(n, "parms");
|
||||||
ParmList *parms = CopyParmList(superparms);
|
ParmList *parms = CopyParmList(superparms);
|
||||||
String *type = NewString("PyObject");
|
String *type = NewString("PyObject");
|
||||||
|
|
@ -1705,12 +1705,6 @@ public:
|
||||||
p = NewParm(type, NewString("self"));
|
p = NewParm(type, NewString("self"));
|
||||||
set_nextSibling(p, parms);
|
set_nextSibling(p, parms);
|
||||||
parms = p;
|
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")) {
|
if (!Getattr(n,"defaultargs")) {
|
||||||
/* constructor */
|
/* constructor */
|
||||||
|
|
@ -1720,7 +1714,7 @@ public:
|
||||||
String *basetype = Getattr(parent, "classtype");
|
String *basetype = Getattr(parent, "classtype");
|
||||||
String *target = Swig_method_decl(decl, classname, parms, 0, 0);
|
String *target = Swig_method_decl(decl, classname, parms, 0, 0);
|
||||||
call = Swig_csuperclass_call(0, basetype, superparms);
|
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);
|
Delete(target);
|
||||||
Wrapper_print(w, f_directors);
|
Wrapper_print(w, f_directors);
|
||||||
Delete(call);
|
Delete(call);
|
||||||
|
|
@ -1751,11 +1745,11 @@ public:
|
||||||
classname = Swig_class_name(n);
|
classname = Swig_class_name(n);
|
||||||
{
|
{
|
||||||
Wrapper *w = NewWrapper();
|
Wrapper *w = NewWrapper();
|
||||||
Printf(w->def, "SwigDirector_%s::SwigDirector_%s(PyObject* self, bool disown) : Swig::Director(self, disown) { }", classname, classname);
|
Printf(w->def, "SwigDirector_%s::SwigDirector_%s(PyObject* self) : Swig::Director(self) { }", classname, classname);
|
||||||
Wrapper_print(w, f_directors);
|
Wrapper_print(w, f_directors);
|
||||||
DelWrapper(w);
|
DelWrapper(w);
|
||||||
}
|
}
|
||||||
Printf(f_directors_h, " SwigDirector_%s(PyObject* self, bool disown = false);\n", classname);
|
Printf(f_directors_h, " SwigDirector_%s(PyObject* self);\n", classname);
|
||||||
Delete(classname);
|
Delete(classname);
|
||||||
return Language::classDirectorDefaultConstructor(n);
|
return Language::classDirectorDefaultConstructor(n);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1890,20 +1890,14 @@ public:
|
||||||
String *classname = NewString("");
|
String *classname = NewString("");
|
||||||
Printf(classname, "SwigDirector_%s", supername);
|
Printf(classname, "SwigDirector_%s", supername);
|
||||||
|
|
||||||
/* insert self and disown parameters */
|
/* insert self parameter */
|
||||||
Parm *p, *ip;
|
Parm *p;
|
||||||
ParmList *superparms = Getattr(n, "parms");
|
ParmList *superparms = Getattr(n, "parms");
|
||||||
ParmList *parms = CopyParmList(superparms);
|
ParmList *parms = CopyParmList(superparms);
|
||||||
String *type = NewString("VALUE");
|
String *type = NewString("VALUE");
|
||||||
p = NewParm(type, NewString("self"));
|
p = NewParm(type, NewString("self"));
|
||||||
set_nextSibling(p, parms);
|
set_nextSibling(p, parms);
|
||||||
parms = p;
|
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")) {
|
if (!Getattr(n,"defaultargs")) {
|
||||||
/* constructor */
|
/* constructor */
|
||||||
|
|
@ -1913,7 +1907,7 @@ public:
|
||||||
String *basetype = Getattr(parent, "classtype");
|
String *basetype = Getattr(parent, "classtype");
|
||||||
String *target = Swig_method_decl(decl, classname, parms, 0, 0);
|
String *target = Swig_method_decl(decl, classname, parms, 0, 0);
|
||||||
call = Swig_csuperclass_call(0, basetype, superparms);
|
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);
|
Delete(target);
|
||||||
Wrapper_print(w, f_directors);
|
Wrapper_print(w, f_directors);
|
||||||
Delete(call);
|
Delete(call);
|
||||||
|
|
@ -1935,15 +1929,19 @@ public:
|
||||||
return Language::classDirectorConstructor(n);
|
return Language::classDirectorConstructor(n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------
|
||||||
|
* classDirectorDefaultConstructor()
|
||||||
|
* ------------------------------------------------------------ */
|
||||||
|
|
||||||
virtual int classDirectorDefaultConstructor(Node *n) {
|
virtual int classDirectorDefaultConstructor(Node *n) {
|
||||||
String *classname;
|
String *classname;
|
||||||
Wrapper *w;
|
Wrapper *w;
|
||||||
classname = Swig_class_name(n);
|
classname = Swig_class_name(n);
|
||||||
w = NewWrapper();
|
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);
|
Wrapper_print(w, f_directors);
|
||||||
DelWrapper(w);
|
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);
|
Delete(classname);
|
||||||
return Language::classDirectorDefaultConstructor(n);
|
return Language::classDirectorDefaultConstructor(n);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -789,7 +789,6 @@ Swig_ConstructorToFunction(Node *n, String *classname,
|
||||||
{
|
{
|
||||||
ParmList *parms;
|
ParmList *parms;
|
||||||
Parm *prefix_args;
|
Parm *prefix_args;
|
||||||
Parm *postfix_args;
|
|
||||||
Parm *p;
|
Parm *p;
|
||||||
ParmList *directorparms;
|
ParmList *directorparms;
|
||||||
SwigType *type;
|
SwigType *type;
|
||||||
|
|
@ -816,25 +815,6 @@ Swig_ConstructorToFunction(Node *n, String *classname,
|
||||||
} else
|
} else
|
||||||
directorparms = parms;
|
directorparms = parms;
|
||||||
|
|
||||||
postfix_args = Getattr(n,"director:postfix_args");
|
|
||||||
if (postfix_args != NIL) {
|
|
||||||
Parm *p2, *p3, *p4;
|
|
||||||
|
|
||||||
if (prefix_args == NIL) /* no prefix args from above. */
|
|
||||||
directorparms = CopyParmList(parms);
|
|
||||||
|
|
||||||
if (directorparms != NIL) {
|
|
||||||
p2 = directorparms;
|
|
||||||
for ( ; nextSibling(p2); p2 = nextSibling(p2));
|
|
||||||
for (p3 = postfix_args; p3; p3 = nextSibling(p3)) {
|
|
||||||
p4 = CopyParm(p3);
|
|
||||||
set_nextSibling(p2, p4);
|
|
||||||
p2 = p4;
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
directorparms = CopyParmList(postfix_args);
|
|
||||||
}
|
|
||||||
|
|
||||||
type = NewString(classname);
|
type = NewString(classname);
|
||||||
SwigType_add_pointer(type);
|
SwigType_add_pointer(type);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue