Add PyArg_VaParseTupleAndKeywords(). Document this function and

PyArg_VaParse().

Closes patch #550732.  Thanks Greg Chapman.
This commit is contained in:
Brett Cannon 2004-07-10 22:20:32 +00:00
parent 9a2a1cb031
commit 711e7d97e4
4 changed files with 55 additions and 1 deletions

View File

@ -145,7 +145,7 @@ values from C values.
\begin{cfuncdesc}{PyObject*}{PyImport_AddModule}{char *name}
Return the module object corresponding to a module name. The
\var{name} argument may be of the form \code{package.module}).
\var{name} argument may be of the form \code{package.module}.
First check the modules dictionary if there's one there, and if not,
create a new one and insert it in the modules dictionary.
Return \NULL{} with an exception set on failure.
@ -675,6 +675,12 @@ return false and raise an appropriate exception.
failure, it returns false and raises the appropriate exception.
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyArg_VaParse}{PyObject *args, char *format,
va_list vargs}
Identical to \cfunction{PyArg_ParseTuple()}, except that it accepts a
va_list rather than a variable number of arguments.
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyArg_ParseTupleAndKeywords}{PyObject *args,
PyObject *kw, char *format, char *keywords[],
\moreargs}
@ -683,6 +689,13 @@ return false and raise an appropriate exception.
on failure, it returns false and raises the appropriate exception.
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyArg_VaParseTupleAndKeywords}{PyObject *args,
PyObject *kw, char *format, char *keywords[],
va_list vargs}
Identical to \cfunction{PyArg_ParseTupleAndKeywords()}, except that it
accepts a va_list rather than a variable number of arguments.
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyArg_Parse}{PyObject *args, char *format,
\moreargs}
Function used to deconstruct the argument lists of ``old-style''

View File

@ -17,6 +17,8 @@ PyAPI_FUNC(int) PyArg_UnpackTuple(PyObject *, char *, int, int, ...);
PyAPI_FUNC(PyObject *) Py_BuildValue(char *, ...);
PyAPI_FUNC(int) PyArg_VaParse(PyObject *, char *, va_list);
PyAPI_FUNC(int) PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *,
char *, char **, va_list);
PyAPI_FUNC(PyObject *) Py_VaBuildValue(char *, va_list);
PyAPI_FUNC(int) PyModule_AddObject(PyObject *, char *, PyObject *);

View File

@ -12,6 +12,9 @@ What's New in Python 2.4 alpha 2?
Core and builtins
-----------------
- Patch #550732: Add PyArg_VaParseTupleAndKeywords(). Analogous to
PyArg_VaParse(). Both are now documented. Thanks Greg Chapman.
- Allow string and unicode return types from .encode()/.decode()
methods on string and unicode objects. Added unicode.decode()
which was missing for no apparent reason.

View File

@ -12,6 +12,9 @@ int PyArg_VaParse(PyObject *, char *, va_list);
int PyArg_ParseTupleAndKeywords(PyObject *, PyObject *,
char *, char **, ...);
int PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *,
char *, char **, va_list);
/* Forward */
static int vgetargs1(PyObject *, char *, va_list *, int);
@ -1153,6 +1156,39 @@ PyArg_ParseTupleAndKeywords(PyObject *args,
}
int
PyArg_VaParseTupleAndKeywords(PyObject *args,
PyObject *keywords,
char *format,
char **kwlist, va_list va)
{
int retval;
va_list lva;
if ((args == NULL || !PyTuple_Check(args)) ||
(keywords != NULL && !PyDict_Check(keywords)) ||
format == NULL ||
kwlist == NULL)
{
PyErr_BadInternalCall();
return 0;
}
#ifdef VA_LIST_IS_ARRAY
memcpy(lva, va, sizeof(va_list));
#else
#ifdef __va_copy
__va_copy(lva, va);
#else
lva = va;
#endif
#endif
retval = vgetargskeywords(args, keywords, format, kwlist, &lva);
return retval;
}
static int
vgetargskeywords(PyObject *args, PyObject *keywords, char *format,
char **kwlist, va_list *p_va)