From 23ae1fc453f27f001cb69ccea8bc7e82c6e26b6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Zurcher?= Date: Thu, 11 Jul 2013 14:15:39 +0200 Subject: [PATCH] eo2: use internal unref, break if eo2_start returns NULL --- src/lib/eo/Eo.h | 17 ++++++++++------- src/lib/eo/eo.c | 6 ++++++ 2 files changed, 16 insertions(+), 7 deletions(-) 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) {