@@ -149,40 +149,28 @@ bool mp_obj_equal(mp_obj_t o1, mp_obj_t o2) {
149149 if (MP_OBJ_IS_SMALL_INT (o1 ) && MP_OBJ_IS_SMALL_INT (o2 )) {
150150 return false;
151151 } else {
152- if (MP_OBJ_IS_SMALL_INT (o2 )) {
153- mp_obj_t temp = o1 ; o1 = o2 ; o2 = temp ;
152+ if (MP_OBJ_IS_SMALL_INT (o1 )) {
153+ mp_obj_t temp = o2 ; o2 = o1 ; o1 = temp ;
154154 }
155- // o1 is the SMALL_INT, o2 is not
156- mp_small_int_t val = MP_OBJ_SMALL_INT_VALUE (o1 );
157- if (o2 == mp_const_false ) {
158- return val == 0 ;
159- } else if (o2 == mp_const_true ) {
160- return val == 1 ;
161- } else if (MP_OBJ_IS_TYPE (o2 , & mp_type_int )) {
162- // If o2 is long int, dispatch to its virtual methods
163- mp_obj_base_t * o = o2 ;
164- if (o -> type -> binary_op != NULL ) {
165- mp_obj_t r = o -> type -> binary_op (MP_BINARY_OP_EQUAL , o2 , o1 );
166- return r == mp_const_true ? true : false;
167- }
168- }
169- return false;
155+ // o2 is the SMALL_INT, o1 is not
156+ // fall through to generic op
170157 }
171158 } else if (MP_OBJ_IS_STR (o1 ) && MP_OBJ_IS_STR (o2 )) {
172159 return mp_obj_str_equal (o1 , o2 );
173- } else {
174- mp_obj_base_t * o = o1 ;
175- if (o -> type -> binary_op != NULL ) {
176- mp_obj_t r = o -> type -> binary_op (MP_BINARY_OP_EQUAL , o1 , o2 );
177- if (r != MP_OBJ_NULL ) {
178- return r == mp_const_true ? true : false;
179- }
180- }
160+ }
181161
182- nlr_raise (mp_obj_new_exception_msg_varg (& mp_type_NotImplementedError ,
183- "Equality for '%s' and '%s' types not yet implemented" , mp_obj_get_type_str (o1 ), mp_obj_get_type_str (o2 )));
184- return false;
162+ // generic type, call binary_op(MP_BINARY_OP_EQUAL)
163+ mp_obj_type_t * type = mp_obj_get_type (o1 );
164+ if (type -> binary_op != NULL ) {
165+ mp_obj_t r = type -> binary_op (MP_BINARY_OP_EQUAL , o1 , o2 );
166+ if (r != MP_OBJ_NULL ) {
167+ return r == mp_const_true ? true : false;
168+ }
185169 }
170+
171+ nlr_raise (mp_obj_new_exception_msg_varg (& mp_type_NotImplementedError ,
172+ "Equality for '%s' and '%s' types not yet implemented" , mp_obj_get_type_str (o1 ), mp_obj_get_type_str (o2 )));
173+ return false;
186174}
187175
188176machine_int_t mp_obj_get_int (mp_obj_t arg ) {
0 commit comments