Skip to content

Commit 5fd3525

Browse files
committed
fixgenericalias
1 parent b4f4ffa commit 5fd3525

File tree

2 files changed

+10
-14
lines changed

2 files changed

+10
-14
lines changed

Lib/test/test_typing.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2547,8 +2547,6 @@ def test_pickle(self):
25472547

25482548
del T_pickle, P_pickle, TS_pickle # cleaning up global state
25492549

2550-
# TODO: RUSTPYTHON
2551-
@unittest.expectedFailure
25522550
def test_var_substitution(self):
25532551
Callable = self.Callable
25542552
fullname = f"{Callable.__module__}.Callable"
@@ -2720,6 +2718,11 @@ def test_errors(self):
27202718
class TypingCallableTests(BaseCallableTests, BaseTestCase):
27212719
Callable = typing.Callable
27222720

2721+
# TODO: RUSTPYTHON
2722+
@unittest.expectedFailure
2723+
def test_var_substitution(self):
2724+
super().test_var_substitution()
2725+
27232726
def test_consistency(self):
27242727
# bpo-42195
27252728
# Testing collections.abc.Callable's consistency with typing.Callable
@@ -8792,8 +8795,6 @@ def test_basic_with_exec(self):
87928795
self.assertEqual(P.__name__, 'P')
87938796
self.assertIs(P.__module__, None)
87948797

8795-
# TODO: RUSTPYTHON
8796-
@unittest.expectedFailure
87978798
def test_valid_uses(self):
87988799
P = ParamSpec('P')
87998800
T = TypeVar('T')

vm/src/builtins/genericalias.rs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ pub(crate) fn make_parameters(args: &Py<PyTuple>, vm: &VirtualMachine) -> PyTupl
225225
// Check for __typing_subst__ attribute (like CPython)
226226
if arg.get_attr(identifier!(vm, __typing_subst__), vm).is_ok() {
227227
// Use tuple_add equivalent logic
228-
if tuple_index_vec(&parameters, arg).is_none() {
228+
if tuple_index(&parameters, arg).is_none() {
229229
if iparam >= parameters.len() {
230230
parameters.resize(iparam + 1, vm.ctx.none());
231231
}
@@ -241,7 +241,7 @@ pub(crate) fn make_parameters(args: &Py<PyTuple>, vm: &VirtualMachine) -> PyTupl
241241
}
242242
for sub_param in sub_params {
243243
// Use tuple_add equivalent logic
244-
if tuple_index_vec(&parameters[..iparam], sub_param).is_none() {
244+
if tuple_index(&parameters[..iparam], sub_param).is_none() {
245245
if iparam >= parameters.len() {
246246
parameters.resize(iparam + 1, vm.ctx.none());
247247
}
@@ -259,12 +259,7 @@ pub(crate) fn make_parameters(args: &Py<PyTuple>, vm: &VirtualMachine) -> PyTupl
259259
}
260260

261261
#[inline]
262-
fn tuple_index(tuple: &PyTupleRef, item: &PyObjectRef) -> Option<usize> {
263-
tuple.iter().position(|element| element.is(item))
264-
}
265-
266-
#[inline]
267-
fn tuple_index_vec(vec: &[PyObjectRef], item: &PyObjectRef) -> Option<usize> {
262+
fn tuple_index(vec: &[PyObjectRef], item: &PyObjectRef) -> Option<usize> {
268263
vec.iter().position(|element| element.is(item))
269264
}
270265

@@ -284,7 +279,7 @@ fn subs_tvars(
284279
let mut sub_args = Vec::new();
285280

286281
for arg in sub_params.iter() {
287-
if let Some(idx) = tuple_index(params, arg) {
282+
if let Some(idx) = tuple_index(params.as_slice(), arg) {
288283
let param = &params[idx];
289284
let substituted_arg = &arg_items[idx];
290285

@@ -374,7 +369,7 @@ pub fn subs_parameters<F: Fn(&VirtualMachine) -> PyResult<String>>(
374369
for arg in args.iter() {
375370
// Check for __typing_subst__ attribute directly (like CPython)
376371
if let Ok(subst) = arg.get_attr(identifier!(vm, __typing_subst__), vm) {
377-
let idx = tuple_index(&parameters, arg).unwrap();
372+
let idx = tuple_index(parameters.as_slice(), arg).unwrap();
378373
if idx < num_items {
379374
// Call __typing_subst__ with the argument
380375
let substituted = subst.call((arg_items[idx].clone(),), vm)?;

0 commit comments

Comments
 (0)