@@ -60,38 +60,28 @@ fn find_merge_candidate(py: Python, seqs: &[&mut Vec<PyTypeReference>]) -> Optio
6060    candidate. map ( |c| c. clone_ref ( py) ) 
6161} 
6262
63- struct  C3Mro < ' a >  { 
64-     seqs :  & ' a  mut  Vec < & ' a  mut  Vec < PyTypeReference > > , 
65- } 
66- 
67- impl  C3Mro < ' _ >  { 
68-     fn  for_abcs < ' a > ( 
69-         py :  Python , 
70-         abcs :  & ' a  mut  Vec < & ' a  mut  Vec < PyTypeReference > > , 
71-     )  -> PyResult < Vec < PyTypeReference > >  { 
72-         C3Mro  {  seqs :  abcs } . merge ( py) 
73-     } 
74- 
75-     fn  merge ( & mut  self ,  py :  Python )  -> PyResult < Vec < PyTypeReference > >  { 
76-         let  mut  result:  Vec < PyTypeReference >  = Vec :: new ( ) ; 
77-         loop  { 
78-             let  seqs = & mut  self . seqs ; 
79-             seqs. retain ( |seq| !seq. is_empty ( ) ) ; 
80-             if  seqs. is_empty ( )  { 
81-                 return  Ok ( result) ; 
82-             } 
83-             match  find_merge_candidate ( py,  seqs. as_slice ( ) )  { 
84-                 Some ( c)  => { 
85-                     for  i in  0 ..seqs. len ( )  { 
86-                         let  seq = & mut  self . seqs [ i] ; 
87-                         if  seq[ 0 ] . eq ( & c)  { 
88-                             seq. remove ( 0 ) ; 
89-                         } 
63+ fn  merge_mro ( 
64+     seqs :  & mut  Vec < & mut  Vec < PyTypeReference > > , 
65+     py :  Python , 
66+ )  -> PyResult < Vec < PyTypeReference > >  { 
67+     let  mut  result:  Vec < PyTypeReference >  = Vec :: new ( ) ; 
68+     loop  { 
69+         //let seqs = seqs; 
70+         seqs. retain ( |seq| !seq. is_empty ( ) ) ; 
71+         if  seqs. is_empty ( )  { 
72+             return  Ok ( result) ; 
73+         } 
74+         match  find_merge_candidate ( py,  seqs. as_slice ( ) )  { 
75+             Some ( c)  => { 
76+                 for  i in  0 ..seqs. len ( )  { 
77+                     let  seq = & mut  seqs[ i] ; 
78+                     if  seq[ 0 ] . eq ( & c)  { 
79+                         seq. remove ( 0 ) ; 
9080                    } 
91-                     result. push ( c) ; 
9281                } 
93-                 None  =>  return   Err ( PyRuntimeError :: new_err ( "Inconsistent hierarchy" ) ) , 
82+                 result . push ( c ) ; 
9483            } 
84+             None  => return  Err ( PyRuntimeError :: new_err ( "Inconsistent hierarchy" ) ) , 
9585        } 
9686    } 
9787} 
@@ -211,7 +201,7 @@ fn c3_mro(
211201    let  mut  other_bases_cloned = Vec :: from_iter ( other_bases. iter ( ) . map ( |b| b. clone_ref ( py) ) ) ; 
212202    mros. push ( & mut  other_bases_cloned) ; 
213203
214-     C3Mro :: for_abcs ( py ,   & mut  mros) 
204+     merge_mro ( & mut  mros,  py ) 
215205} 
216206
217207pub ( crate )  fn  compose_mro ( 
0 commit comments