]> granicus.if.org Git - python/commitdiff
Add PyArg_VaParseTupleAndKeywords(). Document this function and
authorBrett Cannon <bcannon@gmail.com>
Sat, 10 Jul 2004 22:20:32 +0000 (22:20 +0000)
committerBrett Cannon <bcannon@gmail.com>
Sat, 10 Jul 2004 22:20:32 +0000 (22:20 +0000)
PyArg_VaParse().

Closes patch #550732.  Thanks Greg Chapman.

Doc/api/utilities.tex
Include/modsupport.h
Misc/NEWS
Python/getargs.c

index 9cc7a1935098d036aa4fd8a4073f635969beb7cb..0d71cd9007397542d739aa171ff60c3d6a066ec2 100644 (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''
index 7e6992148f55cd46956ecbe1e242a5ec9d6037d6..2d67f3e59bbecbb0f159f80523b1a7788370e45b 100644 (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 *);
index af94bdddec964aa09434bcddf168094d09cd30e1..40052977047b2c7201523d9baf94ec8c553d24b9 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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.
index 72194a86a0e3cc148672df75f41ae3c3023707c5..cd7633c410137e7247bed7ea30b2a9e4fa1b8c1b 100644 (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)