@@ -8,7 +8,7 @@ use crate::Db;
88use crate :: types:: class_base:: ClassBase ;
99use crate :: types:: generics:: Specialization ;
1010use crate :: types:: {
11- ClassLiteral , ClassType , DynamicClassLiteral , KnownClass , KnownInstanceType , SpecialFormType ,
11+ ClassLiteral , ClassType , DynamicClassLiteral , KnownInstanceType , SpecialFormType ,
1212 StaticClassLiteral , Type ,
1313} ;
1414
@@ -141,25 +141,29 @@ impl<'db> Mro<'db> {
141141 )
142142 ) =>
143143 {
144- ClassBase :: try_from_type ( db, * single_base, ClassLiteral :: Static ( class_literal) )
145- . map_or_else (
146- || {
147- Err ( StaticMroErrorKind :: InvalidBases ( Box :: from ( [ (
148- 0 ,
149- * single_base,
150- ) ] ) ) )
151- } ,
152- |single_base| {
153- if single_base. has_cyclic_mro ( db) {
154- Err ( StaticMroErrorKind :: InheritanceCycle )
155- } else {
156- Ok ( std:: iter:: once ( ClassBase :: Class ( class) )
157- . chain ( single_base. mro ( db, specialization) )
158- . collect ( ) )
159- }
160- } ,
161- )
162- . map_err ( |err| err. into_mro_error ( db, class) )
144+ ClassBase :: try_from_type (
145+ db,
146+ * single_base,
147+ Some ( ClassLiteral :: Static ( class_literal) ) ,
148+ )
149+ . map_or_else (
150+ || {
151+ Err ( StaticMroErrorKind :: InvalidBases ( Box :: from ( [ (
152+ 0 ,
153+ * single_base,
154+ ) ] ) ) )
155+ } ,
156+ |single_base| {
157+ if single_base. has_cyclic_mro ( db) {
158+ Err ( StaticMroErrorKind :: InheritanceCycle )
159+ } else {
160+ Ok ( std:: iter:: once ( ClassBase :: Class ( class) )
161+ . chain ( single_base. mro ( db, specialization) )
162+ . collect ( ) )
163+ }
164+ } ,
165+ )
166+ . map_err ( |err| err. into_mro_error ( db, class) )
163167 }
164168
165169 // The class has multiple explicit bases.
@@ -186,7 +190,7 @@ impl<'db> Mro<'db> {
186190 match ClassBase :: try_from_type (
187191 db,
188192 * base,
189- ClassLiteral :: Static ( class_literal) ,
193+ Some ( ClassLiteral :: Static ( class_literal) ) ,
190194 ) {
191195 Some ( valid_base) => resolved_bases. push ( valid_base) ,
192196 None => invalid_bases. push ( ( i, * base) ) ,
@@ -261,7 +265,7 @@ impl<'db> Mro<'db> {
261265 let Some ( base) = ClassBase :: try_from_type (
262266 db,
263267 * base,
264- ClassLiteral :: Static ( class_literal) ,
268+ Some ( ClassLiteral :: Static ( class_literal) ) ,
265269 ) else {
266270 continue ;
267271 } ;
@@ -336,17 +340,12 @@ impl<'db> Mro<'db> {
336340 ) -> Result < Self , DynamicMroError < ' db > > {
337341 let original_bases = dynamic. explicit_bases ( db) ;
338342
339- // Use a placeholder class literal for try_from_type (the subclass parameter is only
340- // used for NamedTuple subclasses, which doesn't apply here).
341- let placeholder_class: ClassLiteral < ' db > =
342- KnownClass :: Object . try_to_class_literal ( db) . unwrap ( ) . into ( ) ;
343-
344343 // Convert Types to ClassBases, tracking any that fail conversion.
345344 let mut resolved_bases = Vec :: with_capacity ( original_bases. len ( ) ) ;
346345 let mut invalid_bases = Vec :: new ( ) ;
347346
348347 for ( i, base_type) in original_bases. iter ( ) . enumerate ( ) {
349- match ClassBase :: try_from_type ( db, * base_type, placeholder_class ) {
348+ match ClassBase :: try_from_type ( db, * base_type, None ) {
350349 Some ( class_base) => resolved_bases. push ( class_base) ,
351350 None => invalid_bases. push ( ( i, * base_type) ) ,
352351 }
@@ -429,14 +428,10 @@ impl<'db> Mro<'db> {
429428 let mut seen = FxHashSet :: default ( ) ;
430429 seen. insert ( self_base) ;
431430
432- // Use a placeholder class literal for `try_from_type`.
433- let placeholder_class: ClassLiteral < ' db > =
434- KnownClass :: Object . try_to_class_literal ( db) . unwrap ( ) . into ( ) ;
435-
436431 for base_type in dynamic. explicit_bases ( db) {
437432 // Convert `Type` to `ClassBase`, falling back to `Unknown` if conversion fails.
438- let base = ClassBase :: try_from_type ( db , * base_type , placeholder_class )
439- . unwrap_or_else ( ClassBase :: unknown) ;
433+ let base =
434+ ClassBase :: try_from_type ( db , * base_type , None ) . unwrap_or_else ( ClassBase :: unknown) ;
440435
441436 for item in base. mro ( db, None ) {
442437 if seen. insert ( item) {
0 commit comments