gh-137821: Convert _json module to use Argument Clinic (gh-140778)

This commit is contained in:
Yoonho Hann 2025-10-30 18:42:09 +09:00 committed by GitHub
parent b85e10fd12
commit 25bd72d683
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 131 additions and 43 deletions

View file

@ -18,6 +18,12 @@
#include <stdbool.h> // bool
#include "clinic/_json.c.h"
/*[clinic input]
module _json
[clinic start generated code]*/
/*[clinic end generated code: output=da39a3ee5e6b4b0d input=549fa53592c925b2]*/
typedef struct _PyScannerObject {
PyObject_HEAD
@ -637,30 +643,31 @@ scanstring_unicode(PyObject *pystr, Py_ssize_t end, int strict, Py_ssize_t *next
return NULL;
}
PyDoc_STRVAR(pydoc_scanstring,
"scanstring(string, end, strict=True) -> (string, end)\n"
"\n"
"Scan the string s for a JSON string. End is the index of the\n"
"character in s after the quote that started the JSON string.\n"
"Unescapes all valid JSON string escape sequences and raises ValueError\n"
"on attempt to decode an invalid string. If strict is False then literal\n"
"control characters are allowed in the string.\n"
"\n"
"Returns a tuple of the decoded string and the index of the character in s\n"
"after the end quote."
);
/*[clinic input]
_json.scanstring as py_scanstring
pystr: object
end: Py_ssize_t
strict: bool = True
/
Scan the string s for a JSON string.
End is the index of the character in s after the quote that started the
JSON string. Unescapes all valid JSON string escape sequences and raises
ValueError on attempt to decode an invalid string. If strict is False
then literal control characters are allowed in the string.
Returns a tuple of the decoded string and the index of the character in s
after the end quote.
[clinic start generated code]*/
static PyObject *
py_scanstring(PyObject* Py_UNUSED(self), PyObject *args)
py_scanstring_impl(PyObject *module, PyObject *pystr, Py_ssize_t end,
int strict)
/*[clinic end generated code: output=961740cfae07cdb3 input=9d46d7df7ac749b0]*/
{
PyObject *pystr;
PyObject *rval;
Py_ssize_t end;
Py_ssize_t next_end = -1;
int strict = 1;
if (!PyArg_ParseTuple(args, "On|p:scanstring", &pystr, &end, &strict)) {
return NULL;
}
if (PyUnicode_Check(pystr)) {
rval = scanstring_unicode(pystr, end, strict, &next_end);
}
@ -673,14 +680,17 @@ py_scanstring(PyObject* Py_UNUSED(self), PyObject *args)
return _build_rval_index_tuple(rval, next_end);
}
PyDoc_STRVAR(pydoc_encode_basestring_ascii,
"encode_basestring_ascii(string) -> string\n"
"\n"
"Return an ASCII-only JSON representation of a Python string"
);
/*[clinic input]
_json.encode_basestring_ascii as py_encode_basestring_ascii
pystr: object
/
Return an ASCII-only JSON representation of a Python string
[clinic start generated code]*/
static PyObject *
py_encode_basestring_ascii(PyObject* Py_UNUSED(self), PyObject *pystr)
py_encode_basestring_ascii(PyObject *module, PyObject *pystr)
/*[clinic end generated code: output=a8afcd88eba0b572 input=f4085ccd5928ea55]*/
{
PyObject *rval;
/* Return an ASCII-only JSON representation of a Python string */
@ -697,15 +707,17 @@ py_encode_basestring_ascii(PyObject* Py_UNUSED(self), PyObject *pystr)
return rval;
}
/*[clinic input]
_json.encode_basestring as py_encode_basestring
pystr: object
/
PyDoc_STRVAR(pydoc_encode_basestring,
"encode_basestring(string) -> string\n"
"\n"
"Return a JSON representation of a Python string"
);
Return a JSON representation of a Python string
[clinic start generated code]*/
static PyObject *
py_encode_basestring(PyObject* Py_UNUSED(self), PyObject *pystr)
py_encode_basestring(PyObject *module, PyObject *pystr)
/*[clinic end generated code: output=c87752300776d3b1 input=c3c7ef6e72624f6e]*/
{
PyObject *rval;
/* Return a JSON representation of a Python string */
@ -2080,18 +2092,9 @@ static PyType_Spec PyEncoderType_spec = {
};
static PyMethodDef speedups_methods[] = {
{"encode_basestring_ascii",
py_encode_basestring_ascii,
METH_O,
pydoc_encode_basestring_ascii},
{"encode_basestring",
py_encode_basestring,
METH_O,
pydoc_encode_basestring},
{"scanstring",
py_scanstring,
METH_VARARGS,
pydoc_scanstring},
PY_ENCODE_BASESTRING_ASCII_METHODDEF
PY_ENCODE_BASESTRING_METHODDEF
PY_SCANSTRING_METHODDEF
{NULL, NULL, 0, NULL}
};