Kaydet (Commit) ed0af8fe authored tarafından Guido van Rossum's avatar Guido van Rossum

Support __complex__ method on instances, for complex() conversion.

Keep gcc -Wall happy.
üst 150b2df6
...@@ -308,6 +308,28 @@ builtin_complex(self, args) ...@@ -308,6 +308,28 @@ builtin_complex(self, args)
"complex() argument can't be converted to complex"); "complex() argument can't be converted to complex");
return NULL; 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)) if (is_complexobject(r))
cr = ((complexobject*)r)->cval; cr = ((complexobject*)r)->cval;
else { else {
...@@ -632,7 +654,7 @@ builtin_map(self, args) ...@@ -632,7 +654,7 @@ builtin_map(self, args)
/* XXX Special case map(None, single_list) could be more efficient */ /* XXX Special case map(None, single_list) could be more efficient */
for (i = 0; ; ++i) { for (i = 0; ; ++i) {
object *alist, *item, *value; object *alist, *item=NULL, *value;
int any = 0; int any = 0;
if (func == None && n == 1) if (func == None && n == 1)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment