_PyStack_UnpackDict now returns int

refer python/cpython@998c20962c
This commit is contained in:
ahgamut 2021-11-04 23:38:31 +05:30
parent bd127a01ee
commit 21294d41f6
3 changed files with 14 additions and 11 deletions

View file

@ -19,11 +19,12 @@ PyObject *_PyStack_AsTupleSlice(PyObject **stack, Py_ssize_t nargs,
PyObject *_PyStack_AsDict(PyObject **values, PyObject *kwnames); PyObject *_PyStack_AsDict(PyObject **values, PyObject *kwnames);
PyObject ** _PyStack_UnpackDict( int _PyStack_UnpackDict(
PyObject **args, PyObject **args,
Py_ssize_t nargs, Py_ssize_t nargs,
PyObject *kwargs, PyObject *kwargs,
PyObject **kwnames, PyObject ***p_stack,
PyObject **p_kwnames,
PyObject *func); PyObject *func);
PyObject *_PyObject_FastCallDict(PyObject *func, PyObject **args, PyObject *_PyObject_FastCallDict(PyObject *func, PyObject **args,

View file

@ -2444,9 +2444,9 @@ _PyStack_AsDict(PyObject **values, PyObject *kwnames)
return kwdict; return kwdict;
} }
PyObject ** int
_PyStack_UnpackDict(PyObject **args, Py_ssize_t nargs, PyObject *kwargs, _PyStack_UnpackDict(PyObject **args, Py_ssize_t nargs, PyObject *kwargs,
PyObject **p_kwnames, PyObject *func) PyObject ***p_stack, PyObject **p_kwnames, PyObject *func)
{ {
PyObject **stack, **kwstack; PyObject **stack, **kwstack;
Py_ssize_t nkwargs; Py_ssize_t nkwargs;
@ -2458,25 +2458,26 @@ _PyStack_UnpackDict(PyObject **args, Py_ssize_t nargs, PyObject *kwargs,
assert(kwargs == NULL || PyDict_CheckExact(kwargs)); assert(kwargs == NULL || PyDict_CheckExact(kwargs));
if (kwargs == NULL || (nkwargs = PyDict_GET_SIZE(kwargs)) == 0) { if (kwargs == NULL || (nkwargs = PyDict_GET_SIZE(kwargs)) == 0) {
*p_stack = args;
*p_kwnames = NULL; *p_kwnames = NULL;
return args; return 0;
} }
if ((size_t)nargs > PY_SSIZE_T_MAX / sizeof(stack[0]) - (size_t)nkwargs) { if ((size_t)nargs > PY_SSIZE_T_MAX / sizeof(stack[0]) - (size_t)nkwargs) {
PyErr_NoMemory(); PyErr_NoMemory();
return NULL; return -1;
} }
stack = PyMem_Malloc((nargs + nkwargs) * sizeof(stack[0])); stack = PyMem_Malloc((nargs + nkwargs) * sizeof(stack[0]));
if (stack == NULL) { if (stack == NULL) {
PyErr_NoMemory(); PyErr_NoMemory();
return NULL; return -1;
} }
kwnames = PyTuple_New(nkwargs); kwnames = PyTuple_New(nkwargs);
if (kwnames == NULL) { if (kwnames == NULL) {
PyMem_Free(stack); PyMem_Free(stack);
return NULL; return -1;
} }
/* Copy position arguments (borrowed references) */ /* Copy position arguments (borrowed references) */
@ -2495,8 +2496,9 @@ _PyStack_UnpackDict(PyObject **args, Py_ssize_t nargs, PyObject *kwargs,
i++; i++;
} }
*p_stack = stack;
*p_kwnames = kwnames; *p_kwnames = kwnames;
return stack; return 0;
} }
PyObject * PyObject *

View file

@ -253,8 +253,8 @@ _PyCFunction_FastCallDict(PyObject *func_obj, PyObject **args, Py_ssize_t nargs,
PyObject *kwnames; PyObject *kwnames;
_PyCFunctionFast fastmeth = (_PyCFunctionFast)meth; _PyCFunctionFast fastmeth = (_PyCFunctionFast)meth;
stack = _PyStack_UnpackDict(args, nargs, kwargs, &kwnames, func_obj); if (_PyStack_UnpackDict(args, nargs, kwargs,
if (stack == NULL) { &stack, &kwnames, func_obj) < 0) {
return NULL; return NULL;
} }