@@ -141,6 +141,8 @@ fn c3_mro(
141141 cls : & Bound < ' _ , PyAny > ,
142142 abcs : Vec < PyTypeReference > ,
143143) -> PyResult < Vec < PyTypeReference > > {
144+ eprintln ! ( "cls = {cls:#?}" ) ;
145+ eprintln ! ( "abcs = {abcs:#?}" ) ;
144146 let bases = match get_obj_bases ( cls) {
145147 Ok ( b) => {
146148 if !b. is_empty ( ) {
@@ -168,7 +170,7 @@ fn c3_mro(
168170 . unwrap ( )
169171 } )
170172 {
171- vec ! [ abc]
173+ vec ! [ abc. clone_ref ( py ) ]
172174 } else {
173175 vec ! [ ]
174176 }
@@ -178,7 +180,11 @@ fn c3_mro(
178180 eprintln ! ( "other_bases = {other_bases:#?}" ) ;
179181 eprintln ! ( "abstract_bases = {abstract_bases:#?}" ) ;
180182
181- let new_abcs: Vec < _ > = abcs. iter ( ) . filter ( |c| abstract_bases. contains ( c) ) . collect ( ) ;
183+ let new_abcs: Vec < _ > = abcs
184+ . iter ( )
185+ . filter ( |& c| !abstract_bases. contains ( c) )
186+ . collect ( ) ;
187+ eprintln ! ( "new_abcs = {new_abcs:#?}" ) ;
182188
183189 let mut mros: Vec < & mut Vec < PyTypeReference > > = Vec :: new ( ) ;
184190
@@ -188,7 +194,11 @@ fn c3_mro(
188194 let mut explicit_bases_mro = sub_c3_mro ( py, explicit_bases. iter ( ) , & new_abcs) ?;
189195 mros. extend ( & mut explicit_bases_mro) ;
190196
191- let mut abstract_bases_mro = sub_c3_mro ( py, abstract_bases. iter ( ) . map ( |v| * v) , & new_abcs) ?;
197+ let mut abstract_bases_mro = sub_c3_mro (
198+ py,
199+ abstract_bases. iter ( ) . map ( |v| v. clone_ref ( py) ) ,
200+ & new_abcs,
201+ ) ?;
192202 eprintln ! ( "abstract_bases_mro = {abstract_bases_mro:#?}" ) ;
193203 mros. extend ( & mut abstract_bases_mro) ;
194204
0 commit comments