summaryrefslogtreecommitdiffstats
path: root/Python/ceval.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 /Python/ceval.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 'Python/ceval.c')
-rw-r--r--Python/ceval.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/Python/ceval.c b/Python/ceval.c
index e6da9eb..583d7e3 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -884,6 +884,26 @@ eval_frame(PyFrameObject *f)
if (x != NULL) continue;
break;
+ case BINARY_FLOOR_DIVIDE:
+ w = POP();
+ v = POP();
+ x = PyNumber_FloorDivide(v, w);
+ Py_DECREF(v);
+ Py_DECREF(w);
+ PUSH(x);
+ if (x != NULL) continue;
+ break;
+
+ case BINARY_TRUE_DIVIDE:
+ w = POP();
+ v = POP();
+ x = PyNumber_TrueDivide(v, w);
+ Py_DECREF(v);
+ Py_DECREF(w);
+ PUSH(x);
+ if (x != NULL) continue;
+ break;
+
case BINARY_MODULO:
w = POP();
v = POP();
@@ -1051,6 +1071,26 @@ eval_frame(PyFrameObject *f)
if (x != NULL) continue;
break;
+ case INPLACE_FLOOR_DIVIDE:
+ w = POP();
+ v = POP();
+ x = PyNumber_InPlaceFloorDivide(v, w);
+ Py_DECREF(v);
+ Py_DECREF(w);
+ PUSH(x);
+ if (x != NULL) continue;
+ break;
+
+ case INPLACE_TRUE_DIVIDE:
+ w = POP();
+ v = POP();
+ x = PyNumber_InPlaceTrueDivide(v, w);
+ Py_DECREF(v);
+ Py_DECREF(w);
+ PUSH(x);
+ if (x != NULL) continue;
+ break;
+
case INPLACE_MODULO:
w = POP();
v = POP();