@@ -151,20 +151,20 @@ fn c3_mro(
151
151
}
152
152
Err ( e) => return Err ( e) ,
153
153
} ;
154
+ eprintln ! ( "bases = {bases:#?}" ) ;
154
155
let boundary = c3_boundary ( py, & bases) ?;
155
156
eprintln ! ( "boundary = {boundary}" ) ;
156
- let base = & bases[ boundary] ;
157
157
158
158
let ( explicit_bases, other_bases) = bases. split_at ( boundary) ;
159
159
let abstract_bases: Vec < _ > = abcs
160
160
. iter ( )
161
161
. flat_map ( |abc| {
162
162
if Builtins :: cached ( py)
163
- . issubclass ( py, cls, base . wrapped ( ) . bind ( py) )
163
+ . issubclass ( py, cls, abc . wrapped ( ) . bind ( py) )
164
164
. unwrap ( )
165
165
&& !bases. iter ( ) . any ( |b| {
166
166
Builtins :: cached ( py)
167
- . issubclass ( py, b. wrapped ( ) . bind ( py) , base . wrapped ( ) . bind ( py) )
167
+ . issubclass ( py, b. wrapped ( ) . bind ( py) , abc . wrapped ( ) . bind ( py) )
168
168
. unwrap ( )
169
169
} )
170
170
{
@@ -174,6 +174,9 @@ fn c3_mro(
174
174
}
175
175
} )
176
176
. collect ( ) ;
177
+ eprintln ! ( "explict_bases = {explicit_bases:#?}" ) ;
178
+ eprintln ! ( "other_bases = {other_bases:#?}" ) ;
179
+ eprintln ! ( "abstract_bases = {abstract_bases:#?}" ) ;
177
180
178
181
let new_abcs: Vec < _ > = abcs. iter ( ) . filter ( |c| abstract_bases. contains ( c) ) . collect ( ) ;
179
182
@@ -186,6 +189,7 @@ fn c3_mro(
186
189
mros. extend ( & mut explicit_bases_mro) ;
187
190
188
191
let mut abstract_bases_mro = sub_c3_mro ( py, abstract_bases. iter ( ) . map ( |v| * v) , & new_abcs) ?;
192
+ eprintln ! ( "abstract_bases_mro = {abstract_bases_mro:#?}" ) ;
189
193
mros. extend ( & mut abstract_bases_mro) ;
190
194
191
195
let mut other_bases_mro = sub_c3_mro ( py, other_bases. iter ( ) , & new_abcs) ?;
@@ -212,7 +216,9 @@ pub(crate) fn compose_mro(
212
216
let typing = TypingModule :: cached ( py) ;
213
217
214
218
let bases: HashSet < _ > = get_obj_mro ( & cls) ?;
219
+ eprintln ! ( "bases = {bases:#?}" ) ;
215
220
let registered_types: HashSet < _ > = types. collect ( ) ;
221
+ eprintln ! ( "registered_types = {registered_types:#?}" ) ;
216
222
let eligible_types: HashSet < _ > = registered_types
217
223
. iter ( )
218
224
. filter ( |& tref| {
@@ -235,6 +241,7 @@ pub(crate) fn compose_mro(
235
241
} )
236
242
. copied ( )
237
243
. collect ( ) ;
244
+ eprintln ! ( "eligible_types = {eligible_types:#?}" ) ;
238
245
let mut mro: Vec < PyTypeReference > = Vec :: new ( ) ;
239
246
eligible_types. iter ( ) . for_each ( |& tref| {
240
247
// Subclasses of the ABCs in *types* which are also implemented by
@@ -244,6 +251,7 @@ pub(crate) fn compose_mro(
244
251
. unwrap ( )
245
252
. iter ( )
246
253
. filter ( |subclass| {
254
+ eprintln ! ( "subclass = {subclass:#?}" ) ;
247
255
let typ = subclass. wrapped ( ) ;
248
256
let tref = PyTypeReference :: new ( typ. clone_ref ( py) ) ;
249
257
!bases. contains ( & tref)
@@ -273,6 +281,9 @@ pub(crate) fn compose_mro(
273
281
} ) ;
274
282
}
275
283
} ) ;
284
+ eprintln ! ( "Pre-mro candidates {mro:#?}" ) ;
276
285
277
- c3_mro ( py, & cls, mro)
286
+ let final_rmo = c3_mro ( py, & cls, mro) ;
287
+ eprintln ! ( "MRO for {cls}: {final_rmo:#?}" ) ;
288
+ final_rmo
278
289
}
0 commit comments