SwigType * handling corrections - mangling

Further corrections to pass SwigType * to methods expecting types
instead of passing readable type strings.

Swig_string_mangle() takes a generic String *, but it was calling
functions that require SwigType *. Swig_string_mangle_type() is
now provided for SwigType *r. The special template handling
on types now occurs in this function.
This commit is contained in:
William S Fulton 2022-11-12 06:42:36 +00:00
commit 6a9be797e1
9 changed files with 51 additions and 42 deletions

View file

@ -4656,8 +4656,8 @@ private:
* 'X'.
* ---------------------------------------------------------------------- */
String *exportedName(String *name) {
String *copy = Copy(name);
String *exportedName(SwigType *name) {
SwigType *copy = Copy(name);
char c = *Char(copy);
if (islower(c)) {
char l[2];
@ -4677,7 +4677,7 @@ private:
u[2] = '\0';
Replace(copy, l, u, DOH_REPLACE_FIRST);
}
String *ret = Swig_name_mangle(copy);
String *ret = Swig_string_mangle_type(copy);
Delete(copy);
return ret;
}
@ -5556,11 +5556,11 @@ private:
return NewString("int");
}
String *type = Getattr(n, "enumtype");
SwigType *type = Getattr(n, "enumtype");
assert(type);
char *p = Char(type);
int len = Len(type);
String *s = NewString("");
SwigType *s = NewString("");
bool capitalize = true;
for (int i = 0; i < len; ++i, ++p) {
if (*p == ':') {
@ -5576,7 +5576,7 @@ private:
}
}
ret = Swig_name_mangle(s);
ret = Swig_string_mangle_type(s);
Delete(s);
return ret;
}

View file

@ -1310,9 +1310,11 @@ int Language::staticmemberfunctionHandler(Node *n) {
else
cname = NewStringf("%s::%s", sname, name);
} else {
String *mname = Swig_name_mangle(ClassName);
String *classname_str = SwigType_namestr(ClassName);
String *mname = Swig_name_mangle(classname_str);
cname = Swig_name_member(NSpace, mname, name);
Delete(mname);
Delete(classname_str);
}
mrename = Swig_name_member(NSpace, ClassPrefix, symname);

View file

@ -946,7 +946,7 @@ public:
// This is a bug, due to the fact that swig_type -> octave_class mapping
// is 1-to-n.
static Hash *emitted = NewHash();
String *mangled_classname = Swig_name_mangle(Getattr(n, "name"));
String *mangled_classname = Swig_string_mangle_type(Getattr(n, "name"));
if (Getattr(emitted, mangled_classname)) {
Delete(mangled_classname);
return SWIG_NOWRAP;

View file

@ -712,7 +712,7 @@ public:
virtual int classHandler(Node *n) {
static Hash *emitted = NewHash();
String *mangled_classname = 0;
String *real_classname = 0;
SwigType *real_classname = 0;
have_constructor = 0;
have_destructor = 0;
@ -740,7 +740,7 @@ public:
return SWIG_ERROR;
real_classname = Getattr(n, "name");
mangled_classname = Swig_name_mangle(real_classname);
mangled_classname = Swig_string_mangle_type(real_classname);
if (Getattr(emitted, mangled_classname))
return SWIG_NOWRAP;
@ -806,7 +806,7 @@ public:
int index = 0;
b = First(baselist);
while (b.item) {
String *bname = Getattr(b.item, "name");
SwigType *bname = Getattr(b.item, "name");
if ((!bname) || GetFlag(b.item, "feature:ignore") || (!Getattr(b.item, "module"))) {
b = Next(b);
continue;
@ -816,7 +816,7 @@ public:
Printv(base_classes, bname, " ", NIL);
Printv(base_class_init, " ", bname, "Ptr::constructor $ptr\n", NIL);
}
String *bmangle = Swig_name_mangle(bname);
String *bmangle = Swig_string_mangle_type(bname);
// Printv(f_wrappers,"extern swig_class _wrap_class_", bmangle, ";\n", NIL);
// Printf(base_class,"&_wrap_class_%s",bmangle);
Printf(base_class, "0");