[Python-checkins] cpython: Issue #18711: Add a new `PyErr_FormatV` function, similar to `PyErr_Format` but
antoine.pitrou
python-checkins at python.org
Tue Sep 30 21:17:11 CEST 2014
https://hg.python.org/cpython/rev/5629481cd26d
changeset: 92678:5629481cd26d
parent: 92676:8e9df3414185
user: Antoine Pitrou <solipsis at pitrou.net>
date: Tue Sep 30 21:16:27 2014 +0200
summary:
Issue #18711: Add a new `PyErr_FormatV` function, similar to `PyErr_Format` but accepting a `va_list` argument.
files:
Doc/c-api/exceptions.rst | 8 ++++++++
Doc/data/refcounts.dat | 5 +++++
Include/pyerrors.h | 6 ++++++
Misc/NEWS | 3 +++
PC/python3.def | 1 +
PC/python35stub.def | 1 +
Python/errors.c | 25 +++++++++++++++----------
7 files changed, 39 insertions(+), 10 deletions(-)
diff --git a/Doc/c-api/exceptions.rst b/Doc/c-api/exceptions.rst
--- a/Doc/c-api/exceptions.rst
+++ b/Doc/c-api/exceptions.rst
@@ -197,6 +197,14 @@
string.
+.. c:function:: PyObject* PyErr_FormatV(PyObject *exception, const char *format, va_list vargs)
+
+ Same as :c:func:`PyErr_Format`, but taking a `va_list` argument rather
+ than a variable number of arguments.
+
+ .. versionadded:: 3.5
+
+
.. c:function:: void PyErr_SetNone(PyObject *type)
This is a shorthand for ``PyErr_SetObject(type, Py_None)``.
diff --git a/Doc/data/refcounts.dat b/Doc/data/refcounts.dat
--- a/Doc/data/refcounts.dat
+++ b/Doc/data/refcounts.dat
@@ -349,6 +349,11 @@
PyErr_Format:const char*:format::
PyErr_Format::...::
+PyErr_FormatV:PyObject*::null:
+PyErr_FormatV:PyObject*:exception:+1:
+PyErr_FormatV:const char*:format::
+PyErr_FormatV:va_list:vargs::
+
PyErr_WarnEx:int:::
PyErr_WarnEx:PyObject*:category:0:
PyErr_WarnEx:const char*:message::
diff --git a/Include/pyerrors.h b/Include/pyerrors.h
--- a/Include/pyerrors.h
+++ b/Include/pyerrors.h
@@ -242,6 +242,12 @@
const char *format, /* ASCII-encoded string */
...
);
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
+PyAPI_FUNC(PyObject *) PyErr_FormatV(
+ PyObject *exception,
+ const char *format,
+ va_list vargs);
+#endif
#ifdef MS_WINDOWS
PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilename(
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@
Core and Builtins
-----------------
+- Issue #18711: Add a new `PyErr_FormatV` function, similar to `PyErr_Format`
+ but accepting a `va_list` argument.
+
- Issue #22520: Fix overflow checking when generating the repr of a unicode
object.
diff --git a/PC/python3.def b/PC/python3.def
--- a/PC/python3.def
+++ b/PC/python3.def
@@ -120,6 +120,7 @@
PyErr_ExceptionMatches=python35.PyErr_ExceptionMatches
PyErr_Fetch=python35.PyErr_Fetch
PyErr_Format=python35.PyErr_Format
+ PyErr_FormatV=python35.PyErr_FormatV
PyErr_GivenExceptionMatches=python35.PyErr_GivenExceptionMatches
PyErr_NewException=python35.PyErr_NewException
PyErr_NewExceptionWithDoc=python35.PyErr_NewExceptionWithDoc
diff --git a/PC/python35stub.def b/PC/python35stub.def
--- a/PC/python35stub.def
+++ b/PC/python35stub.def
@@ -119,6 +119,7 @@
PyErr_ExceptionMatches
PyErr_Fetch
PyErr_Format
+PyErr_FormatV
PyErr_GivenExceptionMatches
PyErr_NewException
PyErr_NewExceptionWithDoc
diff --git a/Python/errors.c b/Python/errors.c
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -749,19 +749,11 @@
#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
-
PyObject *
-PyErr_Format(PyObject *exception, const char *format, ...)
+PyErr_FormatV(PyObject *exception, const char *format, va_list vargs)
{
- va_list vargs;
PyObject* string;
-#ifdef HAVE_STDARG_PROTOTYPES
- va_start(vargs, format);
-#else
- va_start(vargs);
-#endif
-
#ifdef Py_DEBUG
/* in debug mode, PyEval_EvalFrameEx() fails with an assertion error
if an exception is set when it is called */
@@ -771,12 +763,25 @@
string = PyUnicode_FromFormatV(format, vargs);
PyErr_SetObject(exception, string);
Py_XDECREF(string);
+ return NULL;
+}
+
+
+PyObject *
+PyErr_Format(PyObject *exception, const char *format, ...)
+{
+ va_list vargs;
+#ifdef HAVE_STDARG_PROTOTYPES
+ va_start(vargs, format);
+#else
+ va_start(vargs);
+#endif
+ PyErr_FormatV(exception, format, vargs);
va_end(vargs);
return NULL;
}
-
PyObject *
PyErr_NewException(const char *name, PyObject *base, PyObject *dict)
{
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list