Uniquify the argument names used in GOOPS method declarations.

Reported by rm@mh-freiburg.de.


git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@5677 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Matthias Köppe 2004-01-23 15:05:34 +00:00
commit 72c6025d53

View file

@ -703,6 +703,7 @@ public:
String *returns = NewString(""); String *returns = NewString("");
String *method_signature = NewString(""); String *method_signature = NewString("");
String *primitive_args = NewString(""); String *primitive_args = NewString("");
Hash *scheme_arg_names = NewHash();
int num_results = 1; int num_results = 1;
String *tmp = NewString(""); String *tmp = NewString("");
String *tm; String *tm;
@ -823,10 +824,10 @@ public:
SwigType *pn = Getattr(p,"name"); SwigType *pn = Getattr(p,"name");
String *argname; String *argname;
scheme_argnum++; scheme_argnum++;
if (pn) if (pn && !Getattr(scheme_arg_names, pn))
argname = pn; argname = pn;
else { else {
/* Anonymous arg -- choose a name that cannot clash */ /* Anonymous arg or re-used argument name -- choose a name that cannot clash */
argname = NewStringf("%%arg%d", scheme_argnum); argname = NewStringf("%%arg%d", scheme_argnum);
} }
if (strcmp("void", Char(pt)) != 0) { if (strcmp("void", Char(pt)) != 0) {
@ -838,6 +839,7 @@ public:
Printv(method_signature, " ", argname, NIL); Printv(method_signature, " ", argname, NIL);
} }
Printv(primitive_args, " ", argname, NIL); Printv(primitive_args, " ", argname, NIL);
Setattr(scheme_arg_names, argname, p);
} }
if (!pn) { if (!pn) {
Delete(argname); Delete(argname);
@ -1181,6 +1183,7 @@ public:
Delete(doc_body); Delete(doc_body);
Delete(returns); Delete(returns);
Delete(tmp); Delete(tmp);
Delete(scheme_arg_names);
DelWrapper(f); DelWrapper(f);
return SWIG_OK; return SWIG_OK;
} }