summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Jezabek <jezabek@poczta.onet.pl>2009-06-22 23:07:49 +0000
committerJan Jezabek <jezabek@poczta.onet.pl>2009-06-22 23:07:49 +0000
commitff0e5a1ddf3b4740a3c73629037c92ebdff78b88 (patch)
treef04384d799ad62438c816440e0b3fe2bc414c47f
parenta8859566b4c881ae3a794d4784c56476e5d49cfe (diff)
downloadswig-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.cxx44
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()
* ----------------------------------------------------------------------------- */