summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Hacohen <tom@stosb.com>2013-09-26 16:06:46 +0100
committerTom Hacohen <tom@stosb.com>2013-09-26 16:26:55 +0100
commit1845ffe5b0bef83d67c5173a0a23dbc49bc68481 (patch)
tree7bb2ebf331ea07828e255756efa76fb2ff48d6c5
parent3cc4efaf500d5eb41e47fe5781c053b5273d6c6b (diff)
downloadefl-1845ffe5b0bef83d67c5173a0a23dbc49bc68481.tar.gz
Eo: remove the classe's EINA_MAGIC when using eo_id.
-rw-r--r--src/lib/eo/eo.c35
-rw-r--r--src/lib/eo/eo_private.h2
-rw-r--r--src/lib/eo/eo_ptr_indirection.h28
3 files changed, 45 insertions, 20 deletions
diff --git a/src/lib/eo/eo.c b/src/lib/eo/eo.c
index ab10434224..0bf4275486 100644
--- a/src/lib/eo/eo.c
+++ b/src/lib/eo/eo.c
@@ -373,8 +373,7 @@ eo_do_super_internal(const char *file, int line, Eo *obj_id, const Eo_Class *cur
va_list p_list;
EO_OBJ_POINTER_RETURN_VAL(obj_id, obj, EINA_FALSE);
- _Eo_Class *cur_klass = _eo_class_pointer_get(cur_klass_id);
- EO_MAGIC_RETURN_VAL(cur_klass, EO_CLASS_EINA_MAGIC, EINA_FALSE);
+ EO_CLASS_POINTER_RETURN_VAL(cur_klass_id, cur_klass, EINA_FALSE);
/* Advance the kls itr. */
nklass = _eo_kls_itr_next(obj->klass, cur_klass, op);
@@ -433,8 +432,7 @@ eo_class_do_internal(const char *file, int line, const Eo_Class *klass_id, ...)
Eo_Op op = EO_NOOP;
va_list p_list;
- _Eo_Class *klass = _eo_class_pointer_get(klass_id);
- EO_MAGIC_RETURN_VAL(klass, EO_CLASS_EINA_MAGIC, EINA_FALSE);
+ EO_CLASS_POINTER_RETURN_VAL(klass_id, klass, EINA_FALSE);
va_start(p_list, klass_id);
@@ -459,13 +457,11 @@ EAPI Eina_Bool
eo_class_do_super_internal(const char *file, int line, const Eo_Class *klass_id,
const Eo_Class *cur_klass_id, Eo_Op op, ...)
{
- _Eo_Class *klass = _eo_class_pointer_get(klass_id);
- _Eo_Class *cur_klass = _eo_class_pointer_get(cur_klass_id);
const _Eo_Class *nklass;
Eina_Bool ret = EINA_TRUE;
va_list p_list;
- EO_MAGIC_RETURN_VAL(klass, EO_CLASS_EINA_MAGIC, EINA_FALSE);
- EO_MAGIC_RETURN_VAL(cur_klass, EO_CLASS_EINA_MAGIC, EINA_FALSE);
+ EO_CLASS_POINTER_RETURN_VAL(klass_id, klass, EINA_FALSE);
+ EO_CLASS_POINTER_RETURN_VAL(cur_klass_id, cur_klass, EINA_FALSE);
/* Advance the kls itr. */
nklass = _eo_kls_itr_next(klass, cur_klass, op);
@@ -494,8 +490,7 @@ eo_class_get(const Eo *obj_id)
EAPI const char *
eo_class_name_get(const Eo_Class *klass_id)
{
- _Eo_Class *klass = _eo_class_pointer_get(klass_id);
- EO_MAGIC_RETURN_VAL(klass, EO_CLASS_EINA_MAGIC, NULL);
+ EO_CLASS_POINTER_RETURN_VAL(klass_id, klass, NULL);
return klass->desc->name;
}
@@ -652,8 +647,7 @@ _eo_class_constructor(_Eo_Class *klass)
EAPI void
eo_class_funcs_set(Eo_Class *klass_id, const Eo_Op_Func_Description *func_descs)
{
- _Eo_Class *klass = _eo_class_pointer_get(klass_id);
- EO_MAGIC_RETURN(klass, EO_CLASS_EINA_MAGIC);
+ EO_CLASS_POINTER_RETURN(klass_id, klass);
const Eo_Op_Func_Description *itr;
itr = func_descs;
@@ -775,11 +769,13 @@ eo_class_new(const Eo_Class_Description *desc, const Eo_Class *parent_id, ...)
Eina_List *extn_list, *mro, *mixins;
_Eo_Class *parent = _eo_class_pointer_get(parent_id);
+#ifndef HAVE_EO_ID
if (parent && !EINA_MAGIC_CHECK(parent, EO_CLASS_EINA_MAGIC))
{
EINA_MAGIC_FAIL(parent, EO_CLASS_EINA_MAGIC);
return NULL;
}
+#endif
EINA_SAFETY_ON_NULL_RETURN_VAL(desc, NULL);
EINA_SAFETY_ON_NULL_RETURN_VAL(desc->name, NULL);
@@ -896,7 +892,9 @@ eo_class_new(const Eo_Class_Description *desc, const Eo_Class *parent_id, ...)
}
klass = calloc(1, _eo_class_sz + extn_sz + mro_sz + mixins_sz);
+#ifndef HAVE_EO_ID
EINA_MAGIC_SET(klass, EO_CLASS_EINA_MAGIC);
+#endif
eina_lock_new(&klass->objects.trash_lock);
eina_lock_new(&klass->iterators.trash_lock);
klass->parent = parent;
@@ -1033,8 +1031,7 @@ EAPI Eina_Bool
eo_isa(const Eo *obj_id, const Eo_Class *klass_id)
{
EO_OBJ_POINTER_RETURN_VAL(obj_id, obj, EINA_FALSE);
- _Eo_Class *klass = _eo_class_pointer_get(klass_id);
- EO_MAGIC_RETURN_VAL(klass, EO_CLASS_EINA_MAGIC, EINA_FALSE);
+ EO_CLASS_POINTER_RETURN_VAL(klass_id, klass, EINA_FALSE);
const op_type_funcs *func = _dich_func_get(obj->klass,
klass->base_id + klass->desc->ops.count);
@@ -1061,8 +1058,7 @@ eo_add_internal(const char *file, int line, const Eo_Class *klass_id, Eo *parent
{
Eina_Bool do_err;
_Eo *obj;
- _Eo_Class *klass = _eo_class_pointer_get(klass_id);
- EO_MAGIC_RETURN_VAL(klass, EO_CLASS_EINA_MAGIC, NULL);
+ EO_CLASS_POINTER_RETURN_VAL(klass_id, klass, NULL);
if (parent_id)
{
@@ -1349,8 +1345,7 @@ eo_data_scope_get(const Eo *obj_id, const Eo_Class *klass_id)
{
void *ret;
EO_OBJ_POINTER_RETURN_VAL(obj_id, obj, NULL);
- _Eo_Class *klass = _eo_class_pointer_get(klass_id);
- EO_MAGIC_RETURN_VAL(klass, EO_CLASS_EINA_MAGIC, NULL);
+ EO_CLASS_POINTER_RETURN_VAL(klass_id, klass, NULL);
#ifdef EO_DEBUG
if (!_eo_class_mro_has(obj->klass, klass))
@@ -1381,8 +1376,8 @@ eo_data_xref_internal(const char *file, int line, const Eo *obj_id, const Eo_Cla
_Eo_Class *klass = NULL;
if (klass_id)
{
- klass = _eo_class_pointer_get(klass_id);
- EO_MAGIC_RETURN_VAL(klass, EO_CLASS_EINA_MAGIC, NULL);
+ EO_CLASS_POINTER_RETURN_VAL(klass_id, klass2, NULL);
+ klass = klass2;
#ifdef EO_DEBUG
if (!_eo_class_mro_has(obj->klass, klass))
diff --git a/src/lib/eo/eo_private.h b/src/lib/eo/eo_private.h
index 2f61f47e84..6c0ce731dd 100644
--- a/src/lib/eo/eo_private.h
+++ b/src/lib/eo/eo_private.h
@@ -127,7 +127,9 @@ typedef struct
struct _Eo_Class
{
+#ifndef HAVE_EO_ID
EINA_MAGIC
+#endif
Eo_Class_Id class_id;
const _Eo_Class *parent;
const Eo_Class_Description *desc;
diff --git a/src/lib/eo/eo_ptr_indirection.h b/src/lib/eo/eo_ptr_indirection.h
index cb890e7ffa..a8fd235101 100644
--- a/src/lib/eo/eo_ptr_indirection.h
+++ b/src/lib/eo/eo_ptr_indirection.h
@@ -22,6 +22,20 @@
if (!obj) return; \
} while (0)
+#define EO_CLASS_POINTER_RETURN_VAL(klass_id, klass, ret) \
+ _Eo_Class *klass; \
+ do { \
+ klass = _eo_class_pointer_get(klass_id); \
+ if (!klass) return ret; \
+ } while (0)
+
+#define EO_CLASS_POINTER_RETURN(klass_id, klass) \
+ _Eo_Class *klass; \
+ do { \
+ klass = _eo_class_pointer_get(klass_id); \
+ if (!klass) return; \
+ } while (0)
+
#else
#define EO_OBJ_POINTER_RETURN_VAL(obj_id, obj, ret) \
@@ -38,6 +52,20 @@
EO_MAGIC_RETURN(obj, EO_EINA_MAGIC); \
} while (0)
+#define EO_CLASS_POINTER_RETURN_VAL(klass_id, klass, ret) \
+ _Eo_Class *klass; \
+ do { \
+ klass = _eo_class_pointer_get(klass_id); \
+ EO_MAGIC_RETURN_VAL(klass, EO_CLASS_EINA_MAGIC, ret); \
+ } while (0)
+
+#define EO_CLASS_POINTER_RETURN(klass_id, klass) \
+ _Eo_Class *klass; \
+ do { \
+ klass = _eo_class_pointer_get(klass_id); \
+ EO_MAGIC_RETURN(klass, EO_CLASS_EINA_MAGIC); \
+ } while (0)
+
#endif
#ifdef EFL_DEBUG