8000 gh-124498: Fix `TypeAliasType` not to be generic, when `type_params=(… · miss-islington/cpython@28afa73 · GitHub
[go: up one dir, main page]

Skip to content

Commit 28afa73

Browse files
sobolevnmiss-islington
authored andcommitted
pythongh-124498: Fix TypeAliasType not to be generic, when type_params=() (pythonGH-124499)
(cherry picked from commit abe5f79) Co-authored-by: sobolevn <mail@sobolevn.me>
1 parent 9f2e6ca commit 28afa73

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

Lib/test/test_type_aliases.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,19 @@ def test_generic(self):
212212
self.assertEqual(TA.__value__, list[T])
213213
self.assertEqual(TA.__type_params__, (T,))
214214
self.assertEqual(TA.__module__, __name__)
215+
self.assertIs(type(TA[int]), types.GenericAlias)
216+
217+
def test_not_generic(self):
218+
TA = TypeAliasType("TA", list[int], type_params=())
219+
self.assertEqual(TA.__name__, "TA")
220+
self.assertEqual(TA.__value__, list[int])
221+
self.assertEqual(TA.__type_params__, ())
222+
self.assertEqual(TA.__module__, __name__)
223+
with self.assertRaisesRegex(
224+
TypeError,
225+
"Only generic type aliases are subscriptable",
226+
):
227+
TA[int]
215228

216229
def test_keywords(self):
217230
TA = TypeAliasType(name="TA", value=int)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix :class:`typing.TypeAliasType` not to be generic, when ``type_params`` is
2+
an empty tuple.

Objects/typevarobject.c

Lines changed: 10 additions & 1 deletion
< 8000 td data-grid-cell-id="diff-a01f3de4635d64c05f5c6c85a96b6be6aa88a5bf2ace64bfe9823d40e6e637c5-1641-1641-2" data-line-anchor="diff-a01f3de4635d64c05f5c6c85a96b6be6aa88a5bf2ace64bfe9823d40e6e637c5R1641" data-selected="false" role="gridcell" style="background-color:var(--bgColor-default);padding-right:24px" tabindex="-1" valign="top" class="focusable-grid-cell diff-text-cell right-side-diff-cell left-side">
}
Original file line numberDiff line numberDiff line change
@@ -1640,7 +1640,16 @@ typealias_alloc(PyObject *name, PyObject *type_params, PyObject *compute_value,
16401640
return NULL;
16411641
16421642
ta->name = Py_NewRef(name);
1643-
ta->type_params = Py_IsNone(type_params) ? NULL : Py_XNewRef(type_params);
1643+
if (
1644+
type_params == NULL
1645+
|| Py_IsNone(type_params)
1646+
|| (PyTuple_Check(type_params) && PyTuple_GET_SIZE(type_params) == 0)
1647+
) {
1648+
ta->type_params = NULL;
1649+
}
1650+
else {
1651+
ta->type_params = Py_NewRef(type_params);
1652+
}
16441653
ta->compute_value = Py_XNewRef(compute_value);
16451654
ta->value = Py_XNewRef(value);
16461655
ta->module = Py_XNewRef(module);

0 commit comments

Comments
 (0)
0