diff --git a/src/lib/eo/eo.c b/src/lib/eo/eo.c index 3e4ac6c3e5..8f711d8e4a 100644 --- a/src/lib/eo/eo.c +++ b/src/lib/eo/eo.c @@ -1760,24 +1760,14 @@ efl_isa(const Eo *eo_id, const Efl_Class *klass_id) // Case where we are looking if eo_id is a class that contain klass_id if (EINA_UNLIKELY(_eo_is_a_class(eo_id))) { - const _Efl_Class **kls_itr; EO_CLASS_POINTER_GOTO(klass_id, klass, err_class); EO_CLASS_POINTER_GOTO(eo_id, lookinto, err_class0); - if (lookinto == klass) return EINA_TRUE; + const op_type_funcs *func = _vtable_func_get + (&lookinto->vtable, klass->base_id + klass->ops_count); - kls_itr = lookinto->mro; - if (!kls_itr) return EINA_FALSE; - - while (*kls_itr) - { - if ((*kls_itr) == klass) - return EINA_TRUE; - kls_itr++; - } - - return EINA_FALSE; + return (func && (func->func == _eo_class_isa_func));; } domain = ((Eo_Id)eo_id >> SHIFT_DOMAIN) & MASK_DOMAIN; diff --git a/src/tests/eo/interface/interface_main.c b/src/tests/eo/interface/interface_main.c index 53142cfd7f..ed56c9fa26 100644 --- a/src/tests/eo/interface/interface_main.c +++ b/src/tests/eo/interface/interface_main.c @@ -37,6 +37,9 @@ main(int argc, char *argv[]) fail_if(!efl_isa(obj, INTERFACE_CLASS)); fail_if(!efl_isa(obj, INTERFACE2_CLASS)); + fail_if(!efl_isa(SIMPLE_CLASS, INTERFACE_CLASS)); + fail_if(!efl_isa(SIMPLE_CLASS, INTERFACE2_CLASS)); + fail_if(efl_isa(INTERFACE_CLASS, INTERFACE2_CLASS)); efl_unref(obj); efl_object_shutdown();