mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
gh-101819: Adapt _io.TextIOBase methods to Argument Clinic (#104383)
This commit is contained in:
parent
7470321f81
commit
7dabb35f83
2 changed files with 233 additions and 40 deletions
167
Modules/_io/clinic/textio.c.h
generated
167
Modules/_io/clinic/textio.c.h
generated
|
@ -8,6 +8,171 @@ preserve
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
PyDoc_STRVAR(_io__TextIOBase_detach__doc__,
|
||||||
|
"detach($self, /)\n"
|
||||||
|
"--\n"
|
||||||
|
"\n"
|
||||||
|
"Separate the underlying buffer from the TextIOBase and return it.\n"
|
||||||
|
"\n"
|
||||||
|
"After the underlying buffer has been detached, the TextIO is in an unusable state.");
|
||||||
|
|
||||||
|
#define _IO__TEXTIOBASE_DETACH_METHODDEF \
|
||||||
|
{"detach", _PyCFunction_CAST(_io__TextIOBase_detach), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io__TextIOBase_detach__doc__},
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
_io__TextIOBase_detach_impl(PyObject *self, PyTypeObject *cls);
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
_io__TextIOBase_detach(PyObject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
||||||
|
{
|
||||||
|
if (nargs) {
|
||||||
|
PyErr_SetString(PyExc_TypeError, "detach() takes no arguments");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return _io__TextIOBase_detach_impl(self, cls);
|
||||||
|
}
|
||||||
|
|
||||||
|
PyDoc_STRVAR(_io__TextIOBase_read__doc__,
|
||||||
|
"read($self, /, *args)\n"
|
||||||
|
"--\n"
|
||||||
|
"\n"
|
||||||
|
"Read at most size characters from stream.\n"
|
||||||
|
"\n"
|
||||||
|
"Read from underlying buffer until we have size characters or we hit EOF.\n"
|
||||||
|
"If size is negative or omitted, read until EOF.");
|
||||||
|
|
||||||
|
#define _IO__TEXTIOBASE_READ_METHODDEF \
|
||||||
|
{"read", _PyCFunction_CAST(_io__TextIOBase_read), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io__TextIOBase_read__doc__},
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
_io__TextIOBase_read_impl(PyObject *self, PyTypeObject *cls, PyObject *args);
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
_io__TextIOBase_read(PyObject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
||||||
|
{
|
||||||
|
PyObject *return_value = NULL;
|
||||||
|
#if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
|
||||||
|
# define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
|
||||||
|
#else
|
||||||
|
# define KWTUPLE NULL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static const char * const _keywords[] = { NULL};
|
||||||
|
static _PyArg_Parser _parser = {
|
||||||
|
.keywords = _keywords,
|
||||||
|
.fname = "read",
|
||||||
|
.kwtuple = KWTUPLE,
|
||||||
|
};
|
||||||
|
#undef KWTUPLE
|
||||||
|
PyObject *argsbuf[1];
|
||||||
|
PyObject *__clinic_args = NULL;
|
||||||
|
|
||||||
|
args = _PyArg_UnpackKeywordsWithVararg(args, nargs, NULL, kwnames, &_parser, 0, 0, 0, 0, argsbuf);
|
||||||
|
if (!args) {
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
__clinic_args = args[0];
|
||||||
|
return_value = _io__TextIOBase_read_impl(self, cls, __clinic_args);
|
||||||
|
|
||||||
|
exit:
|
||||||
|
Py_XDECREF(__clinic_args);
|
||||||
|
return return_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
PyDoc_STRVAR(_io__TextIOBase_readline__doc__,
|
||||||
|
"readline($self, /, *args)\n"
|
||||||
|
"--\n"
|
||||||
|
"\n"
|
||||||
|
"Read until newline or EOF.\n"
|
||||||
|
"\n"
|
||||||
|
"Return an empty string if EOF is hit immediately.");
|
||||||
|
|
||||||
|
#define _IO__TEXTIOBASE_READLINE_METHODDEF \
|
||||||
|
{"readline", _PyCFunction_CAST(_io__TextIOBase_readline), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io__TextIOBase_readline__doc__},
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
_io__TextIOBase_readline_impl(PyObject *self, PyTypeObject *cls,
|
||||||
|
PyObject *args);
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
_io__TextIOBase_readline(PyObject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
||||||
|
{
|
||||||
|
PyObject *return_value = NULL;
|
||||||
|
#if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
|
||||||
|
# define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
|
||||||
|
#else
|
||||||
|
# define KWTUPLE NULL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static const char * const _keywords[] = { NULL};
|
||||||
|
static _PyArg_Parser _parser = {
|
||||||
|
.keywords = _keywords,
|
||||||
|
.fname = "readline",
|
||||||
|
.kwtuple = KWTUPLE,
|
||||||
|
};
|
||||||
|
#undef KWTUPLE
|
||||||
|
PyObject *argsbuf[1];
|
||||||
|
PyObject *__clinic_args = NULL;
|
||||||
|
|
||||||
|
args = _PyArg_UnpackKeywordsWithVararg(args, nargs, NULL, kwnames, &_parser, 0, 0, 0, 0, argsbuf);
|
||||||
|
if (!args) {
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
__clinic_args = args[0];
|
||||||
|
return_value = _io__TextIOBase_readline_impl(self, cls, __clinic_args);
|
||||||
|
|
||||||
|
exit:
|
||||||
|
Py_XDECREF(__clinic_args);
|
||||||
|
return return_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
PyDoc_STRVAR(_io__TextIOBase_write__doc__,
|
||||||
|
"write($self, /, *args)\n"
|
||||||
|
"--\n"
|
||||||
|
"\n"
|
||||||
|
"Write string to stream.\n"
|
||||||
|
"\n"
|
||||||
|
"Return the number of characters written\n"
|
||||||
|
"(which is always equal to the length of the string).");
|
||||||
|
|
||||||
|
#define _IO__TEXTIOBASE_WRITE_METHODDEF \
|
||||||
|
{"write", _PyCFunction_CAST(_io__TextIOBase_write), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io__TextIOBase_write__doc__},
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
_io__TextIOBase_write_impl(PyObject *self, PyTypeObject *cls, PyObject *args);
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
_io__TextIOBase_write(PyObject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
||||||
|
{
|
||||||
|
PyObject *return_value = NULL;
|
||||||
|
#if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
|
||||||
|
# define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
|
||||||
|
#else
|
||||||
|
# define KWTUPLE NULL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static const char * const _keywords[] = { NULL};
|
||||||
|
static _PyArg_Parser _parser = {
|
||||||
|
.keywords = _keywords,
|
||||||
|
.fname = "write",
|
||||||
|
.kwtuple = KWTUPLE,
|
||||||
|
};
|
||||||
|
#undef KWTUPLE
|
||||||
|
PyObject *argsbuf[1];
|
||||||
|
PyObject *__clinic_args = NULL;
|
||||||
|
|
||||||
|
args = _PyArg_UnpackKeywordsWithVararg(args, nargs, NULL, kwnames, &_parser, 0, 0, 0, 0, argsbuf);
|
||||||
|
if (!args) {
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
__clinic_args = args[0];
|
||||||
|
return_value = _io__TextIOBase_write_impl(self, cls, __clinic_args);
|
||||||
|
|
||||||
|
exit:
|
||||||
|
Py_XDECREF(__clinic_args);
|
||||||
|
return return_value;
|
||||||
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(_io_IncrementalNewlineDecoder___init____doc__,
|
PyDoc_STRVAR(_io_IncrementalNewlineDecoder___init____doc__,
|
||||||
"IncrementalNewlineDecoder(decoder, translate, errors=\'strict\')\n"
|
"IncrementalNewlineDecoder(decoder, translate, errors=\'strict\')\n"
|
||||||
"--\n"
|
"--\n"
|
||||||
|
@ -769,4 +934,4 @@ _io_TextIOWrapper_close(textio *self, PyObject *Py_UNUSED(ignored))
|
||||||
{
|
{
|
||||||
return _io_TextIOWrapper_close_impl(self);
|
return _io_TextIOWrapper_close_impl(self);
|
||||||
}
|
}
|
||||||
/*[clinic end generated code: output=73f84b13c343b34b input=a9049054013a1b77]*/
|
/*[clinic end generated code: output=d800e5a8a50d6720 input=a9049054013a1b77]*/
|
||||||
|
|
|
@ -20,8 +20,16 @@
|
||||||
module _io
|
module _io
|
||||||
class _io.IncrementalNewlineDecoder "nldecoder_object *" "clinic_state()->PyIncrementalNewlineDecoder_Type"
|
class _io.IncrementalNewlineDecoder "nldecoder_object *" "clinic_state()->PyIncrementalNewlineDecoder_Type"
|
||||||
class _io.TextIOWrapper "textio *" "clinic_state()->TextIOWrapper_Type"
|
class _io.TextIOWrapper "textio *" "clinic_state()->TextIOWrapper_Type"
|
||||||
|
class _io._TextIOBase "PyObject *" "&PyTextIOBase_Type"
|
||||||
[clinic start generated code]*/
|
[clinic start generated code]*/
|
||||||
/*[clinic end generated code: output=da39a3ee5e6b4b0d input=81f67cf54eaa6001]*/
|
/*[clinic end generated code: output=da39a3ee5e6b4b0d input=8b7f24fa13bfdd7f]*/
|
||||||
|
|
||||||
|
typedef struct nldecoder_object nldecoder_object;
|
||||||
|
typedef struct textio textio;
|
||||||
|
|
||||||
|
#define clinic_state() (find_io_state_by_def(Py_TYPE(self)))
|
||||||
|
#include "clinic/textio.c.h"
|
||||||
|
#undef clinic_state
|
||||||
|
|
||||||
/* TextIOBase */
|
/* TextIOBase */
|
||||||
|
|
||||||
|
@ -42,52 +50,76 @@ _unsupported(const char *message)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(textiobase_detach_doc,
|
/*[clinic input]
|
||||||
"Separate the underlying buffer from the TextIOBase and return it.\n"
|
_io._TextIOBase.detach
|
||||||
"\n"
|
cls: defining_class
|
||||||
"After the underlying buffer has been detached, the TextIO is in an\n"
|
/
|
||||||
"unusable state.\n"
|
|
||||||
);
|
Separate the underlying buffer from the TextIOBase and return it.
|
||||||
|
|
||||||
|
After the underlying buffer has been detached, the TextIO is in an unusable state.
|
||||||
|
[clinic start generated code]*/
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
textiobase_detach(PyObject *self, PyObject *Py_UNUSED(ignored))
|
_io__TextIOBase_detach_impl(PyObject *self, PyTypeObject *cls)
|
||||||
|
/*[clinic end generated code: output=50915f40c609eaa4 input=987ca3640d0a3776]*/
|
||||||
{
|
{
|
||||||
return _unsupported("detach");
|
return _unsupported("detach");
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(textiobase_read_doc,
|
/*[clinic input]
|
||||||
"Read at most size characters from stream.\n"
|
_io._TextIOBase.read
|
||||||
"\n"
|
cls: defining_class
|
||||||
"Read from underlying buffer until we have size characters or we hit EOF.\n"
|
/
|
||||||
"If size is negative or omitted, read until EOF.\n"
|
*args: object
|
||||||
);
|
|
||||||
|
Read at most size characters from stream.
|
||||||
|
|
||||||
|
Read from underlying buffer until we have size characters or we hit EOF.
|
||||||
|
If size is negative or omitted, read until EOF.
|
||||||
|
[clinic start generated code]*/
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
textiobase_read(PyObject *self, PyObject *args)
|
_io__TextIOBase_read_impl(PyObject *self, PyTypeObject *cls, PyObject *args)
|
||||||
|
/*[clinic end generated code: output=3adf28998831f461 input=cee1e84664a20de0]*/
|
||||||
{
|
{
|
||||||
return _unsupported("read");
|
return _unsupported("read");
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(textiobase_readline_doc,
|
/*[clinic input]
|
||||||
"Read until newline or EOF.\n"
|
_io._TextIOBase.readline
|
||||||
"\n"
|
cls: defining_class
|
||||||
"Returns an empty string if EOF is hit immediately.\n"
|
/
|
||||||
);
|
*args: object
|
||||||
|
|
||||||
|
Read until newline or EOF.
|
||||||
|
|
||||||
|
Return an empty string if EOF is hit immediately.
|
||||||
|
[clinic start generated code]*/
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
textiobase_readline(PyObject *self, PyObject *args)
|
_io__TextIOBase_readline_impl(PyObject *self, PyTypeObject *cls,
|
||||||
|
PyObject *args)
|
||||||
|
/*[clinic end generated code: output=3073a948d02319f3 input=58f801259f7ff3ef]*/
|
||||||
{
|
{
|
||||||
return _unsupported("readline");
|
return _unsupported("readline");
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(textiobase_write_doc,
|
/*[clinic input]
|
||||||
"Write string to stream.\n"
|
_io._TextIOBase.write
|
||||||
"Returns the number of characters written (which is always equal to\n"
|
cls: defining_class
|
||||||
"the length of the string).\n"
|
/
|
||||||
);
|
*args: object
|
||||||
|
|
||||||
|
Write string to stream.
|
||||||
|
|
||||||
|
Return the number of characters written
|
||||||
|
(which is always equal to the length of the string).
|
||||||
|
[clinic start generated code]*/
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
textiobase_write(PyObject *self, PyObject *args)
|
_io__TextIOBase_write_impl(PyObject *self, PyTypeObject *cls, PyObject *args)
|
||||||
|
/*[clinic end generated code: output=5d985eb529472bc4 input=21b6961b5cba9496]*/
|
||||||
{
|
{
|
||||||
return _unsupported("write");
|
return _unsupported("write");
|
||||||
}
|
}
|
||||||
|
@ -132,10 +164,10 @@ textiobase_errors_get(PyObject *self, void *context)
|
||||||
|
|
||||||
|
|
||||||
static PyMethodDef textiobase_methods[] = {
|
static PyMethodDef textiobase_methods[] = {
|
||||||
{"detach", textiobase_detach, METH_NOARGS, textiobase_detach_doc},
|
_IO__TEXTIOBASE_DETACH_METHODDEF
|
||||||
{"read", textiobase_read, METH_VARARGS, textiobase_read_doc},
|
_IO__TEXTIOBASE_READ_METHODDEF
|
||||||
{"readline", textiobase_readline, METH_VARARGS, textiobase_readline_doc},
|
_IO__TEXTIOBASE_READLINE_METHODDEF
|
||||||
{"write", textiobase_write, METH_VARARGS, textiobase_write_doc},
|
_IO__TEXTIOBASE_WRITE_METHODDEF
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -200,14 +232,14 @@ PyTypeObject PyTextIOBase_Type = {
|
||||||
|
|
||||||
/* IncrementalNewlineDecoder */
|
/* IncrementalNewlineDecoder */
|
||||||
|
|
||||||
typedef struct {
|
struct nldecoder_object {
|
||||||
PyObject_HEAD
|
PyObject_HEAD
|
||||||
PyObject *decoder;
|
PyObject *decoder;
|
||||||
PyObject *errors;
|
PyObject *errors;
|
||||||
unsigned int pendingcr: 1;
|
unsigned int pendingcr: 1;
|
||||||
unsigned int translate: 1;
|
unsigned int translate: 1;
|
||||||
unsigned int seennl: 3;
|
unsigned int seennl: 3;
|
||||||
} nldecoder_object;
|
};
|
||||||
|
|
||||||
/*[clinic input]
|
/*[clinic input]
|
||||||
_io.IncrementalNewlineDecoder.__init__
|
_io.IncrementalNewlineDecoder.__init__
|
||||||
|
@ -645,7 +677,7 @@ incrementalnewlinedecoder_newlines_get(nldecoder_object *self, void *context)
|
||||||
typedef PyObject *
|
typedef PyObject *
|
||||||
(*encodefunc_t)(PyObject *, PyObject *);
|
(*encodefunc_t)(PyObject *, PyObject *);
|
||||||
|
|
||||||
typedef struct
|
struct textio
|
||||||
{
|
{
|
||||||
PyObject_HEAD
|
PyObject_HEAD
|
||||||
int ok; /* initialized? */
|
int ok; /* initialized? */
|
||||||
|
@ -704,7 +736,7 @@ typedef struct
|
||||||
PyObject *dict;
|
PyObject *dict;
|
||||||
|
|
||||||
_PyIO_State *state;
|
_PyIO_State *state;
|
||||||
} textio;
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
textiowrapper_set_decoded_chars(textio *self, PyObject *chars);
|
textiowrapper_set_decoded_chars(textio *self, PyObject *chars);
|
||||||
|
@ -3179,10 +3211,6 @@ textiowrapper_chunk_size_set(textio *self, PyObject *arg, void *context)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define clinic_state() (find_io_state_by_def(Py_TYPE(self)))
|
|
||||||
#include "clinic/textio.c.h"
|
|
||||||
#undef clinic_state
|
|
||||||
|
|
||||||
static PyMethodDef incrementalnewlinedecoder_methods[] = {
|
static PyMethodDef incrementalnewlinedecoder_methods[] = {
|
||||||
_IO_INCREMENTALNEWLINEDECODER_DECODE_METHODDEF
|
_IO_INCREMENTALNEWLINEDECODER_DECODE_METHODDEF
|
||||||
_IO_INCREMENTALNEWLINEDECODER_GETSTATE_METHODDEF
|
_IO_INCREMENTALNEWLINEDECODER_GETSTATE_METHODDEF
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue