From: Tim Peters Date: Mon, 10 Sep 2001 21:28:20 +0000 (+0000) Subject: More for SF bug [#460020] bug or feature: unicode() and subclasses X-Git-Tag: v2.2.1c1~1875 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7a50f2536e59762897a05b1d3996e51f3f1a9686;p=python More for SF bug [#460020] bug or feature: unicode() and subclasses Repair float constructor to return a true float when passed a subclass instance. New PyFloat_CheckExact macro. --- diff --git a/Include/floatobject.h b/Include/floatobject.h index 9f67bc107d..bd4a782846 100644 --- a/Include/floatobject.h +++ b/Include/floatobject.h @@ -19,6 +19,7 @@ typedef struct { extern DL_IMPORT(PyTypeObject) PyFloat_Type; #define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type) +#define PyFloat_CheckExact(op) ((op)->ob_type == &PyFloat_Type) /* Return Python float from string PyObject. Second argument ignored on input, and, if non-NULL, NULL is stored into *junk (this tried to serve a diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index 35544c6762..1ff90607a4 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -1372,7 +1372,7 @@ def inherits(): verify(repr(precfloat(1.1)) == "1.1") a = precfloat(12345) #XXX verify(float(a) == 12345.0) - #XXX verify(float(a).__class__ is float) + verify(float(a).__class__ is float) class madtuple(tuple): _rev = None diff --git a/Objects/abstract.c b/Objects/abstract.c index 2bd0fcceba..37f7eeab05 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -909,10 +909,14 @@ PyNumber_Float(PyObject *o) if (o == NULL) return null_error(); - if (PyFloat_Check(o)) { + if (PyFloat_CheckExact(o)) { Py_INCREF(o); return o; } + if (PyFloat_Check(o)) { + PyFloatObject *po = (PyFloatObject *)o; + return PyFloat_FromDouble(po->ob_fval); + } if (!PyString_Check(o)) { m = o->ob_type->tp_as_number; if (m && m->nb_float)