bpo-15999: Clean up of handling boolean arguments. (GH-15610)
* Use the 'p' format unit instead of manually called PyObject_IsTrue().
* Pass boolean value instead 0/1 integers to functions that needs boolean.
* Convert some arguments to boolean only once.
diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c
index 96426e0..162b288 100644
--- a/Modules/_io/_iomodule.c
+++ b/Modules/_io/_iomodule.c
@@ -383,8 +383,10 @@
encoding = "utf-8";
}
#endif
- raw = PyObject_CallFunction(RawIO_class,
- "OsiO", path_or_fd, rawmode, closefd, opener);
+ raw = PyObject_CallFunction(RawIO_class, "OsOO",
+ path_or_fd, rawmode,
+ closefd ? Py_True : Py_False,
+ opener);
}
if (raw == NULL)
@@ -476,10 +478,10 @@
/* wraps into a TextIOWrapper */
wrapper = PyObject_CallFunction((PyObject *)&PyTextIOWrapper_Type,
- "Osssi",
+ "OsssO",
buffer,
encoding, errors, newline,
- line_buffering);
+ line_buffering ? Py_True : Py_False);
if (wrapper == NULL)
goto error;
result = wrapper;
diff --git a/Modules/_io/stringio.c b/Modules/_io/stringio.c
index 3f7afad..89b29bb 100644
--- a/Modules/_io/stringio.c
+++ b/Modules/_io/stringio.c
@@ -714,9 +714,9 @@
}
if (self->readuniversal) {
- self->decoder = PyObject_CallFunction(
+ self->decoder = PyObject_CallFunctionObjArgs(
(PyObject *)&PyIncrementalNewlineDecoder_Type,
- "Oi", Py_None, (int) self->readtranslate);
+ Py_None, self->readtranslate ? Py_True : Py_False, NULL);
if (self->decoder == NULL)
return -1;
}
diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c
index 7ddac80..1db8d94 100644
--- a/Modules/_io/textio.c
+++ b/Modules/_io/textio.c
@@ -880,9 +880,9 @@
return -1;
if (self->readuniversal) {
- PyObject *incrementalDecoder = PyObject_CallFunction(
+ PyObject *incrementalDecoder = PyObject_CallFunctionObjArgs(
(PyObject *)&PyIncrementalNewlineDecoder_Type,
- "Oi", self->decoder, (int)self->readtranslate);
+ self->decoder, self->readtranslate ? Py_True : Py_False, NULL);
if (incrementalDecoder == NULL)
return -1;
Py_CLEAR(self->decoder);
@@ -2591,8 +2591,8 @@
}
Py_XSETREF(self->snapshot, snapshot);
- decoded = _PyObject_CallMethodId(self->decoder, &PyId_decode,
- "Oi", input_chunk, (int)cookie.need_eof);
+ decoded = _PyObject_CallMethodIdObjArgs(self->decoder, &PyId_decode,
+ input_chunk, cookie.need_eof ? Py_True : Py_False, NULL);
if (check_decoded(decoded) < 0)
goto fail;
@@ -2819,7 +2819,7 @@
if (input == input_end) {
/* We didn't get enough decoded data; signal EOF to get more. */
PyObject *decoded = _PyObject_CallMethodId(
- self->decoder, &PyId_decode, "yi", "", /* final = */ 1);
+ self->decoder, &PyId_decode, "yO", "", /* final = */ Py_True);
if (check_decoded(decoded) < 0)
goto fail;
chars_decoded += PyUnicode_GET_LENGTH(decoded);