mirror of
https://github.com/python/cpython.git
synced 2024-11-28 04:15:11 +08:00
add PyErr_SyntaxLocationEx, to support adding a column offset
This commit is contained in:
parent
26d64aeee4
commit
2c53971b37
@ -294,6 +294,20 @@ in various ways. There is a separate error indicator for each thread.
|
|||||||
parameter specifying the exception type to be raised. Availability: Windows.
|
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()
|
.. cfunction:: void PyErr_BadInternalCall()
|
||||||
|
|
||||||
This is a shorthand for ``PyErr_SetString(PyExc_SystemError, message)``,
|
This is a shorthand for ``PyErr_SetString(PyExc_SystemError, message)``,
|
||||||
|
@ -229,6 +229,7 @@ int PySignal_SetWakeupFd(int fd);
|
|||||||
|
|
||||||
/* Support for adding program text to SyntaxErrors */
|
/* Support for adding program text to SyntaxErrors */
|
||||||
PyAPI_FUNC(void) PyErr_SyntaxLocation(const char *, int);
|
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);
|
PyAPI_FUNC(PyObject *) PyErr_ProgramText(const char *, int);
|
||||||
|
|
||||||
/* The following functions are used to create and modify unicode
|
/* The following functions are used to create and modify unicode
|
||||||
|
@ -780,12 +780,18 @@ PyErr_WriteUnraisable(PyObject *obj)
|
|||||||
extern PyObject *PyModule_GetWarningsModule(void);
|
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.
|
/* Set file and line information for the current exception.
|
||||||
If the exception is not a SyntaxError, also sets additional attributes
|
If the exception is not a SyntaxError, also sets additional attributes
|
||||||
to make printing of exceptions believe it is a syntax error. */
|
to make printing of exceptions believe it is a syntax error. */
|
||||||
|
|
||||||
void
|
void
|
||||||
PyErr_SyntaxLocation(const char *filename, int lineno)
|
PyErr_SyntaxLocationEx(const char *filename, int lineno, int col_offset)
|
||||||
{
|
{
|
||||||
PyObject *exc, *v, *tb, *tmp;
|
PyObject *exc, *v, *tb, *tmp;
|
||||||
|
|
||||||
@ -802,6 +808,16 @@ PyErr_SyntaxLocation(const char *filename, int lineno)
|
|||||||
PyErr_Clear();
|
PyErr_Clear();
|
||||||
Py_DECREF(tmp);
|
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) {
|
if (filename != NULL) {
|
||||||
tmp = PyUnicode_FromString(filename);
|
tmp = PyUnicode_FromString(filename);
|
||||||
if (tmp == NULL)
|
if (tmp == NULL)
|
||||||
|
Loading…
Reference in New Issue
Block a user