diff Python/marshal.c @ 22785:aa8d59823add legacy-trunk

Add the 'bool' type and its values 'False' and 'True', as described in PEP 285. Everything described in the PEP is here, and there is even some documentation. I had to fix 12 unit tests; all but one of these were printing Boolean outcomes that changed from 0/1 to False/True. (The exception is test_unicode.py, which did a type(x) == type(y) style comparison. I could've fixed that with a single line using issubtype(x, type(y)), but instead chose to be explicit about those places where a bool is expected. Still to do: perhaps more documentation; change standard library modules to return False/True from predicates.
author Guido van Rossum <guido@python.org>
date Wed, 03 Apr 2002 22:41:51 +0000
parents 8703d2052339
children d6ae544acd24
line wrap: on
line diff
--- a/Python/marshal.c	Wed Apr 03 21:52:10 2002 +0000
+++ b/Python/marshal.c	Wed Apr 03 22:41:51 2002 +0000
@@ -17,6 +17,8 @@
 
 #define TYPE_NULL	'0'
 #define TYPE_NONE	'N'
+#define TYPE_FALSE	'F'
+#define TYPE_TRUE	'T'
 #define TYPE_STOPITER	'S'
 #define TYPE_ELLIPSIS   '.'
 #define TYPE_INT	'i'
@@ -126,6 +128,12 @@
 	else if (v == Py_Ellipsis) {
 	        w_byte(TYPE_ELLIPSIS, p);
 	}
+	else if (v == Py_False) {
+	        w_byte(TYPE_FALSE, p);
+	}
+	else if (v == Py_True) {
+	        w_byte(TYPE_TRUE, p);
+	}
 	else if (PyInt_Check(v)) {
 		long x = PyInt_AS_LONG((PyIntObject *)v);
 #if SIZEOF_LONG > 4
@@ -398,6 +406,14 @@
 		Py_INCREF(Py_Ellipsis);
 		return Py_Ellipsis;
 
+	case TYPE_FALSE:
+		Py_INCREF(Py_False);
+		return Py_False;
+
+	case TYPE_TRUE:
+		Py_INCREF(Py_True);
+		return Py_True;
+
 	case TYPE_INT:
 		return PyInt_FromLong(r_long(p));