mirror of
https://github.com/python/cpython.git
synced 2025-07-23 11:15:24 +00:00
[3.12] gh-96497: Mangle name before symtable lookup in 'symtable_extend_namedexpr_scope' (GH-96561) (GH-115603)
(cherry picked from commit 664965a1c1
)
Co-authored-by: wookie184 <wookie1840@gmail.com>
This commit is contained in:
parent
ebf8eb2740
commit
bf0e072980
3 changed files with 34 additions and 4 deletions
|
@ -1254,16 +1254,22 @@ symtable_enter_block(struct symtable *st, identifier name, _Py_block_ty block,
|
|||
}
|
||||
|
||||
static long
|
||||
symtable_lookup(struct symtable *st, PyObject *name)
|
||||
symtable_lookup_entry(struct symtable *st, PySTEntryObject *ste, PyObject *name)
|
||||
{
|
||||
PyObject *mangled = _Py_Mangle(st->st_private, name);
|
||||
if (!mangled)
|
||||
return 0;
|
||||
long ret = _PyST_GetSymbol(st->st_cur, mangled);
|
||||
long ret = _PyST_GetSymbol(ste, mangled);
|
||||
Py_DECREF(mangled);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static long
|
||||
symtable_lookup(struct symtable *st, PyObject *name)
|
||||
{
|
||||
return symtable_lookup_entry(st, st->st_cur, name);
|
||||
}
|
||||
|
||||
static int
|
||||
symtable_add_def_helper(struct symtable *st, PyObject *name, int flag, struct _symtable_entry *ste,
|
||||
int lineno, int col_offset, int end_lineno, int end_col_offset)
|
||||
|
@ -1904,7 +1910,7 @@ symtable_extend_namedexpr_scope(struct symtable *st, expr_ty e)
|
|||
* binding conflict with iteration variables, otherwise skip it
|
||||
*/
|
||||
if (ste->ste_comprehension) {
|
||||
long target_in_scope = _PyST_GetSymbol(ste, target_name);
|
||||
long target_in_scope = symtable_lookup_entry(st, ste, target_name);
|
||||
if ((target_in_scope & DEF_COMP_ITER) &&
|
||||
(target_in_scope & DEF_LOCAL)) {
|
||||
PyErr_Format(PyExc_SyntaxError, NAMED_EXPR_COMP_CONFLICT, target_name);
|
||||
|
@ -1920,7 +1926,7 @@ symtable_extend_namedexpr_scope(struct symtable *st, expr_ty e)
|
|||
|
||||
/* If we find a FunctionBlock entry, add as GLOBAL/LOCAL or NONLOCAL/LOCAL */
|
||||
if (ste->ste_type == FunctionBlock) {
|
||||
long target_in_scope = _PyST_GetSymbol(ste, target_name);
|
||||
long target_in_scope = symtable_lookup_entry(st, ste, target_name);
|
||||
if (target_in_scope & DEF_GLOBAL) {
|
||||
if (!symtable_add_def(st, target_name, DEF_GLOBAL, LOCATION(e)))
|
||||
VISIT_QUIT(st, 0);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue