bpo-23867: Argument Clinic: inline parsing code for a single position… · python/cpython@32d96a2

@@ -19,7 +19,13 @@ _io__BufferedIOBase_readinto(PyObject *self, PyObject *arg)

1919

PyObject *return_value = NULL;

2020

Py_buffer buffer = {NULL, NULL};

212122-

if (!PyArg_Parse(arg, "w*:readinto", &buffer)) {

22+

if (PyObject_GetBuffer(arg, &buffer, PyBUF_WRITABLE) < 0) {

23+

PyErr_Clear();

24+

_PyArg_BadArgument("readinto", "read-write bytes-like object", arg);

25+

goto exit;

26+

}

27+

if (!PyBuffer_IsContiguous(&buffer, 'C')) {

28+

_PyArg_BadArgument("readinto", "contiguous buffer", arg);

2329

goto exit;

2430

}

2531

return_value = _io__BufferedIOBase_readinto_impl(self, &buffer);

@@ -50,7 +56,13 @@ _io__BufferedIOBase_readinto1(PyObject *self, PyObject *arg)

5056

PyObject *return_value = NULL;

5157

Py_buffer buffer = {NULL, NULL};

525853-

if (!PyArg_Parse(arg, "w*:readinto1", &buffer)) {

59+

if (PyObject_GetBuffer(arg, &buffer, PyBUF_WRITABLE) < 0) {

60+

PyErr_Clear();

61+

_PyArg_BadArgument("readinto1", "read-write bytes-like object", arg);

62+

goto exit;

63+

}

64+

if (!PyBuffer_IsContiguous(&buffer, 'C')) {

65+

_PyArg_BadArgument("readinto1", "contiguous buffer", arg);

5466

goto exit;

5567

}

5668

return_value = _io__BufferedIOBase_readinto1_impl(self, &buffer);

@@ -183,7 +195,13 @@ _io__Buffered_readinto(buffered *self, PyObject *arg)

183195

PyObject *return_value = NULL;

184196

Py_buffer buffer = {NULL, NULL};

185197186-

if (!PyArg_Parse(arg, "w*:readinto", &buffer)) {

198+

if (PyObject_GetBuffer(arg, &buffer, PyBUF_WRITABLE) < 0) {

199+

PyErr_Clear();

200+

_PyArg_BadArgument("readinto", "read-write bytes-like object", arg);

201+

goto exit;

202+

}

203+

if (!PyBuffer_IsContiguous(&buffer, 'C')) {

204+

_PyArg_BadArgument("readinto", "contiguous buffer", arg);

187205

goto exit;

188206

}

189207

return_value = _io__Buffered_readinto_impl(self, &buffer);

@@ -214,7 +232,13 @@ _io__Buffered_readinto1(buffered *self, PyObject *arg)

214232

PyObject *return_value = NULL;

215233

Py_buffer buffer = {NULL, NULL};

216234217-

if (!PyArg_Parse(arg, "w*:readinto1", &buffer)) {

235+

if (PyObject_GetBuffer(arg, &buffer, PyBUF_WRITABLE) < 0) {

236+

PyErr_Clear();

237+

_PyArg_BadArgument("readinto1", "read-write bytes-like object", arg);

238+

goto exit;

239+

}

240+

if (!PyBuffer_IsContiguous(&buffer, 'C')) {

241+

_PyArg_BadArgument("readinto1", "contiguous buffer", arg);

218242

goto exit;

219243

}

220244

return_value = _io__Buffered_readinto1_impl(self, &buffer);

@@ -390,7 +414,11 @@ _io_BufferedWriter_write(buffered *self, PyObject *arg)

390414

PyObject *return_value = NULL;

391415

Py_buffer buffer = {NULL, NULL};

392416393-

if (!PyArg_Parse(arg, "y*:write", &buffer)) {

417+

if (PyObject_GetBuffer(arg, &buffer, PyBUF_SIMPLE) != 0) {

418+

goto exit;

419+

}

420+

if (!PyBuffer_IsContiguous(&buffer, 'C')) {

421+

_PyArg_BadArgument("write", "contiguous buffer", arg);

394422

goto exit;

395423

}

396424

return_value = _io_BufferedWriter_write_impl(self, &buffer);

@@ -476,4 +504,4 @@ _io_BufferedRandom___init__(PyObject *self, PyObject *args, PyObject *kwargs)

476504

exit:

477505

return return_value;

478506

}

479-

/*[clinic end generated code: output=cb4bf8d50533953b input=a9049054013a1b77]*/

507+

/*[clinic end generated code: output=40de95d461a20782 input=a9049054013a1b77]*/