From: <je...@us...> - 2009-06-22 23:07:50
|
Revision: 11301 http://swig.svn.sourceforge.net/swig/?rev=11301&view=rev Author: jezabek Date: 2009-06-22 23:07:49 +0000 (Mon, 22 Jun 2009) Log Message: ----------- Imported makeParameterName from Java. Now the generated IDL has proper parameter names. Modified Paths: -------------- branches/gsoc2008-jezabek/Source/Modules/com.cxx Modified: branches/gsoc2008-jezabek/Source/Modules/com.cxx =================================================================== --- branches/gsoc2008-jezabek/Source/Modules/com.cxx 2009-06-22 18:56:05 UTC (rev 11300) +++ branches/gsoc2008-jezabek/Source/Modules/com.cxx 2009-06-22 23:07:49 UTC (rev 11301) @@ -1090,8 +1090,7 @@ Swig_warning(WARN_COM_TYPEMAP_COMTYPE_UNDEF, input_file, line_number, "No comtype typemap defined for %s\n", SwigType_str(pt, 0)); } - /* FIXME: get the real argument name, it is important in the IDL */ - String *arg = NewStringf("arg%d", i); + String *arg = makeParameterName(n, p, i, setter_flag); /* Add parameter to module class function */ if (gencomma >= 2) @@ -1919,8 +1918,7 @@ Swig_warning(WARN_COM_TYPEMAP_COMTYPE_UNDEF, input_file, line_number, "No comtype typemap defined for %s\n", SwigType_str(pt, 0)); } - // FIXME: String *arg = makeParameterName(n, p, i, setter_flag); - String *arg = NewStringf("arg%d", i); + String *arg = makeParameterName(n, p, i, setter_flag); /* Add parameter to proxy function */ if (gencomma >= 2) @@ -1958,6 +1956,44 @@ } /* ----------------------------------------------------------------------------- + * makeParameterName() + * + * Inputs: + * n - Node + * p - parameter node + * arg_num - parameter argument number + * setter - set this flag when wrapping variables + * Return: + * arg - a unique parameter name + * ----------------------------------------------------------------------------- */ + + String *makeParameterName(Node *n, Parm *p, int arg_num, bool setter) { + + String *arg = 0; + String *pn = Getattr(p, "name"); + + // Use C parameter name unless it is a duplicate or an empty parameter name + int count = 0; + ParmList *plist = Getattr(n, "parms"); + while (plist) { + if ((Cmp(pn, Getattr(plist, "name")) == 0)) + count++; + plist = nextSibling(plist); + } + String *wrn = pn ? Swig_name_warning(p, 0, pn, 0) : 0; + arg = (!pn || (count > 1) || wrn) ? NewStringf("arg%d", arg_num) : Copy(pn); + + if (setter && Cmp(arg, "self") != 0) { + // Note that for setters the parameter name is always set but sometimes includes C++ + // scope resolution, so we need to strip off the scope resolution to make a valid name. + Delete(arg); + arg = NewString("value"); //Swig_scopename_last(pn); + } + + return arg; + } + + /* ----------------------------------------------------------------------------- * emitTypeWrapperClass() * ----------------------------------------------------------------------------- */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |