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/Python/future.c b/Python/future.c
index fc0d748..db62b5b 100644
--- a/Python/future.c
+++ b/Python/future.c
@@ -33,6 +33,8 @@
ff->ff_nested_scopes = 1;
} else if (strcmp(feature, FUTURE_GENERATORS) == 0) {
ff->ff_generators = 1;
+ } else if (strcmp(feature, FUTURE_DIVISION) == 0) {
+ ff->ff_division = 1;
} else if (strcmp(feature, "braces") == 0) {
PyErr_SetString(PyExc_SyntaxError,
"not a chance");
@@ -234,6 +236,7 @@
ff->ff_last_lineno = -1;
ff->ff_nested_scopes = 0;
ff->ff_generators = 0;
+ ff->ff_division = 0;
if (future_parse(ff, n, filename) < 0) {
PyMem_Free((void *)ff);