@@ -282,37 +282,34 @@ impl PyBaseObject {
282
282
283
283
#[ pygetset( name = "__class__" , setter) ]
284
284
fn set_class ( instance : PyObjectRef , value : PyObjectRef , vm : & VirtualMachine ) -> PyResult < ( ) > {
285
- let both_module = instance. class ( ) . fast_issubclass ( vm. ctx . types . module_type )
286
- && value. class ( ) . fast_issubclass ( vm. ctx . types . module_type ) ;
287
- let both_mutable = !instance
288
- . class ( )
289
- . slots
290
- . flags
291
- . has_feature ( PyTypeFlags :: IMMUTABLETYPE )
292
- && !value
293
- . downcast_ref :: < PyType > ( )
294
- . map ( |t| t. slots . flags . has_feature ( PyTypeFlags :: IMMUTABLETYPE ) )
295
- . unwrap_or ( false ) ;
296
- if both_mutable || both_module {
297
- match value. downcast :: < PyType > ( ) {
298
- Ok ( cls) => {
299
- // FIXME(#1979) cls instances might have a payload
285
+ match value. downcast :: < PyType > ( ) {
286
+ Ok ( cls) => {
287
+ let both_module = instance. class ( ) . fast_issubclass ( vm. ctx . types . module_type )
288
+ && cls. fast_issubclass ( vm. ctx . types . module_type ) ;
289
+ let both_mutable = !instance
290
+ . class ( )
291
+ . slots
292
+ . flags
293
+ . has_feature ( PyTypeFlags :: IMMUTABLETYPE )
294
+ && !cls. slots . flags . has_feature ( PyTypeFlags :: IMMUTABLETYPE ) ;
295
+ // FIXME(#1979) cls instances might have a payload
296
+ if both_mutable || both_module {
300
297
instance. set_class ( cls, vm) ;
301
298
Ok ( ( ) )
302
- }
303
- Err ( value) => {
304
- let value_class = value. class ( ) ;
305
- let type_repr = & value_class. name ( ) ;
306
- Err ( vm. new_type_error ( format ! (
307
- "__class__ must be set to a class, not '{type_repr}' object"
308
- ) ) )
299
+ } else {
300
+ Err ( vm. new_type_error (
301
+ "__class__ assignment only supported for mutable types or ModuleType subclasses"
302
+ . to_owned ( ) ,
303
+ ) )
309
304
}
310
305
}
311
- } else {
312
- Err ( vm. new_type_error (
313
- "__class__ assignment only supported for mutable types or ModuleType subclasses"
314
- . to_owned ( ) ,
315
- ) )
306
+ Err ( value) => {
307
+ let value_class = value. class ( ) ;
308
+ let type_repr = & value_class. name ( ) ;
309
+ Err ( vm. new_type_error ( format ! (
310
+ "__class__ must be set to a class, not '{type_repr}' object"
311
+ ) ) )
312
+ }
316
313
}
317
314
}
318
315
0 commit comments