diff options
-rw-r--r-- | Python/bltinmodule.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 01cd5fa..8fac03c 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -78,20 +78,27 @@ builtin_dir(self, v) object *d; if (v == NULL) { d = getlocals(); + INCREF(d); } else { - if (!is_moduleobject(v)) { + d = getattr(v, "__dict__"); + if (d == NULL) { err_setstr(TypeError, - "dir() argument must be module or absent"); + "dir() argument has no variable attributes"); return NULL; } - d = getmoduledict(v); } - v = getdictkeys(d); - if (sortlist(v) != 0) { - DECREF(v); - v = NULL; + if (!is_dictobject(d)) { /* Assume it is None */ + v = newlistobject(0); } + else { + v = getdictkeys(d); + if (sortlist(v) != 0) { + DECREF(v); + v = NULL; + } + } + DECREF(d); return v; } |