eo2: eo2_add accepts non-defauld constructors

This commit is contained in:
Jérémy Zurcher 2013-12-26 16:23:55 +01:00 committed by Tom Hacohen
parent 2d5baec80c
commit 42ad23c5c8
3 changed files with 19 additions and 4 deletions

View File

@ -822,7 +822,7 @@ EAPI void eo_error_set_internal(const Eo *obj, const char *file, int line);
#define eo2_add(klass, parent, ...) \
({ \
const Eo_Class *_tmp_klass = klass; \
eo_add_internal(__FILE__, __LINE__, _tmp_klass, parent, ## __VA_ARGS__, EO_NOOP); \
eo_add_internal(__FILE__, __LINE__, _tmp_klass, parent, eo2_constructor, ## __VA_ARGS__, EO_NOOP); \
})
/**

View File

@ -1405,10 +1405,24 @@ eo_add_internal(const char *file, int line, const Eo_Class *klass_id, Eo *parent
_eo_parent_internal_set(obj, parent_id);
if (klass->desc->version == EO2_VERSION)
eo2_do((Eo *)obj_id, eo2_constructor());
/* Run the relevant do stuff. */
if (klass->desc->version == EO2_VERSION)
{
eo2_constructor_type constr;
va_list p_list;
if(eo2_do_start((Eo *)obj_id, EINA_FALSE))
{
va_start(p_list, parent_id);
while ((constr = va_arg(p_list, eo2_constructor_type)))
constr();
va_end(p_list);
eo2_do_end(NULL);
do_err = EINA_FALSE;
}
else
do_err = EINA_TRUE;
}
else
{
va_list p_list;
va_start(p_list, parent_id);

View File

@ -61,6 +61,7 @@ typedef struct _Eo_Class _Eo_Class;
typedef struct _Eo_Object _Eo_Object;
typedef struct _Eo_Base Eo_Base;
typedef struct _Eo_Internal _Eo;
typedef void (*eo2_constructor_type)(void);
/* Retrieves the pointer to the object from the id */
static inline _Eo_Object *_eo_obj_pointer_get(const Eo_Id obj_id);