SwigType * handling corrections - Python builtin 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 *. The previous commit is a pre-requisite in order to prevent duplicate symbols from being generated in the C++ wrappers.
This commit is contained in:
parent
4729cf2b1f
commit
29bc7492a2
1 changed files with 27 additions and 19 deletions
|
|
@ -1898,16 +1898,20 @@ public:
|
||||||
String *str = Getattr(n, "feature:docstring");
|
String *str = Getattr(n, "feature:docstring");
|
||||||
if (!str || Len(str) == 0) {
|
if (!str || Len(str) == 0) {
|
||||||
if (builtin) {
|
if (builtin) {
|
||||||
String *name = Getattr(n, "name");
|
SwigType *name = Getattr(n, "name");
|
||||||
String *rname = add_explicit_scope(SwigType_namestr(name));
|
SwigType *sname = add_explicit_scope(name);
|
||||||
|
String *rname = SwigType_namestr(sname);
|
||||||
Printf(doc, "%s", rname);
|
Printf(doc, "%s", rname);
|
||||||
|
Delete(sname);
|
||||||
Delete(rname);
|
Delete(rname);
|
||||||
} else {
|
} else {
|
||||||
|
String *classname_str = SwigType_namestr(real_classname);
|
||||||
if (CPlusPlus) {
|
if (CPlusPlus) {
|
||||||
Printf(doc, "Proxy of C++ %s class.", SwigType_namestr(real_classname));
|
Printf(doc, "Proxy of C++ %s class.", classname_str);
|
||||||
} else {
|
} else {
|
||||||
Printf(doc, "Proxy of C %s struct.", SwigType_namestr(real_classname));
|
Printf(doc, "Proxy of C %s struct.", classname_str);
|
||||||
}
|
}
|
||||||
|
Delete(classname_str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -3922,35 +3926,36 @@ public:
|
||||||
* classHandler()
|
* classHandler()
|
||||||
* ------------------------------------------------------------ */
|
* ------------------------------------------------------------ */
|
||||||
|
|
||||||
String *add_explicit_scope(String *s) {
|
SwigType *add_explicit_scope(SwigType *s) {
|
||||||
if (!Strstr(s, "::")) {
|
if (!Strstr(s, "::")) {
|
||||||
String *ss = NewStringf("::%s", s);
|
return NewStringf("::%s", s);
|
||||||
Delete(s);
|
|
||||||
s = ss;
|
|
||||||
}
|
}
|
||||||
return s;
|
return Copy(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
void builtin_pre_decl(Node *n) {
|
void builtin_pre_decl(Node *n) {
|
||||||
String *name = Getattr(n, "name");
|
SwigType *name = Getattr(n, "name");
|
||||||
String *rname = add_explicit_scope(SwigType_namestr(name));
|
SwigType *sname = add_explicit_scope(name);
|
||||||
String *mname = SwigType_manglestr(rname);
|
String *rname = SwigType_namestr(sname);
|
||||||
|
String *mname = SwigType_manglestr(sname);
|
||||||
|
|
||||||
Printf(f_init, "\n/* type '%s' */\n", rname);
|
Printf(f_init, "\n/* type '%s' */\n", rname);
|
||||||
Printf(f_init, " builtin_pytype = (PyTypeObject *)&SwigPyBuiltin_%s_type;\n", mname);
|
Printf(f_init, " builtin_pytype = (PyTypeObject *)&SwigPyBuiltin_%s_type;\n", mname);
|
||||||
Printf(f_init, " builtin_pytype->tp_dict = d = PyDict_New();\n");
|
Printf(f_init, " builtin_pytype->tp_dict = d = PyDict_New();\n");
|
||||||
|
|
||||||
|
Delete(sname);
|
||||||
Delete(rname);
|
Delete(rname);
|
||||||
Delete(mname);
|
Delete(mname);
|
||||||
}
|
}
|
||||||
|
|
||||||
void builtin_post_decl(File *f, Node *n) {
|
void builtin_post_decl(File *f, Node *n) {
|
||||||
String *name = Getattr(n, "name");
|
SwigType *name = Getattr(n, "name");
|
||||||
String *pname = Copy(name);
|
SwigType *pname = Copy(name);
|
||||||
SwigType_add_pointer(pname);
|
SwigType_add_pointer(pname);
|
||||||
String *symname = Getattr(n, "sym:name");
|
String *symname = Getattr(n, "sym:name");
|
||||||
String *rname = add_explicit_scope(SwigType_namestr(name));
|
SwigType *sname = add_explicit_scope(name);
|
||||||
String *mname = SwigType_manglestr(rname);
|
String *rname = SwigType_namestr(sname);
|
||||||
|
String *mname = SwigType_manglestr(sname);
|
||||||
String *pmname = SwigType_manglestr(pname);
|
String *pmname = SwigType_manglestr(pname);
|
||||||
String *templ = NewStringf("SwigPyBuiltin_%s", mname);
|
String *templ = NewStringf("SwigPyBuiltin_%s", mname);
|
||||||
int funpack = fastunpack;
|
int funpack = fastunpack;
|
||||||
|
|
@ -4381,9 +4386,10 @@ public:
|
||||||
|
|
||||||
Delete(clientdata);
|
Delete(clientdata);
|
||||||
Delete(smart);
|
Delete(smart);
|
||||||
|
Delete(sname);
|
||||||
Delete(rname);
|
Delete(rname);
|
||||||
Delete(pname);
|
|
||||||
Delete(mname);
|
Delete(mname);
|
||||||
|
Delete(pname);
|
||||||
Delete(pmname);
|
Delete(pmname);
|
||||||
Delete(templ);
|
Delete(templ);
|
||||||
Delete(tp_flags);
|
Delete(tp_flags);
|
||||||
|
|
@ -4480,9 +4486,11 @@ public:
|
||||||
Setattr(n, "feature:python:tp_doc", ds);
|
Setattr(n, "feature:python:tp_doc", ds);
|
||||||
Delete(ds);
|
Delete(ds);
|
||||||
} else {
|
} else {
|
||||||
String *name = Getattr(n, "name");
|
SwigType *name = Getattr(n, "name");
|
||||||
String *rname = add_explicit_scope(SwigType_namestr(name));
|
SwigType *sname = add_explicit_scope(name);
|
||||||
|
String *rname = SwigType_namestr(sname);
|
||||||
Setattr(n, "feature:python:tp_doc", rname);
|
Setattr(n, "feature:python:tp_doc", rname);
|
||||||
|
Delete(sname);
|
||||||
Delete(rname);
|
Delete(rname);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue