diff --git a/src/lib/eo/Eo.h b/src/lib/eo/Eo.h index 2760a3d924..bf39e5e868 100644 --- a/src/lib/eo/Eo.h +++ b/src/lib/eo/Eo.h @@ -653,18 +653,21 @@ eo2_class_funcs_set(Eo_Class *klass_id, Eo2_Op_Description *op_descs, int n); /* FIXME: Don't use this unref, use an internal one. Reduce id resolution. */ -#define eo2_do_end(obj) eo_unref(obj) +EAPI void eo2_unref_internal(_Eo *obj); + +#define eo2_do_end(obj) eo2_unref_internal(obj) #define eo2_o _obj_, _objid_ #define eo2_a _Eo *obj, Eo *objid -#define eo2_do(objid, ...) \ - do \ - { \ - Eo *_objid_ = objid; \ +#define eo2_do(objid, ...) \ + do \ + { \ + Eo *_objid_ = objid; \ _Eo *_obj_ = eo2_do_start(_objid_); \ - do { __VA_ARGS__ ; } while (0); \ - eo2_do_end(_objid_); \ + if (!_obj_) break; \ + do { __VA_ARGS__ ; } while (0); \ + eo2_do_end(_obj_); \ } while (0) #define eo2_class_do(clsid, ...) \ diff --git a/src/lib/eo/eo.c b/src/lib/eo/eo.c index feb41f392b..713a66c3e0 100644 --- a/src/lib/eo/eo.c +++ b/src/lib/eo/eo.c @@ -263,6 +263,12 @@ eo2_do_start(Eo *obj_id) return obj; } +EAPI void +eo2_unref_internal(_Eo *obj) +{ + _eo_unref(obj); +} + EAPI Eina_Bool eo2_call_resolve_internal(_Eo *obj, const Eo_Class *klass_id, Eo_Op op, Eo2_Op_Call_Data *call) {