diff options
author | Tomas R. <tomas.roun8@gmail.com> | 2025-03-04 20:34:59 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-04 11:34:59 -0800 |
commit | e091520fdbcfe406e5fdcf66b7864b2b34a6726b (patch) | |
tree | 2b7283416bbaf21cb5332534bd97ab1b8eb25ba0 /Objects/typevarobject.c | |
parent | d8a1cf469e40b538a84e583ac1d5d34418ed9a6a (diff) | |
download | cpython-e091520fdbcfe406e5fdcf66b7864b2b34a6726b.tar.gz cpython-e091520fdbcfe406e5fdcf66b7864b2b34a6726b.zip |
gh-126085: Add `tp_iter` to TypeAliasType to allow star unpacking (#127981)
Diffstat (limited to 'Objects/typevarobject.c')
-rw-r--r-- | Objects/typevarobject.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/Objects/typevarobject.c b/Objects/typevarobject.c index d8158293aca..3ab8cb14686 100644 --- a/Objects/typevarobject.c +++ b/Objects/typevarobject.c @@ -1,4 +1,4 @@ -// TypeVar, TypeVarTuple, and ParamSpec +// TypeVar, TypeVarTuple, ParamSpec, and TypeAlias #include "Python.h" #include "pycore_object.h" // _PyObject_GC_TRACK/UNTRACK, PyAnnotateFormat #include "pycore_typevarobject.h" @@ -394,7 +394,7 @@ caller(void) } static PyObject * -typevartuple_unpack(PyObject *tvt) +unpack(PyObject *self) { PyObject *typing = PyImport_ImportModule("typing"); if (typing == NULL) { @@ -405,7 +405,7 @@ typevartuple_unpack(PyObject *tvt) Py_DECREF(typing); return NULL; } - PyObject *unpacked = PyObject_GetItem(unpack, tvt); + PyObject *unpacked = PyObject_GetItem(unpack, self); Py_DECREF(typing); Py_DECREF(unpack); return unpacked; @@ -440,7 +440,7 @@ unpack_typevartuples(PyObject *params) for (Py_ssize_t i = 0; i < n; i++) { PyObject *param = PyTuple_GET_ITEM(params, i); if (Py_IS_TYPE(param, tp)) { - PyObject *unpacked = typevartuple_unpack(param); + PyObject *unpacked = unpack(param); if (unpacked == NULL) { Py_DECREF(new_params); return NULL; @@ -1524,9 +1524,9 @@ typevartuple_dealloc(PyObject *self) } static PyObject * -typevartuple_iter(PyObject *self) +unpack_iter(PyObject *self) { - PyObject *unpacked = typevartuple_unpack(self); + PyObject *unpacked = unpack(self); if (unpacked == NULL) { return NULL; } @@ -1782,7 +1782,7 @@ PyType_Slot typevartuple_slots[] = { {Py_tp_methods, typevartuple_methods}, {Py_tp_getset, typevartuple_getset}, {Py_tp_new, typevartuple}, - {Py_tp_iter, typevartuple_iter}, + {Py_tp_iter, unpack_iter}, {Py_tp_repr, typevartuple_repr}, {Py_tp_dealloc, typevartuple_dealloc}, {Py_tp_alloc, PyType_GenericAlloc}, @@ -2158,6 +2158,7 @@ PyTypeObject _PyTypeAlias_Type = { .tp_dealloc = typealias_dealloc, .tp_new = typealias_new, .tp_free = PyObject_GC_Del, + .tp_iter = unpack_iter, .tp_traverse = typealias_traverse, .tp_clear = typealias_clear, .tp_repr = typealias_repr, |