mirror of
https://github.com/python/cpython.git
synced 2025-11-01 18:51:43 +00:00
gh-104600: Make type.__type_params__ writable (#104634)
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
This commit is contained in:
parent
dbe171e609
commit
8f1f3b9abd
4 changed files with 71 additions and 15 deletions
|
|
@ -1460,18 +1460,6 @@ type_get_annotations(PyTypeObject *type, void *context)
|
|||
return annotations;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
type_get_type_params(PyTypeObject *type, void *context)
|
||||
{
|
||||
PyObject *params = PyDict_GetItem(lookup_tp_dict(type), &_Py_ID(__type_params__));
|
||||
|
||||
if (params) {
|
||||
return Py_NewRef(params);
|
||||
}
|
||||
|
||||
return PyTuple_New(0);
|
||||
}
|
||||
|
||||
static int
|
||||
type_set_annotations(PyTypeObject *type, PyObject *value, void *context)
|
||||
{
|
||||
|
|
@ -1502,6 +1490,34 @@ type_set_annotations(PyTypeObject *type, PyObject *value, void *context)
|
|||
return result;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
type_get_type_params(PyTypeObject *type, void *context)
|
||||
{
|
||||
PyObject *params = PyDict_GetItem(lookup_tp_dict(type), &_Py_ID(__type_params__));
|
||||
|
||||
if (params) {
|
||||
return Py_NewRef(params);
|
||||
}
|
||||
|
||||
return PyTuple_New(0);
|
||||
}
|
||||
|
||||
static int
|
||||
type_set_type_params(PyTypeObject *type, PyObject *value, void *context)
|
||||
{
|
||||
if (!check_set_special_type_attr(type, value, "__type_params__")) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
PyObject *dict = lookup_tp_dict(type);
|
||||
int result = PyDict_SetItem(dict, &_Py_ID(__type_params__), value);
|
||||
|
||||
if (result == 0) {
|
||||
PyType_Modified(type);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/*[clinic input]
|
||||
type.__instancecheck__ -> bool
|
||||
|
|
@ -1548,7 +1564,7 @@ static PyGetSetDef type_getsets[] = {
|
|||
{"__doc__", (getter)type_get_doc, (setter)type_set_doc, NULL},
|
||||
{"__text_signature__", (getter)type_get_text_signature, NULL, NULL},
|
||||
{"__annotations__", (getter)type_get_annotations, (setter)type_set_annotations, NULL},
|
||||
{"__type_params__", (getter)type_get_type_params, NULL, NULL},
|
||||
{"__type_params__", (getter)type_get_type_params, (setter)type_set_type_params, NULL},
|
||||
{0}
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue