diff options
Diffstat (limited to 'Objects/complexobject.c')
-rw-r--r-- | Objects/complexobject.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/Objects/complexobject.c b/Objects/complexobject.c index bb28354..56638d5 100644 --- a/Objects/complexobject.c +++ b/Objects/complexobject.c @@ -823,6 +823,15 @@ complex_new(PyTypeObject *type, PyObject *args, PyObject *kwds) if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OO:complex", kwlist, &r, &i)) return NULL; + + /* Special-case for single argumet that is already complex */ + if (PyComplex_CheckExact(r) && i == NULL) { + /* Note that we can't know whether it's safe to return + a complex *subclass* instance as-is, hence the restriction + to exact complexes here. */ + Py_INCREF(r); + return r; + } if (PyString_Check(r) || PyUnicode_Check(r)) { if (i != NULL) { PyErr_SetString(PyExc_TypeError, |