Skip to content

Commit 3e67f23

Browse files
fix whitespace issue, cast list to tuple for types.GenericAlias
1 parent cc7fc1c commit 3e67f23

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

Lib/typing.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1161,7 +1161,7 @@ def __class_getitem__(cls, params):
11611161
# Subscripting a regular Generic subclass.
11621162

11631163
if any(isinstance(t, ParamSpec) for t in cls.__parameters__):
1164-
params = _prepare_paramspec_params(cls, params)
1164+
params = _prepare_paramspec_params(cls, params)
11651165
_check_generic(cls, params, len(cls.__parameters__))
11661166
return _GenericAlias(cls, params)
11671167

Objects/genericaliasobject.c

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,14 @@ subs_tvars(PyObject *obj, PyObject *params, PyObject **argitems)
280280
if (iparam >= 0) {
281281
arg = argitems[iparam];
282282
}
283-
Py_INCREF(arg);
283+
// convert all the lists inside args to tuples to help
284+
// with caching in other libaries
285+
if (PyList_CheckExact(arg)) {
286+
arg = PyList_AsTuple(arg);
287+
}
288+
else {
289+
Py_INCREF(arg);
290+
}
284291
PyTuple_SET_ITEM(subargs, i, arg);
285292
}
286293

@@ -576,15 +583,29 @@ setup_ga(gaobject *alias, PyObject *origin, PyObject *args) {
576583
return 0;
577584
}
578585
}
579-
else {
580-
Py_INCREF(args);
586+
Py_ssize_t argslen = PyTuple_GET_SIZE(args);
587+
PyObject *_args = PyList_New(argslen);
588+
if (_args == NULL) {
589+
return 0;
590+
}
591+
// convert all the lists inside args to tuples to help
592+
// with caching in other libaries
593+
for (Py_ssize_t i = 0; i < argslen; ++i) {
594+
PyObject *p = PyTuple_GET_ITEM(args, i);
595+
if (PyList_CheckExact(p)) {
596+
p = PyList_AsTuple(p);
597+
}
598+
PyList_SET_ITEM(_args, i, p);
581599
}
600+
args = PyList_AsTuple(_args);
601+
PyObject_GC_Del(_args);
582602

583603
Py_INCREF(origin);
584604
alias->origin = origin;
585605
alias->args = args;
586606
alias->parameters = NULL;
587607
alias->weakreflist = NULL;
608+
588609
return 1;
589610
}
590611

0 commit comments

Comments
 (0)