diff options
author | Jan Jezabek <jezabek@poczta.onet.pl> | 2009-06-22 23:07:49 +0000 |
---|---|---|
committer | Jan Jezabek <jezabek@poczta.onet.pl> | 2009-06-22 23:07:49 +0000 |
commit | ff0e5a1ddf3b4740a3c73629037c92ebdff78b88 (patch) | |
tree | f04384d799ad62438c816440e0b3fe2bc414c47f | |
parent | a8859566b4c881ae3a794d4784c56476e5d49cfe (diff) | |
download | swig-ff0e5a1ddf3b4740a3c73629037c92ebdff78b88.tar.gz |
Imported makeParameterName from Java. Now the generated IDL has proper parameter names.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2008-jezabek@11301 626c5289-ae23-0410-ae9c-e8d60b6d4f22
-rw-r--r-- | Source/Modules/com.cxx | 44 |
1 files changed, 40 insertions, 4 deletions
diff --git a/Source/Modules/com.cxx b/Source/Modules/com.cxx index 8beb50dac..262e6f839 100644 --- a/Source/Modules/com.cxx +++ b/Source/Modules/com.cxx @@ -1090,8 +1090,7 @@ public: 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 @@ public: 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 @@ public: } /* ----------------------------------------------------------------------------- + * 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() * ----------------------------------------------------------------------------- */ |