From: William F. <wsf...@us...> - 2005-03-21 22:06:41
|
Update of /cvsroot/swig/SWIG/Source/CParse In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8587/Source/CParse Modified Files: parser.y Log Message: fix %varargs Index: parser.y =================================================================== RCS file: /cvsroot/swig/SWIG/Source/CParse/parser.y,v retrieving revision 1.110 retrieving revision 1.111 diff -C2 -d -r1.110 -r1.111 *** parser.y 8 Mar 2005 09:58:55 -0000 1.110 --- parser.y 21 Mar 2005 22:06:12 -0000 1.111 *************** *** 1138,1144 **** Node *function = n; - /* Do not add in functions if kwargs is being used or if user wants old default argument wrapping - (one wrapped method per function irrespective of number of default arguments) */ if (function) { if (compact_default_args || is_cfunction(function) --- 1138,1165 ---- Node *function = n; if (function) { + ParmList *varargs = Getattr(function,"feature:varargs"); + if (varargs) { + /* Handles the %varargs directive by looking for "feature:varargs" and + * substituting ... with an alternative set of arguments. */ + Parm *p = Getattr(function,"parms"); + Parm *pp = 0; + while (p) { + SwigType *t = Getattr(p,"type"); + if (Strcmp(t,"v(...)") == 0) { + if (pp) { + set_nextSibling(pp,Copy(varargs)); + } else { + Setattr(function,"parms", Copy(varargs)); + } + break; + } + pp = p; + p = nextSibling(p); + } + } + + /* Do not add in functions if kwargs is being used or if user wants old default argument wrapping + (one wrapped method per function irrespective of number of default arguments) */ if (compact_default_args || is_cfunction(function) |