summaryrefslogtreecommitdiffstats
path: root/Objects/complexobject.c
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2001-08-08 05:00:18 (GMT)
committerGuido van Rossum <guido@python.org>2001-08-08 05:00:18 (GMT)
commit4668b000a1d9113394941ad39875c827634feb49 (patch)
tree734560442fef1ce34912ceb772099b9a006e010a /Objects/complexobject.c
parent074c9d2b2081237c1071a3775f6e36252cf16ad7 (diff)
downloadcpython-4668b000a1d9113394941ad39875c827634feb49.zip
cpython-4668b000a1d9113394941ad39875c827634feb49.tar.gz
cpython-4668b000a1d9113394941ad39875c827634feb49.tar.bz2
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.
Diffstat (limited to 'Objects/complexobject.c')
-rw-r--r--Objects/complexobject.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/Objects/complexobject.c b/Objects/complexobject.c
index 9a66c0c..5cfb3ca 100644
--- a/Objects/complexobject.c
+++ b/Objects/complexobject.c
@@ -442,6 +442,21 @@ complex_pow(PyComplexObject *v, PyObject *w, PyComplexObject *z)
}
static PyObject *
+complex_int_div(PyComplexObject *v, PyComplexObject *w)
+{
+ PyObject *t, *r;
+
+ t = complex_divmod(v, w);
+ if (t != NULL) {
+ r = PyTuple_GET_ITEM(t, 0);
+ Py_INCREF(r);
+ Py_DECREF(t);
+ return r;
+ }
+ return NULL;
+}
+
+static PyObject *
complex_neg(PyComplexObject *v)
{
Py_complex neg;
@@ -859,6 +874,21 @@ static PyNumberMethods complex_as_number = {
(unaryfunc)complex_float, /* nb_float */
0, /* nb_oct */
0, /* nb_hex */
+ 0, /* nb_inplace_add */
+ 0, /* nb_inplace_subtract */
+ 0, /* nb_inplace_multiply*/
+ 0, /* nb_inplace_divide */
+ 0, /* nb_inplace_remainder */
+ 0, /* nb_inplace_power */
+ 0, /* nb_inplace_lshift */
+ 0, /* nb_inplace_rshift */
+ 0, /* nb_inplace_and */
+ 0, /* nb_inplace_xor */
+ 0, /* nb_inplace_or */
+ (binaryfunc)complex_int_div, /* nb_floor_divide */
+ (binaryfunc)complex_div, /* nb_true_divide */
+ 0, /* nb_inplace_floor_divide */
+ 0, /* nb_inplace_true_divide */
};
PyTypeObject PyComplex_Type = {