@@ -454,16 +454,7 @@ mp_obj_t mp_obj_new_super(mp_obj_t type, mp_obj_t obj) {
454454/******************************************************************************/
455455// subclassing and built-ins specific to types
456456
457- bool mp_obj_is_subclass (mp_obj_t object , mp_obj_t classinfo ) {
458- if (!MP_OBJ_IS_TYPE (object , & mp_type_type )) {
459- nlr_jump (mp_obj_new_exception_msg (& mp_type_TypeError , "issubclass() arg 1 must be a class" ));
460- }
461-
462- // TODO support a tuple of classes for second argument
463- if (!MP_OBJ_IS_TYPE (classinfo , & mp_type_type )) {
464- nlr_jump (mp_obj_new_exception_msg (& mp_type_TypeError , "issubclass() arg 2 must be a class" ));
465- }
466-
457+ bool mp_obj_is_subclass_fast (mp_obj_t object , mp_obj_t classinfo ) {
467458 for (;;) {
468459 if (object == classinfo ) {
469460 return true;
@@ -496,6 +487,19 @@ bool mp_obj_is_subclass(mp_obj_t object, mp_obj_t classinfo) {
496487 }
497488}
498489
490+ bool mp_obj_is_subclass (mp_obj_t object , mp_obj_t classinfo ) {
491+ if (!MP_OBJ_IS_TYPE (object , & mp_type_type )) {
492+ nlr_jump (mp_obj_new_exception_msg (& mp_type_TypeError , "issubclass() arg 1 must be a class" ));
493+ }
494+
495+ // TODO support a tuple of classes for second argument
496+ if (!MP_OBJ_IS_TYPE (classinfo , & mp_type_type )) {
497+ nlr_jump (mp_obj_new_exception_msg (& mp_type_TypeError , "issubclass() arg 2 must be a class" ));
498+ }
499+
500+ return mp_obj_is_subclass_fast (object , classinfo );
501+ }
502+
499503STATIC mp_obj_t mp_builtin_issubclass (mp_obj_t object , mp_obj_t classinfo ) {
500504 return MP_BOOL (mp_obj_is_subclass (object , classinfo ));
501505}
0 commit comments