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.
This commit is contained in:
Tim Peters 2001-09-10 21:28:20 +00:00
parent c6249e9fef
commit 7a50f2536e
3 changed files with 7 additions and 2 deletions

View File

@ -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

View File

@ -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

View File

@ -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)