diff Python/ceval.c @ 19051:f20727cc3d0f legacy-trunk

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.
author Guido van Rossum <guido@python.org>
date Wed, 08 Aug 2001 05:00:18 +0000
parents 09df3254b49d
children 97a3d3d7029f
line wrap: on
line diff
--- a/Python/ceval.c	Wed Aug 08 01:30:38 2001 +0000
+++ b/Python/ceval.c	Wed Aug 08 05:00:18 2001 +0000
@@ -884,6 +884,26 @@
 			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 @@
 			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();