summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorwookie184 <wookie1840@gmail.com>2024-02-17 12:06:31 (GMT)
committerGitHub <noreply@github.com>2024-02-17 12:06:31 (GMT)
commit664965a1c141e8af5eb465d29099781a6a2fc3f3 (patch)
tree9a2d6576ba63256660c7242692f8db0a3dd4c1bf /Python
parente88ebc1c4028cf2f0db43659e513440257eaec01 (diff)
downloadcpython-664965a1c141e8af5eb465d29099781a6a2fc3f3.zip
cpython-664965a1c141e8af5eb465d29099781a6a2fc3f3.tar.gz
cpython-664965a1c141e8af5eb465d29099781a6a2fc3f3.tar.bz2
gh-96497: Mangle name before symtable lookup in 'symtable_extend_namedexpr_scope' (GH-96561)
Diffstat (limited to 'Python')
-rw-r--r--Python/symtable.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/Python/symtable.c b/Python/symtable.c
index d695163..b69452b 100644
--- a/Python/symtable.c
+++ b/Python/symtable.c
@@ -1359,16 +1359,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)
@@ -2009,7 +2015,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);
@@ -2025,7 +2031,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);