diff options
Diffstat (limited to 'Python/bltinmodule.c')
-rw-r--r-- | Python/bltinmodule.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 142a4f7..6a81c91 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -308,6 +308,28 @@ builtin_complex(self, args) "complex() argument can't be converted to complex"); return NULL; } + /* XXX Hack to support classes with __complex__ method */ + if (is_instanceobject(r)) { + static object *complexstr; + object *f; + if (complexstr == NULL) { + complexstr = newstringobject("__complex__"); + if (complexstr == NULL) + return NULL; + } + f = getattro(r, complexstr); + if (f == NULL) + err_clear(); + else { + object *args = mkvalue("()"); + if (args == NULL) + return NULL; + r = call_object(f, args); + DECREF(args); + if (r == NULL) + return NULL; + } + } if (is_complexobject(r)) cr = ((complexobject*)r)->cval; else { @@ -632,7 +654,7 @@ builtin_map(self, args) /* XXX Special case map(None, single_list) could be more efficient */ for (i = 0; ; ++i) { - object *alist, *item, *value; + object *alist, *item=NULL, *value; int any = 0; if (func == None && n == 1) |