-
-
Notifications
You must be signed in to change notification settings - Fork 34k
gh-144175: Add PyArg_ParseVector() function #144283
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
|
The change doesn't include tests because my plan is to write a following PR to rename |
Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
|
Ok, I completed the PR to add also |
|
I propose the following API: int PyArg_ParseVector(
PyObject *const *args,
Py_ssize_t nargs,
const char *format,
...);
int PyArg_ParseVectorAndKeywords(
PyObject *const *args,
Py_ssize_t nargs,
PyObject *kwnames,
const char *format,
char * const *kwlist,
...); |
| Py_ssize_t nargs, | ||
| PyObject *kwnames, | ||
| const char *format, | ||
| PY_CXX_CONST char * const *kwlist, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Any reason to have PY_CXX_CONST? why now always const char *const *kwlist? (are there occurrences where we don't have a const?)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If kwlist is declared as const char * const *kwlist, I get a compiler error on the following code:
int arg, arg2 = 0;
char *kwlist[] = {"arg", "arg2", NULL};
if (!PyArg_ParseVectorAndKeywords(args, nargs, kwnames, "i|i", kwlist,
&arg, &arg2)) {
return NULL;
}Error:
./Modules/_testcapimodule.c: In function 'fastcall_kwnames':
./Modules/_testcapimodule.c:2603:68: error: passing argument 5 of 'PyArg_ParseVectorAndKeywords' from incompatible pointer type [-Wincompatible-pointer-types]
2603 | if (!PyArg_ParseVectorAndKeywords(args, nargs, kwnames, "i|i", kwlist,
| ^~~~~~
| |
| char **
In file included from ./Include/modsupport.h:153,
from ./Include/Python.h:132,
from ./Modules/_testcapi/parts.h:25,
from ./Modules/_testcapimodule.c:13:
./Include/cpython/modsupport.h:15:25: note: expected 'const char * const*' but argument is of type 'char **'
15 | const char * const *kwlist,
| ~~~~~~~~~~~~~~~~~~~~^~~~~~
PY_CXX_CONST is also used for kwlist by PyArg_ParseTupleAndKeywords() for example.
PY_CXX_CONST is only defined as const if building C++.
📚 Documentation preview 📚: https://cpython-previews--144283.org.readthedocs.build/