Commit 4b36e5ce authored by Brett Cannon's avatar Brett Cannon

Add PyArg_VaParseTupleAndKeywords(). Document this function and

PyArg_VaParse().

Closes patch #550732.  Thanks Greg Chapman.
parent 1a847a69
...@@ -145,7 +145,7 @@ values from C values. ...@@ -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. ...@@ -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. ...@@ -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''
......
...@@ -17,6 +17,8 @@ PyAPI_FUNC(int) PyArg_UnpackTuple(PyObject *, char *, int, int, ...); ...@@ -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 *);
......
...@@ -12,6 +12,9 @@ What's New in Python 2.4 alpha 2? ...@@ -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.
......
...@@ -12,6 +12,9 @@ int PyArg_VaParse(PyObject *, char *, va_list); ...@@ -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, ...@@ -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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment