Converted parameter lists to linked lists

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@641 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Dave Beazley 2000-08-10 18:37:30 +00:00
commit dae32de1c5
15 changed files with 160 additions and 187 deletions

View file

@ -153,8 +153,7 @@ Swig_clocal_assign(DataType *t, DOHString_or_char *name) {
* number of parameters.
* ----------------------------------------------------------------------------- */
int Swig_cargs(Wrapper *w, ParmList *l) {
Parm *p;
int Swig_cargs(Wrapper *w, ParmList *p) {
int i;
DataType *pt;
char *pvalue;
@ -163,7 +162,6 @@ int Swig_cargs(Wrapper *w, ParmList *l) {
char *lname;
i = 0;
p = Firstitem(l);
while (p != 0) {
lname = Swig_cparm_name(p,i);
pt = Gettype(p);
@ -172,7 +170,7 @@ int Swig_cargs(Wrapper *w, ParmList *l) {
local = Swig_clocal(pt,lname,pvalue);
Wrapper_add_localv(w,lname,local,0);
i++;
p = Nextitem(l);
p = Getnext(p);
}
return(i);
}
@ -292,20 +290,18 @@ char *
Swig_cfunction_call(DOHString_or_char *name, ParmList *parms) {
static DOH *func = 0;
int i = 0;
Parm *p;
Parm *p = parms;
DataType *pt;
if (!func) func = NewString("");
Clear(func);
Printf(func,"%s(", name);
p = Firstitem(parms);
while (p) {
pt = Gettype(p);
Printf(func,"%s", Swig_clocal_deref(pt, Swig_cparm_name(p,i)));
i++;
p = Nextitem(parms);
p = Getnext(p);
if (p)
Printf(func,",");
}
@ -326,23 +322,21 @@ char *
Swig_cmethod_call(DOHString_or_char *name, ParmList *parms) {
static DOH *func = 0;
int i = 0;
Parm *p;
Parm *p = parms;
DataType *pt;
if (!func) func = NewString("");
Clear(func);
p = Firstitem(parms);
if (!p) return "";
Printf(func,"%s->%s(", Swig_cparm_name(p,0), name);
i++;
p = Nextitem(parms);
p = Getnext(p);
while (p) {
pt = Gettype(p);
Printf(func,"%s", Swig_clocal_deref(pt, Swig_cparm_name(p,i)));
i++;
p = Nextitem(parms);
p = Getnext(p);
if (p)
Printf(func,",");
}
@ -384,18 +378,17 @@ char *
Swig_cppconstructor_call(DOHString_or_char *name, ParmList *parms) {
static DOH *func = 0;
int i = 0;
Parm *p;
Parm *p = parms;
DataType *pt;
if (!func) func = NewString("");
Clear(func);
Printf(func,"new %s(", name);
p = Firstitem(parms);
while (p) {
pt = Gettype(p);
Printf(func,"%s", Swig_clocal_deref(pt, Swig_cparm_name(p,i)));
i++;
p = Nextitem(parms);
p = Getnext(p);
if (p)
Printf(func,",");
}
@ -491,11 +484,8 @@ Swig_cmemberget_call(DOHString_or_char *name, DataType *t) {
}
static void fix_parm_names(ParmList *l) {
static void fix_parm_names(ParmList *p) {
int i = 0;
Parm *p;
p = Firstitem(l);
while (p) {
if (!Getname(p)) {
char temp[64];
@ -503,7 +493,7 @@ static void fix_parm_names(ParmList *l) {
Setname(p,temp);
}
i++;
p = Nextitem(l);
p = Getnext(p);
}
}
@ -529,18 +519,15 @@ Swig_cfunction_wrapper(DOHString_or_char *funcname,
Wrapper_Setname(w,funcname);
l = CopyParmList(parms);
fix_parm_names(l);
Printf(w->def,"%s %s(%s) {", DataType_str(rtype,0), funcname, ParmList_str(l));
if (code) {
Printv(w->code, code, "\n", 0);
}
Printf(w->code,"}\n");
Wrapper_Settype(w,rtype);
Wrapper_Setparms(w,l);
Delete(l);
return w;
}
@ -574,9 +561,10 @@ Swig_cmethod_wrapper(DOHString_or_char *classname,
DataType_Setname(t, Char(classname));
DataType_add_pointer(t);
p = NewParm(t,"self");
Insert(l,0,p);
Setnext(p,l);
DelDataType(t);
l = p;
fix_parm_names(l);
Printf(w->def,"%s %s(%s) {", DataType_str(rtype,0), Swig_name_member(classname, methodname), ParmList_str(l));
@ -588,11 +576,10 @@ Swig_cmethod_wrapper(DOHString_or_char *classname,
}
Printf(w->code,"self->%s(", methodname);
p = Firstitem(l);
p = Nextitem(l);
p = Getnext(l);
while (p) {
Printf(w->code,"%s", Getname(p));
p = Nextitem(l);
p = Getnext(p);
if (p)
Printf(w->code,",");
}
@ -688,12 +675,12 @@ Swig_cppconstructor_wrapper(DOHString_or_char *classname,
if (!code) {
/* No code supplied. Write a function manually */
Printf(w->code,"return new %s", DataType_str(t,0));
p = Firstitem(l);
p = l;
if (p) {
Printf(w->code,"(");
while (p) {
Printf(w->code,"%s", Getname(p));
p = Nextitem(l);
p = Getnext(p);
if (p)
Printf(w->code,",");
}
@ -732,12 +719,11 @@ Swig_cdestructor_wrapper(DOHString_or_char *classname,
/* Set the name of the function */
Wrapper_Setname(w,Swig_name_destroy(classname));
l = NewParmList();
t = NewDataType(T_USER);
DataType_Setname(t,classname);
DataType_add_pointer(t);
p = NewParm(t,"self");
Append(l,p);
l = p;
DelDataType(t);
t = NewDataType(T_VOID);
@ -779,13 +765,12 @@ Swig_cppdestructor_wrapper(DOHString_or_char *classname,
/* Set the name of the function */
Wrapper_Setname(w,Swig_name_destroy(classname));
l = NewParmList();
t = NewDataType(T_USER);
DataType_Setname(t,classname);
DataType_add_pointer(t);
p = NewParm(t,"self");
Append(l,p);
l = p;
DelDataType(t);
t = NewDataType(T_VOID);
@ -829,17 +814,16 @@ Swig_cmemberset_wrapper(DOHString_or_char *classname,
/* Set the name of the function */
Wrapper_Setname(w,Swig_name_member(classname, Swig_name_set(membername)));
l = NewParmList();
t = NewDataType(T_USER);
DataType_Setname(t, Char(classname));
DataType_add_pointer(t);
p = NewParm(t,"self");
Append(l,p);
l = p;
DelDataType(t);
lt = Swig_clocal_type(type);
p = NewParm(lt,"value");
Append(l,p);
Setnext(l,p);
Printf(w->def,"%s %s(%s) {", DataType_str(lt,0), Wrapper_Getname(w), ParmList_str(l));
@ -882,12 +866,11 @@ Swig_cmemberget_wrapper(DOHString_or_char *classname,
/* Set the name of the function */
Wrapper_Setname(w,Swig_name_member(classname, Swig_name_get(membername)));
l = NewParmList();
t = NewDataType(T_USER);
DataType_Setname(t, Char(classname));
DataType_add_pointer(t);
p = NewParm(t,"self");
Append(l,p);
l = p;
DelDataType(t);
lt = Swig_clocal_type(type);
@ -928,10 +911,9 @@ Swig_cvarset_wrapper(DOHString_or_char *varname,
/* Set the name of the function */
Wrapper_Setname(w,Swig_name_set(varname));
l = NewParmList();
lt = Swig_clocal_type(type);
p = NewParm(lt,"value");
Append(l,p);
l = p;
Printf(w->def,"%s %s(%s) {", DataType_str(lt,0), Wrapper_Getname(w), ParmList_str(l));
@ -966,7 +948,7 @@ Swig_cvarget_wrapper(DOHString_or_char *varname,
DOHString_or_char *code)
{
Wrapper *w;
ParmList *l;
ParmList *l = 0;
DataType *lt;
w = NewWrapper();
@ -974,8 +956,6 @@ Swig_cvarget_wrapper(DOHString_or_char *varname,
/* Set the name of the function */
Wrapper_Setname(w, Swig_name_get(varname));
l = NewParmList();
lt = Swig_clocal_type(type);
Printf(w->def,"%s %s(%s) {", DataType_str(lt,0), Wrapper_Getname(w), ParmList_str(l));

View file

@ -66,66 +66,73 @@ Parm *CopyParm(Parm *p) {
return np;
}
/* ------------------------------------------------------------------
* NewParmList()
* ------------------------------------------------------------------ */
ParmList *NewParmList() {
return NewList();
}
/* ------------------------------------------------------------------
* CopyParmList()
* ------------------------------------------------------------------ */
ParmList *
CopyParmList(ParmList *l) {
ParmList *nl;
int i, len;
CopyParmList(ParmList *p) {
Parm *np;
Parm *pp = 0;
Parm *fp = 0;
nl = NewList();
len = Len(l);
for (i = 0; i < len; i++) {
Parm *p = Getitem(l,i);
Append(nl, CopyParm(p));
if (!p) return 0;
while (p) {
np = CopyParm(p);
if (pp) {
Setnext(pp,np);
} else {
fp = np;
}
pp = np;
p = Getnext(p);
}
return nl;
return fp;
}
/* ------------------------------------------------------------------
* int ParmList_numarg()
* ------------------------------------------------------------------ */
int ParmList_numarg(ParmList *l) {
int ParmList_numarg(ParmList *p) {
int n = 0;
Parm *p;
p = Firstitem(l);
while (p) {
if (!Getignore(p)) n++;
p = Nextitem(l);
p = Getnext(p);
}
return n;
}
/* -----------------------------------------------------------------------------
* int ParmList_len()
* ----------------------------------------------------------------------------- */
int ParmList_len(ParmList *p) {
int i = 0;
while (p) {
i++;
p = Getnext(p);
}
return i;
}
/* ---------------------------------------------------------------------
* ParmList_str()
*
* Generates a string of parameters
* ---------------------------------------------------------------------- */
char *ParmList_str(ParmList *l) {
char *ParmList_str(ParmList *p) {
static DOHString *out = 0;
Parm *p;
DataType *t;
if (!out) out = NewString("");
Clear(out);
p = Firstitem(l);
while(p) {
t = Gettype(p);
Printf(out,"%s", DataType_str(t,Getname(p)));
p = Nextitem(l);
p = Getnext(p);
if (p)
Printf(out,",");
}
@ -138,18 +145,16 @@ char *ParmList_str(ParmList *l) {
* Generate a prototype string.
* ---------------------------------------------------------------------- */
char *ParmList_protostr(ParmList *l) {
char *ParmList_protostr(ParmList *p) {
static DOHString *out = 0;
Parm *p;
DataType *t;
if (!out) out = NewString("");
Clear(out);
p = Firstitem(l);
while(p) {
t = Gettype(p);
Printf(out,"%s", DataType_str(t,0));
p = Nextitem(l);
p = Getnext(p);
if (p)
Printf(out,",");
}

View file

@ -133,6 +133,7 @@ typedef DOH ParmList;
extern ParmList *NewParmList();
extern ParmList *CopyParmList(ParmList *);
extern int ParmList_len(ParmList *);
extern int ParmList_numarg(ParmList *);
extern char *ParmList_str(ParmList *);
extern char *ParmList_protostr(ParmList *);

View file

@ -52,8 +52,8 @@ DelWrapper(Wrapper *w) {
Delete(w->code);
Delete(w->def);
if (w->_type) DelDataType(w->_type);
if (w->_parms) Delete(w->_parms);
if (w->_name) Delete(w->_name);
Delete(w->_parms);
Delete(w->_name);
free(w);
}
@ -291,8 +291,9 @@ Wrapper_Getparms(Wrapper *w) {
void
Wrapper_Setparms(Wrapper *w, ParmList *l) {
if (w->_parms) Delete(w->_parms);
w->_parms = CopyParmList(l);
Delete(w->_parms);
w->_parms = l;
DohIncref(l);
}
/* -----------------------------------------------------------------------------
@ -310,7 +311,7 @@ Wrapper_Getname(Wrapper *w) {
void
Wrapper_Setname(Wrapper *w, DOHString_or_char *n) {
if (w->_name) Delete(w->_name);
Delete(w->_name);
w->_name = NewString(n);
}