mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
gh-119311: Fix name mangling with PEP 695 generic classes (#119464)
Fixes #119311. Fixes #119395.
This commit is contained in:
parent
3e8b60905e
commit
a9a74da4a0
7 changed files with 150 additions and 14 deletions
|
@ -1001,7 +1001,7 @@ static int
|
|||
compiler_addop_name(struct compiler_unit *u, location loc,
|
||||
int opcode, PyObject *dict, PyObject *o)
|
||||
{
|
||||
PyObject *mangled = _Py_Mangle(u->u_private, o);
|
||||
PyObject *mangled = _Py_MaybeMangle(u->u_private, u->u_ste, o);
|
||||
if (!mangled) {
|
||||
return ERROR;
|
||||
}
|
||||
|
@ -1873,7 +1873,7 @@ compiler_visit_kwonlydefaults(struct compiler *c, location loc,
|
|||
arg_ty arg = asdl_seq_GET(kwonlyargs, i);
|
||||
expr_ty default_ = asdl_seq_GET(kw_defaults, i);
|
||||
if (default_) {
|
||||
PyObject *mangled = _Py_Mangle(c->u->u_private, arg->arg);
|
||||
PyObject *mangled = _Py_MaybeMangle(c->u->u_private, c->u->u_ste, arg->arg);
|
||||
if (!mangled) {
|
||||
goto error;
|
||||
}
|
||||
|
@ -1930,7 +1930,7 @@ compiler_visit_argannotation(struct compiler *c, identifier id,
|
|||
if (!annotation) {
|
||||
return SUCCESS;
|
||||
}
|
||||
PyObject *mangled = _Py_Mangle(c->u->u_private, id);
|
||||
PyObject *mangled = _Py_MaybeMangle(c->u->u_private, c->u->u_ste, id);
|
||||
if (!mangled) {
|
||||
return ERROR;
|
||||
}
|
||||
|
@ -2625,7 +2625,6 @@ compiler_class(struct compiler *c, stmt_ty s)
|
|||
asdl_type_param_seq *type_params = s->v.ClassDef.type_params;
|
||||
int is_generic = asdl_seq_LEN(type_params) > 0;
|
||||
if (is_generic) {
|
||||
Py_XSETREF(c->u->u_private, Py_NewRef(s->v.ClassDef.name));
|
||||
PyObject *type_params_name = PyUnicode_FromFormat("<generic parameters of %U>",
|
||||
s->v.ClassDef.name);
|
||||
if (!type_params_name) {
|
||||
|
@ -2637,6 +2636,7 @@ compiler_class(struct compiler *c, stmt_ty s)
|
|||
return ERROR;
|
||||
}
|
||||
Py_DECREF(type_params_name);
|
||||
Py_XSETREF(c->u->u_private, Py_NewRef(s->v.ClassDef.name));
|
||||
RETURN_IF_ERROR_IN_SCOPE(c, compiler_type_params(c, type_params));
|
||||
_Py_DECLARE_STR(type_params, ".type_params");
|
||||
RETURN_IF_ERROR_IN_SCOPE(c, compiler_nameop(c, loc, &_Py_STR(type_params), Store));
|
||||
|
@ -4203,7 +4203,7 @@ compiler_nameop(struct compiler *c, location loc,
|
|||
return ERROR;
|
||||
}
|
||||
|
||||
mangled = _Py_Mangle(c->u->u_private, name);
|
||||
mangled = _Py_MaybeMangle(c->u->u_private, c->u->u_ste, name);
|
||||
if (!mangled) {
|
||||
return ERROR;
|
||||
}
|
||||
|
@ -6512,7 +6512,7 @@ compiler_annassign(struct compiler *c, stmt_ty s)
|
|||
VISIT(c, expr, s->v.AnnAssign.annotation);
|
||||
}
|
||||
ADDOP_NAME(c, loc, LOAD_NAME, &_Py_ID(__annotations__), names);
|
||||
mangled = _Py_Mangle(c->u->u_private, targ->v.Name.id);
|
||||
mangled = _Py_MaybeMangle(c->u->u_private, c->u->u_ste, targ->v.Name.id);
|
||||
ADDOP_LOAD_CONST_NEW(c, loc, mangled);
|
||||
ADDOP(c, loc, STORE_SUBSCR);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue