Consolidate name mangling functions
Swig_string_mangle => Swig_name_mangle_string Swig_name_mangle => Swig_name_mangle_string Swig_string_mangle_type => Swig_name_mangle_type
This commit is contained in:
parent
3364c18d06
commit
46f2778412
16 changed files with 194 additions and 210 deletions
|
|
@ -4677,7 +4677,7 @@ private:
|
||||||
u[2] = '\0';
|
u[2] = '\0';
|
||||||
Replace(copy, l, u, DOH_REPLACE_FIRST);
|
Replace(copy, l, u, DOH_REPLACE_FIRST);
|
||||||
}
|
}
|
||||||
String *ret = Swig_string_mangle_type(copy);
|
String *ret = Swig_name_mangle_type(copy);
|
||||||
Delete(copy);
|
Delete(copy);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
@ -4725,7 +4725,7 @@ private:
|
||||||
Append(nw, c3);
|
Append(nw, c3);
|
||||||
Delete(c2);
|
Delete(c2);
|
||||||
Delete(c3);
|
Delete(c3);
|
||||||
String *ret = Swig_name_mangle(nw);
|
String *ret = Swig_name_mangle_string(nw);
|
||||||
Delete(nw);
|
Delete(nw);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
@ -4742,7 +4742,7 @@ private:
|
||||||
String *buildGoWrapperName(String *name, String *overname) {
|
String *buildGoWrapperName(String *name, String *overname) {
|
||||||
String *s1 = NewString("_swig_wrap_");
|
String *s1 = NewString("_swig_wrap_");
|
||||||
Append(s1, name);
|
Append(s1, name);
|
||||||
String *s2 = Swig_name_mangle(s1);
|
String *s2 = Swig_name_mangle_string(s1);
|
||||||
Delete(s1);
|
Delete(s1);
|
||||||
if (overname) {
|
if (overname) {
|
||||||
Append(s2, overname);
|
Append(s2, overname);
|
||||||
|
|
@ -5576,7 +5576,7 @@ private:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = Swig_string_mangle_type(s);
|
ret = Swig_name_mangle_type(s);
|
||||||
Delete(s);
|
Delete(s);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1396,7 +1396,7 @@ public:
|
||||||
SwigType *ct = NewStringf("p.%s", Getattr(n, "name"));
|
SwigType *ct = NewStringf("p.%s", Getattr(n, "name"));
|
||||||
swigtype_ptr = SwigType_manglestr(ct);
|
swigtype_ptr = SwigType_manglestr(ct);
|
||||||
|
|
||||||
String *mangled_classname = Swig_name_mangle(Getattr(n, "sym:name"));
|
String *mangled_classname = Swig_name_mangle_string(Getattr(n, "sym:name"));
|
||||||
/* Export clientdata structure */
|
/* Export clientdata structure */
|
||||||
Printf(f_runtime, "static swig_guile_clientdata _swig_guile_clientdata%s = { NULL, SCM_EOL };\n", mangled_classname);
|
Printf(f_runtime, "static swig_guile_clientdata _swig_guile_clientdata%s = { NULL, SCM_EOL };\n", mangled_classname);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1461,7 +1461,7 @@ Hash *JSEmitter::createNamespaceEntry(const char *_name, const char *parent, con
|
||||||
Hash *entry = NewHash();
|
Hash *entry = NewHash();
|
||||||
String *name = NewString(_name);
|
String *name = NewString(_name);
|
||||||
Setattr(entry, NAME, Swig_scopename_last(name));
|
Setattr(entry, NAME, Swig_scopename_last(name));
|
||||||
Setattr(entry, NAME_MANGLED, Swig_name_mangle(name));
|
Setattr(entry, NAME_MANGLED, Swig_name_mangle_string(name));
|
||||||
Setattr(entry, PARENT, NewString(parent));
|
Setattr(entry, PARENT, NewString(parent));
|
||||||
Setattr(entry, PARENT_MANGLED, NewString(parent_mangled));
|
Setattr(entry, PARENT_MANGLED, NewString(parent_mangled));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1311,7 +1311,7 @@ int Language::staticmemberfunctionHandler(Node *n) {
|
||||||
cname = NewStringf("%s::%s", sname, name);
|
cname = NewStringf("%s::%s", sname, name);
|
||||||
} else {
|
} else {
|
||||||
String *classname_str = SwigType_namestr(ClassName);
|
String *classname_str = SwigType_namestr(ClassName);
|
||||||
String *mname = Swig_name_mangle(classname_str);
|
String *mname = Swig_name_mangle_string(classname_str);
|
||||||
cname = Swig_name_member(NSpace, mname, name);
|
cname = Swig_name_member(NSpace, mname, name);
|
||||||
Delete(mname);
|
Delete(mname);
|
||||||
Delete(classname_str);
|
Delete(classname_str);
|
||||||
|
|
@ -1321,7 +1321,7 @@ int Language::staticmemberfunctionHandler(Node *n) {
|
||||||
if (Extend) {
|
if (Extend) {
|
||||||
String *code = Getattr(n, "code");
|
String *code = Getattr(n, "code");
|
||||||
String *defaultargs = Getattr(n, "defaultargs");
|
String *defaultargs = Getattr(n, "defaultargs");
|
||||||
String *mangled = Swig_name_mangle(mrename);
|
String *mangled = Swig_name_mangle_string(mrename);
|
||||||
Delete(mrename);
|
Delete(mrename);
|
||||||
mrename = mangled;
|
mrename = mangled;
|
||||||
|
|
||||||
|
|
@ -1335,7 +1335,7 @@ int Language::staticmemberfunctionHandler(Node *n) {
|
||||||
|
|
||||||
if (!defaultargs) {
|
if (!defaultargs) {
|
||||||
/* Hmmm. An added static member. We have to create a little wrapper for this */
|
/* Hmmm. An added static member. We have to create a little wrapper for this */
|
||||||
String *mangled_cname = Swig_name_mangle(cname);
|
String *mangled_cname = Swig_name_mangle_string(cname);
|
||||||
Swig_add_extension_code(n, mangled_cname, parms, type, code, CPlusPlus, 0);
|
Swig_add_extension_code(n, mangled_cname, parms, type, code, CPlusPlus, 0);
|
||||||
Setattr(n, "extendname", mangled_cname);
|
Setattr(n, "extendname", mangled_cname);
|
||||||
Delete(mangled_cname);
|
Delete(mangled_cname);
|
||||||
|
|
|
||||||
|
|
@ -1269,7 +1269,7 @@ public:
|
||||||
full_proxy_class_name = NewStringf("%s.%s", nspace, proxy_class_name);
|
full_proxy_class_name = NewStringf("%s.%s", nspace, proxy_class_name);
|
||||||
|
|
||||||
assert(full_proxy_class_name);
|
assert(full_proxy_class_name);
|
||||||
mangled_full_proxy_class_name = Swig_name_mangle(full_proxy_class_name);
|
mangled_full_proxy_class_name = Swig_name_mangle_string(full_proxy_class_name);
|
||||||
|
|
||||||
SwigType *t = Copy(Getattr(n, "name"));
|
SwigType *t = Copy(Getattr(n, "name"));
|
||||||
SwigType *fr_t = SwigType_typedef_resolve_all(t); /* Create fully resolved type */
|
SwigType *fr_t = SwigType_typedef_resolve_all(t); /* Create fully resolved type */
|
||||||
|
|
@ -1803,7 +1803,7 @@ public:
|
||||||
if (nspace == 0 || Len(nspace) == 0)
|
if (nspace == 0 || Len(nspace) == 0)
|
||||||
mangled_name = NewString("SwigModule");
|
mangled_name = NewString("SwigModule");
|
||||||
else
|
else
|
||||||
mangled_name = Swig_name_mangle(nspace);
|
mangled_name = Swig_name_mangle_string(nspace);
|
||||||
String *cname = NewStringf("swig_%s", mangled_name);
|
String *cname = NewStringf("swig_%s", mangled_name);
|
||||||
|
|
||||||
Setattr(carrays_hash, "cname", cname);
|
Setattr(carrays_hash, "cname", cname);
|
||||||
|
|
|
||||||
|
|
@ -569,7 +569,7 @@ public:
|
||||||
|
|
||||||
// Make a static variable;
|
// Make a static variable;
|
||||||
|
|
||||||
Printf(var_name, "_wrap_const_%s", Swig_name_mangle(Getattr(n, "sym:name")));
|
Printf(var_name, "_wrap_const_%s", Swig_name_mangle_string(Getattr(n, "sym:name")));
|
||||||
|
|
||||||
// Build the name for scheme.
|
// Build the name for scheme.
|
||||||
Printv(proc_name, iname, NIL);
|
Printv(proc_name, iname, NIL);
|
||||||
|
|
@ -656,7 +656,7 @@ public:
|
||||||
convert_proto_tab = NewString("");
|
convert_proto_tab = NewString("");
|
||||||
|
|
||||||
struct_name = Getattr(n, "sym:name");
|
struct_name = Getattr(n, "sym:name");
|
||||||
mangled_struct_name = Swig_name_mangle(Getattr(n, "sym:name"));
|
mangled_struct_name = Swig_name_mangle_string(Getattr(n, "sym:name"));
|
||||||
|
|
||||||
Printv(scm_structname, struct_name, NIL);
|
Printv(scm_structname, struct_name, NIL);
|
||||||
Replaceall(scm_structname, "_", "-");
|
Replaceall(scm_structname, "_", "-");
|
||||||
|
|
|
||||||
|
|
@ -946,7 +946,7 @@ public:
|
||||||
// This is a bug, due to the fact that swig_type -> octave_class mapping
|
// This is a bug, due to the fact that swig_type -> octave_class mapping
|
||||||
// is 1-to-n.
|
// is 1-to-n.
|
||||||
static Hash *emitted = NewHash();
|
static Hash *emitted = NewHash();
|
||||||
String *mangled_classname = Swig_string_mangle_type(Getattr(n, "name"));
|
String *mangled_classname = Swig_name_mangle_type(Getattr(n, "name"));
|
||||||
if (Getattr(emitted, mangled_classname)) {
|
if (Getattr(emitted, mangled_classname)) {
|
||||||
Delete(mangled_classname);
|
Delete(mangled_classname);
|
||||||
return SWIG_NOWRAP;
|
return SWIG_NOWRAP;
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,7 @@ public:
|
||||||
|
|
||||||
/* Mangled name */
|
/* Mangled name */
|
||||||
Delete(mname);
|
Delete(mname);
|
||||||
mname = Swig_name_mangle(cname);
|
mname = Swig_name_mangle_string(cname);
|
||||||
|
|
||||||
/* Renamed class name */
|
/* Renamed class name */
|
||||||
Clear(name);
|
Clear(name);
|
||||||
|
|
|
||||||
|
|
@ -740,7 +740,7 @@ public:
|
||||||
return SWIG_ERROR;
|
return SWIG_ERROR;
|
||||||
|
|
||||||
real_classname = Getattr(n, "name");
|
real_classname = Getattr(n, "name");
|
||||||
mangled_classname = Swig_string_mangle_type(real_classname);
|
mangled_classname = Swig_name_mangle_type(real_classname);
|
||||||
|
|
||||||
if (Getattr(emitted, mangled_classname))
|
if (Getattr(emitted, mangled_classname))
|
||||||
return SWIG_NOWRAP;
|
return SWIG_NOWRAP;
|
||||||
|
|
@ -816,7 +816,7 @@ public:
|
||||||
Printv(base_classes, bname, " ", NIL);
|
Printv(base_classes, bname, " ", NIL);
|
||||||
Printv(base_class_init, " ", bname, "Ptr::constructor $ptr\n", NIL);
|
Printv(base_class_init, " ", bname, "Ptr::constructor $ptr\n", NIL);
|
||||||
}
|
}
|
||||||
String *bmangle = Swig_string_mangle_type(bname);
|
String *bmangle = Swig_name_mangle_type(bname);
|
||||||
// Printv(f_wrappers,"extern swig_class _wrap_class_", bmangle, ";\n", NIL);
|
// Printv(f_wrappers,"extern swig_class _wrap_class_", bmangle, ";\n", NIL);
|
||||||
// Printf(base_class,"&_wrap_class_%s",bmangle);
|
// Printf(base_class,"&_wrap_class_%s",bmangle);
|
||||||
Printf(base_class, "0");
|
Printf(base_class, "0");
|
||||||
|
|
|
||||||
|
|
@ -950,14 +950,14 @@ static String *expand_macro(String *name, List *args, String *line_file) {
|
||||||
/* Non-standard mangle expansions.
|
/* Non-standard mangle expansions.
|
||||||
The #@Name is replaced by mangle_arg(Name). */
|
The #@Name is replaced by mangle_arg(Name). */
|
||||||
if (strstr(Char(ns), "\004")) {
|
if (strstr(Char(ns), "\004")) {
|
||||||
String *marg = Swig_string_mangle(arg);
|
String *marg = Swig_name_mangle_string(arg);
|
||||||
Clear(temp);
|
Clear(temp);
|
||||||
Printf(temp, "\004%s", aname);
|
Printf(temp, "\004%s", aname);
|
||||||
Replace(ns, temp, marg, DOH_REPLACE_ID_END);
|
Replace(ns, temp, marg, DOH_REPLACE_ID_END);
|
||||||
Delete(marg);
|
Delete(marg);
|
||||||
}
|
}
|
||||||
if (strstr(Char(ns), "\005")) {
|
if (strstr(Char(ns), "\005")) {
|
||||||
String *marg = Swig_string_mangle(arg);
|
String *marg = Swig_name_mangle_string(arg);
|
||||||
Clear(temp);
|
Clear(temp);
|
||||||
Clear(tempa);
|
Clear(tempa);
|
||||||
Printf(temp, "\005%s", aname);
|
Printf(temp, "\005%s", aname);
|
||||||
|
|
|
||||||
|
|
@ -1075,7 +1075,7 @@ int Swig_MethodToFunction(Node *n, const_String_or_char_ptr nspace, String *clas
|
||||||
String *code = Getattr(n, "code");
|
String *code = Getattr(n, "code");
|
||||||
String *cname = Getattr(n, "extendsmartclassname") ? Getattr(n, "extendsmartclassname") : classname;
|
String *cname = Getattr(n, "extendsmartclassname") ? Getattr(n, "extendsmartclassname") : classname;
|
||||||
String *membername = Swig_name_member(nspace, cname, name);
|
String *membername = Swig_name_member(nspace, cname, name);
|
||||||
String *mangled = Swig_name_mangle(membername);
|
String *mangled = Swig_name_mangle_string(membername);
|
||||||
int is_smart_pointer = flags & CWRAP_SMART_POINTER;
|
int is_smart_pointer = flags & CWRAP_SMART_POINTER;
|
||||||
|
|
||||||
type = Getattr(n, "type");
|
type = Getattr(n, "type");
|
||||||
|
|
@ -1238,7 +1238,7 @@ int Swig_ConstructorToFunction(Node *n, const_String_or_char_ptr nspace, String
|
||||||
String *defaultargs = Getattr(n, "defaultargs");
|
String *defaultargs = Getattr(n, "defaultargs");
|
||||||
String *code = Getattr(n, "code");
|
String *code = Getattr(n, "code");
|
||||||
String *membername = Swig_name_construct(nspace, classname);
|
String *membername = Swig_name_construct(nspace, classname);
|
||||||
String *mangled = Swig_name_mangle(membername);
|
String *mangled = Swig_name_mangle_string(membername);
|
||||||
|
|
||||||
/* Check if the constructor is overloaded. If so, and it has code attached, we append an extra suffix
|
/* Check if the constructor is overloaded. If so, and it has code attached, we append an extra suffix
|
||||||
to avoid a name-clash in the generated wrappers. This allows overloaded constructors to be defined
|
to avoid a name-clash in the generated wrappers. This allows overloaded constructors to be defined
|
||||||
|
|
@ -1356,7 +1356,7 @@ int Swig_DestructorToFunction(Node *n, const_String_or_char_ptr nspace, String *
|
||||||
String *call;
|
String *call;
|
||||||
String *membername, *mangled, *code;
|
String *membername, *mangled, *code;
|
||||||
membername = Swig_name_destroy(nspace, classname);
|
membername = Swig_name_destroy(nspace, classname);
|
||||||
mangled = Swig_name_mangle(membername);
|
mangled = Swig_name_mangle_string(membername);
|
||||||
code = Getattr(n, "code");
|
code = Getattr(n, "code");
|
||||||
if (code) {
|
if (code) {
|
||||||
Swig_add_extension_code(n, mangled, p, type, code, cparse_cplusplus, "self");
|
Swig_add_extension_code(n, mangled, p, type, code, cparse_cplusplus, "self");
|
||||||
|
|
@ -1443,7 +1443,7 @@ int Swig_MembersetToFunction(Node *n, String *classname, int flags) {
|
||||||
|
|
||||||
String *sname = Swig_name_set(0, name);
|
String *sname = Swig_name_set(0, name);
|
||||||
String *membername = Swig_name_member(0, classname, sname);
|
String *membername = Swig_name_member(0, classname, sname);
|
||||||
String *mangled = Swig_name_mangle(membername);
|
String *mangled = Swig_name_mangle_string(membername);
|
||||||
|
|
||||||
if (code) {
|
if (code) {
|
||||||
/* I don't think this ever gets run - WSF */
|
/* I don't think this ever gets run - WSF */
|
||||||
|
|
@ -1525,7 +1525,7 @@ int Swig_MembergetToFunction(Node *n, String *classname, int flags) {
|
||||||
|
|
||||||
String *gname = Swig_name_get(0, name);
|
String *gname = Swig_name_get(0, name);
|
||||||
String *membername = Swig_name_member(0, classname, gname);
|
String *membername = Swig_name_member(0, classname, gname);
|
||||||
String *mangled = Swig_name_mangle(membername);
|
String *mangled = Swig_name_mangle_string(membername);
|
||||||
|
|
||||||
if (code) {
|
if (code) {
|
||||||
/* I don't think this ever gets run - WSF */
|
/* I don't think this ever gets run - WSF */
|
||||||
|
|
@ -1577,7 +1577,7 @@ int Swig_VarsetToFunction(Node *n, int flags) {
|
||||||
|
|
||||||
if (flags & CWRAP_EXTEND) {
|
if (flags & CWRAP_EXTEND) {
|
||||||
String *sname = Swig_name_set(0, name);
|
String *sname = Swig_name_set(0, name);
|
||||||
String *mangled = Swig_name_mangle(sname);
|
String *mangled = Swig_name_mangle_string(sname);
|
||||||
String *call = Swig_cfunction_call(mangled, parms);
|
String *call = Swig_cfunction_call(mangled, parms);
|
||||||
String *cres = NewStringf("%s;", call);
|
String *cres = NewStringf("%s;", call);
|
||||||
Setattr(n, "wrap:action", cres);
|
Setattr(n, "wrap:action", cres);
|
||||||
|
|
@ -1631,7 +1631,7 @@ int Swig_VargetToFunction(Node *n, int flags) {
|
||||||
|
|
||||||
if (flags & CWRAP_EXTEND) {
|
if (flags & CWRAP_EXTEND) {
|
||||||
String *sname = Swig_name_get(0, name);
|
String *sname = Swig_name_get(0, name);
|
||||||
String *mangled = Swig_name_mangle(sname);
|
String *mangled = Swig_name_mangle_string(sname);
|
||||||
call = Swig_cfunction_call(mangled, 0);
|
call = Swig_cfunction_call(mangled, 0);
|
||||||
cres = Swig_cresult(ty, Swig_cresult_name(), call);
|
cres = Swig_cresult(ty, Swig_cresult_name(), call);
|
||||||
Setattr(n, "wrap:action", cres);
|
Setattr(n, "wrap:action", cres);
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ void Swig_fragment_register(Node *fragment) {
|
||||||
String *type = Getattr(fragment, "type");
|
String *type = Getattr(fragment, "type");
|
||||||
if (type) {
|
if (type) {
|
||||||
SwigType *rtype = SwigType_typedef_resolve_all(type);
|
SwigType *rtype = SwigType_typedef_resolve_all(type);
|
||||||
String *mangle = Swig_string_mangle_type(type);
|
String *mangle = Swig_name_mangle_type(type);
|
||||||
Append(name, mangle);
|
Append(name, mangle);
|
||||||
Delete(mangle);
|
Delete(mangle);
|
||||||
Delete(rtype);
|
Delete(rtype);
|
||||||
|
|
@ -106,7 +106,7 @@ void Swig_fragment_emit(Node *n) {
|
||||||
|
|
||||||
type = Getattr(n, "type");
|
type = Getattr(n, "type");
|
||||||
if (type) {
|
if (type) {
|
||||||
mangle = Swig_string_mangle_type(type);
|
mangle = Swig_name_mangle_type(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
|
|
@ -162,7 +162,7 @@ void Swig_fragment_emit(Node *n) {
|
||||||
SwigType *rtype = SwigType_typedef_resolve_all(type);
|
SwigType *rtype = SwigType_typedef_resolve_all(type);
|
||||||
if (!Equal(type, rtype)) {
|
if (!Equal(type, rtype)) {
|
||||||
String *name = Copy(Getattr(n, "value"));
|
String *name = Copy(Getattr(n, "value"));
|
||||||
String *mangle = Swig_string_mangle_type(type);
|
String *mangle = Swig_name_mangle_type(type);
|
||||||
Append(name, mangle);
|
Append(name, mangle);
|
||||||
Setfile(name, Getfile(n));
|
Setfile(name, Getfile(n));
|
||||||
Setline(name, Getline(n));
|
Setline(name, Getline(n));
|
||||||
|
|
|
||||||
|
|
@ -702,170 +702,8 @@ String *Swig_string_typecode(String *s) {
|
||||||
return ns;
|
return ns;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
static String *string_mangle(String *s) {
|
||||||
* Swig_string_mangle_type()
|
return Swig_name_mangle_string(s);
|
||||||
*
|
|
||||||
* Same as Swig_string_mangle, but converting internal SwigType * to a human
|
|
||||||
* readable string of the type (for templates). Simplifies a type that is a
|
|
||||||
* template to the default template if possible.
|
|
||||||
* ----------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
String *Swig_string_mangle_type(const SwigType *s) {
|
|
||||||
String *mangled = 0;
|
|
||||||
String *b = Copy(s);
|
|
||||||
if (SwigType_istemplate(b)) {
|
|
||||||
String *st = Swig_symbol_template_deftype(b, 0);
|
|
||||||
String *sq = Swig_symbol_type_qualify(st, 0);
|
|
||||||
String *t = SwigType_namestr(sq);
|
|
||||||
Delete(st);
|
|
||||||
Delete(sq);
|
|
||||||
Delete(b);
|
|
||||||
b = t;
|
|
||||||
}
|
|
||||||
mangled = Swig_string_mangle(b);
|
|
||||||
Delete(b);
|
|
||||||
return mangled;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
|
||||||
* Swig_string_mangle()
|
|
||||||
*
|
|
||||||
* Take a string and mangle it by stripping all non-valid C identifier
|
|
||||||
* characters.
|
|
||||||
*
|
|
||||||
* This routine skips unnecessary blank spaces, therefore mangling
|
|
||||||
* 'char *' and 'char*', 'std::pair<int, int >' and
|
|
||||||
* 'std::pair<int,int>', produce the same result.
|
|
||||||
*
|
|
||||||
* However, note that 'long long' and 'long_long' produce different
|
|
||||||
* mangled strings.
|
|
||||||
*
|
|
||||||
* The mangling method still is not 'perfect', for example std::pair and
|
|
||||||
* std_pair return the same mangling. This is just a little better
|
|
||||||
* than before, but it seems to be enough for most of the purposes.
|
|
||||||
*
|
|
||||||
* Having a perfect mangling will break some examples and code which
|
|
||||||
* assume, for example, that A::get_value will be mangled as
|
|
||||||
* A_get_value.
|
|
||||||
* ----------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
String *Swig_string_mangle(const String *s) {
|
|
||||||
String *result = NewStringEmpty();
|
|
||||||
int space = 0;
|
|
||||||
int state = 0;
|
|
||||||
char *pc, *cb;
|
|
||||||
|
|
||||||
pc = cb = Char(s);
|
|
||||||
while (*pc) {
|
|
||||||
char c = *pc;
|
|
||||||
if (isalnum((int) c) || (c == '_')) {
|
|
||||||
state = 1;
|
|
||||||
if (space && (space == state)) {
|
|
||||||
Append(result, "_SS_");
|
|
||||||
}
|
|
||||||
space = 0;
|
|
||||||
Printf(result, "%c", (int) c);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
if (isspace((int) c)) {
|
|
||||||
space = state;
|
|
||||||
++pc;
|
|
||||||
continue;
|
|
||||||
} else {
|
|
||||||
state = 3;
|
|
||||||
space = 0;
|
|
||||||
}
|
|
||||||
switch (c) {
|
|
||||||
case '.':
|
|
||||||
if ((cb != pc) && (*(pc - 1) == 'p')) {
|
|
||||||
Append(result, "_");
|
|
||||||
++pc;
|
|
||||||
continue;
|
|
||||||
} else {
|
|
||||||
c = 'f';
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case ':':
|
|
||||||
if (*(pc + 1) == ':') {
|
|
||||||
Append(result, "_");
|
|
||||||
++pc;
|
|
||||||
++pc;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case '*':
|
|
||||||
c = 'm';
|
|
||||||
break;
|
|
||||||
case '&':
|
|
||||||
c = 'A';
|
|
||||||
break;
|
|
||||||
case '<':
|
|
||||||
c = 'l';
|
|
||||||
break;
|
|
||||||
case '>':
|
|
||||||
c = 'g';
|
|
||||||
break;
|
|
||||||
case '=':
|
|
||||||
c = 'e';
|
|
||||||
break;
|
|
||||||
case ',':
|
|
||||||
c = 'c';
|
|
||||||
break;
|
|
||||||
case '(':
|
|
||||||
c = 'p';
|
|
||||||
break;
|
|
||||||
case ')':
|
|
||||||
c = 'P';
|
|
||||||
break;
|
|
||||||
case '[':
|
|
||||||
c = 'b';
|
|
||||||
break;
|
|
||||||
case ']':
|
|
||||||
c = 'B';
|
|
||||||
break;
|
|
||||||
case '^':
|
|
||||||
c = 'x';
|
|
||||||
break;
|
|
||||||
case '|':
|
|
||||||
c = 'o';
|
|
||||||
break;
|
|
||||||
case '~':
|
|
||||||
c = 'n';
|
|
||||||
break;
|
|
||||||
case '!':
|
|
||||||
c = 'N';
|
|
||||||
break;
|
|
||||||
case '%':
|
|
||||||
c = 'M';
|
|
||||||
break;
|
|
||||||
case '?':
|
|
||||||
c = 'q';
|
|
||||||
break;
|
|
||||||
case '+':
|
|
||||||
c = 'a';
|
|
||||||
break;
|
|
||||||
case '-':
|
|
||||||
c = 's';
|
|
||||||
break;
|
|
||||||
case '/':
|
|
||||||
c = 'd';
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (isalpha((int) c)) {
|
|
||||||
Printf(result, "_S%c_", (int) c);
|
|
||||||
} else {
|
|
||||||
Printf(result, "_S%02X_", (int) c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
++pc;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
String *Swig_string_emangle(String *s) {
|
|
||||||
return Swig_string_mangle(s);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1542,7 +1380,7 @@ void Swig_init(void) {
|
||||||
DohEncoding("lctitle", Swig_string_lccase);
|
DohEncoding("lctitle", Swig_string_lccase);
|
||||||
DohEncoding("utitle", Swig_string_ucase);
|
DohEncoding("utitle", Swig_string_ucase);
|
||||||
DohEncoding("typecode", Swig_string_typecode);
|
DohEncoding("typecode", Swig_string_typecode);
|
||||||
DohEncoding("mangle", Swig_string_emangle);
|
DohEncoding("mangle", string_mangle);
|
||||||
DohEncoding("command", Swig_string_command);
|
DohEncoding("command", Swig_string_command);
|
||||||
DohEncoding("schemify", Swig_string_schemify);
|
DohEncoding("schemify", Swig_string_schemify);
|
||||||
DohEncoding("strip", Swig_string_strip);
|
DohEncoding("strip", Swig_string_strip);
|
||||||
|
|
|
||||||
|
|
@ -157,21 +157,168 @@ static void replace_nspace(String *name, const_String_or_char_ptr nspace) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
* Swig_name_mangle()
|
* Swig_name_mangle_type()
|
||||||
*
|
*
|
||||||
* Converts all of the non-identifier characters of a string to underscores.
|
* Same as Swig_name_mangle_string, but converting internal SwigType * to a human
|
||||||
|
* readable string of the type (for templates). Simplifies a type that is a
|
||||||
|
* template to the default template if possible.
|
||||||
* ----------------------------------------------------------------------------- */
|
* ----------------------------------------------------------------------------- */
|
||||||
|
|
||||||
String *Swig_name_mangle(const_String_or_char_ptr s) {
|
String *Swig_name_mangle_type(const SwigType *s) {
|
||||||
#if 0
|
String *mangled = 0;
|
||||||
String *r = NewString(s);
|
String *b = Copy(s);
|
||||||
name_mangle(r);
|
if (SwigType_istemplate(b)) {
|
||||||
return r;
|
String *st = Swig_symbol_template_deftype(b, 0);
|
||||||
#else
|
String *sq = Swig_symbol_type_qualify(st, 0);
|
||||||
return Swig_string_mangle(s);
|
String *t = SwigType_namestr(sq);
|
||||||
#endif
|
Delete(st);
|
||||||
|
Delete(sq);
|
||||||
|
Delete(b);
|
||||||
|
b = t;
|
||||||
|
}
|
||||||
|
mangled = Swig_name_mangle_string(b);
|
||||||
|
Delete(b);
|
||||||
|
return mangled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -----------------------------------------------------------------------------
|
||||||
|
* Swig_name_mangle_string()
|
||||||
|
*
|
||||||
|
* Take a string and mangle it by stripping all non-valid C identifier
|
||||||
|
* characters.
|
||||||
|
*
|
||||||
|
* This routine skips unnecessary blank spaces, therefore mangling
|
||||||
|
* 'char *' and 'char*', 'std::pair<int, int >' and
|
||||||
|
* 'std::pair<int,int>', produce the same result.
|
||||||
|
*
|
||||||
|
* However, note that 'long long' and 'long_long' produce different
|
||||||
|
* mangled strings.
|
||||||
|
*
|
||||||
|
* The mangling method still is not 'perfect', for example std::pair and
|
||||||
|
* std_pair return the same mangling. This is just a little better
|
||||||
|
* than before, but it seems to be enough for most of the purposes.
|
||||||
|
*
|
||||||
|
* Having a perfect mangling will break some examples and code which
|
||||||
|
* assume, for example, that A::get_value will be mangled as
|
||||||
|
* A_get_value.
|
||||||
|
* ----------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
String *Swig_name_mangle_string(const String *s) {
|
||||||
|
String *result = NewStringEmpty();
|
||||||
|
int space = 0;
|
||||||
|
int state = 0;
|
||||||
|
char *pc, *cb;
|
||||||
|
|
||||||
|
pc = cb = Char(s);
|
||||||
|
while (*pc) {
|
||||||
|
char c = *pc;
|
||||||
|
if (isalnum((int) c) || (c == '_')) {
|
||||||
|
state = 1;
|
||||||
|
if (space && (space == state)) {
|
||||||
|
Append(result, "_SS_");
|
||||||
|
}
|
||||||
|
space = 0;
|
||||||
|
Printf(result, "%c", (int) c);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (isspace((int) c)) {
|
||||||
|
space = state;
|
||||||
|
++pc;
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
state = 3;
|
||||||
|
space = 0;
|
||||||
|
}
|
||||||
|
switch (c) {
|
||||||
|
case '.':
|
||||||
|
if ((cb != pc) && (*(pc - 1) == 'p')) {
|
||||||
|
Append(result, "_");
|
||||||
|
++pc;
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
c = 'f';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ':':
|
||||||
|
if (*(pc + 1) == ':') {
|
||||||
|
Append(result, "_");
|
||||||
|
++pc;
|
||||||
|
++pc;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case '*':
|
||||||
|
c = 'm';
|
||||||
|
break;
|
||||||
|
case '&':
|
||||||
|
c = 'A';
|
||||||
|
break;
|
||||||
|
case '<':
|
||||||
|
c = 'l';
|
||||||
|
break;
|
||||||
|
case '>':
|
||||||
|
c = 'g';
|
||||||
|
break;
|
||||||
|
case '=':
|
||||||
|
c = 'e';
|
||||||
|
break;
|
||||||
|
case ',':
|
||||||
|
c = 'c';
|
||||||
|
break;
|
||||||
|
case '(':
|
||||||
|
c = 'p';
|
||||||
|
break;
|
||||||
|
case ')':
|
||||||
|
c = 'P';
|
||||||
|
break;
|
||||||
|
case '[':
|
||||||
|
c = 'b';
|
||||||
|
break;
|
||||||
|
case ']':
|
||||||
|
c = 'B';
|
||||||
|
break;
|
||||||
|
case '^':
|
||||||
|
c = 'x';
|
||||||
|
break;
|
||||||
|
case '|':
|
||||||
|
c = 'o';
|
||||||
|
break;
|
||||||
|
case '~':
|
||||||
|
c = 'n';
|
||||||
|
break;
|
||||||
|
case '!':
|
||||||
|
c = 'N';
|
||||||
|
break;
|
||||||
|
case '%':
|
||||||
|
c = 'M';
|
||||||
|
break;
|
||||||
|
case '?':
|
||||||
|
c = 'q';
|
||||||
|
break;
|
||||||
|
case '+':
|
||||||
|
c = 'a';
|
||||||
|
break;
|
||||||
|
case '-':
|
||||||
|
c = 's';
|
||||||
|
break;
|
||||||
|
case '/':
|
||||||
|
c = 'd';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (isalpha((int) c)) {
|
||||||
|
Printf(result, "_S%c_", (int) c);
|
||||||
|
} else {
|
||||||
|
Printf(result, "_S%02X_", (int) c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
++pc;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
* Swig_name_wrapper()
|
* Swig_name_wrapper()
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -271,7 +271,8 @@ extern int ParmList_is_compactdefargs(ParmList *p);
|
||||||
|
|
||||||
extern void Swig_name_register(const_String_or_char_ptr method, const_String_or_char_ptr format);
|
extern void Swig_name_register(const_String_or_char_ptr method, const_String_or_char_ptr format);
|
||||||
extern void Swig_name_unregister(const_String_or_char_ptr method);
|
extern void Swig_name_unregister(const_String_or_char_ptr method);
|
||||||
extern String *Swig_name_mangle(const_String_or_char_ptr s);
|
extern String *Swig_name_mangle_string(const String *s);
|
||||||
|
extern String *Swig_name_mangle_type(const SwigType *s);
|
||||||
extern String *Swig_name_wrapper(const_String_or_char_ptr fname);
|
extern String *Swig_name_wrapper(const_String_or_char_ptr fname);
|
||||||
extern String *Swig_name_member(const_String_or_char_ptr nspace, const_String_or_char_ptr classname, const_String_or_char_ptr membername);
|
extern String *Swig_name_member(const_String_or_char_ptr nspace, const_String_or_char_ptr classname, const_String_or_char_ptr membername);
|
||||||
extern String *Swig_name_get(const_String_or_char_ptr nspace, const_String_or_char_ptr vname);
|
extern String *Swig_name_get(const_String_or_char_ptr nspace, const_String_or_char_ptr vname);
|
||||||
|
|
@ -323,8 +324,6 @@ extern int ParmList_is_compactdefargs(ParmList *p);
|
||||||
extern int Swig_storage_isstatic_custom(Node *n, const_String_or_char_ptr storage);
|
extern int Swig_storage_isstatic_custom(Node *n, const_String_or_char_ptr storage);
|
||||||
extern int Swig_storage_isstatic(Node *n);
|
extern int Swig_storage_isstatic(Node *n);
|
||||||
extern String *Swig_string_escape(String *s);
|
extern String *Swig_string_escape(String *s);
|
||||||
extern String *Swig_string_mangle(const String *s);
|
|
||||||
extern String *Swig_string_mangle_type(const SwigType *s);
|
|
||||||
extern void Swig_scopename_split(const String *s, String **prefix, String **last);
|
extern void Swig_scopename_split(const String *s, String **prefix, String **last);
|
||||||
extern String *Swig_scopename_prefix(const String *s);
|
extern String *Swig_scopename_prefix(const String *s);
|
||||||
extern String *Swig_scopename_last(const String *s);
|
extern String *Swig_scopename_last(const String *s);
|
||||||
|
|
|
||||||
|
|
@ -1293,7 +1293,7 @@ static void typemap_merge_fragment_kwargs(Parm *kw) {
|
||||||
reattach_kw = prev_kw;
|
reattach_kw = prev_kw;
|
||||||
}
|
}
|
||||||
if (kwtype) {
|
if (kwtype) {
|
||||||
String *mangle = Swig_string_mangle_type(kwtype);
|
String *mangle = Swig_name_mangle_type(kwtype);
|
||||||
Append(fragment, mangle);
|
Append(fragment, mangle);
|
||||||
Delete(mangle);
|
Delete(mangle);
|
||||||
/* Remove 'type' from kwargs so it's not duplicated later */
|
/* Remove 'type' from kwargs so it's not duplicated later */
|
||||||
|
|
@ -1541,7 +1541,7 @@ static String *Swig_typemap_lookup_impl(const_String_or_char_ptr tmap_method, No
|
||||||
Delete(parm_sublist);
|
Delete(parm_sublist);
|
||||||
}
|
}
|
||||||
if (kwtype) {
|
if (kwtype) {
|
||||||
String *mangle = Swig_string_mangle_type(kwtype);
|
String *mangle = Swig_name_mangle_type(kwtype);
|
||||||
Append(value, mangle);
|
Append(value, mangle);
|
||||||
Delete(mangle);
|
Delete(mangle);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue