Further fixes when using type() when using -builtin to include module name

Using type() on a builtin type should include the package and module
name, see http://docs.python.org/2/c-api/typeobj.html
This commit is contained in:
William S Fulton 2014-03-01 23:24:59 +00:00
commit 4fb940d913
5 changed files with 23 additions and 2 deletions

View file

@ -3592,11 +3592,19 @@ public:
if (GetFlag(n, "feature:python:nondynamic"))
Setattr(n, "feature:python:tp_setattro", "SWIG_Python_NonDynamicSetAttr");
Node *mod = Getattr(n, "module");
String *modname = mod ? Getattr(mod, "name") : 0;
String *quoted_symname;
if (package) {
quoted_symname = NewStringf("\"%s.%s\"", package, symname);
if (modname)
quoted_symname = NewStringf("\"%s.%s.%s\"", package, modname, symname);
else
quoted_symname = NewStringf("\"%s.%s\"", package, symname);
} else {
quoted_symname = NewStringf("\"%s\"", symname);
if (modname)
quoted_symname = NewStringf("\"%s.%s\"", modname, symname);
else
quoted_symname = NewStringf("\"%s\"", symname);
}
String *quoted_rname = NewStringf("\"%s\"", rname);
char const *tp_init = builtin_tp_init ? Char(builtin_tp_init) : Swig_directorclass(n) ? "0" : "SwigPyBuiltin_BadInit";