summaryrefslogtreecommitdiff
path: root/Source/Modules/com.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Modules/com.cxx')
-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()
* ----------------------------------------------------------------------------- */