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} \begin{cfuncdesc}{PyObject*}{PyImport_AddModule}{char *name}
Return the module object corresponding to a module name. The 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, First check the modules dictionary if there's one there, and if not,
create a new one and insert it in the modules dictionary. create a new one and insert it in the modules dictionary.
Return \NULL{} with an exception set on failure. 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. failure, it returns false and raises the appropriate exception.
\end{cfuncdesc} \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, \begin{cfuncdesc}{int}{PyArg_ParseTupleAndKeywords}{PyObject *args,
PyObject *kw, char *format, char *keywords[], PyObject *kw, char *format, char *keywords[],
\moreargs} \moreargs}
@ -683,6 +689,13 @@ return false and raise an appropriate exception.
on failure, it returns false and raises the appropriate exception. on failure, it returns false and raises the appropriate exception.
\end{cfuncdesc} \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, \begin{cfuncdesc}{int}{PyArg_Parse}{PyObject *args, char *format,
\moreargs} \moreargs}
Function used to deconstruct the argument lists of ``old-style'' 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(PyObject *) Py_BuildValue(char *, ...);
PyAPI_FUNC(int) PyArg_VaParse(PyObject *, char *, va_list); 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(PyObject *) Py_VaBuildValue(char *, va_list);
PyAPI_FUNC(int) PyModule_AddObject(PyObject *, char *, PyObject *); 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 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() - Allow string and unicode return types from .encode()/.decode()
methods on string and unicode objects. Added unicode.decode() methods on string and unicode objects. Added unicode.decode()
which was missing for no apparent reason. 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 *, int PyArg_ParseTupleAndKeywords(PyObject *, PyObject *,
char *, char **, ...); char *, char **, ...);
int PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *,
char *, char **, va_list);
/* Forward */ /* Forward */
static int vgetargs1(PyObject *, char *, va_list *, int); 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 static int
vgetargskeywords(PyObject *args, PyObject *keywords, char *format, vgetargskeywords(PyObject *args, PyObject *keywords, char *format,
char **kwlist, va_list *p_va) char **kwlist, va_list *p_va)