mirror of
https://github.com/python/cpython.git
synced 2025-07-07 19:35:27 +00:00
gh-123969: refactor _PyErr_RaiseSyntaxError and _PyErr_EmitSyntaxWarning out of compiler (#123972)
This commit is contained in:
parent
9aa1f60e2d
commit
aba42c0b54
4 changed files with 58 additions and 32 deletions
|
@ -1850,6 +1850,52 @@ PyErr_SyntaxLocationEx(const char *filename, int lineno, int col_offset)
|
|||
Py_XDECREF(fileobj);
|
||||
}
|
||||
|
||||
/* Raises a SyntaxError.
|
||||
* If something goes wrong, a different exception may be raised.
|
||||
*/
|
||||
void
|
||||
_PyErr_RaiseSyntaxError(PyObject *msg, PyObject *filename, int lineno, int col_offset,
|
||||
int end_lineno, int end_col_offset)
|
||||
{
|
||||
PyObject *text = PyErr_ProgramTextObject(filename, lineno);
|
||||
if (text == NULL) {
|
||||
text = Py_NewRef(Py_None);
|
||||
}
|
||||
PyObject *args = Py_BuildValue("O(OiiOii)", msg, filename,
|
||||
lineno, col_offset, text,
|
||||
end_lineno, end_col_offset);
|
||||
if (args == NULL) {
|
||||
goto exit;
|
||||
}
|
||||
PyErr_SetObject(PyExc_SyntaxError, args);
|
||||
exit:
|
||||
Py_DECREF(text);
|
||||
Py_XDECREF(args);
|
||||
}
|
||||
|
||||
/* Emits a SyntaxWarning and returns 0 on success.
|
||||
If a SyntaxWarning is raised as error, replaces it with a SyntaxError
|
||||
and returns -1.
|
||||
*/
|
||||
int
|
||||
_PyErr_EmitSyntaxWarning(PyObject *msg, PyObject *filename, int lineno, int col_offset,
|
||||
int end_lineno, int end_col_offset)
|
||||
{
|
||||
if (PyErr_WarnExplicitObject(PyExc_SyntaxWarning, msg, filename,
|
||||
lineno, NULL, NULL) < 0)
|
||||
{
|
||||
if (PyErr_ExceptionMatches(PyExc_SyntaxWarning)) {
|
||||
/* Replace the SyntaxWarning exception with a SyntaxError
|
||||
to get a more accurate error report */
|
||||
PyErr_Clear();
|
||||
_PyErr_RaiseSyntaxError(msg, filename, lineno, col_offset,
|
||||
end_lineno, end_col_offset);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Attempt to load the line of text that the exception refers to. If it
|
||||
fails, it will return NULL but will not set an exception.
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue