diff --git a/py/objtype.c b/py/objtype.c index f4ce6a4f8c..6426ec2d04 100644 --- a/py/objtype.c +++ b/py/objtype.c @@ -367,6 +367,16 @@ STATIC bool type_store_attr(mp_obj_t self_in, qstr attr, mp_obj_t value) { return false; } +STATIC mp_obj_t type_binary_op(int op, mp_obj_t lhs_in, mp_obj_t rhs_in) { + switch (op) { + case MP_BINARY_OP_EQUAL: + // Types can be equal only if it's the same type structure, + // we don't even need to check for 2nd arg type. + return MP_BOOL(lhs_in == rhs_in); + } + return NULL; +} + const mp_obj_type_t mp_type_type = { { &mp_type_type }, .name = MP_QSTR_type, @@ -375,6 +385,7 @@ const mp_obj_type_t mp_type_type = { .call = type_call, .load_attr = type_load_attr, .store_attr = type_store_attr, + .binary_op = type_binary_op, }; mp_obj_t mp_obj_new_type(qstr name, mp_obj_t bases_tuple, mp_obj_t locals_dict) { diff --git a/tests/basics/types_hash.py b/tests/basics/types2.py similarity index 67% rename from tests/basics/types_hash.py rename to tests/basics/types2.py index 2595097d2d..83a69c918f 100644 --- a/tests/basics/types_hash.py +++ b/tests/basics/types2.py @@ -4,3 +4,9 @@ print(hash(int) != 0) print(hash(list) != 0) class Foo: pass print(hash(Foo) != 0) + +print(int == int) +print(int != list) + +d = {} +d[int] = float