Implement PEP 238 in its (almost) full glory.
This introduces:
- A new operator // that means floor division (the kind of division
where 1/2 is 0).
- The "future division" statement ("from __future__ import division)
which changes the meaning of the / operator to implement "true
division" (where 1/2 is 0.5).
- New overloadable operators __truediv__ and __floordiv__.
- New slots in the PyNumberMethods struct for true and floor division,
new abstract APIs for them, new opcodes, and so on.
I emphasize that without the future division statement, the semantics
of / will remain unchanged until Python 3.0.
Not yet implemented are warnings (default off) when / is used with int
or long arguments.
This has been on display since 7/31 as SF patch #443474.
Flames to /dev/null.
diff --git a/Objects/intobject.c b/Objects/intobject.c
index e5106c5..f69f81a 100644
--- a/Objects/intobject.c
+++ b/Objects/intobject.c
@@ -703,6 +703,12 @@
}
static PyObject *
+int_true_divide(PyObject *v, PyObject *w)
+{
+ return PyFloat_Type.tp_as_number->nb_divide(v, w);
+}
+
+static PyObject *
int_int(PyIntObject *v)
{
Py_INCREF(v);
@@ -812,6 +818,10 @@
0, /*nb_inplace_and*/
0, /*nb_inplace_xor*/
0, /*nb_inplace_or*/
+ (binaryfunc)int_div, /* nb_floor_divide */
+ int_true_divide, /* nb_true_divide */
+ 0, /* nb_inplace_floor_divide */
+ 0, /* nb_inplace_true_divide */
};
PyTypeObject PyInt_Type = {