[Python-checkins] r84929 - in python/branches/py3k: Doc/c-api/exceptions.rst Include/pyerrors.h Python/errors.c
benjamin.peterson
python-checkins at python.org
Tue Sep 21 00:42:10 CEST 2010
Author: benjamin.peterson
Date: Tue Sep 21 00:42:10 2010
New Revision: 84929
Log:
add PyErr_SyntaxLocationEx, to support adding a column offset
Modified:
python/branches/py3k/Doc/c-api/exceptions.rst
python/branches/py3k/Include/pyerrors.h
python/branches/py3k/Python/errors.c
Modified: python/branches/py3k/Doc/c-api/exceptions.rst
==============================================================================
--- python/branches/py3k/Doc/c-api/exceptions.rst (original)
+++ python/branches/py3k/Doc/c-api/exceptions.rst Tue Sep 21 00:42:10 2010
@@ -294,6 +294,20 @@
parameter specifying the exception type to be raised. Availability: Windows.
+.. cfunction:: void PyErr_SyntaxLocationEx(char *filename, int lineno, int col_offset)
+
+ Set file, line, and offset information for the current exception. If the
+ current exception is not a :exc:`SyntaxError`, then it sets additional
+ attributes, which make the exception printing subsystem think the exception
+ is a :exc:`SyntaxError`.
+
+
+.. cfunction:: void PyErr_SyntaxLocation(char *filename, int lineno)
+
+ Like :cfunc:`PyErr_SyntaxLocationExc`, but the col_offset parameter is
+ omitted.
+
+
.. cfunction:: void PyErr_BadInternalCall()
This is a shorthand for ``PyErr_SetString(PyExc_SystemError, message)``,
Modified: python/branches/py3k/Include/pyerrors.h
==============================================================================
--- python/branches/py3k/Include/pyerrors.h (original)
+++ python/branches/py3k/Include/pyerrors.h Tue Sep 21 00:42:10 2010
@@ -229,6 +229,7 @@
/* Support for adding program text to SyntaxErrors */
PyAPI_FUNC(void) PyErr_SyntaxLocation(const char *, int);
+PyAPI_FUNC(void) PyErr_SyntaxLocationEx(const char *, int, int);
PyAPI_FUNC(PyObject *) PyErr_ProgramText(const char *, int);
/* The following functions are used to create and modify unicode
Modified: python/branches/py3k/Python/errors.c
==============================================================================
--- python/branches/py3k/Python/errors.c (original)
+++ python/branches/py3k/Python/errors.c Tue Sep 21 00:42:10 2010
@@ -780,12 +780,18 @@
extern PyObject *PyModule_GetWarningsModule(void);
+void
+PyErr_SyntaxLocation(const char *filename, int lineno) {
+ PyErr_SyntaxLocationEx(filename, lineno, -1);
+}
+
+
/* Set file and line information for the current exception.
If the exception is not a SyntaxError, also sets additional attributes
to make printing of exceptions believe it is a syntax error. */
void
-PyErr_SyntaxLocation(const char *filename, int lineno)
+PyErr_SyntaxLocationEx(const char *filename, int lineno, int col_offset)
{
PyObject *exc, *v, *tb, *tmp;
@@ -802,6 +808,16 @@
PyErr_Clear();
Py_DECREF(tmp);
}
+ if (col_offset >= 0) {
+ tmp = PyLong_FromLong(col_offset);
+ if (tmp == NULL)
+ PyErr_Clear();
+ else {
+ if (PyObject_SetAttrString(v, "offset", tmp))
+ PyErr_Clear();
+ Py_DECREF(tmp);
+ }
+ }
if (filename != NULL) {
tmp = PyUnicode_FromString(filename);
if (tmp == NULL)
More information about the Python-checkins
mailing list