summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2002-04-03 22:41:51 (GMT)
committerGuido van Rossum <guido@python.org>2002-04-03 22:41:51 (GMT)
commit77f6a65eb00f005939c6c7c5d6ac0f037a0ce1bd (patch)
treee92163095e7ae548c36cea459dad87db74a413ef /Python
parente9c0358bf45bd6e0fe0b17720b41d20d618e6d9d (diff)
downloadcpython-77f6a65eb00f005939c6c7c5d6ac0f037a0ce1bd.zip
cpython-77f6a65eb00f005939c6c7c5d6ac0f037a0ce1bd.tar.gz
cpython-77f6a65eb00f005939c6c7c5d6ac0f037a0ce1bd.tar.bz2
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.
Diffstat (limited to 'Python')
-rw-r--r--Python/bltinmodule.c19
-rw-r--r--Python/marshal.c16
2 files changed, 27 insertions, 8 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 1561a22..35536d9 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -130,11 +130,11 @@ extend to the end of the target object (or with the specified size).";
static PyObject *
builtin_callable(PyObject *self, PyObject *v)
{
- return PyInt_FromLong((long)PyCallable_Check(v));
+ return PyBool_FromLong((long)PyCallable_Check(v));
}
static char callable_doc[] =
-"callable(object) -> Boolean\n\
+"callable(object) -> bool\n\
\n\
Return whether the object is callable (i.e., some kind of function).\n\
Note that classes are callable, as are instances with a __call__() method.";
@@ -713,7 +713,7 @@ builtin_hasattr(PyObject *self, PyObject *args)
}
static char hasattr_doc[] =
-"hasattr(object, name) -> Boolean\n\
+"hasattr(object, name) -> bool\n\
\n\
Return whether the object has an attribute with the given name.\n\
(This is done by calling getattr(object, name) and catching exceptions.)";
@@ -1666,11 +1666,11 @@ builtin_isinstance(PyObject *self, PyObject *args)
retval = PyObject_IsInstance(inst, cls);
if (retval < 0)
return NULL;
- return PyInt_FromLong(retval);
+ return PyBool_FromLong(retval);
}
static char isinstance_doc[] =
-"isinstance(object, class-or-type-or-tuple) -> Boolean\n\
+"isinstance(object, class-or-type-or-tuple) -> bool\n\
\n\
Return whether an object is an instance of a class or of a subclass thereof.\n\
With a type as second argument, return whether that is the object's type.\n\
@@ -1691,11 +1691,11 @@ builtin_issubclass(PyObject *self, PyObject *args)
retval = PyObject_IsSubclass(derived, cls);
if (retval < 0)
return NULL;
- return PyInt_FromLong(retval);
+ return PyBool_FromLong(retval);
}
static char issubclass_doc[] =
-"issubclass(C, B) -> Boolean\n\
+"issubclass(C, B) -> bool\n\
\n\
Return whether class C is a subclass (i.e., a derived class) of class B.";
@@ -1856,6 +1856,9 @@ _PyBuiltin_Init(void)
SETBUILTIN("None", Py_None);
SETBUILTIN("Ellipsis", Py_Ellipsis);
SETBUILTIN("NotImplemented", Py_NotImplemented);
+ SETBUILTIN("False", Py_False);
+ SETBUILTIN("True", Py_True);
+ SETBUILTIN("bool", &PyBool_Type);
SETBUILTIN("classmethod", &PyClassMethod_Type);
#ifndef WITHOUT_COMPLEX
SETBUILTIN("complex", &PyComplex_Type);
@@ -1879,7 +1882,7 @@ _PyBuiltin_Init(void)
#ifdef Py_USING_UNICODE
SETBUILTIN("unicode", &PyUnicode_Type);
#endif
- debug = PyInt_FromLong(Py_OptimizeFlag == 0);
+ debug = PyBool_FromLong(Py_OptimizeFlag == 0);
if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
Py_XDECREF(debug);
return NULL;
diff --git a/Python/marshal.c b/Python/marshal.c
index 3cdaecd..ab26f51 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -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 @@ w_object(PyObject *v, WFILE *p)
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 @@ r_object(RFILE *p)
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));