Skip to content

Commit d3c0f85

Browse files
committed
fix: _PyArg_UnpackKeywords API is removed, use PyArg_ParseTupleAndKeywords instead
1 parent 7c03098 commit d3c0f85

File tree

2 files changed

+6
-35
lines changed

2 files changed

+6
-35
lines changed

include/JSArrayProxy.hh

+3-4
Original file line numberDiff line numberDiff line change
@@ -251,11 +251,10 @@ public:
251251
*
252252
* @param self - The JSArrayProxy
253253
* @param args - arguments to the sort method (not used)
254-
* @param nargs - number of arguments to the sort method
255-
* @param kwnames - keyword arguments to the sort method (reverse=True|False, key=keyfunction)
254+
* @param kwargs - keyword arguments to the sort method (reverse=True|False, key=keyfunction)
256255
* @return PyObject* NULL on exception, None otherwise
257256
*/
258-
static PyObject *JSArrayProxy_sort(JSArrayProxy *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames);
257+
static PyObject *JSArrayProxy_sort(JSArrayProxy *self, PyObject *args, PyObject *kwargs);
259258

260259
/**
261260
* @brief tp_traverse
@@ -404,7 +403,7 @@ static PyMethodDef JSArrayProxy_methods[] = {
404403
{"index", (PyCFunction)JSArrayProxyMethodDefinitions::JSArrayProxy_index, METH_FASTCALL, list_index__doc__},
405404
{"count", (PyCFunction)JSArrayProxyMethodDefinitions::JSArrayProxy_count, METH_O, list_count__doc__},
406405
{"reverse", (PyCFunction)JSArrayProxyMethodDefinitions::JSArrayProxy_reverse, METH_NOARGS, list_reverse__doc__},
407-
{"sort", (PyCFunction)JSArrayProxyMethodDefinitions::JSArrayProxy_sort, METH_FASTCALL|METH_KEYWORDS, list_sort__doc__},
406+
{"sort", (PyCFunction)JSArrayProxyMethodDefinitions::JSArrayProxy_sort, METH_VARARGS|METH_KEYWORDS, list_sort__doc__},
408407
{NULL, NULL} /* sentinel */
409408
};
410409

src/JSArrayProxy.cc

+3-31
Original file line numberDiff line numberDiff line change
@@ -1180,43 +1180,15 @@ static bool sort_compare_default(JSContext *cx, unsigned argc, JS::Value *vp) {
11801180
return true;
11811181
}
11821182

1183-
PyObject *JSArrayProxyMethodDefinitions::JSArrayProxy_sort(JSArrayProxy *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) {
1183+
PyObject *JSArrayProxyMethodDefinitions::JSArrayProxy_sort(JSArrayProxy *self, PyObject *args, PyObject *kwargs) {
11841184
static const char *const _keywords[] = {"key", "reverse", NULL};
1185-
static _PyArg_Parser _parser = {
1186-
.keywords = _keywords,
1187-
.fname = "sort",
1188-
.kwtuple = NULL,
1189-
};
1190-
1191-
PyObject *argsbuf[2];
1192-
Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
1185+
11931186
PyObject *keyfunc = Py_None;
11941187
int reverse = 0;
1195-
1196-
// args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 0, 0, argsbuf);
1197-
Py_RETURN_NONE;
1198-
1199-
if (!args) {
1200-
return NULL;
1201-
}
1202-
1203-
if (!noptargs) {
1204-
goto skip_optional_kwonly;
1205-
}
1206-
1207-
if (args[0]) {
1208-
keyfunc = args[0];
1209-
if (!--noptargs) {
1210-
goto skip_optional_kwonly;
1211-
}
1212-
}
1213-
1214-
reverse = PyObject_IsTrue(args[1]);
1215-
if (reverse < 0) {
1188+
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|$Op:sort", _keywords, &keyfunc, &reverse)) {
12161189
return NULL;
12171190
}
12181191

1219-
skip_optional_kwonly:
12201192
if (JSArrayProxy_length(self) > 1) {
12211193
JS::RootedValue jReturnedArray(GLOBAL_CX);
12221194
if (keyfunc != Py_None) {

0 commit comments

Comments
 (0)