mirror of
https://github.com/python/cpython.git
synced 2025-10-19 16:03:42 +00:00
gh-139640: Fix swallowing syntax warnings in different modules (GH-139755)
Revert GH-131993. Fix swallowing some syntax warnings in different modules if they accidentally have the same message and are emitted from the same line.
This commit is contained in:
parent
1ff6d69fbe
commit
279db6bede
7 changed files with 62 additions and 74 deletions
|
@ -1473,28 +1473,6 @@ PyErr_WarnExplicitObject(PyObject *category, PyObject *message,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* Like PyErr_WarnExplicitObject, but automatically sets up context */
|
||||
int
|
||||
_PyErr_WarnExplicitObjectWithContext(PyObject *category, PyObject *message,
|
||||
PyObject *filename, int lineno)
|
||||
{
|
||||
PyObject *unused_filename, *module, *registry;
|
||||
int unused_lineno;
|
||||
int stack_level = 1;
|
||||
|
||||
if (!setup_context(stack_level, NULL, &unused_filename, &unused_lineno,
|
||||
&module, ®istry)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
int rc = PyErr_WarnExplicitObject(category, message, filename, lineno,
|
||||
module, registry);
|
||||
Py_DECREF(unused_filename);
|
||||
Py_DECREF(registry);
|
||||
Py_DECREF(module);
|
||||
return rc;
|
||||
}
|
||||
|
||||
int
|
||||
PyErr_WarnExplicit(PyObject *category, const char *text,
|
||||
const char *filename_str, int lineno,
|
||||
|
|
|
@ -103,6 +103,7 @@ typedef struct _PyCompiler {
|
|||
bool c_save_nested_seqs; /* if true, construct recursive instruction sequences
|
||||
* (including instructions for nested code objects)
|
||||
*/
|
||||
int c_disable_warning;
|
||||
} compiler;
|
||||
|
||||
static int
|
||||
|
@ -765,6 +766,9 @@ _PyCompile_PushFBlock(compiler *c, location loc,
|
|||
f->fb_loc = loc;
|
||||
f->fb_exit = exit;
|
||||
f->fb_datum = datum;
|
||||
if (t == COMPILE_FBLOCK_FINALLY_END) {
|
||||
c->c_disable_warning++;
|
||||
}
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -776,6 +780,9 @@ _PyCompile_PopFBlock(compiler *c, fblocktype t, jump_target_label block_label)
|
|||
u->u_nfblocks--;
|
||||
assert(u->u_fblock[u->u_nfblocks].fb_type == t);
|
||||
assert(SAME_JUMP_TARGET_LABEL(u->u_fblock[u->u_nfblocks].fb_block, block_label));
|
||||
if (t == COMPILE_FBLOCK_FINALLY_END) {
|
||||
c->c_disable_warning--;
|
||||
}
|
||||
}
|
||||
|
||||
fblockinfo *
|
||||
|
@ -1203,6 +1210,9 @@ _PyCompile_Error(compiler *c, location loc, const char *format, ...)
|
|||
int
|
||||
_PyCompile_Warn(compiler *c, location loc, const char *format, ...)
|
||||
{
|
||||
if (c->c_disable_warning) {
|
||||
return 0;
|
||||
}
|
||||
va_list vargs;
|
||||
va_start(vargs, format);
|
||||
PyObject *msg = PyUnicode_FromFormatV(format, vargs);
|
||||
|
|
|
@ -1962,8 +1962,8 @@ int
|
|||
_PyErr_EmitSyntaxWarning(PyObject *msg, PyObject *filename, int lineno, int col_offset,
|
||||
int end_lineno, int end_col_offset)
|
||||
{
|
||||
if (_PyErr_WarnExplicitObjectWithContext(PyExc_SyntaxWarning, msg,
|
||||
filename, lineno) < 0)
|
||||
if (PyErr_WarnExplicitObject(PyExc_SyntaxWarning, msg,
|
||||
filename, lineno, NULL, NULL) < 0)
|
||||
{
|
||||
if (PyErr_ExceptionMatches(PyExc_SyntaxWarning)) {
|
||||
/* Replace the SyntaxWarning exception with a SyntaxError
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue